• Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • File List
  • Globals

libavcodec/h263data.h

Go to the documentation of this file.
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 FFmpeg.
00008  *
00009  * FFmpeg 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  * FFmpeg 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 FFmpeg; 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 intra_MCBPC_code[9] = { 1, 1, 2, 3, 1, 1, 2, 3, 1 };
00037 const uint8_t 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 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 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 static 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 static const int h263_mb_type_b_map[15]= {
00079     MB_TYPE_DIRECT2 | MB_TYPE_L0L1,
00080     MB_TYPE_DIRECT2 | MB_TYPE_L0L1 | MB_TYPE_CBP,
00081     MB_TYPE_DIRECT2 | MB_TYPE_L0L1 | MB_TYPE_CBP | MB_TYPE_QUANT,
00082                       MB_TYPE_L0                                 | MB_TYPE_16x16,
00083                       MB_TYPE_L0   | MB_TYPE_CBP                 | MB_TYPE_16x16,
00084                       MB_TYPE_L0   | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
00085                       MB_TYPE_L1                                 | MB_TYPE_16x16,
00086                       MB_TYPE_L1   | MB_TYPE_CBP                 | MB_TYPE_16x16,
00087                       MB_TYPE_L1   | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
00088                       MB_TYPE_L0L1                               | MB_TYPE_16x16,
00089                       MB_TYPE_L0L1 | MB_TYPE_CBP                 | MB_TYPE_16x16,
00090                       MB_TYPE_L0L1 | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
00091     0, //stuffing
00092     MB_TYPE_INTRA4x4                | MB_TYPE_CBP,
00093     MB_TYPE_INTRA4x4                | MB_TYPE_CBP | MB_TYPE_QUANT,
00094 };
00095 
00096 static const uint8_t cbpc_b_tab[4][2] = {
00097 {0, 1},
00098 {2, 2},
00099 {7, 3},
00100 {6, 3},
00101 };
00102 
00103 const uint8_t cbpy_tab[16][2] =
00104 {
00105   {3,4}, {5,5}, {4,5}, {9,4}, {3,5}, {7,4}, {2,6}, {11,4},
00106   {2,5}, {3,6}, {5,4}, {10,4}, {4,4}, {8,4}, {6,4}, {3,2}
00107 };
00108 
00109 const uint8_t mvtab[33][2] =
00110 {
00111   {1,1}, {1,2}, {1,3}, {1,4}, {3,6}, {5,7}, {4,7}, {3,7},
00112   {11,9}, {10,9}, {9,9}, {17,10}, {16,10}, {15,10}, {14,10}, {13,10},
00113   {12,10}, {11,10}, {10,10}, {9,10}, {8,10}, {7,10}, {6,10}, {5,10},
00114   {4,10}, {7,11}, {6,11}, {5,11}, {4,11}, {3,11}, {2,11}, {3,12},
00115   {2,12}
00116 };
00117 
00118 /* third non intra table */
00119 const uint16_t inter_vlc[103][2] = {
00120 { 0x2, 2 },{ 0xf, 4 },{ 0x15, 6 },{ 0x17, 7 },
00121 { 0x1f, 8 },{ 0x25, 9 },{ 0x24, 9 },{ 0x21, 10 },
00122 { 0x20, 10 },{ 0x7, 11 },{ 0x6, 11 },{ 0x20, 11 },
00123 { 0x6, 3 },{ 0x14, 6 },{ 0x1e, 8 },{ 0xf, 10 },
00124 { 0x21, 11 },{ 0x50, 12 },{ 0xe, 4 },{ 0x1d, 8 },
00125 { 0xe, 10 },{ 0x51, 12 },{ 0xd, 5 },{ 0x23, 9 },
00126 { 0xd, 10 },{ 0xc, 5 },{ 0x22, 9 },{ 0x52, 12 },
00127 { 0xb, 5 },{ 0xc, 10 },{ 0x53, 12 },{ 0x13, 6 },
00128 { 0xb, 10 },{ 0x54, 12 },{ 0x12, 6 },{ 0xa, 10 },
00129 { 0x11, 6 },{ 0x9, 10 },{ 0x10, 6 },{ 0x8, 10 },
00130 { 0x16, 7 },{ 0x55, 12 },{ 0x15, 7 },{ 0x14, 7 },
00131 { 0x1c, 8 },{ 0x1b, 8 },{ 0x21, 9 },{ 0x20, 9 },
00132 { 0x1f, 9 },{ 0x1e, 9 },{ 0x1d, 9 },{ 0x1c, 9 },
00133 { 0x1b, 9 },{ 0x1a, 9 },{ 0x22, 11 },{ 0x23, 11 },
00134 { 0x56, 12 },{ 0x57, 12 },{ 0x7, 4 },{ 0x19, 9 },
00135 { 0x5, 11 },{ 0xf, 6 },{ 0x4, 11 },{ 0xe, 6 },
00136 { 0xd, 6 },{ 0xc, 6 },{ 0x13, 7 },{ 0x12, 7 },
00137 { 0x11, 7 },{ 0x10, 7 },{ 0x1a, 8 },{ 0x19, 8 },
00138 { 0x18, 8 },{ 0x17, 8 },{ 0x16, 8 },{ 0x15, 8 },
00139 { 0x14, 8 },{ 0x13, 8 },{ 0x18, 9 },{ 0x17, 9 },
00140 { 0x16, 9 },{ 0x15, 9 },{ 0x14, 9 },{ 0x13, 9 },
00141 { 0x12, 9 },{ 0x11, 9 },{ 0x7, 10 },{ 0x6, 10 },
00142 { 0x5, 10 },{ 0x4, 10 },{ 0x24, 11 },{ 0x25, 11 },
00143 { 0x26, 11 },{ 0x27, 11 },{ 0x58, 12 },{ 0x59, 12 },
00144 { 0x5a, 12 },{ 0x5b, 12 },{ 0x5c, 12 },{ 0x5d, 12 },
00145 { 0x5e, 12 },{ 0x5f, 12 },{ 0x3, 7 },
00146 };
00147 
00148 const int8_t inter_level[102] = {
00149   1,  2,  3,  4,  5,  6,  7,  8,
00150   9, 10, 11, 12,  1,  2,  3,  4,
00151   5,  6,  1,  2,  3,  4,  1,  2,
00152   3,  1,  2,  3,  1,  2,  3,  1,
00153   2,  3,  1,  2,  1,  2,  1,  2,
00154   1,  2,  1,  1,  1,  1,  1,  1,
00155   1,  1,  1,  1,  1,  1,  1,  1,
00156   1,  1,  1,  2,  3,  1,  2,  1,
00157   1,  1,  1,  1,  1,  1,  1,  1,
00158   1,  1,  1,  1,  1,  1,  1,  1,
00159   1,  1,  1,  1,  1,  1,  1,  1,
00160   1,  1,  1,  1,  1,  1,  1,  1,
00161   1,  1,  1,  1,  1,  1,
00162 };
00163 
00164 const int8_t inter_run[102] = {
00165   0,  0,  0,  0,  0,  0,  0,  0,
00166   0,  0,  0,  0,  1,  1,  1,  1,
00167   1,  1,  2,  2,  2,  2,  3,  3,
00168   3,  4,  4,  4,  5,  5,  5,  6,
00169   6,  6,  7,  7,  8,  8,  9,  9,
00170  10, 10, 11, 12, 13, 14, 15, 16,
00171  17, 18, 19, 20, 21, 22, 23, 24,
00172  25, 26,  0,  0,  0,  1,  1,  2,
00173   3,  4,  5,  6,  7,  8,  9, 10,
00174  11, 12, 13, 14, 15, 16, 17, 18,
00175  19, 20, 21, 22, 23, 24, 25, 26,
00176  27, 28, 29, 30, 31, 32, 33, 34,
00177  35, 36, 37, 38, 39, 40,
00178 };
00179 
00180 static RLTable rl_inter = {
00181     102,
00182     58,
00183     inter_vlc,
00184     inter_run,
00185     inter_level,
00186 };
00187 
00188 static const uint16_t intra_vlc_aic[103][2] = {
00189 {  0x2,  2 }, {  0x6,  3 }, {  0xe,  4 }, {  0xc,  5 },
00190 {  0xd,  5 }, { 0x10,  6 }, { 0x11,  6 }, { 0x12,  6 },
00191 { 0x16,  7 }, { 0x1b,  8 }, { 0x20,  9 }, { 0x21,  9 },
00192 { 0x1a,  9 }, { 0x1b,  9 }, { 0x1c,  9 }, { 0x1d,  9 },
00193 { 0x1e,  9 }, { 0x1f,  9 }, { 0x23, 11 }, { 0x22, 11 },
00194 { 0x57, 12 }, { 0x56, 12 }, { 0x55, 12 }, { 0x54, 12 },
00195 { 0x53, 12 }, {  0xf,  4 }, { 0x14,  6 }, { 0x14,  7 },
00196 { 0x1e,  8 }, {  0xf, 10 }, { 0x21, 11 }, { 0x50, 12 },
00197 {  0xb,  5 }, { 0x15,  7 }, {  0xe, 10 }, {  0x9, 10 },
00198 { 0x15,  6 }, { 0x1d,  8 }, {  0xd, 10 }, { 0x51, 12 },
00199 { 0x13,  6 }, { 0x23,  9 }, {  0x7, 11 }, { 0x17,  7 },
00200 { 0x22,  9 }, { 0x52, 12 }, { 0x1c,  8 }, {  0xc, 10 },
00201 { 0x1f,  8 }, {  0xb, 10 }, { 0x25,  9 }, {  0xa, 10 },
00202 { 0x24,  9 }, {  0x6, 11 }, { 0x21, 10 }, { 0x20, 10 },
00203 {  0x8, 10 }, { 0x20, 11 }, {  0x7,  4 }, {  0xc,  6 },
00204 { 0x10,  7 }, { 0x13,  8 }, { 0x11,  9 }, { 0x12,  9 },
00205 {  0x4, 10 }, { 0x27, 11 }, { 0x26, 11 }, { 0x5f, 12 },
00206 {  0xf,  6 }, { 0x13,  9 }, {  0x5, 10 }, { 0x25, 11 },
00207 {  0xe,  6 }, { 0x14,  9 }, { 0x24, 11 }, {  0xd,  6 },
00208 {  0x6, 10 }, { 0x5e, 12 }, { 0x11,  7 }, {  0x7, 10 },
00209 { 0x13,  7 }, { 0x5d, 12 }, { 0x12,  7 }, { 0x5c, 12 },
00210 { 0x14,  8 }, { 0x5b, 12 }, { 0x15,  8 }, { 0x1a,  8 },
00211 { 0x19,  8 }, { 0x18,  8 }, { 0x17,  8 }, { 0x16,  8 },
00212 { 0x19,  9 }, { 0x15,  9 }, { 0x16,  9 }, { 0x18,  9 },
00213 { 0x17,  9 }, {  0x4, 11 }, {  0x5, 11 }, { 0x58, 12 },
00214 { 0x59, 12 }, { 0x5a, 12 }, {  0x3,  7 },
00215 };
00216 
00217 static const int8_t intra_run_aic[102] = {
00218  0,  0,  0,  0,  0,  0,  0,  0,
00219  0,  0,  0,  0,  0,  0,  0,  0,
00220  0,  0,  0,  0,  0,  0,  0,  0,
00221  0,  1,  1,  1,  1,  1,  1,  1,
00222  2,  2,  2,  2,  3,  3,  3,  3,
00223  4,  4,  4,  5,  5,  5,  6,  6,
00224  7,  7,  8,  8,  9,  9, 10, 11,
00225 12, 13,  0,  0,  0,  0,  0,  0,
00226  0,  0,  0,  0,  1,  1,  1,  1,
00227  2,  2,  2,  3,  3,  3,  4,  4,
00228  5,  5,  6,  6,  7,  7,  8,  9,
00229 10, 11, 12, 13, 14, 15, 16, 17,
00230 18, 19, 20, 21, 22, 23,
00231 };
00232 
00233 static const int8_t intra_level_aic[102] = {
00234  1,  2,  3,  4,  5,  6,  7,  8,
00235  9, 10, 11, 12, 13, 14, 15, 16,
00236 17, 18, 19, 20, 21, 22, 23, 24,
00237 25,  1,  2,  3,  4,  5,  6,  7,
00238  1,  2,  3,  4,  1,  2,  3,  4,
00239  1,  2,  3,  1,  2,  3,  1,  2,
00240  1,  2,  1,  2,  1,  2,  1,  1,
00241  1,  1,  1,  2,  3,  4,  5,  6,
00242  7,  8,  9, 10,  1,  2,  3,  4,
00243  1,  2,  3,  1,  2,  3,  1,  2,
00244  1,  2,  1,  2,  1,  2,  1,  1,
00245  1,  1,  1,  1,  1,  1,  1,  1,
00246  1,  1,  1,  1,  1,  1,
00247 };
00248 
00249 static RLTable rl_intra_aic = {
00250     102,
00251     58,
00252     intra_vlc_aic,
00253     intra_run_aic,
00254     intra_level_aic,
00255 };
00256 
00257 static const uint8_t wrong_run[102] = {
00258  1,  2,  3,  5,  4, 10,  9,  8,
00259 11, 15, 17, 16, 23, 22, 21, 20,
00260 19, 18, 25, 24, 27, 26, 11,  7,
00261  6,  1,  2, 13,  2,  2,  2,  2,
00262  6, 12,  3,  9,  1,  3,  4,  3,
00263  7,  4,  1,  1,  5,  5, 14,  6,
00264  1,  7,  1,  8,  1,  1,  1,  1,
00265 10,  1,  1,  5,  9, 17, 25, 24,
00266 29, 33, 32, 41,  2, 23, 28, 31,
00267  3, 22, 30,  4, 27, 40,  8, 26,
00268  6, 39,  7, 38, 16, 37, 15, 10,
00269 11, 12, 13, 14,  1, 21, 20, 18,
00270 19,  2,  1, 34, 35, 36
00271 };
00272 
00273 static const uint16_t h263_format[8][2] = {
00274     { 0, 0 },
00275     { 128, 96 },
00276     { 176, 144 },
00277     { 352, 288 },
00278     { 704, 576 },
00279     { 1408, 1152 },
00280 };
00281 
00282 const uint8_t ff_aic_dc_scale_table[32]={
00283 //  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
00284     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
00285 };
00286 
00287 static const uint8_t modified_quant_tab[2][32]={
00288 //  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
00289 {
00290     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
00291 },{
00292     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
00293 }
00294 };
00295 
00296 const uint8_t ff_h263_chroma_qscale_table[32]={
00297 //  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
00298     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
00299 };
00300 
00301 const uint16_t ff_mba_max[6]={
00302      47,  98, 395,1583,6335,9215
00303 };
00304 
00305 const uint8_t ff_mba_length[7]={
00306       6,   7,   9,  11,  13,  14,  14
00307 };
00308 
00309 const uint8_t ff_h263_loop_filter_strength[32]={
00310 //  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
00311     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
00312 };
00313 
00314 #endif /* AVCODEC_H263DATA_H */

Generated on Sat Feb 16 2013 09:23:12 for ffmpeg by  doxygen 1.7.1