Libav 0.7.1
|
00001 /* 00002 * copyright (c) 2000,2001 Fabrice Bellard 00003 * H263+ support 00004 * copyright (c) 2001 Juan J. Sierralta P 00005 * copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> 00006 * 00007 * This file is part of Libav. 00008 * 00009 * Libav is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU Lesser General Public 00011 * License as published by the Free Software Foundation; either 00012 * version 2.1 of the License, or (at your option) any later version. 00013 * 00014 * Libav is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 * Lesser General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU Lesser General Public 00020 * License along with Libav; if not, write to the Free Software 00021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00022 */ 00023 00029 #ifndef AVCODEC_H263DATA_H 00030 #define AVCODEC_H263DATA_H 00031 00032 #include <stdint.h> 00033 #include "mpegvideo.h" 00034 00035 /* intra MCBPC, mb_type = (intra), then (intraq) */ 00036 const uint8_t ff_h263_intra_MCBPC_code[9] = { 1, 1, 2, 3, 1, 1, 2, 3, 1 }; 00037 const uint8_t ff_h263_intra_MCBPC_bits[9] = { 1, 3, 3, 3, 4, 6, 6, 6, 9 }; 00038 00039 /* inter MCBPC, mb_type = (inter), (intra), (interq), (intraq), (inter4v) */ 00040 /* Changed the tables for interq and inter4v+q, following the standard ** Juanjo ** */ 00041 const uint8_t ff_h263_inter_MCBPC_code[28] = { 00042 1, 3, 2, 5, 00043 3, 4, 3, 3, 00044 3, 7, 6, 5, 00045 4, 4, 3, 2, 00046 2, 5, 4, 5, 00047 1, 0, 0, 0, /* Stuffing */ 00048 2, 12, 14, 15, 00049 }; 00050 const uint8_t ff_h263_inter_MCBPC_bits[28] = { 00051 1, 4, 4, 6, /* inter */ 00052 5, 8, 8, 7, /* intra */ 00053 3, 7, 7, 9, /* interQ */ 00054 6, 9, 9, 9, /* intraQ */ 00055 3, 7, 7, 8, /* inter4 */ 00056 9, 0, 0, 0, /* Stuffing */ 00057 11, 13, 13, 13,/* inter4Q*/ 00058 }; 00059 00060 const uint8_t h263_mbtype_b_tab[15][2] = { 00061 {1, 1}, 00062 {3, 3}, 00063 {1, 5}, 00064 {4, 4}, 00065 {5, 4}, 00066 {6, 6}, 00067 {2, 4}, 00068 {3, 4}, 00069 {7, 6}, 00070 {4, 6}, 00071 {5, 6}, 00072 {1, 6}, 00073 {1,10}, 00074 {1, 7}, 00075 {1, 8}, 00076 }; 00077 00078 const uint8_t cbpc_b_tab[4][2] = { 00079 {0, 1}, 00080 {2, 2}, 00081 {7, 3}, 00082 {6, 3}, 00083 }; 00084 00085 const uint8_t ff_h263_cbpy_tab[16][2] = 00086 { 00087 {3,4}, {5,5}, {4,5}, {9,4}, {3,5}, {7,4}, {2,6}, {11,4}, 00088 {2,5}, {3,6}, {5,4}, {10,4}, {4,4}, {8,4}, {6,4}, {3,2} 00089 }; 00090 00091 const uint8_t mvtab[33][2] = 00092 { 00093 {1,1}, {1,2}, {1,3}, {1,4}, {3,6}, {5,7}, {4,7}, {3,7}, 00094 {11,9}, {10,9}, {9,9}, {17,10}, {16,10}, {15,10}, {14,10}, {13,10}, 00095 {12,10}, {11,10}, {10,10}, {9,10}, {8,10}, {7,10}, {6,10}, {5,10}, 00096 {4,10}, {7,11}, {6,11}, {5,11}, {4,11}, {3,11}, {2,11}, {3,12}, 00097 {2,12} 00098 }; 00099 00100 /* third non intra table */ 00101 const uint16_t inter_vlc[103][2] = { 00102 { 0x2, 2 },{ 0xf, 4 },{ 0x15, 6 },{ 0x17, 7 }, 00103 { 0x1f, 8 },{ 0x25, 9 },{ 0x24, 9 },{ 0x21, 10 }, 00104 { 0x20, 10 },{ 0x7, 11 },{ 0x6, 11 },{ 0x20, 11 }, 00105 { 0x6, 3 },{ 0x14, 6 },{ 0x1e, 8 },{ 0xf, 10 }, 00106 { 0x21, 11 },{ 0x50, 12 },{ 0xe, 4 },{ 0x1d, 8 }, 00107 { 0xe, 10 },{ 0x51, 12 },{ 0xd, 5 },{ 0x23, 9 }, 00108 { 0xd, 10 },{ 0xc, 5 },{ 0x22, 9 },{ 0x52, 12 }, 00109 { 0xb, 5 },{ 0xc, 10 },{ 0x53, 12 },{ 0x13, 6 }, 00110 { 0xb, 10 },{ 0x54, 12 },{ 0x12, 6 },{ 0xa, 10 }, 00111 { 0x11, 6 },{ 0x9, 10 },{ 0x10, 6 },{ 0x8, 10 }, 00112 { 0x16, 7 },{ 0x55, 12 },{ 0x15, 7 },{ 0x14, 7 }, 00113 { 0x1c, 8 },{ 0x1b, 8 },{ 0x21, 9 },{ 0x20, 9 }, 00114 { 0x1f, 9 },{ 0x1e, 9 },{ 0x1d, 9 },{ 0x1c, 9 }, 00115 { 0x1b, 9 },{ 0x1a, 9 },{ 0x22, 11 },{ 0x23, 11 }, 00116 { 0x56, 12 },{ 0x57, 12 },{ 0x7, 4 },{ 0x19, 9 }, 00117 { 0x5, 11 },{ 0xf, 6 },{ 0x4, 11 },{ 0xe, 6 }, 00118 { 0xd, 6 },{ 0xc, 6 },{ 0x13, 7 },{ 0x12, 7 }, 00119 { 0x11, 7 },{ 0x10, 7 },{ 0x1a, 8 },{ 0x19, 8 }, 00120 { 0x18, 8 },{ 0x17, 8 },{ 0x16, 8 },{ 0x15, 8 }, 00121 { 0x14, 8 },{ 0x13, 8 },{ 0x18, 9 },{ 0x17, 9 }, 00122 { 0x16, 9 },{ 0x15, 9 },{ 0x14, 9 },{ 0x13, 9 }, 00123 { 0x12, 9 },{ 0x11, 9 },{ 0x7, 10 },{ 0x6, 10 }, 00124 { 0x5, 10 },{ 0x4, 10 },{ 0x24, 11 },{ 0x25, 11 }, 00125 { 0x26, 11 },{ 0x27, 11 },{ 0x58, 12 },{ 0x59, 12 }, 00126 { 0x5a, 12 },{ 0x5b, 12 },{ 0x5c, 12 },{ 0x5d, 12 }, 00127 { 0x5e, 12 },{ 0x5f, 12 },{ 0x3, 7 }, 00128 }; 00129 00130 const int8_t inter_level[102] = { 00131 1, 2, 3, 4, 5, 6, 7, 8, 00132 9, 10, 11, 12, 1, 2, 3, 4, 00133 5, 6, 1, 2, 3, 4, 1, 2, 00134 3, 1, 2, 3, 1, 2, 3, 1, 00135 2, 3, 1, 2, 1, 2, 1, 2, 00136 1, 2, 1, 1, 1, 1, 1, 1, 00137 1, 1, 1, 1, 1, 1, 1, 1, 00138 1, 1, 1, 2, 3, 1, 2, 1, 00139 1, 1, 1, 1, 1, 1, 1, 1, 00140 1, 1, 1, 1, 1, 1, 1, 1, 00141 1, 1, 1, 1, 1, 1, 1, 1, 00142 1, 1, 1, 1, 1, 1, 1, 1, 00143 1, 1, 1, 1, 1, 1, 00144 }; 00145 00146 const int8_t inter_run[102] = { 00147 0, 0, 0, 0, 0, 0, 0, 0, 00148 0, 0, 0, 0, 1, 1, 1, 1, 00149 1, 1, 2, 2, 2, 2, 3, 3, 00150 3, 4, 4, 4, 5, 5, 5, 6, 00151 6, 6, 7, 7, 8, 8, 9, 9, 00152 10, 10, 11, 12, 13, 14, 15, 16, 00153 17, 18, 19, 20, 21, 22, 23, 24, 00154 25, 26, 0, 0, 0, 1, 1, 2, 00155 3, 4, 5, 6, 7, 8, 9, 10, 00156 11, 12, 13, 14, 15, 16, 17, 18, 00157 19, 20, 21, 22, 23, 24, 25, 26, 00158 27, 28, 29, 30, 31, 32, 33, 34, 00159 35, 36, 37, 38, 39, 40, 00160 }; 00161 00162 RLTable ff_h263_rl_inter = { 00163 102, 00164 58, 00165 inter_vlc, 00166 inter_run, 00167 inter_level, 00168 }; 00169 00170 static const uint16_t intra_vlc_aic[103][2] = { 00171 { 0x2, 2 }, { 0x6, 3 }, { 0xe, 4 }, { 0xc, 5 }, 00172 { 0xd, 5 }, { 0x10, 6 }, { 0x11, 6 }, { 0x12, 6 }, 00173 { 0x16, 7 }, { 0x1b, 8 }, { 0x20, 9 }, { 0x21, 9 }, 00174 { 0x1a, 9 }, { 0x1b, 9 }, { 0x1c, 9 }, { 0x1d, 9 }, 00175 { 0x1e, 9 }, { 0x1f, 9 }, { 0x23, 11 }, { 0x22, 11 }, 00176 { 0x57, 12 }, { 0x56, 12 }, { 0x55, 12 }, { 0x54, 12 }, 00177 { 0x53, 12 }, { 0xf, 4 }, { 0x14, 6 }, { 0x14, 7 }, 00178 { 0x1e, 8 }, { 0xf, 10 }, { 0x21, 11 }, { 0x50, 12 }, 00179 { 0xb, 5 }, { 0x15, 7 }, { 0xe, 10 }, { 0x9, 10 }, 00180 { 0x15, 6 }, { 0x1d, 8 }, { 0xd, 10 }, { 0x51, 12 }, 00181 { 0x13, 6 }, { 0x23, 9 }, { 0x7, 11 }, { 0x17, 7 }, 00182 { 0x22, 9 }, { 0x52, 12 }, { 0x1c, 8 }, { 0xc, 10 }, 00183 { 0x1f, 8 }, { 0xb, 10 }, { 0x25, 9 }, { 0xa, 10 }, 00184 { 0x24, 9 }, { 0x6, 11 }, { 0x21, 10 }, { 0x20, 10 }, 00185 { 0x8, 10 }, { 0x20, 11 }, { 0x7, 4 }, { 0xc, 6 }, 00186 { 0x10, 7 }, { 0x13, 8 }, { 0x11, 9 }, { 0x12, 9 }, 00187 { 0x4, 10 }, { 0x27, 11 }, { 0x26, 11 }, { 0x5f, 12 }, 00188 { 0xf, 6 }, { 0x13, 9 }, { 0x5, 10 }, { 0x25, 11 }, 00189 { 0xe, 6 }, { 0x14, 9 }, { 0x24, 11 }, { 0xd, 6 }, 00190 { 0x6, 10 }, { 0x5e, 12 }, { 0x11, 7 }, { 0x7, 10 }, 00191 { 0x13, 7 }, { 0x5d, 12 }, { 0x12, 7 }, { 0x5c, 12 }, 00192 { 0x14, 8 }, { 0x5b, 12 }, { 0x15, 8 }, { 0x1a, 8 }, 00193 { 0x19, 8 }, { 0x18, 8 }, { 0x17, 8 }, { 0x16, 8 }, 00194 { 0x19, 9 }, { 0x15, 9 }, { 0x16, 9 }, { 0x18, 9 }, 00195 { 0x17, 9 }, { 0x4, 11 }, { 0x5, 11 }, { 0x58, 12 }, 00196 { 0x59, 12 }, { 0x5a, 12 }, { 0x3, 7 }, 00197 }; 00198 00199 static const int8_t intra_run_aic[102] = { 00200 0, 0, 0, 0, 0, 0, 0, 0, 00201 0, 0, 0, 0, 0, 0, 0, 0, 00202 0, 0, 0, 0, 0, 0, 0, 0, 00203 0, 1, 1, 1, 1, 1, 1, 1, 00204 2, 2, 2, 2, 3, 3, 3, 3, 00205 4, 4, 4, 5, 5, 5, 6, 6, 00206 7, 7, 8, 8, 9, 9, 10, 11, 00207 12, 13, 0, 0, 0, 0, 0, 0, 00208 0, 0, 0, 0, 1, 1, 1, 1, 00209 2, 2, 2, 3, 3, 3, 4, 4, 00210 5, 5, 6, 6, 7, 7, 8, 9, 00211 10, 11, 12, 13, 14, 15, 16, 17, 00212 18, 19, 20, 21, 22, 23, 00213 }; 00214 00215 static const int8_t intra_level_aic[102] = { 00216 1, 2, 3, 4, 5, 6, 7, 8, 00217 9, 10, 11, 12, 13, 14, 15, 16, 00218 17, 18, 19, 20, 21, 22, 23, 24, 00219 25, 1, 2, 3, 4, 5, 6, 7, 00220 1, 2, 3, 4, 1, 2, 3, 4, 00221 1, 2, 3, 1, 2, 3, 1, 2, 00222 1, 2, 1, 2, 1, 2, 1, 1, 00223 1, 1, 1, 2, 3, 4, 5, 6, 00224 7, 8, 9, 10, 1, 2, 3, 4, 00225 1, 2, 3, 1, 2, 3, 1, 2, 00226 1, 2, 1, 2, 1, 2, 1, 1, 00227 1, 1, 1, 1, 1, 1, 1, 1, 00228 1, 1, 1, 1, 1, 1, 00229 }; 00230 00231 RLTable rl_intra_aic = { 00232 102, 00233 58, 00234 intra_vlc_aic, 00235 intra_run_aic, 00236 intra_level_aic, 00237 }; 00238 00239 const uint16_t h263_format[8][2] = { 00240 { 0, 0 }, 00241 { 128, 96 }, 00242 { 176, 144 }, 00243 { 352, 288 }, 00244 { 704, 576 }, 00245 { 1408, 1152 }, 00246 }; 00247 00248 const uint8_t ff_aic_dc_scale_table[32]={ 00249 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 00250 0, 2, 4, 6, 8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62 00251 }; 00252 00253 const uint8_t modified_quant_tab[2][32]={ 00254 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 00255 { 00256 0, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9,10,11,12,13,14,15,16,17,18,18,19,20,21,22,23,24,25,26,27,28 00257 },{ 00258 0, 2, 3, 4, 5, 6, 7, 8, 9,10,11,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,31,31,26 00259 } 00260 }; 00261 00262 const uint8_t ff_h263_chroma_qscale_table[32]={ 00263 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 00264 0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 9, 9,10,10,11,11,12,12,12,13,13,13,14,14,14,14,14,15,15,15,15,15 00265 }; 00266 00267 uint16_t ff_mba_max[6]={ 00268 47, 98, 395,1583,6335,9215 00269 }; 00270 00271 uint8_t ff_mba_length[7]={ 00272 6, 7, 9, 11, 13, 14, 14 00273 }; 00274 00275 const uint8_t ff_h263_loop_filter_strength[32]={ 00276 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 00277 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9,10,10,10,11,11,11,12,12,12 00278 }; 00279 00280 const AVRational ff_h263_pixel_aspect[16]={ 00281 {0, 1}, 00282 {1, 1}, 00283 {12, 11}, 00284 {10, 11}, 00285 {16, 11}, 00286 {40, 33}, 00287 {0, 1}, 00288 {0, 1}, 00289 {0, 1}, 00290 {0, 1}, 00291 {0, 1}, 00292 {0, 1}, 00293 {0, 1}, 00294 {0, 1}, 00295 {0, 1}, 00296 {0, 1}, 00297 }; 00298 00299 #endif /* AVCODEC_H263DATA_H */