summaryrefslogtreecommitdiff
path: root/libavcodec/vp56.h
diff options
context:
space:
mode:
authorPeter Ross <pross@xvid.org>2019-01-13 15:45:07 +1100
committerPeter Ross <pross@xvid.org>2019-01-26 23:49:09 +1100
commitd8ebfd1bdf7e2c47af3eb057b97de5b7fe854e35 (patch)
tree381ef5658380b185ae2b25af9f3e864cf33f4f81 /libavcodec/vp56.h
parent160ebe0a8d780f6db7c18e824d8ec6f437da33a2 (diff)
avcodec/vp6: select idct based (loosely) on number of coefficients decoded
The VP3/4/5/6 reference decoders all use three IDCT versions: one for the DC-only case, another for blocks with more than 10 coefficients, and an optimised one for blocks with up to 10 AC coefficents. VP6 relies on the sparse 10 coefficient version, and without it, IDCT drift occurs. Fixes: https://trac.ffmpeg.org/ticket/1282 Signed-off-by: Peter Ross <pross@xvid.org>
Diffstat (limited to 'libavcodec/vp56.h')
-rw-r--r--libavcodec/vp56.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/libavcodec/vp56.h b/libavcodec/vp56.h
index 9b3036895c..84b2f6c94b 100644
--- a/libavcodec/vp56.h
+++ b/libavcodec/vp56.h
@@ -105,6 +105,7 @@ typedef struct VP56Macroblock {
typedef struct VP56Model {
uint8_t coeff_reorder[64]; /* used in vp6 only */
uint8_t coeff_index_to_pos[64]; /* used in vp6 only */
+ uint8_t coeff_index_to_idct_selector[64]; /* used in vp6 only */
uint8_t vector_sig[2]; /* delta sign */
uint8_t vector_dct[2]; /* delta coding types */
uint8_t vector_pdi[2][2]; /* predefined delta init */
@@ -157,6 +158,7 @@ struct vp56_context {
VP56mb mb_type;
VP56Macroblock *macroblocks;
DECLARE_ALIGNED(16, int16_t, block_coeff)[6][64];
+ int idct_selector[6];
/* motion vectors */
VP56mv mv[6]; /* vectors for each block in MB */