diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2024-05-12 23:26:20 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2024-06-20 18:58:38 +0200 |
commit | 422711d1a514c0c83101ce5204967de1ab4a2aba (patch) | |
tree | fe44e96bae63f112ed2c08244f14b0e96d3c875a | |
parent | c46711d44f89b4d4ed6a4b6a771f3b23214e7f36 (diff) | |
download | ffmpeg-422711d1a514c0c83101ce5204967de1ab4a2aba.tar.gz |
avcodec/dvenc: Check for availability of interlaced dct cmp func
Not every type of comparison function implements every function.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r-- | libavcodec/dvenc.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c index 71f9b71c7b..5336ff149c 100644 --- a/libavcodec/dvenc.c +++ b/libavcodec/dvenc.c @@ -70,7 +70,6 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx) { DVEncContext *s = avctx->priv_data; FDCTDSPContext fdsp; - MECmpContext mecc; PixblockDSPContext pdsp; int ret; @@ -95,19 +94,24 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx) ff_dv_init_dynamic_tables(s->work_chunks, s->sys); + if (avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) { + MECmpContext mecc; + + memset(&mecc,0, sizeof(mecc)); + ff_me_cmp_init(&mecc, avctx); + ret = ff_set_cmp(&mecc, mecc.ildct_cmp, avctx->ildct_cmp); + if (ret < 0) + return ret; + if (!mecc.ildct_cmp[5]) + return AVERROR(EINVAL); + s->ildct_cmp = mecc.ildct_cmp[5]; + } + memset(&fdsp,0, sizeof(fdsp)); - memset(&mecc,0, sizeof(mecc)); memset(&pdsp,0, sizeof(pdsp)); ff_fdctdsp_init(&fdsp, avctx); - ff_me_cmp_init(&mecc, avctx); ff_pixblockdsp_init(&pdsp, avctx); - ret = ff_set_cmp(&mecc, mecc.ildct_cmp, avctx->ildct_cmp); - if (ret < 0) - return AVERROR(EINVAL); - s->get_pixels = pdsp.get_pixels; - s->ildct_cmp = mecc.ildct_cmp[5]; - s->fdct[0] = fdsp.fdct; s->fdct[1] = fdsp.fdct248; |