• 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 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 */

Generated on Fri Sep 16 2011 17:17:37 for FFmpeg by  doxygen 1.7.1