From 5228bcd8705523cee43e351e1a113e12aefcf837 Mon Sep 17 00:00:00 2001 From: Måns Rullgård Date: Sat, 26 Jun 2010 14:34:08 +0000 Subject: svq1dec: replace VLA with malloc/free Originally committed as revision 23794 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/svq1dec.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'libavcodec/svq1dec.c') diff --git a/libavcodec/svq1dec.c b/libavcodec/svq1dec.c index 2aa28ab0b0..1d40f596ad 100644 --- a/libavcodec/svq1dec.c +++ b/libavcodec/svq1dec.c @@ -650,6 +650,7 @@ static int svq1_decode_frame(AVCodecContext *avctx, uint8_t *current, *previous; int result, i, x, y, width, height; AVFrame *pict = data; + svq1_pmv *pmv; /* initialize bit buffer */ init_get_bits(&s->gb,buf,buf_size*8); @@ -692,6 +693,10 @@ static int svq1_decode_frame(AVCodecContext *avctx, if(MPV_frame_start(s, avctx) < 0) return -1; + pmv = av_malloc((FFALIGN(s->width, 16)/8 + 3) * sizeof(*pmv)); + if (!pmv) + return -1; + /* decode y, u and v components */ for (i=0; i < 3; i++) { int linesize; @@ -724,13 +729,12 @@ static int svq1_decode_frame(AVCodecContext *avctx, //#ifdef DEBUG_SVQ1 av_log(s->avctx, AV_LOG_INFO, "Error in svq1_decode_block %i (keyframe)\n",result); //#endif - return result; + goto err; } } current += 16*linesize; } } else { - svq1_pmv pmv[width/8+3]; /* delta frame */ memset (pmv, 0, ((width / 8) + 3) * sizeof(svq1_pmv)); @@ -743,7 +747,7 @@ static int svq1_decode_frame(AVCodecContext *avctx, #ifdef DEBUG_SVQ1 av_log(s->avctx, AV_LOG_INFO, "Error in svq1_decode_delta_block %i\n",result); #endif - return result; + goto err; } } @@ -761,7 +765,10 @@ static int svq1_decode_frame(AVCodecContext *avctx, MPV_frame_end(s); *data_size=sizeof(AVFrame); - return buf_size; + result = buf_size; +err: + av_free(pmv); + return result; } static av_cold int svq1_decode_init(AVCodecContext *avctx) -- cgit v1.2.3