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 <jamr...@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@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel