[FFmpeg-devel] [PATCH 3/4] Implement dynamic memory allocation for MJPEG's picture

Anatoly Nenashev anatoly.nenashev
Wed Feb 16 23:02:13 CET 2011


On 17.02.2011 00:38, M?ns Rullg?rd wrote:
> Anatoly Nenashev<anatoly.nenashev at ovsoft.ru>  writes:
>
>    
>>  From 38608bf9c49c2ce2c7b3edbfb4d4641ca160a990 Mon Sep 17 00:00:00 2001
>> From: anatoly<anatoly.nenashev at ovsoft.ru>
>> Date: Tue, 15 Feb 2011 11:33:56 +0300
>> Subject: [PATCH 3/4] Implement dynamic memory allocation for MJPEG's picture
>>
>> ---
>>   libavcodec/jpeglsdec.c |   18 +++++++++---------
>>   libavcodec/mjpegbdec.c |    2 +-
>>   libavcodec/mjpegdec.c  |   44 +++++++++++++++++++++++++++-----------------
>>   libavcodec/mjpegdec.h  |    2 +-
>>   4 files changed, 38 insertions(+), 28 deletions(-)
>>      
> [...]
>
>    
>> diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
>> index 9792616..2db6760 100644
>> --- a/libavcodec/mjpegdec.c
>> +++ b/libavcodec/mjpegdec.c
>> @@ -81,6 +81,13 @@ av_cold int ff_mjpeg_decode_init(AVCodecContext *avctx)
>>   {
>>       MJpegDecodeContext *s = avctx->priv_data;
>>
>> +    if (!s->picture_ptr) {
>> +        s->picture_ptr = av_mallocz(sizeof(AVFrame));
>> +        if (!s->picture_ptr)
>> +              return AVERROR(ENOMEM);
>> +        s->picture_ptr->reference = 0;
>> +    }
>> +
>>       s->avctx = avctx;
>>       dsputil_init(&s->dsp, avctx);
>>       ff_init_scantable(s->dsp.idct_permutation,&s->scantable, ff_zigzag_direct);
>>      
> [...]
>
>    
>> diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h
>> index 9c78ab2..a1dee59 100644
>> --- a/libavcodec/mjpegdec.h
>> +++ b/libavcodec/mjpegdec.h
>> @@ -80,7 +80,7 @@ typedef struct MJpegDecodeContext {
>>       int h_max, v_max; /* maximum h and v counts */
>>       int quant_index[4];   /* quant table index for each component */
>>       int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */
>> -    AVFrame picture; /* picture structure */
>> +    AVFrame *picture_ptr; /* pointer to picture structure */
>>       int got_picture;                                ///<  we found a SOF and picture is valid, too.
>>       int linesize[MAX_COMPONENTS];                   ///<  linesize<<  interlaced
>>       int8_t *qscale_table;
>> -- 
>>      
> Why don't you simply make an array: AVFrame picture[2]?
>
>    
Because in this case this isn't enough. I should also add 
"picture_index" field and implement switching between pictures. I don't 
think this must be done in this file.




More information about the ffmpeg-devel mailing list