[FFmpeg-devel] [PATCH 2/2] hevc: Support extradata changes

Vittorio Giovara vittorio.giovara at gmail.com
Mon Nov 7 23:52:23 EET 2016


On Sat, Nov 5, 2016 at 9:21 AM, Michael Niedermayer
<michael at niedermayer.cc> wrote:
> On Wed, Nov 02, 2016 at 11:48:58AM -0400, Vittorio Giovara wrote:
>> Signed-off-by: Vittorio Giovara <vittorio.giovara at gmail.com>
>> ---
>> Please CC.
>> Vittorio
>>
>>  libavcodec/hevc.c | 18 ++++++++++++++++++
>>  libavformat/mov.c |  4 ----
>>  2 files changed, 18 insertions(+), 4 deletions(-)
>>
>> diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c
>> index 29e0d49..b50120e 100644
>> --- a/libavcodec/hevc.c
>> +++ b/libavcodec/hevc.c
>> @@ -3051,6 +3051,8 @@ static int hevc_decode_frame(AVCodecContext *avctx, void *data, int *got_output,
>>                               AVPacket *avpkt)
>>  {
>>      int ret;
>> +    int new_extradata_size;
>> +    uint8_t *new_extradata;
>>      HEVCContext *s = avctx->priv_data;
>>
>>      if (!avpkt->size) {
>> @@ -3062,6 +3064,22 @@ static int hevc_decode_frame(AVCodecContext *avctx, void *data, int *got_output,
>>          return 0;
>>      }
>>
>> +    new_extradata_size = 0;
>> +    new_extradata = av_packet_get_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA,
>> +                                            &new_extradata_size);
>> +    if (new_extradata_size > 0 && new_extradata) {
>
> new_extradata should be checked first, that should make
> new_extradata_size = 0; unneeded

ok

>> +        if (new_extradata_size > avctx->extradata_size) {
>
>> +            avctx->extradata = av_realloc(avctx->extradata, new_extradata_size);
>
> This leaks on reallocation failure overwriting the allocated pointer

yeah, also, extradata is av_malloc'd, it is not possible call any
*realloc* functions at all.

I thought of av_free + av_malloc but I'm afraid a free there will
interfere with frame multi threading, like it did for h264. So maybe
it's better to modify hevc_decode_extradata() to support reading
extradata from input buffers rather than from avctx (like h264 does).
Thoughts?

> also can you add a fate test ?

I have a sample I can share but it's incredibly big for a fate test (85mb).
-- 
Vittorio


More information about the ffmpeg-devel mailing list