diff vc9data.h @ 2475:db05cb59c6fc libavcodec

- add another way to decode norm6 VLC; modify VLC_NORM6_METH0D define in vc9data.h to select the behaviour - modified decode_b_picture_primary_header so that decode_bi_picture_header is no more required Fixes: - modifications for some more using of MpegEncContext - fixed a bit frame type decoding - switch from pointers to index for AC tables - corrected P CBPCY decoding (p_cbpcy += 4) patch by anonymous
author michael
date Sun, 30 Jan 2005 21:54:20 +0000
parents 81a9f883a17a
children 38dbec9a148d
line wrap: on
line diff
--- a/vc9data.h	Sun Jan 30 16:34:57 2005 +0000
+++ b/vc9data.h	Sun Jan 30 21:54:20 2005 +0000
@@ -6,6 +6,9 @@
 #ifndef VC9DATA_H
 #define VC9DATA_H
 
+/* Set a method for reading VLC in NORM6 bitplane decoding */
+#define VLC_NORM6_METH0D    2
+
 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */
 const int16_t vc9_bfraction_lut[23] = {
   420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/,
@@ -71,6 +74,7 @@
   1, 3, 3, 2
 };
 
+#if VLC_NORM6_METH0D == 1
 static const uint16_t vc9_norm6_codes[64] = {
 0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E, 
 0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037, 
@@ -84,7 +88,6 @@
  4,  8,  8, 10,  8, 10, 10, 13,  8, 10, 10, 13, 10, 13, 13,  9, 
  8, 10, 10, 13, 10, 13, 13,  9, 10, 13, 13,  9, 13,  9,  9,  6,
 };
-#if 0
 /* Normal-6 imode */
 static const uint8_t vc9_norm6_spec[64][5] = {
 { 0,  1, 1        },
@@ -153,6 +156,54 @@
 {63,  3, 5,  1, 1 },
 };
 #endif
+
+#if TILE_VLC_METHOD == 2 //Hyper-stupid way to handle sparse tables
+static const uint8_t vc9_norm6_first[2][64] = {
+    {  1, 1}, {  2, 4}, {  3, 4}, {  0, 8},
+    {  4, 4}, {  5, 1}, {  2, 8}, {  2, 5},
+    {  5, 4}, {  3, 8}, {  4, 8}, {  2, 5},
+    {  5, 8}, {  2, 5}, {  2, 5}, {  3, 5},
+    {  6, 4}, {  6, 8}, {  7, 8}, {  2, 5},
+    {  8, 8}, {  2, 5}, {  2, 5}, {  3, 5},
+    {  9, 8}, {  2, 5}, {  2, 5}, {  3, 5},
+    {  2, 5}, {  3, 5}, {  3, 5}, {  3, 5},
+    {  7, 4}, { 10, 8}, { 11, 8}, {  2, 5},
+    { 12, 8}, {  2, 5}, {  2, 5}, {  3, 5},
+    { 13, 8}, {  2, 5}, {  2, 5}, {  3, 5},
+    {  2, 5}, {  3, 5}, {  3, 5}, {  3, 5},
+    { 14, 8}, {  2, 5}, {  2, 5}, {  3, 5},
+    {  2, 5}, {  3, 5}, {  3, 5}, {  3, 5},
+    {  2, 5}, {  3, 5}, {  3, 5}, {  3, 5},
+    {  3, 5}, {  3, 5}, {  3, 5}, {  3, 5}
+};
+
+/* 0=>simple VLC, 1=>VLCFLC, 2=>double VLC */
+static const int vc9_norm6_mode[64] = {
+    0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 2,
+    0, 0, 0, 1, 0, 1, 1, 2, 0, 1, 1, 2, 1, 2, 2, 2,
+    0, 0, 0, 1, 0, 1, 1, 2, 0, 1, 1, 2, 1, 2, 2, 2,
+    0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2
+};
+static const uint8_t vc9_norm6_second[22] = {
+    { 14, 8}, { 13, 8}, { 12, 8}, { 11, 8},
+    { 10, 8}, {  7, 4}, {  9, 8}, {  8, 8},
+    {  7, 8}, {  6, 8}, {  6, 4}, {  5, 8},
+    {  4, 8}, {  3, 8}, {  5, 4}, {  2, 8},
+    {  1, 8}, {  4, 4}, {  0, 8}, {  3, 4},
+    {  2, 4}, {  1, 1}
+};
+static const uint8_t vc9_norm6_flc_val[20] = {
+    7, 11, 13, 14, 19, 21, 22, 25,
+   26, 28, 35, 37, 38, 41, 42, 44,
+   49, 50, 52, 56
+};
+static const uint8_t vc9_norm6_second_val[22] = {
+   15, 23, 27, 29, 30, 31, 39, 43,
+   45, 46, 47, 51, 53, 54, 55, 57,
+   58, 59, 60, 61, 62, 63
+};
+#endif
+
 /* 4MV Block pattern VLC tables */
 static const uint8_t vc9_4mv_block_pattern_codes[4][16] = {
   { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27,  0, 28,  1,  2,  2},