Mercurial > libavcodec.hg
changeset 11960:670516285e58 libavcodec
svq1dec: replace VLA with malloc/free
author | mru |
---|---|
date | Sat, 26 Jun 2010 14:34:08 +0000 |
parents | 447f1cd16355 |
children | d7808ddcbcee |
files | svq1dec.c |
diffstat | 1 files changed, 11 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/svq1dec.c Fri Jun 25 19:28:10 2010 +0000 +++ b/svq1dec.c Sat Jun 26 14:34:08 2010 +0000 @@ -650,6 +650,7 @@ 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 @@ 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 @@ //#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 @@ #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 @@ 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)