Browse Source

snow: Check mallocs at init

Signed-off-by: Martin Storsjö <martin@martin.st>
(cherry picked from commit 4d8516fdb1)

Conflicts:

	libavcodec/snow.c
tags/n0.10.6
Martin Storsjö Anton Khirnov 13 years ago
parent
commit
31bc3fb563
3 changed files with 21 additions and 8 deletions
  1. +10
    -5
      libavcodec/snow.c
  2. +6
    -1
      libavcodec/snowdec.c
  3. +5
    -2
      libavcodec/snowenc.c

+ 10
- 5
libavcodec/snow.c View File

@@ -385,7 +385,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
@@ -438,17 +438,22 @@ 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
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

for(i=0; i<MAX_REF_FRAMES; i++)
for(j=0; j<MAX_REF_FRAMES; j++)
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) {


+ 6
- 1
libavcodec/snowdec.c View File

@@ -354,9 +354,14 @@ static int decode_header(SnowContext *s){

static av_cold int decode_init(AVCodecContext *avctx)
{
int ret;

avctx->pix_fmt= PIX_FMT_YUV420P;

ff_snow_common_init(avctx);
if ((ret = ff_snow_common_init(avctx)) < 0) {
ff_snow_common_end(avctx->priv_data);
return ret;
}

return 0;
}


+ 5
- 2
libavcodec/snowenc.c View File

@@ -156,7 +156,7 @@ static void dwt_quantize(SnowContext *s, Plane *p, DWTELEM *buffer, int width, i
static av_cold int encode_init(AVCodecContext *avctx)
{
SnowContext *s = avctx->priv_data;
int plane_index;
int plane_index, ret;

if(avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL){
av_log(avctx, AV_LOG_ERROR, "This codec is under development, files encoded with it may not be decodable with future versions!!!\n"
@@ -185,7 +185,10 @@ static av_cold int encode_init(AVCodecContext *avctx)
s->plane[plane_index].fast_mc= 1;
}

ff_snow_common_init(avctx);
if ((ret = ff_snow_common_init(avctx)) < 0) {
ff_snow_common_end(avctx->priv_data);
return ret;
}
ff_snow_alloc_blocks(s);

s->version=0;


Loading…
Cancel
Save