diff --git a/libavcodec/proresdec.c b/libavcodec/proresdec.c index 51807bc7dd..a96af4fa9f 100644 --- a/libavcodec/proresdec.c +++ b/libavcodec/proresdec.c @@ -70,7 +70,7 @@ static av_cold int decode_init(AVCodecContext *avctx) avctx->bits_per_raw_sample = 10; dsputil_init(&ctx->dsp, avctx); - ff_proresdsp_init(&ctx->prodsp); + ff_proresdsp_init(&ctx->prodsp, avctx); avctx->coded_frame = &ctx->frame; ctx->frame.type = FF_I_TYPE; diff --git a/libavcodec/proresdec_lgpl.c b/libavcodec/proresdec_lgpl.c index 156f87530a..d0f00a7293 100644 --- a/libavcodec/proresdec_lgpl.c +++ b/libavcodec/proresdec_lgpl.c @@ -107,7 +107,7 @@ static av_cold int decode_init(AVCodecContext *avctx) avctx->pix_fmt = PIX_FMT_YUV422P10; // set default pixel format avctx->bits_per_raw_sample = PRORES_BITS_PER_SAMPLE; - ff_proresdsp_init(&ctx->dsp); + ff_proresdsp_init(&ctx->dsp, avctx); avctx->coded_frame = &ctx->picture; avcodec_get_frame_defaults(&ctx->picture); diff --git a/libavcodec/proresdsp.c b/libavcodec/proresdsp.c index 7e753e9dc7..739ee2b3ec 100644 --- a/libavcodec/proresdsp.c +++ b/libavcodec/proresdsp.c @@ -51,12 +51,12 @@ static void prores_idct_put_c(uint16_t *out, int linesize, DCTELEM *block, const put_pixels(out, linesize >> 1, block); } -void ff_proresdsp_init(ProresDSPContext *dsp) +void ff_proresdsp_init(ProresDSPContext *dsp, AVCodecContext *avctx) { dsp->idct_put = prores_idct_put_c; dsp->idct_permutation_type = FF_NO_IDCT_PERM; - if (HAVE_MMX) ff_proresdsp_x86_init(dsp); + if (HAVE_MMX) ff_proresdsp_x86_init(dsp, avctx); ff_init_scantable_permutation(dsp->idct_permutation, dsp->idct_permutation_type); diff --git a/libavcodec/proresdsp.h b/libavcodec/proresdsp.h index 8b864faabd..7e81b0870c 100644 --- a/libavcodec/proresdsp.h +++ b/libavcodec/proresdsp.h @@ -33,8 +33,8 @@ typedef struct { void (* idct_put) (uint16_t *out, int linesize, DCTELEM *block, const int16_t *qmat); } ProresDSPContext; -void ff_proresdsp_init(ProresDSPContext *dsp); +void ff_proresdsp_init(ProresDSPContext *dsp, AVCodecContext *avctx); -void ff_proresdsp_x86_init(ProresDSPContext *dsp); +void ff_proresdsp_x86_init(ProresDSPContext *dsp, AVCodecContext *avctx); #endif /* AVCODEC_PRORESDSP_H */ diff --git a/libavcodec/x86/proresdsp-init.c b/libavcodec/x86/proresdsp-init.c index ef5389c05e..83e6034e57 100644 --- a/libavcodec/x86/proresdsp-init.c +++ b/libavcodec/x86/proresdsp-init.c @@ -29,11 +29,14 @@ void ff_prores_idct_put_10_sse4(uint16_t *dst, int linesize, void ff_prores_idct_put_10_avx (uint16_t *dst, int linesize, DCTELEM *block); -void ff_proresdsp_x86_init(ProresDSPContext *dsp) +void ff_proresdsp_x86_init(ProresDSPContext *dsp, AVCodecContext *avctx) { #if ARCH_X86_64 && HAVE_YASM int flags = av_get_cpu_flags(); + if(avctx->flags & CODEC_FLAG_BITEXACT) + return; + if (flags & AV_CPU_FLAG_SSE2) { dsp->idct_permutation_type = FF_TRANSPOSE_IDCT_PERM; dsp->idct_put = ff_prores_idct_put_10_sse2; diff --git a/tests/fate/prores.mak b/tests/fate/prores.mak index 7be756da9e..020c66b460 100644 --- a/tests/fate/prores.mak +++ b/tests/fate/prores.mak @@ -7,9 +7,9 @@ FATE_PRORES = fate-prores-422 \ FATE_TESTS += $(FATE_PRORES) fate-prores: $(FATE_PRORES) -fate-prores-422: CMD = framecrc -vsync 0 -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422.mov -fate-prores-422_hq: CMD = framecrc -vsync 0 -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422_HQ.mov -fate-prores-422_lt: CMD = framecrc -vsync 0 -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422_LT.mov -fate-prores-422_proxy: CMD = framecrc -vsync 0 -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422_Proxy.mov -fate-prores-alpha: CMD = framecrc -vsync 0 -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_with_Alpha.mov +fate-prores-422: CMD = framecrc -flags +bitexact -vsync 0 -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422.mov +fate-prores-422_hq: CMD = framecrc -flags +bitexact -vsync 0 -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422_HQ.mov +fate-prores-422_lt: CMD = framecrc -flags +bitexact -vsync 0 -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422_LT.mov +fate-prores-422_proxy: CMD = framecrc -flags +bitexact -vsync 0 -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_422_Proxy.mov +fate-prores-alpha: CMD = framecrc -flags +bitexact -vsync 0 -i $(SAMPLES)/prores/Sequence_1-Apple_ProRes_with_Alpha.mov diff --git a/tests/ref/fate/prores-422 b/tests/ref/fate/prores-422 index 7a04efbd1f..8d6f3ab517 100644 --- a/tests/ref/fate/prores-422 +++ b/tests/ref/fate/prores-422 @@ -1,2 +1,2 @@ -0, 0, 8294400, 0x57127dd9 -0, 3003, 8294400, 0x57127dd9 +0, 0, 8294400, 0xe8e9d448 +0, 3003, 8294400, 0xe8e9d448 diff --git a/tests/ref/fate/prores-422_hq b/tests/ref/fate/prores-422_hq index 9631ce3240..8ce6937cf5 100644 --- a/tests/ref/fate/prores-422_hq +++ b/tests/ref/fate/prores-422_hq @@ -1,2 +1,2 @@ -0, 0, 8294400, 0x978851f4 -0, 3003, 8294400, 0x978851f4 +0, 0, 8294400, 0x817063b0 +0, 3003, 8294400, 0x817063b0 diff --git a/tests/ref/fate/prores-422_lt b/tests/ref/fate/prores-422_lt index ae40675a50..e9d0437568 100644 --- a/tests/ref/fate/prores-422_lt +++ b/tests/ref/fate/prores-422_lt @@ -1,2 +1,2 @@ -0, 0, 8294400, 0x4ca110c7 -0, 3003, 8294400, 0x4ca110c7 +0, 0, 8294400, 0xcd4ccde1 +0, 3003, 8294400, 0xcd4ccde1 diff --git a/tests/ref/fate/prores-422_proxy b/tests/ref/fate/prores-422_proxy index d7a3c8d49a..e03c3fa871 100644 --- a/tests/ref/fate/prores-422_proxy +++ b/tests/ref/fate/prores-422_proxy @@ -1,2 +1,2 @@ -0, 0, 8294400, 0x007ba770 -0, 3003, 8294400, 0x007ba770 +0, 0, 8294400, 0x3099e361 +0, 3003, 8294400, 0x3099e361 diff --git a/tests/ref/fate/prores-alpha b/tests/ref/fate/prores-alpha index 558e513409..48568ba1f3 100644 --- a/tests/ref/fate/prores-alpha +++ b/tests/ref/fate/prores-alpha @@ -1,2 +1,2 @@ -0, 0, 12441600, 0xf11685dd -0, 3003, 12441600, 0xf11685dd +0, 0, 12441600, 0x254d8f95 +0, 3003, 12441600, 0x254d8f95