summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-10-14 19:30:10 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-10-14 19:48:41 +0200
commit337496980e8ea75a123921a5a215ae8a962bf128 (patch)
treec9a657ba9d79e1adf971fda72048a368e96f39dc /libavcodec
parent530d8529d05da930787944df960bebadd1f14e3b (diff)
prores: use C idct for fate as the SSE code is not matching the SSE* code down at the bits
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/proresdec.c2
-rw-r--r--libavcodec/proresdec_lgpl.c2
-rw-r--r--libavcodec/proresdsp.c4
-rw-r--r--libavcodec/proresdsp.h4
-rw-r--r--libavcodec/x86/proresdsp-init.c5
5 files changed, 10 insertions, 7 deletions
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;