1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Indeo Video v3 compatible decoder
3cabdff1aSopenharmony_ci * Copyright (c) 2009 - 2011 Maxim Poliakovski
4cabdff1aSopenharmony_ci *
5cabdff1aSopenharmony_ci * This file is part of FFmpeg.
6cabdff1aSopenharmony_ci *
7cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
8cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
9cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
10cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
11cabdff1aSopenharmony_ci *
12cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
13cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
14cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15cabdff1aSopenharmony_ci * Lesser General Public License for more details.
16cabdff1aSopenharmony_ci *
17cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
18cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
19cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20cabdff1aSopenharmony_ci */
21cabdff1aSopenharmony_ci
22cabdff1aSopenharmony_ci#ifndef AVCODEC_INDEO3DATA_H
23cabdff1aSopenharmony_ci#define AVCODEC_INDEO3DATA_H
24cabdff1aSopenharmony_ci
25cabdff1aSopenharmony_ci#include <stdint.h>
26cabdff1aSopenharmony_ci
27cabdff1aSopenharmony_ci#include "config.h"
28cabdff1aSopenharmony_ci
29cabdff1aSopenharmony_ci/*
30cabdff1aSopenharmony_ci * Define compressed VQ tables.
31cabdff1aSopenharmony_ci */
32cabdff1aSopenharmony_ci
33cabdff1aSopenharmony_ci#define TAB_1_1 \
34cabdff1aSopenharmony_ci    PD(   0,   0), E2(   2,   2), E4(  -1,   3), E2(   4,   4), E4(   1,   5),\
35cabdff1aSopenharmony_ci    E2(  -4,   4), E4(  -2,   6), E4(   4,   9), E2(   9,   9), E4(   1,  10),\
36cabdff1aSopenharmony_ci    E4(  -5,   8), E4(   9,  15), E4(  -3,  12), E4(   4,  16), E2(  16,  16),\
37cabdff1aSopenharmony_ci    E4(   0,  18), E2( -12,  12), E4(  -9,  16), E4(  11,  27), E4(  19,  28),\
38cabdff1aSopenharmony_ci    E4(  -6,  22), E4(   4,  29), E2(  30,  30), E4(  -2,  33), E4( -18,  23),\
39cabdff1aSopenharmony_ci    E4( -15,  30), E4(  22,  46), E4(  13,  47), E4(  35,  49), E4( -11,  41),\
40cabdff1aSopenharmony_ci    E4(   4,  51), E2(  54,  54), E2( -34,  34), E4( -29,  42), E4(  -6,  60),\
41cabdff1aSopenharmony_ci    E4(  27,  76), E4(  43,  77), E4( -24,  55), E4(  14,  79), E4(  63,  83),\
42cabdff1aSopenharmony_ci    E4( -20,  74), E4(   2,  88), E2(  93,  93), E4( -52,  61), E4(  52, 120),\
43cabdff1aSopenharmony_ci    E4( -45,  75), E4(  75, 125), E4(  33, 122), E4( -13, 103), E4( -40,  96),\
44cabdff1aSopenharmony_ci    E4( -34, 127), E2( -89,  89), E4( -78, 105), E2(  12,  12), E2(  23,  23),\
45cabdff1aSopenharmony_ci    E2(  42,  42), E2(  73,  73)
46cabdff1aSopenharmony_ci
47cabdff1aSopenharmony_ci#define TAB_1_2 \
48cabdff1aSopenharmony_ci    PD(   0,   0), E2(   3,   3), E4(  -1,   4), E2(   7,   7), E4(   2,   8),\
49cabdff1aSopenharmony_ci    E4(  -2,   9), E2(  -6,   6), E4(   6,  13), E2(  13,  13), E4(   1,  14),\
50cabdff1aSopenharmony_ci    E4(  -8,  12), E4(  14,  23), E4(  -5,  18), E4(   6,  24), E2(  24,  24),\
51cabdff1aSopenharmony_ci    E4(  -1,  27), E2( -17,  17), E4( -13,  23), E4(  16,  40), E4(  28,  41),\
52cabdff1aSopenharmony_ci    E4(  -9,  33), E4(   6,  43), E2(  46,  46), E4(  -4,  50), E4( -27,  34),\
53cabdff1aSopenharmony_ci    E4( -22,  45), E4(  34,  69), E4(  19,  70), E4(  53,  73), E4( -17,  62),\
54cabdff1aSopenharmony_ci    E4(   5,  77), E2(  82,  82), E2( -51,  51), E4( -43,  64), E4( -10,  90),\
55cabdff1aSopenharmony_ci    E4(  41, 114), E4(  64, 116), E4( -37,  82), E4(  22, 119), E4(  95, 124),\
56cabdff1aSopenharmony_ci    E4( -30, 111), E4( -78,  92), E4( -68, 113), E2(  18,  18), E2(  34,  34),\
57cabdff1aSopenharmony_ci    E2(  63,  63), E2( 109, 109)
58cabdff1aSopenharmony_ci
59cabdff1aSopenharmony_ci#define TAB_1_3 \
60cabdff1aSopenharmony_ci    PD(   0,   0), E2(   4,   4), E4(  -1,   5), E4(   3,  10), E2(   9,   9),\
61cabdff1aSopenharmony_ci    E2(  -7,   7), E4(  -3,  12), E4(   8,  17), E2(  17,  17), E4(   1,  19),\
62cabdff1aSopenharmony_ci    E4( -11,  16), E4(  -6,  23), E4(  18,  31), E4(   8,  32), E2(  33,  33),\
63cabdff1aSopenharmony_ci    E4(  -1,  36), E2( -23,  23), E4( -17,  31), E4(  21,  54), E4(  37,  55),\
64cabdff1aSopenharmony_ci    E4( -12,  44), E4(   8,  57), E2(  61,  61), E4(  -5,  66), E4( -36,  45),\
65cabdff1aSopenharmony_ci    E4( -29,  60), E4(  45,  92), E4(  25,  93), E4(  71,  97), E4( -22,  83),\
66cabdff1aSopenharmony_ci    E4(   7, 102), E2( 109, 109), E2( -68,  68), E4( -57,  85), E4( -13, 120),\
67cabdff1aSopenharmony_ci    E4( -49, 110), E4(-104, 123), E2(  24,  24), E2(  46,  46), E2(  84,  84)
68cabdff1aSopenharmony_ci
69cabdff1aSopenharmony_ci#define TAB_1_4 \
70cabdff1aSopenharmony_ci    PD(   0,   0), E2(   5,   5), E4(  -2,   7), E2(  11,  11), E4(   3,  13),\
71cabdff1aSopenharmony_ci    E2(  -9,   9), E4(  -4,  15), E4(  11,  22), E2(  21,  21), E4(   2,  24),\
72cabdff1aSopenharmony_ci    E4( -14,  20), E4(  23,  38), E4(  -8,  29), E4(  11,  39), E2(  41,  41),\
73cabdff1aSopenharmony_ci    E4(  -1,  45), E2( -29,  29), E4( -22,  39), E4(  27,  67), E4(  47,  69),\
74cabdff1aSopenharmony_ci    E4( -15,  56), E4(  11,  71), E2(  76,  76), E4(  -6,  83), E4( -45,  57),\
75cabdff1aSopenharmony_ci    E4( -36,  75), E4(  56, 115), E4(  31, 117), E4(  88, 122), E4( -28, 104),\
76cabdff1aSopenharmony_ci    E2( -85,  85), E4( -72, 106), E2(  30,  30), E2(  58,  58), E2( 105, 105)
77cabdff1aSopenharmony_ci
78cabdff1aSopenharmony_ci#define TAB_1_5 \
79cabdff1aSopenharmony_ci    PD(   0,   0), E2(   6,   6), E4(  -2,   8), E2(  13,  13), E4(   4,  15),\
80cabdff1aSopenharmony_ci    E2( -11,  11), E4(  -5,  18), E4(  13,  26), E2(  26,  26), E4(   2,  29),\
81cabdff1aSopenharmony_ci    E4( -16,  24), E4(  28,  46), E4(  -9,  35), E4(  13,  47), E2(  49,  49),\
82cabdff1aSopenharmony_ci    E4(  -1,  54), E2( -35,  35), E4( -26,  47), E4(  32,  81), E4(  56,  83),\
83cabdff1aSopenharmony_ci    E4( -18,  67), E4(  13,  86), E2(  91,  91), E4(  -7,  99), E4( -54,  68),\
84cabdff1aSopenharmony_ci    E4( -44,  90), E4( -33, 124), E2(-103, 103), E4( -86, 127), E2(  37,  37),\
85cabdff1aSopenharmony_ci    E2(  69,  69)
86cabdff1aSopenharmony_ci
87cabdff1aSopenharmony_ci#define TAB_1_6 \
88cabdff1aSopenharmony_ci    PD(   0,   0), E2(   7,   7), E4(  -3,  10), E2(  16,  16), E4(   5,  18),\
89cabdff1aSopenharmony_ci    E2( -13,  13), E4(  -6,  21), E4(  15,  30), E2(  30,  30), E4(   2,  34),\
90cabdff1aSopenharmony_ci    E4( -19,  28), E4(  32,  54), E4( -11,  41), E4(  15,  55), E2(  57,  57),\
91cabdff1aSopenharmony_ci    E4(  -1,  63), E2( -40,  40), E4( -30,  55), E4(  37,  94), E4(  65,  96),\
92cabdff1aSopenharmony_ci    E4( -21,  78), E4(  15, 100), E2( 106, 106), E4(  -8, 116), E4( -63,  79),\
93cabdff1aSopenharmony_ci    E4( -51, 105), E2(-120, 120), E2(  43,  43), E2(  80,  80)
94cabdff1aSopenharmony_ci
95cabdff1aSopenharmony_ci#define TAB_1_7 \
96cabdff1aSopenharmony_ci    PD(   0,   0), E2(   8,   8), E4(  -3,  11), E2(  18,  18), E4(   5,  20),\
97cabdff1aSopenharmony_ci    E2( -15,  15), E4(  -7,  24), E4(  17,  35), E2(  34,  34), E4(   3,  38),\
98cabdff1aSopenharmony_ci    E4( -22,  32), E4(  37,  61), E4( -13,  47), E4(  17,  63), E2(  65,  65),\
99cabdff1aSopenharmony_ci    E4(  -1,  72), E2( -46,  46), E4( -35,  63), E4(  43, 107), E4(  75, 110),\
100cabdff1aSopenharmony_ci    E4( -24,  89), E4(  17, 114), E2( 121, 121), E4( -72,  91), E4( -58, 120),\
101cabdff1aSopenharmony_ci    E2(  49,  49), E2(  92,  92)
102cabdff1aSopenharmony_ci
103cabdff1aSopenharmony_ci#define TAB_1_8 \
104cabdff1aSopenharmony_ci    PD(   0,   0), E2(   9,   9), E4(  -3,  12), E2(  20,  20), E4(   6,  23),\
105cabdff1aSopenharmony_ci    E2( -17,  17), E4(  -7,  27), E4(  19,  39), E2(  39,  39), E4(   3,  43),\
106cabdff1aSopenharmony_ci    E4( -24,  36), E4(  42,  69), E4( -14,  53), E4(  19,  71), E2(  73,  73),\
107cabdff1aSopenharmony_ci    E4(  -2,  80), E2( -52,  52), E4( -39,  70), E4(  48, 121), E4(  84, 124),\
108cabdff1aSopenharmony_ci    E4( -27, 100), E4( -81, 102), E2(  55,  55), E2( 104, 104)
109cabdff1aSopenharmony_ci
110cabdff1aSopenharmony_ci#define TAB_2_1 \
111cabdff1aSopenharmony_ci    PD(   0,   0), E2(   2,   2), E4(   0,   2), E2(   4,   4), E4(   0,   4),\
112cabdff1aSopenharmony_ci    E2(  -4,   4), E4(  -2,   6), E4(   4,   8), E2(   8,   8), E4(   0,  10),\
113cabdff1aSopenharmony_ci    E4(  -4,   8), E4(   8,  14), E4(  -2,  12), E4(   4,  16), E2(  16,  16),\
114cabdff1aSopenharmony_ci    E4(   0,  18), E2( -12,  12), E4(  -8,  16), E4(  10,  26), E4(  18,  28),\
115cabdff1aSopenharmony_ci    E4(  -6,  22), E4(   4,  28), E2(  30,  30), E4(  -2,  32), E4( -18,  22),\
116cabdff1aSopenharmony_ci    E4( -14,  30), E4(  22,  46), E4(  12,  46), E4(  34,  48), E4( -10,  40),\
117cabdff1aSopenharmony_ci    E4(   4,  50), E2(  54,  54), E2( -34,  34), E4( -28,  42), E4(  -6,  60),\
118cabdff1aSopenharmony_ci    E4(  26,  76), E4(  42,  76), E4( -24,  54), E4(  14,  78), E4(  62,  82),\
119cabdff1aSopenharmony_ci    E4( -20,  74), E4(   2,  88), E2(  92,  92), E4( -52,  60), E4(  52, 118),\
120cabdff1aSopenharmony_ci    E4( -44,  74), E4(  74, 118), E4(  32, 118), E4( -12, 102), E4( -40,  96),\
121cabdff1aSopenharmony_ci    E4( -34, 118), E2( -88,  88), E4( -78, 104), E2(  12,  12), E2(  22,  22),\
122cabdff1aSopenharmony_ci    E2(  42,  42), E2(  72,  72)
123cabdff1aSopenharmony_ci
124cabdff1aSopenharmony_ci#define TAB_2_2 \
125cabdff1aSopenharmony_ci    PD(   0,   0), E2(   3,   3), E4(   0,   3), E2(   6,   6), E4(   3,   9),\
126cabdff1aSopenharmony_ci    E4(  -3,   9), E2(  -6,   6), E4(   6,  12), E2(  12,  12), E4(   0,  15),\
127cabdff1aSopenharmony_ci    E4(  -9,  12), E4(  15,  24), E4(  -6,  18), E4(   6,  24), E2(  24,  24),\
128cabdff1aSopenharmony_ci    E4(   0,  27), E2( -18,  18), E4( -12,  24), E4(  15,  39), E4(  27,  42),\
129cabdff1aSopenharmony_ci    E4(  -9,  33), E4(   6,  42), E2(  45,  45), E4(  -3,  51), E4( -27,  33),\
130cabdff1aSopenharmony_ci    E4( -21,  45), E4(  33,  69), E4(  18,  69), E4(  54,  72), E4( -18,  63),\
131cabdff1aSopenharmony_ci    E4(   6,  78), E2(  81,  81), E2( -51,  51), E4( -42,  63), E4(  -9,  90),\
132cabdff1aSopenharmony_ci    E4(  42, 114), E4(  63, 117), E4( -36,  81), E4(  21, 120), E4(  96, 123),\
133cabdff1aSopenharmony_ci    E4( -30, 111), E4( -78,  93), E4( -69, 114), E2(  18,  18), E2(  33,  33),\
134cabdff1aSopenharmony_ci    E2(  63,  63), E2( 108, 108)
135cabdff1aSopenharmony_ci
136cabdff1aSopenharmony_ci#define TAB_2_3 \
137cabdff1aSopenharmony_ci    PD(   0,   0), E2(   4,   4), E4(   0,   4), E4(   4,   8), E2(   8,   8),\
138cabdff1aSopenharmony_ci    E2(  -8,   8), E4(  -4,  12), E4(   8,  16), E2(  16,  16), E4(   0,  20),\
139cabdff1aSopenharmony_ci    E4( -12,  16), E4(  -4,  24), E4(  16,  32), E4(   8,  32), E2(  32,  32),\
140cabdff1aSopenharmony_ci    E4(   0,  36), E2( -24,  24), E4( -16,  32), E4(  20,  52), E4(  36,  56),\
141cabdff1aSopenharmony_ci    E4( -12,  44), E4(   8,  56), E2(  60,  60), E4(  -4,  64), E4( -36,  44),\
142cabdff1aSopenharmony_ci    E4( -28,  60), E4(  44,  92), E4(  24,  92), E4(  72,  96), E4( -20,  84),\
143cabdff1aSopenharmony_ci    E4(   8, 100), E2( 108, 108), E2( -68,  68), E4( -56,  84), E4( -12, 120),\
144cabdff1aSopenharmony_ci    E4( -48, 108), E4(-104, 124), E2(  24,  24), E2(  44,  44), E2(  84,  84)
145cabdff1aSopenharmony_ci
146cabdff1aSopenharmony_ci#define TAB_2_4 \
147cabdff1aSopenharmony_ci    PD(   0,   0), E2(   5,   5), E4(   0,   5), E2(  10,  10), E4(   5,  15),\
148cabdff1aSopenharmony_ci    E2( -10,  10), E4(  -5,  15), E4(  10,  20), E2(  20,  20), E4(   0,  25),\
149cabdff1aSopenharmony_ci    E4( -15,  20), E4(  25,  40), E4( -10,  30), E4(  10,  40), E2(  40,  40),\
150cabdff1aSopenharmony_ci    E4(   0,  45), E2( -30,  30), E4( -20,  40), E4(  25,  65), E4(  45,  70),\
151cabdff1aSopenharmony_ci    E4( -15,  55), E4(  10,  70), E2(  75,  75), E4(  -5,  85), E4( -45,  55),\
152cabdff1aSopenharmony_ci    E4( -35,  75), E4(  55, 115), E4(  30, 115), E4(  90, 120), E4( -30, 105),\
153cabdff1aSopenharmony_ci    E2( -85,  85), E4( -70, 105), E2(  30,  30), E2(  60,  60), E2( 105, 105)
154cabdff1aSopenharmony_ci
155cabdff1aSopenharmony_ci#define TAB_2_5 \
156cabdff1aSopenharmony_ci    PD(   0,   0), E2(   6,   6), E4(   0,   6), E2(  12,  12), E4(   6,  12),\
157cabdff1aSopenharmony_ci    E2( -12,  12), E4(  -6,  18), E4(  12,  24), E2(  24,  24), E4(   0,  30),\
158cabdff1aSopenharmony_ci    E4( -18,  24), E4(  30,  48), E4(  -6,  36), E4(  12,  48), E2(  48,  48),\
159cabdff1aSopenharmony_ci    E4(   0,  54), E2( -36,  36), E4( -24,  48), E4(  30,  78), E4(  54,  84),\
160cabdff1aSopenharmony_ci    E4( -18,  66), E4(  12,  84), E2(  90,  90), E4(  -6,  96), E4( -54,  66),\
161cabdff1aSopenharmony_ci    E4( -42,  90), E4( -30, 126), E2(-102, 102), E4( -84, 126), E2(  36,  36),\
162cabdff1aSopenharmony_ci    E2(  66,  66)
163cabdff1aSopenharmony_ci
164cabdff1aSopenharmony_ci#define TAB_2_6 \
165cabdff1aSopenharmony_ci    PD(   0,   0), E2(   7,   7), E4(   0,   7), E2(  14,  14), E4(   7,  21),\
166cabdff1aSopenharmony_ci    E2( -14,  14), E4(  -7,  21), E4(  14,  28), E2(  28,  28), E4(   0,  35),\
167cabdff1aSopenharmony_ci    E4( -21,  28), E4(  35,  56), E4( -14,  42), E4(  14,  56), E2(  56,  56),\
168cabdff1aSopenharmony_ci    E4(   0,  63), E2( -42,  42), E4( -28,  56), E4(  35,  91), E4(  63,  98),\
169cabdff1aSopenharmony_ci    E4( -21,  77), E4(  14,  98), E2( 105, 105), E4(  -7, 119), E4( -63,  77),\
170cabdff1aSopenharmony_ci    E4( -49, 105), E2(-119, 119), E2(  42,  42), E2(  77,  77)
171cabdff1aSopenharmony_ci
172cabdff1aSopenharmony_ci#define TAB_2_7 \
173cabdff1aSopenharmony_ci    PD(   0,   0), E2(   8,   8), E4(   0,   8), E2(  16,  16), E4(   8,  16),\
174cabdff1aSopenharmony_ci    E2( -16,  16), E4(  -8,  24), E4(  16,  32), E2(  32,  32), E4(   0,  40),\
175cabdff1aSopenharmony_ci    E4( -24,  32), E4(  40,  64), E4( -16,  48), E4(  16,  64), E2(  64,  64),\
176cabdff1aSopenharmony_ci    E4(   0,  72), E2( -48,  48), E4( -32,  64), E4(  40, 104), E4(  72, 112),\
177cabdff1aSopenharmony_ci    E4( -24,  88), E4(  16, 112), E2( 120, 120), E4( -72,  88), E4( -56, 120),\
178cabdff1aSopenharmony_ci    E2(  48,  48), E2(  88,  88)
179cabdff1aSopenharmony_ci
180cabdff1aSopenharmony_ci#define TAB_2_8 \
181cabdff1aSopenharmony_ci    PD(   0,   0), E2(   9,   9), E4(   0,   9), E2(  18,  18), E4(   9,  27),\
182cabdff1aSopenharmony_ci    E2( -18,  18), E4(  -9,  27), E4(  18,  36), E2(  36,  36), E4(   0,  45),\
183cabdff1aSopenharmony_ci    E4( -27,  36), E4(  45,  72), E4( -18,  54), E4(  18,  72), E2(  72,  72),\
184cabdff1aSopenharmony_ci    E4(   0,  81), E2( -54,  54), E4( -36,  72), E4(  45, 117), E4(  81, 126),\
185cabdff1aSopenharmony_ci    E4( -27,  99), E4( -81,  99), E2(  54,  54), E2( 108, 108)
186cabdff1aSopenharmony_ci
187cabdff1aSopenharmony_ci#define TAB_3_1 \
188cabdff1aSopenharmony_ci    PD(   0,   0), E2(   2,   2), E4(   0,   3), E2(   6,   6), E4(   0,   7),\
189cabdff1aSopenharmony_ci    E2(  -5,   5), E2(   5,  -5), E4(   6,  11), E4(   0,   8), E2(  11,  11),\
190cabdff1aSopenharmony_ci    E4(   0,  12), E4(  12,  17), E2(  17,  17), E4(   6,  18), E4(  -8,  11),\
191cabdff1aSopenharmony_ci    E4(   0,  15), E4(   0,  20), E4(  18,  25), E4(  11,  25), E2(  25,  25),\
192cabdff1aSopenharmony_ci    E2( -14,  14), E2(  14, -14), E4(   0,  26), E4( -11,  18), E4(  -7,  22),\
193cabdff1aSopenharmony_ci    E4(  26,  34), E4(  18,  34), E2(  34,  34), E4(  11,  35), E4(   0,  29),\
194cabdff1aSopenharmony_ci    E4( -19,  22), E4( -15,  26), E4(   0,  37), E4(  27,  44), E4(  36,  44),\
195cabdff1aSopenharmony_ci    E4(  18,  44), E4( -10,  33), E2(  45,  45)
196cabdff1aSopenharmony_ci
197cabdff1aSopenharmony_ci#define TAB_3_2 \
198cabdff1aSopenharmony_ci    PD(   0,   0), E4(   0,   2), E2(   2,   2), E2(   6,   6), E4(   0,   6),\
199cabdff1aSopenharmony_ci    E2(  -4,   4), E2(  10,  -6), E2(   0, -12), PD(  -6, -12), E2(   6, -12),\
200cabdff1aSopenharmony_ci    PD(   6,  12), E2( -14,   0), E2(  12,  12), E2(   0, -18), E2(  14, -12),\
201cabdff1aSopenharmony_ci    PD( -18,  -6), E2(  18,  -6), PD(  18,   6), PD( -10, -18), E2(  10, -18),\
202cabdff1aSopenharmony_ci    PD(  10,  18), E2( -22,   0), E2(   0, -24), PD( -22, -12), E2(  22, -12),\
203cabdff1aSopenharmony_ci    PD(  22,  12), PD(  -8, -24), E2(   8, -24), PD(   8,  24), PD( -26,  -6),\
204cabdff1aSopenharmony_ci    E2(  26,  -6), PD(  26,   6), E2( -28,   0), E2(  20,  20), E2( -14, -26),\
205cabdff1aSopenharmony_ci    E2( -30, -12), E2( -10, -32), E2( -18, -32), E2( -26, -26), E2( -34, -20),\
206cabdff1aSopenharmony_ci    E2( -38, -12), E2( -32, -32), PD(  32,  32), PD( -22, -40), E2( -34, -34)
207cabdff1aSopenharmony_ci
208cabdff1aSopenharmony_ci#define TAB_3_3 \
209cabdff1aSopenharmony_ci    PD(   0,   0), E4(   0,   2), E2(   4,   4), E2(  10,  10), E4(   0,  10),\
210cabdff1aSopenharmony_ci    E2(  -6,   6), E2(  14,  -8), E2( -18,   0), E2(  10, -16), E2(   0, -24),\
211cabdff1aSopenharmony_ci    PD( -24,  -8), E2(  24,  -8), PD(  24,   8), E2(  18,  18), E2(  20, -16),\
212cabdff1aSopenharmony_ci    PD( -14, -26), E2(  14, -26), PD(  14,  26), E2( -30,   0), E2(   0, -34),\
213cabdff1aSopenharmony_ci    PD( -34,  -8), E2(  34,  -8), PD(  34,   8), PD( -30, -18), E2(  30, -18),\
214cabdff1aSopenharmony_ci    PD(  30,  18), PD( -10, -34), E2(  10, -34), PD(  10,  34), E2( -20, -34),\
215cabdff1aSopenharmony_ci    E2( -40,   0), E2(  30,  30), E2( -40, -18), E2(   0, -44), E2( -16, -44),\
216cabdff1aSopenharmony_ci    PD( -36, -36), E2( -36, -36), E2( -26, -44), E2( -46, -26), E2( -52, -18),\
217cabdff1aSopenharmony_ci    PD( -20, -54), E2( -44, -44), PD( -32, -54), PD( -46, -46), E2( -46, -46)
218cabdff1aSopenharmony_ci
219cabdff1aSopenharmony_ci#define TAB_3_4 \
220cabdff1aSopenharmony_ci    PD(   0,   0), E4(   0,   4), E2(   4,   4), E2(  12,  12), E4(   0,  12),\
221cabdff1aSopenharmony_ci    E2(  -8,   8), E2(   8, -16), E2(   0, -24), PD( -24,  -8), E2(  24,  -8),\
222cabdff1aSopenharmony_ci    PD(  24,   8), E2(  20, -16), E2( -28,   0), PD( -16, -24), E2(  16, -24),\
223cabdff1aSopenharmony_ci    PD(  16,  24), E2(   0, -32), PD( -28, -16), E2(  28, -16), PD(  28,  16),\
224cabdff1aSopenharmony_ci    PD(  -8, -32), PD(   8, -32), PD( -32,  -8), E2(  32,  -8), PD(  32,   8),\
225cabdff1aSopenharmony_ci    PD(  -8,  32), PD(   8,  32), E2(  24,  24), E2(  24, -24), E2( -20, -32),\
226cabdff1aSopenharmony_ci    E2( -40,   0), E2( -40, -16), PD(   0, -44), PD(   0, -44), E2( -44,   0),\
227cabdff1aSopenharmony_ci    PD(   0,  44), PD(   0,  44), E2( -32, -32), E2( -16, -44), PD( -24, -44),\
228cabdff1aSopenharmony_ci    E2( -44, -24), PD(  24,  44), E2( -48, -16), PD( -36, -36), E2( -36, -36),\
229cabdff1aSopenharmony_ci    PD(  36,  36), PD( -20, -52), E2(  40,  40), PD( -32, -52)
230cabdff1aSopenharmony_ci
231cabdff1aSopenharmony_ci#define TAB_3_5 \
232cabdff1aSopenharmony_ci    PD(   0,   0), E2(   2,   2), E2(   6,   6), E2(  12,  12), E2(  20,  20),\
233cabdff1aSopenharmony_ci    E2(  32,  32), E2(  46,  46)
234cabdff1aSopenharmony_ci
235cabdff1aSopenharmony_ci
236cabdff1aSopenharmony_ci/**
237cabdff1aSopenharmony_ci * Pack two delta values (a,b) into one 16-bit word
238cabdff1aSopenharmony_ci * according with endianness of the host machine.
239cabdff1aSopenharmony_ci */
240cabdff1aSopenharmony_ci#if HAVE_BIGENDIAN
241cabdff1aSopenharmony_ci#define PD(a,b) (((a) * (1 << 8)) + (b))
242cabdff1aSopenharmony_ci#else
243cabdff1aSopenharmony_ci#define PD(a,b) (((b) * (1 << 8)) + (a))
244cabdff1aSopenharmony_ci#endif
245cabdff1aSopenharmony_ci
246cabdff1aSopenharmony_ci/**
247cabdff1aSopenharmony_ci * Expand a pair of delta values (a,b)
248cabdff1aSopenharmony_ci * into two/four delta entries.
249cabdff1aSopenharmony_ci */
250cabdff1aSopenharmony_ci#define E2(a, b) PD(a, b), PD(-(a), -(b))
251cabdff1aSopenharmony_ci#define E4(a, b) PD(a, b), PD(-(a), -(b)), PD(b, a), PD(-(b), -(a))
252cabdff1aSopenharmony_ci
253cabdff1aSopenharmony_ci/*
254cabdff1aSopenharmony_ci * VQ tables for 4x4 block modes.
255cabdff1aSopenharmony_ci * Let the compiler decompress and build the tables for us.
256cabdff1aSopenharmony_ci */
257cabdff1aSopenharmony_cistatic const int16_t delta_tab_1_1[195] = { TAB_1_1 };
258cabdff1aSopenharmony_cistatic const int16_t delta_tab_1_2[159] = { TAB_1_2 };
259cabdff1aSopenharmony_cistatic const int16_t delta_tab_1_3[133] = { TAB_1_3 };
260cabdff1aSopenharmony_cistatic const int16_t delta_tab_1_4[115] = { TAB_1_4 };
261cabdff1aSopenharmony_cistatic const int16_t delta_tab_1_5[101] = { TAB_1_5 };
262cabdff1aSopenharmony_cistatic const int16_t delta_tab_1_6[93]  = { TAB_1_6 };
263cabdff1aSopenharmony_cistatic const int16_t delta_tab_1_7[87]  = { TAB_1_7 };
264cabdff1aSopenharmony_cistatic const int16_t delta_tab_1_8[77]  = { TAB_1_8 };
265cabdff1aSopenharmony_ci
266cabdff1aSopenharmony_cistatic const int16_t delta_tab_2_1[195] = { TAB_2_1 };
267cabdff1aSopenharmony_cistatic const int16_t delta_tab_2_2[159] = { TAB_2_2 };
268cabdff1aSopenharmony_cistatic const int16_t delta_tab_2_3[133] = { TAB_2_3 };
269cabdff1aSopenharmony_cistatic const int16_t delta_tab_2_4[115] = { TAB_2_4 };
270cabdff1aSopenharmony_cistatic const int16_t delta_tab_2_5[101] = { TAB_2_5 };
271cabdff1aSopenharmony_cistatic const int16_t delta_tab_2_6[93]  = { TAB_2_6 };
272cabdff1aSopenharmony_cistatic const int16_t delta_tab_2_7[87]  = { TAB_2_7 };
273cabdff1aSopenharmony_cistatic const int16_t delta_tab_2_8[77]  = { TAB_2_8 };
274cabdff1aSopenharmony_ci
275cabdff1aSopenharmony_cistatic const int16_t delta_tab_3_1[128] = { TAB_3_1 };
276cabdff1aSopenharmony_cistatic const int16_t delta_tab_3_2[79]  = { TAB_3_2 };
277cabdff1aSopenharmony_cistatic const int16_t delta_tab_3_3[79]  = { TAB_3_3 };
278cabdff1aSopenharmony_cistatic const int16_t delta_tab_3_4[79]  = { TAB_3_4 };
279cabdff1aSopenharmony_cistatic const int16_t delta_tab_3_5[79]  = { TAB_3_5 };
280cabdff1aSopenharmony_ci
281cabdff1aSopenharmony_ci#undef PD
282cabdff1aSopenharmony_ci
283cabdff1aSopenharmony_ci/**
284cabdff1aSopenharmony_ci * Pack four delta values (a,a,b,b) into one 32-bit word
285cabdff1aSopenharmony_ci * according with endianness of the host machine.
286cabdff1aSopenharmony_ci */
287cabdff1aSopenharmony_ci#if HAVE_BIGENDIAN
288cabdff1aSopenharmony_ci#define PD(a,b) (((a) * (1 << 24)) + ((a) * (1 << 16)) + ((b) * (1 << 8)) + (b))
289cabdff1aSopenharmony_ci#else
290cabdff1aSopenharmony_ci#define PD(a,b) (((b) * (1 << 24)) + ((b) * (1 << 16)) + ((a) * (1 << 8)) + (a))
291cabdff1aSopenharmony_ci#endif
292cabdff1aSopenharmony_ci
293cabdff1aSopenharmony_ci/*
294cabdff1aSopenharmony_ci * VQ tables for 8x8 block modes.
295cabdff1aSopenharmony_ci * Those are based on the same delta tables by using
296cabdff1aSopenharmony_ci * each value twice: ABCD --> AABBCCDD.
297cabdff1aSopenharmony_ci */
298cabdff1aSopenharmony_cistatic const int32_t delta_tab_1_1_m10[195] = { TAB_1_1 };
299cabdff1aSopenharmony_cistatic const int32_t delta_tab_1_2_m10[159] = { TAB_1_2 };
300cabdff1aSopenharmony_cistatic const int32_t delta_tab_1_3_m10[133] = { TAB_1_3 };
301cabdff1aSopenharmony_cistatic const int32_t delta_tab_1_4_m10[115] = { TAB_1_4 };
302cabdff1aSopenharmony_cistatic const int32_t delta_tab_1_5_m10[101] = { TAB_1_5 };
303cabdff1aSopenharmony_cistatic const int32_t delta_tab_1_6_m10[93]  = { TAB_1_6 };
304cabdff1aSopenharmony_cistatic const int32_t delta_tab_1_7_m10[87]  = { TAB_1_7 };
305cabdff1aSopenharmony_cistatic const int32_t delta_tab_1_8_m10[77]  = { TAB_1_8 };
306cabdff1aSopenharmony_ci
307cabdff1aSopenharmony_cistatic const int32_t delta_tab_2_1_m10[195] = { TAB_2_1 };
308cabdff1aSopenharmony_cistatic const int32_t delta_tab_2_2_m10[159] = { TAB_2_2 };
309cabdff1aSopenharmony_cistatic const int32_t delta_tab_2_3_m10[133] = { TAB_2_3 };
310cabdff1aSopenharmony_cistatic const int32_t delta_tab_2_4_m10[115] = { TAB_2_4 };
311cabdff1aSopenharmony_cistatic const int32_t delta_tab_2_5_m10[101] = { TAB_2_5 };
312cabdff1aSopenharmony_cistatic const int32_t delta_tab_2_6_m10[93]  = { TAB_2_6 };
313cabdff1aSopenharmony_cistatic const int32_t delta_tab_2_7_m10[87]  = { TAB_2_7 };
314cabdff1aSopenharmony_cistatic const int32_t delta_tab_2_8_m10[77]  = { TAB_2_8 };
315cabdff1aSopenharmony_ci
316cabdff1aSopenharmony_cistatic const int32_t delta_tab_3_1_m10[128] = { TAB_3_1 };
317cabdff1aSopenharmony_cistatic const int32_t delta_tab_3_2_m10[79]  = { TAB_3_2 };
318cabdff1aSopenharmony_cistatic const int32_t delta_tab_3_3_m10[79]  = { TAB_3_3 };
319cabdff1aSopenharmony_cistatic const int32_t delta_tab_3_4_m10[79]  = { TAB_3_4 };
320cabdff1aSopenharmony_cistatic const int32_t delta_tab_3_5_m10[79]  = { TAB_3_5 };
321cabdff1aSopenharmony_ci
322cabdff1aSopenharmony_ci
323cabdff1aSopenharmony_citypedef struct vqEntry {
324cabdff1aSopenharmony_ci    const int16_t  *deltas;     ///< delta tables for 4x4 block modes
325cabdff1aSopenharmony_ci    const int32_t  *deltas_m10; ///< delta tables for 8x8 block modes
326cabdff1aSopenharmony_ci    uint8_t        num_dyads;   ///< number of two-pixel deltas
327cabdff1aSopenharmony_ci    uint8_t        quad_exp;    ///< log2 of four-pixel deltas
328cabdff1aSopenharmony_ci} vqEntry;
329cabdff1aSopenharmony_ci
330cabdff1aSopenharmony_cistatic const vqEntry vq_tab[24] = {
331cabdff1aSopenharmony_ci    /* set 1 */
332cabdff1aSopenharmony_ci    { delta_tab_1_1, delta_tab_1_1_m10, 195,  7 },
333cabdff1aSopenharmony_ci    { delta_tab_1_2, delta_tab_1_2_m10, 159,  9 },
334cabdff1aSopenharmony_ci    { delta_tab_1_3, delta_tab_1_3_m10, 133, 10 },
335cabdff1aSopenharmony_ci    { delta_tab_1_4, delta_tab_1_4_m10, 115, 11 },
336cabdff1aSopenharmony_ci    { delta_tab_1_5, delta_tab_1_5_m10, 101, 12 },
337cabdff1aSopenharmony_ci    { delta_tab_1_6, delta_tab_1_6_m10,  93, 12 },
338cabdff1aSopenharmony_ci    { delta_tab_1_7, delta_tab_1_7_m10,  87, 12 },
339cabdff1aSopenharmony_ci    { delta_tab_1_8, delta_tab_1_8_m10,  77, 13 },
340cabdff1aSopenharmony_ci
341cabdff1aSopenharmony_ci    /* set 2 */
342cabdff1aSopenharmony_ci    { delta_tab_2_1, delta_tab_2_1_m10, 195,  7 },
343cabdff1aSopenharmony_ci    { delta_tab_2_2, delta_tab_2_2_m10, 159,  9 },
344cabdff1aSopenharmony_ci    { delta_tab_2_3, delta_tab_2_3_m10, 133, 10 },
345cabdff1aSopenharmony_ci    { delta_tab_2_4, delta_tab_2_4_m10, 115, 11 },
346cabdff1aSopenharmony_ci    { delta_tab_2_5, delta_tab_2_5_m10, 101, 12 },
347cabdff1aSopenharmony_ci    { delta_tab_2_6, delta_tab_2_6_m10,  93, 12 },
348cabdff1aSopenharmony_ci    { delta_tab_2_7, delta_tab_2_7_m10,  87, 12 },
349cabdff1aSopenharmony_ci    { delta_tab_2_8, delta_tab_2_8_m10,  77, 13 },
350cabdff1aSopenharmony_ci
351cabdff1aSopenharmony_ci    /* set 3 */
352cabdff1aSopenharmony_ci    { delta_tab_3_1, delta_tab_3_1_m10, 128, 11 },
353cabdff1aSopenharmony_ci    { delta_tab_3_2, delta_tab_3_2_m10,  79, 13 },
354cabdff1aSopenharmony_ci    { delta_tab_3_3, delta_tab_3_3_m10,  79, 13 },
355cabdff1aSopenharmony_ci    { delta_tab_3_4, delta_tab_3_4_m10,  79, 13 },
356cabdff1aSopenharmony_ci    { delta_tab_3_5, delta_tab_3_5_m10,  79, 13 },
357cabdff1aSopenharmony_ci    { delta_tab_3_5, delta_tab_3_5_m10,  79, 13 },
358cabdff1aSopenharmony_ci    { delta_tab_3_5, delta_tab_3_5_m10,  79, 13 },
359cabdff1aSopenharmony_ci    { delta_tab_3_5, delta_tab_3_5_m10,  79, 13 }
360cabdff1aSopenharmony_ci};
361cabdff1aSopenharmony_ci
362cabdff1aSopenharmony_ci#endif /* AVCODEC_INDEO3DATA_H */
363