[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