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

Måns Rullgård mans
Wed Feb 16 22:38:02 CET 2011


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]?

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list