|
|
@@ -539,12 +539,6 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) |
|
|
|
ff_h264chroma_init(&v->h264chroma, 8); |
|
|
|
ff_qpeldsp_init(&s->qdsp); |
|
|
|
|
|
|
|
// Must happen after calling ff_vc1_decode_end |
|
|
|
// to avoid de-allocating the sprite_output_frame |
|
|
|
v->sprite_output_frame = av_frame_alloc(); |
|
|
|
if (!v->sprite_output_frame) |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
avctx->has_b_frames = !!avctx->max_b_frames; |
|
|
|
|
|
|
|
if (v->color_prim == 1 || v->color_prim == 5 || v->color_prim == 6) |
|
|
@@ -577,20 +571,15 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) |
|
|
|
v->sprite_height > 1 << 14 || |
|
|
|
v->output_width > 1 << 14 || |
|
|
|
v->output_height > 1 << 14) { |
|
|
|
ret = AVERROR_INVALIDDATA; |
|
|
|
goto error; |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
} |
|
|
|
|
|
|
|
if ((v->sprite_width&1) || (v->sprite_height&1)) { |
|
|
|
avpriv_request_sample(avctx, "odd sprites support"); |
|
|
|
ret = AVERROR_PATCHWELCOME; |
|
|
|
goto error; |
|
|
|
return AVERROR_PATCHWELCOME; |
|
|
|
} |
|
|
|
} |
|
|
|
return 0; |
|
|
|
error: |
|
|
|
av_frame_free(&v->sprite_output_frame); |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
/** Close a VC1/WMV3 decoder |
|
|
@@ -1147,6 +1136,11 @@ image: |
|
|
|
avctx->height = avctx->coded_height = v->output_height; |
|
|
|
if (avctx->skip_frame >= AVDISCARD_NONREF) |
|
|
|
goto end; |
|
|
|
if (!v->sprite_output_frame && |
|
|
|
!(v->sprite_output_frame = av_frame_alloc())) { |
|
|
|
ret = AVERROR(ENOMEM); |
|
|
|
goto err; |
|
|
|
} |
|
|
|
#if CONFIG_WMV3IMAGE_DECODER || CONFIG_VC1IMAGE_DECODER |
|
|
|
if ((ret = vc1_decode_sprites(v, &s->gb)) < 0) |
|
|
|
goto err; |
|
|
|