summaryrefslogtreecommitdiff
path: root/libavcodec/svq1dec.c
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2010-06-26 14:34:08 +0000
committerMåns Rullgård <mans@mansr.com>2010-06-26 14:34:08 +0000
commit5228bcd8705523cee43e351e1a113e12aefcf837 (patch)
treeef8af719afddd85b919f8aac23097954e91db261 /libavcodec/svq1dec.c
parentbf9aa44bf48a0bbec202e972343f86e39052439e (diff)
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.c15
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)