lavc/dv: remove ff_dvvideo_init()

The function contains only two assignments, setting DVVideoContext.avctx
and AVCodecContext.chroma_sample_location. However, the decoder does not
use the former, and the encoder should not be setting the latter.

Therefore move the first assignment to dvenc and the second to dvdec.
Make the encoder warn if the user-signalled chroma sample location does
not match the supported one, and return an error on higher compliance
levels.
This commit is contained in:
Anton Khirnov 2022-08-23 11:06:32 +02:00
parent b62d41df07
commit d1ba5d883e
5 changed files with 15 additions and 15 deletions

View File

@ -184,13 +184,3 @@ int ff_dv_init_dynamic_tables(DVVideoContext *ctx, const AVDVProfile *d)
return 0;
}
av_cold int ff_dvvideo_init(AVCodecContext *avctx)
{
DVVideoContext *s = avctx->priv_data;
s->avctx = avctx;
avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
return 0;
}

View File

@ -97,8 +97,6 @@ enum dv_pack_type {
int ff_dv_init_dynamic_tables(DVVideoContext *s, const AVDVProfile *d);
int ff_dvvideo_init(AVCodecContext *avctx);
static inline int dv_work_pool_size(const AVDVProfile *d)
{
int size = d->n_difchan * d->difseg_size * 27;

View File

@ -238,6 +238,8 @@ static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
DVVideoContext *s = avctx->priv_data;
int i;
avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
ff_idctdsp_init(&s->idsp, avctx);
for (i = 0; i < 64; i++)
@ -256,7 +258,7 @@ static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
ff_thread_once(&init_static_once, dv_init_static);
return ff_dvvideo_init(avctx);
return 0;
}
/* decode AC coefficients */

View File

@ -55,6 +55,16 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
PixblockDSPContext pdsp;
int ret;
s->avctx = avctx;
if (avctx->chroma_sample_location != AVCHROMA_LOC_TOPLEFT) {
const char *name = av_chroma_location_name(avctx->chroma_sample_location);
av_log(avctx, AV_LOG_WARNING, "Only top-left chroma location is supported "
"in DV, input value is: %s\n", name ? name : "unknown");
if (avctx->strict_std_compliance > FF_COMPLIANCE_NORMAL)
return AVERROR(EINVAL);
}
s->sys = av_dv_codec_profile2(avctx->width, avctx->height, avctx->pix_fmt, avctx->time_base);
if (!s->sys) {
av_log(avctx, AV_LOG_ERROR, "Found no DV profile for %ix%i %s video. "
@ -91,7 +101,7 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
}
#endif
return ff_dvvideo_init(avctx);
return 0;
}
/* bit budget for AC only in 5 MBs */

View File

@ -1,3 +1,3 @@
3339def72599c79ad5860c6860cc3123 *tests/data/lavf/lavf.mxf_dv25
59d632e097e6f45c28445b2ab862ffe8 *tests/data/lavf/lavf.mxf_dv25
3834413 tests/data/lavf/lavf.mxf_dv25
tests/data/lavf/lavf.mxf_dv25 CRC=0xbdaf7f52