diff options
author | Martin Storsjö <martin@martin.st> | 2012-07-02 10:39:25 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2012-07-03 12:16:39 +0300 |
commit | 4d8516fdb15d0177ad745228508254dee187dff9 (patch) | |
tree | 12899acb87656cc4dc7158b003c0c979e8bca43a /libavcodec/snow.c | |
parent | 4719ea7e1e6113010da2ccdb9a84e45104ab4de7 (diff) | |
download | ffmpeg-4d8516fdb15d0177ad745228508254dee187dff9.tar.gz |
snow: Check mallocs at init
Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavcodec/snow.c')
-rw-r--r-- | libavcodec/snow.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/libavcodec/snow.c b/libavcodec/snow.c index 821b81bf47..96de9f36d2 100644 --- a/libavcodec/snow.c +++ b/libavcodec/snow.c @@ -394,7 +394,7 @@ mca( 8, 8,8) av_cold int ff_snow_common_init(AVCodecContext *avctx){ SnowContext *s = avctx->priv_data; int width, height; - int i, j; + int i, j, ret; s->avctx= avctx; s->max_ref_frames=1; //just make sure its not an invalid value in case of no initial keyframe @@ -447,19 +447,24 @@ av_cold int ff_snow_common_init(AVCodecContext *avctx){ width= s->avctx->width; height= s->avctx->height; - s->spatial_idwt_buffer= av_mallocz(width*height*sizeof(IDWTELEM)); - s->spatial_dwt_buffer= av_mallocz(width*height*sizeof(DWTELEM)); //FIXME this does not belong here - s->temp_dwt_buffer = av_mallocz(width * sizeof(DWTELEM)); - s->temp_idwt_buffer = av_mallocz(width * sizeof(IDWTELEM)); + FF_ALLOCZ_OR_GOTO(avctx, s->spatial_idwt_buffer, width * height * sizeof(IDWTELEM), fail); + FF_ALLOCZ_OR_GOTO(avctx, s->spatial_dwt_buffer, width * height * sizeof(DWTELEM), fail); //FIXME this does not belong here + FF_ALLOCZ_OR_GOTO(avctx, s->temp_dwt_buffer, width * sizeof(DWTELEM), fail); + FF_ALLOCZ_OR_GOTO(avctx, s->temp_idwt_buffer, width * sizeof(IDWTELEM), fail); for(i=0; i<MAX_REF_FRAMES; i++) for(j=0; j<MAX_REF_FRAMES; j++) ff_scale_mv_ref[i][j] = 256*(i+1)/(j+1); - s->avctx->get_buffer(s->avctx, &s->mconly_picture); - s->scratchbuf = av_malloc(s->mconly_picture.linesize[0]*7*MB_SIZE); + if ((ret = s->avctx->get_buffer(s->avctx, &s->mconly_picture)) < 0) { + av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed\n"); + return ret; + } + FF_ALLOC_OR_GOTO(avctx, s->scratchbuf, s->mconly_picture.linesize[0]*7*MB_SIZE, fail); return 0; +fail: + return AVERROR(ENOMEM); } int ff_snow_common_init_after_header(AVCodecContext *avctx) { |