diff options
author | Måns Rullgård <mans@mansr.com> | 2010-06-26 14:34:08 +0000 |
---|---|---|
committer | Måns Rullgård <mans@mansr.com> | 2010-06-26 14:34:08 +0000 |
commit | 5228bcd8705523cee43e351e1a113e12aefcf837 (patch) | |
tree | ef8af719afddd85b919f8aac23097954e91db261 /libavcodec/svq1dec.c | |
parent | bf9aa44bf48a0bbec202e972343f86e39052439e (diff) | |
download | ffmpeg-5228bcd8705523cee43e351e1a113e12aefcf837.tar.gz |
svq1dec: replace VLA with malloc/free
Originally committed as revision 23794 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/svq1dec.c')
-rw-r--r-- | libavcodec/svq1dec.c | 15 |
1 files changed, 11 insertions, 4 deletions
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) |