mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
snow: Check mallocs at init
Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
4719ea7e1e
commit
4d8516fdb1
@ -394,7 +394,7 @@ mca( 8, 8,8)
|
|||||||
av_cold int ff_snow_common_init(AVCodecContext *avctx){
|
av_cold int ff_snow_common_init(AVCodecContext *avctx){
|
||||||
SnowContext *s = avctx->priv_data;
|
SnowContext *s = avctx->priv_data;
|
||||||
int width, height;
|
int width, height;
|
||||||
int i, j;
|
int i, j, ret;
|
||||||
|
|
||||||
s->avctx= avctx;
|
s->avctx= avctx;
|
||||||
s->max_ref_frames=1; //just make sure its not an invalid value in case of no initial keyframe
|
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;
|
width= s->avctx->width;
|
||||||
height= s->avctx->height;
|
height= s->avctx->height;
|
||||||
|
|
||||||
s->spatial_idwt_buffer= av_mallocz(width*height*sizeof(IDWTELEM));
|
FF_ALLOCZ_OR_GOTO(avctx, s->spatial_idwt_buffer, width * height * sizeof(IDWTELEM), fail);
|
||||||
s->spatial_dwt_buffer= av_mallocz(width*height*sizeof(DWTELEM)); //FIXME this does not belong here
|
FF_ALLOCZ_OR_GOTO(avctx, s->spatial_dwt_buffer, width * height * sizeof(DWTELEM), fail); //FIXME this does not belong here
|
||||||
s->temp_dwt_buffer = av_mallocz(width * sizeof(DWTELEM));
|
FF_ALLOCZ_OR_GOTO(avctx, s->temp_dwt_buffer, width * sizeof(DWTELEM), fail);
|
||||||
s->temp_idwt_buffer = av_mallocz(width * sizeof(IDWTELEM));
|
FF_ALLOCZ_OR_GOTO(avctx, s->temp_idwt_buffer, width * sizeof(IDWTELEM), fail);
|
||||||
|
|
||||||
for(i=0; i<MAX_REF_FRAMES; i++)
|
for(i=0; i<MAX_REF_FRAMES; i++)
|
||||||
for(j=0; j<MAX_REF_FRAMES; j++)
|
for(j=0; j<MAX_REF_FRAMES; j++)
|
||||||
ff_scale_mv_ref[i][j] = 256*(i+1)/(j+1);
|
ff_scale_mv_ref[i][j] = 256*(i+1)/(j+1);
|
||||||
|
|
||||||
s->avctx->get_buffer(s->avctx, &s->mconly_picture);
|
if ((ret = s->avctx->get_buffer(s->avctx, &s->mconly_picture)) < 0) {
|
||||||
s->scratchbuf = av_malloc(s->mconly_picture.linesize[0]*7*MB_SIZE);
|
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;
|
return 0;
|
||||||
|
fail:
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ff_snow_common_init_after_header(AVCodecContext *avctx) {
|
int ff_snow_common_init_after_header(AVCodecContext *avctx) {
|
||||||
|
@ -354,9 +354,14 @@ static int decode_header(SnowContext *s){
|
|||||||
|
|
||||||
static av_cold int decode_init(AVCodecContext *avctx)
|
static av_cold int decode_init(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
avctx->pix_fmt= PIX_FMT_YUV420P;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,7 @@ static void dwt_quantize(SnowContext *s, Plane *p, DWTELEM *buffer, int width, i
|
|||||||
static av_cold int encode_init(AVCodecContext *avctx)
|
static av_cold int encode_init(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
SnowContext *s = avctx->priv_data;
|
SnowContext *s = avctx->priv_data;
|
||||||
int plane_index;
|
int plane_index, ret;
|
||||||
|
|
||||||
if(avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL){
|
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"
|
av_log(avctx, AV_LOG_ERROR, "This codec is under development, files encoded with it may not be decodable with future versions!!!\n"
|
||||||
@ -184,7 +184,10 @@ static av_cold int encode_init(AVCodecContext *avctx)
|
|||||||
s->plane[plane_index].fast_mc= 1;
|
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);
|
ff_snow_alloc_blocks(s);
|
||||||
|
|
||||||
s->version=0;
|
s->version=0;
|
||||||
|
Loading…
Reference in New Issue
Block a user