diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c index 7722507703..fba01b9d37 100644 --- a/libavcodec/ffv1dec.c +++ b/libavcodec/ffv1dec.c @@ -499,7 +499,7 @@ static int read_extra_header(FFV1Context *f) f->chroma_h_shift = get_symbol(c, state, 0); f->chroma_v_shift = get_symbol(c, state, 0); f->transparency = get_rac(c, state); - f->plane_count = 2 + f->transparency; + f->plane_count = 1 + (f->chroma_planes || f->version<4) + f->transparency; f->num_h_slices = 1 + get_symbol(c, state, 0); f->num_v_slices = 1 + get_symbol(c, state, 0); diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 128eeb269d..032375aa45 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -797,6 +797,9 @@ static av_cold int encode_init(AVCodecContext *avctx) if (!s->transparency) s->plane_count = 2; + if (!s->chroma_planes && s->version > 3) + s->plane_count--; + avcodec_get_chroma_sub_sample(avctx->pix_fmt, &s->chroma_h_shift, &s->chroma_v_shift); s->picture_number = 0;