diff options
author | Diego Biurrun <diego@biurrun.de> | 2014-08-08 03:10:05 -0700 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2014-08-08 11:13:29 -0700 |
commit | 84d173d3de97c753234ab0c0b50551d51413d663 (patch) | |
tree | 4301eb885aac7e4c06340a1d831898e58301bc9a /libavcodec/x86/idctdsp_init.c | |
parent | 6f1960ab71b4f18551243ce22d01913108265233 (diff) | |
download | ffmpeg-84d173d3de97c753234ab0c0b50551d51413d663.tar.gz |
xvididct: Ensure that the scantable permutation is always set correctly
This fixes cases where the scantable permuation would get overwritten by
the general idctdsp initialization.
Diffstat (limited to 'libavcodec/x86/idctdsp_init.c')
-rw-r--r-- | libavcodec/x86/idctdsp_init.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libavcodec/x86/idctdsp_init.c b/libavcodec/x86/idctdsp_init.c index a0d681afb5..853c6a3661 100644 --- a/libavcodec/x86/idctdsp_init.c +++ b/libavcodec/x86/idctdsp_init.c @@ -37,6 +37,8 @@ static const uint8_t simple_mmx_permutation[64] = { 0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F, }; +static const uint8_t idct_sse2_row_perm[8] = { 0, 4, 1, 5, 2, 6, 3, 7 }; + av_cold int ff_init_scantable_permutation_x86(uint8_t *idct_permutation, enum idct_permutation_type perm_type) { @@ -47,6 +49,10 @@ av_cold int ff_init_scantable_permutation_x86(uint8_t *idct_permutation, for (i = 0; i < 64; i++) idct_permutation[i] = simple_mmx_permutation[i]; return 1; + case FF_IDCT_PERM_SSE2: + for (i = 0; i < 64; i++) + idct_permutation[i] = (i & 0x38) | idct_sse2_row_perm[i & 7]; + return 1; } return 0; |