[FFmpeg-devel] [PATCH 2/2] avcodec/cbs_h2645: create a reference to the existing buffer when decomposing slice units
Mark Thompson
sw at jkqxz.net
Tue May 1 02:11:10 EEST 2018
On 28/04/18 15:52, James Almer wrote:
> 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.
Yeah, I think the conclusion from recent changes is that the fragment data must always be reference-counted.
I'll send a patch to fix the documentation and add some asserts to make sure that is indeed always the case.
Thanks,
- Mark
>>> 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;
More information about the ffmpeg-devel
mailing list