[FFmpeg-devel] [PATCH 2/2] avcodec/cbs_h2645: create a reference to the existing buffer when decomposing slice units

James Almer jamrial at gmail.com
Sat Apr 28 17:52:57 EEST 2018


On 4/28/2018 5:02 AM, Xiang, Haihao wrote:
> On Fri, 2018-04-27 at 20:50 -0300, James Almer wrote:
>> Signed-off-by: James Almer <jamrial at gmail.com>
>> ---
>>  libavcodec/cbs_h2645.c | 18 ++++--------------
>>  1 file changed, 4 insertions(+), 14 deletions(-)
>>
>> diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
>> index 5585831cf6..5e5598f377 100644
>> --- a/libavcodec/cbs_h2645.c
>> +++ b/libavcodec/cbs_h2645.c
>> @@ -776,15 +776,10 @@ static int cbs_h264_read_nal_unit(CodedBitstreamContext
>> *ctx,
>>              }
>>  
>>              slice->data_size = len - pos / 8;
>> -            slice->data_ref  = av_buffer_alloc(slice->data_size +
>> -                                               AV_INPUT_BUFFER_PADDING_SIZE);
>> +            slice->data_ref  = av_buffer_ref(unit->data_ref);
> 
> According the comment for CodedBitstreamUnit::data_ref, unit->data_ref might be
> NULL, how about adding 'av_assert0(unit->data_ref)' before the above line? 

Judging by Mark's cbs_jpeg patch, which i notice now is doing the same
thing (so my patches here were probably in his local queue in some for
anyway), i guess it's safe to assume unit->data_ref will never be null.
All the functions allocating a unit so far (ff_cbs_insert_unit_data,
ff_cbs_alloc_unit_data) seem to make sure it's reference counted.

I'll wait for Mark to comment in any case.

> 
> 
>>              if (!slice->data_ref)
>>                  return AVERROR(ENOMEM);
>> -            slice->data = slice->data_ref->data;
>> -            memcpy(slice->data,
>> -                   unit->data + pos / 8, slice->data_size);
>> -            memset(slice->data + slice->data_size, 0,
>> -                   AV_INPUT_BUFFER_PADDING_SIZE);
>> +            slice->data = unit->data + pos / 8;
>>              slice->data_bit_start = pos % 8;
>>          }
>>          break;
>> @@ -946,15 +941,10 @@ static int cbs_h265_read_nal_unit(CodedBitstreamContext
>> *ctx,
>>              }
>>  
>>              slice->data_size = len - pos / 8;
>> -            slice->data_ref  = av_buffer_alloc(slice->data_size +
>> -                                               AV_INPUT_BUFFER_PADDING_SIZE);
>> +            slice->data_ref  = av_buffer_ref(unit->data_ref);
> 
> Same comment as above. 
> 
>>              if (!slice->data_ref)
>>                  return AVERROR(ENOMEM);
>> -            slice->data = slice->data_ref->data;
>> -            memcpy(slice->data,
>> -                   unit->data + pos / 8, slice->data_size);
>> -            memset(slice->data + slice->data_size, 0,
>> -                   AV_INPUT_BUFFER_PADDING_SIZE);
>> +            slice->data = unit->data + pos / 8;
>>              slice->data_bit_start = pos % 8;
>>          }
>>          break;
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 



More information about the ffmpeg-devel mailing list