00001
00024 #ifndef FFMPEG_VP56DATA_H
00025 #define FFMPEG_VP56DATA_H
00026
00027 #include "common.h"
00028
00029 typedef enum {
00030 VP56_FRAME_CURRENT = 0,
00031 VP56_FRAME_PREVIOUS = 1,
00032 VP56_FRAME_GOLDEN = 2,
00033 VP56_FRAME_GOLDEN2 = 3,
00034 VP56_FRAME_UNUSED = 4,
00035 VP56_FRAME_UNUSED2 = 5,
00036 } vp56_frame_t;
00037
00038 typedef enum {
00039 VP56_MB_INTER_NOVEC_PF = 0,
00040 VP56_MB_INTRA = 1,
00041 VP56_MB_INTER_DELTA_PF = 2,
00042 VP56_MB_INTER_V1_PF = 3,
00043 VP56_MB_INTER_V2_PF = 4,
00044 VP56_MB_INTER_NOVEC_GF = 5,
00045 VP56_MB_INTER_DELTA_GF = 6,
00046 VP56_MB_INTER_4V = 7,
00047 VP56_MB_INTER_V1_GF = 8,
00048 VP56_MB_INTER_V2_GF = 9,
00049 } vp56_mb_t;
00050
00051 typedef struct {
00052 int8_t val;
00053 int8_t prob_idx;
00054 } vp56_tree_t;
00055
00056 extern const uint8_t vp56_b2p[];
00057 extern const uint8_t vp56_b6to4[];
00058 extern const uint8_t vp56_coeff_parse_table[6][11];
00059 extern const uint8_t vp56_def_mb_types_stats[3][10][2];
00060 extern const vp56_tree_t vp56_pva_tree[];
00061 extern const vp56_tree_t vp56_pc_tree[];
00062 extern const uint8_t vp56_coeff_bias[];
00063 extern const uint8_t vp56_coeff_bit_length[];
00064
00065 static const vp56_frame_t vp56_reference_frame[] = {
00066 VP56_FRAME_PREVIOUS,
00067 VP56_FRAME_CURRENT,
00068 VP56_FRAME_PREVIOUS,
00069 VP56_FRAME_PREVIOUS,
00070 VP56_FRAME_PREVIOUS,
00071 VP56_FRAME_GOLDEN,
00072 VP56_FRAME_GOLDEN,
00073 VP56_FRAME_PREVIOUS,
00074 VP56_FRAME_GOLDEN,
00075 VP56_FRAME_GOLDEN,
00076 };
00077
00078 static const uint8_t vp56_ac_dequant[64] = {
00079 94, 92, 90, 88, 86, 82, 78, 74,
00080 70, 66, 62, 58, 54, 53, 52, 51,
00081 50, 49, 48, 47, 46, 45, 44, 43,
00082 42, 40, 39, 37, 36, 35, 34, 33,
00083 32, 31, 30, 29, 28, 27, 26, 25,
00084 24, 23, 22, 21, 20, 19, 18, 17,
00085 16, 15, 14, 13, 12, 11, 10, 9,
00086 8, 7, 6, 5, 4, 3, 2, 1,
00087 };
00088
00089 static const uint8_t vp56_dc_dequant[64] = {
00090 47, 47, 47, 47, 45, 43, 43, 43,
00091 43, 43, 42, 41, 41, 40, 40, 40,
00092 40, 35, 35, 35, 35, 33, 33, 33,
00093 33, 32, 32, 32, 27, 27, 26, 26,
00094 25, 25, 24, 24, 23, 23, 19, 19,
00095 19, 19, 18, 18, 17, 16, 16, 16,
00096 16, 16, 15, 11, 11, 11, 10, 10,
00097 9, 8, 7, 5, 3, 3, 2, 2,
00098 };
00099
00100 static const uint8_t vp56_pre_def_mb_type_stats[16][3][10][2] = {
00101 { { { 9, 15 }, { 32, 25 }, { 7, 19 }, { 9, 21 }, { 1, 12 },
00102 { 14, 12 }, { 3, 18 }, { 14, 23 }, { 3, 10 }, { 0, 4 }, },
00103 { { 41, 22 }, { 1, 0 }, { 1, 31 }, { 0, 0 }, { 0, 0 },
00104 { 0, 1 }, { 1, 7 }, { 0, 1 }, { 98, 25 }, { 4, 10 }, },
00105 { { 2, 3 }, { 2, 3 }, { 0, 2 }, { 0, 2 }, { 0, 0 },
00106 { 11, 4 }, { 1, 4 }, { 0, 2 }, { 3, 2 }, { 0, 4 }, }, },
00107 { { { 48, 39 }, { 1, 2 }, { 11, 27 }, { 29, 44 }, { 7, 27 },
00108 { 1, 4 }, { 0, 3 }, { 1, 6 }, { 1, 2 }, { 0, 0 }, },
00109 { { 123, 37 }, { 6, 4 }, { 1, 27 }, { 0, 0 }, { 0, 0 },
00110 { 5, 8 }, { 1, 7 }, { 0, 1 }, { 12, 10 }, { 0, 2 }, },
00111 { { 49, 46 }, { 3, 4 }, { 7, 31 }, { 42, 41 }, { 0, 0 },
00112 { 2, 6 }, { 1, 7 }, { 1, 4 }, { 2, 4 }, { 0, 1 }, }, },
00113 { { { 21, 32 }, { 1, 2 }, { 4, 10 }, { 32, 43 }, { 6, 23 },
00114 { 2, 3 }, { 1, 19 }, { 1, 6 }, { 12, 21 }, { 0, 7 }, },
00115 { { 26, 14 }, { 14, 12 }, { 0, 24 }, { 0, 0 }, { 0, 0 },
00116 { 55, 17 }, { 1, 9 }, { 0, 36 }, { 5, 7 }, { 1, 3 }, },
00117 { { 26, 25 }, { 1, 1 }, { 2, 10 }, { 67, 39 }, { 0, 0 },
00118 { 1, 1 }, { 0, 14 }, { 0, 2 }, { 31, 26 }, { 1, 6 }, }, },
00119 { { { 69, 83 }, { 0, 0 }, { 0, 2 }, { 10, 29 }, { 3, 12 },
00120 { 0, 1 }, { 0, 3 }, { 0, 3 }, { 2, 2 }, { 0, 0 }, },
00121 { { 209, 5 }, { 0, 0 }, { 0, 27 }, { 0, 0 }, { 0, 0 },
00122 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 0 }, },
00123 { { 103, 46 }, { 1, 2 }, { 2, 10 }, { 33, 42 }, { 0, 0 },
00124 { 1, 4 }, { 0, 3 }, { 0, 1 }, { 1, 3 }, { 0, 0 }, }, },
00125 { { { 11, 20 }, { 1, 4 }, { 18, 36 }, { 43, 48 }, { 13, 35 },
00126 { 0, 2 }, { 0, 5 }, { 3, 12 }, { 1, 2 }, { 0, 0 }, },
00127 { { 2, 5 }, { 4, 5 }, { 0, 121 }, { 0, 0 }, { 0, 0 },
00128 { 0, 3 }, { 2, 4 }, { 1, 4 }, { 2, 2 }, { 0, 1 }, },
00129 { { 14, 31 }, { 9, 13 }, { 14, 54 }, { 22, 29 }, { 0, 0 },
00130 { 2, 6 }, { 4, 18 }, { 6, 13 }, { 1, 5 }, { 0, 1 }, }, },
00131 { { { 70, 44 }, { 0, 1 }, { 2, 10 }, { 37, 46 }, { 8, 26 },
00132 { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 1 }, { 0, 0 }, },
00133 { { 175, 5 }, { 0, 1 }, { 0, 48 }, { 0, 0 }, { 0, 0 },
00134 { 0, 2 }, { 0, 1 }, { 0, 2 }, { 0, 1 }, { 0, 0 }, },
00135 { { 85, 39 }, { 0, 0 }, { 1, 9 }, { 69, 40 }, { 0, 0 },
00136 { 0, 1 }, { 0, 3 }, { 0, 1 }, { 2, 3 }, { 0, 0 }, }, },
00137 { { { 8, 15 }, { 0, 1 }, { 8, 21 }, { 74, 53 }, { 22, 42 },
00138 { 0, 1 }, { 0, 2 }, { 0, 3 }, { 1, 2 }, { 0, 0 }, },
00139 { { 83, 5 }, { 2, 3 }, { 0, 102 }, { 0, 0 }, { 0, 0 },
00140 { 1, 3 }, { 0, 2 }, { 0, 1 }, { 0, 0 }, { 0, 0 }, },
00141 { { 31, 28 }, { 0, 0 }, { 3, 14 }, { 130, 34 }, { 0, 0 },
00142 { 0, 1 }, { 0, 3 }, { 0, 1 }, { 3, 3 }, { 0, 1 }, }, },
00143 { { { 141, 42 }, { 0, 0 }, { 1, 4 }, { 11, 24 }, { 1, 11 },
00144 { 0, 1 }, { 0, 1 }, { 0, 2 }, { 0, 0 }, { 0, 0 }, },
00145 { { 233, 6 }, { 0, 0 }, { 0, 8 }, { 0, 0 }, { 0, 0 },
00146 { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 1 }, { 0, 0 }, },
00147 { { 171, 25 }, { 0, 0 }, { 1, 5 }, { 25, 21 }, { 0, 0 },
00148 { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, }, },
00149 { { { 8, 19 }, { 4, 10 }, { 24, 45 }, { 21, 37 }, { 9, 29 },
00150 { 0, 3 }, { 1, 7 }, { 11, 25 }, { 0, 2 }, { 0, 1 }, },
00151 { { 34, 16 }, { 112, 21 }, { 1, 28 }, { 0, 0 }, { 0, 0 },
00152 { 6, 8 }, { 1, 7 }, { 0, 3 }, { 2, 5 }, { 0, 2 }, },
00153 { { 17, 21 }, { 68, 29 }, { 6, 15 }, { 13, 22 }, { 0, 0 },
00154 { 6, 12 }, { 3, 14 }, { 4, 10 }, { 1, 7 }, { 0, 3 }, }, },
00155 { { { 46, 42 }, { 0, 1 }, { 2, 10 }, { 54, 51 }, { 10, 30 },
00156 { 0, 2 }, { 0, 2 }, { 0, 1 }, { 0, 1 }, { 0, 0 }, },
00157 { { 159, 35 }, { 2, 2 }, { 0, 25 }, { 0, 0 }, { 0, 0 },
00158 { 3, 6 }, { 0, 5 }, { 0, 1 }, { 4, 4 }, { 0, 1 }, },
00159 { { 51, 39 }, { 0, 1 }, { 2, 12 }, { 91, 44 }, { 0, 0 },
00160 { 0, 2 }, { 0, 3 }, { 0, 1 }, { 2, 3 }, { 0, 1 }, }, },
00161 { { { 28, 32 }, { 0, 0 }, { 3, 10 }, { 75, 51 }, { 14, 33 },
00162 { 0, 1 }, { 0, 2 }, { 0, 1 }, { 1, 2 }, { 0, 0 }, },
00163 { { 75, 39 }, { 5, 7 }, { 2, 48 }, { 0, 0 }, { 0, 0 },
00164 { 3, 11 }, { 2, 16 }, { 1, 4 }, { 7, 10 }, { 0, 2 }, },
00165 { { 81, 25 }, { 0, 0 }, { 2, 9 }, { 106, 26 }, { 0, 0 },
00166 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 1, 1 }, { 0, 0 }, }, },
00167 { { { 100, 46 }, { 0, 1 }, { 3, 9 }, { 21, 37 }, { 5, 20 },
00168 { 0, 1 }, { 0, 2 }, { 1, 2 }, { 0, 1 }, { 0, 0 }, },
00169 { { 212, 21 }, { 0, 1 }, { 0, 9 }, { 0, 0 }, { 0, 0 },
00170 { 1, 2 }, { 0, 2 }, { 0, 0 }, { 2, 2 }, { 0, 0 }, },
00171 { { 140, 37 }, { 0, 1 }, { 1, 8 }, { 24, 33 }, { 0, 0 },
00172 { 1, 2 }, { 0, 2 }, { 0, 1 }, { 1, 2 }, { 0, 0 }, }, },
00173 { { { 27, 29 }, { 0, 1 }, { 9, 25 }, { 53, 51 }, { 12, 34 },
00174 { 0, 1 }, { 0, 3 }, { 1, 5 }, { 0, 2 }, { 0, 0 }, },
00175 { { 4, 2 }, { 0, 0 }, { 0, 172 }, { 0, 0 }, { 0, 0 },
00176 { 0, 1 }, { 0, 2 }, { 0, 0 }, { 2, 0 }, { 0, 0 }, },
00177 { { 14, 23 }, { 1, 3 }, { 11, 53 }, { 90, 31 }, { 0, 0 },
00178 { 0, 3 }, { 1, 5 }, { 2, 6 }, { 1, 2 }, { 0, 0 }, }, },
00179 { { { 80, 38 }, { 0, 0 }, { 1, 4 }, { 69, 33 }, { 5, 16 },
00180 { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 1 }, { 0, 0 }, },
00181 { { 187, 22 }, { 1, 1 }, { 0, 17 }, { 0, 0 }, { 0, 0 },
00182 { 3, 6 }, { 0, 4 }, { 0, 1 }, { 4, 4 }, { 0, 1 }, },
00183 { { 123, 29 }, { 0, 0 }, { 1, 7 }, { 57, 30 }, { 0, 0 },
00184 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 0 }, }, },
00185 { { { 16, 20 }, { 0, 0 }, { 2, 8 }, { 104, 49 }, { 15, 33 },
00186 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 1, 1 }, { 0, 0 }, },
00187 { { 133, 6 }, { 1, 2 }, { 1, 70 }, { 0, 0 }, { 0, 0 },
00188 { 0, 2 }, { 0, 4 }, { 0, 3 }, { 1, 1 }, { 0, 0 }, },
00189 { { 13, 14 }, { 0, 0 }, { 4, 20 }, { 175, 20 }, { 0, 0 },
00190 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 1, 1 }, { 0, 0 }, }, },
00191 { { { 194, 16 }, { 0, 0 }, { 1, 1 }, { 1, 9 }, { 1, 3 },
00192 { 0, 0 }, { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 0 }, },
00193 { { 251, 1 }, { 0, 0 }, { 0, 2 }, { 0, 0 }, { 0, 0 },
00194 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, },
00195 { { 202, 23 }, { 0, 0 }, { 1, 3 }, { 2, 9 }, { 0, 0 },
00196 { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 0 }, }, },
00197 };
00198
00199 static const uint8_t vp56_filter_threshold[] = {
00200 14, 14, 13, 13, 12, 12, 10, 10,
00201 10, 10, 8, 8, 8, 8, 8, 8,
00202 8, 8, 8, 8, 8, 8, 8, 8,
00203 8, 8, 8, 8, 8, 8, 8, 8,
00204 8, 8, 8, 8, 7, 7, 7, 7,
00205 7, 7, 6, 6, 6, 6, 6, 6,
00206 5, 5, 5, 5, 4, 4, 4, 4,
00207 4, 4, 4, 3, 3, 3, 3, 2,
00208 };
00209
00210 static const uint8_t vp56_mb_type_model_model[] = {
00211 171, 83, 199, 140, 125, 104,
00212 };
00213
00214 static const vp56_tree_t vp56_pmbtm_tree[] = {
00215 { 4, 0},
00216 { 2, 1}, {-8}, {-4},
00217 { 8, 2},
00218 { 6, 3},
00219 { 4, 4},
00220 { 2, 5}, {-24}, {-20}, {-16}, {-12}, {-0},
00221 };
00222
00223 static const vp56_tree_t vp56_pmbt_tree[] = {
00224 { 8, 1},
00225 { 4, 2},
00226 { 2, 4}, {-VP56_MB_INTER_NOVEC_PF}, {-VP56_MB_INTER_DELTA_PF},
00227 { 2, 5}, {-VP56_MB_INTER_V1_PF}, {-VP56_MB_INTER_V2_PF},
00228 { 4, 3},
00229 { 2, 6}, {-VP56_MB_INTRA}, {-VP56_MB_INTER_4V},
00230 { 4, 7},
00231 { 2, 8}, {-VP56_MB_INTER_NOVEC_GF}, {-VP56_MB_INTER_DELTA_GF},
00232 { 2, 9}, {-VP56_MB_INTER_V1_GF}, {-VP56_MB_INTER_V2_GF},
00233 };
00234
00235
00236 static const int8_t vp56_candidate_predictor_pos[12][2] = {
00237 { 0, -1 },
00238 { -1, 0 },
00239 { -1, -1 },
00240 { 1, -1 },
00241 { 0, -2 },
00242 { -2, 0 },
00243 { -2, -1 },
00244 { -1, -2 },
00245 { 1, -2 },
00246 { 2, -1 },
00247 { -2, -2 },
00248 { 2, -2 },
00249 };
00250
00251 #endif