1 /** 2 * 3 * File Name: armVCM4P2_Huff_Tables_VLC.c 4 * OpenMAX DL: v1.0.2 5 * Revision: 12290 6 * Date: Wednesday, April 9, 2008 7 * 8 * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. 9 * 10 * 11 * 12 * File: armVCM4P2_Huff_Tables_VLC.c 13 * Description: Contains all the Huffman tables used in MPEG4 codec 14 * 15 */ 16 17 #include "omxtypes.h" 18 #include "armOMX.h" 19 20 #include "armCOMM_Bitstream.h" 21 22 23 24 25 // Contains optimized and Packed VLC tables with Last=0 and Last=1 26 27 // optimized Packed VLC table Entry Format 28 // --------------------------------------- 29 // 30 // 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 31 // +------------------------------------------------+ 32 // | Len | Run | Level |L | 1 | 33 // +------------------------------------------------+ 34 // | Offset | 0 | 35 // +------------------------------------------------+ 36 // If the table entry is a leaf entry then bit 0 set: 37 // Len = Number of bits overread (0 to 7) 3 bits 38 // Run = RunLength of the Symbol (0 to 63) 6 bits 39 // Level = Level of the Symbol (0 to 31) 5 bits 40 // L = Last Value of the Symbol (0 or 1) 1 bit 41 // 42 // If the table entry is an internal node then bit 0 is clear: 43 // Offset = Number of (16-bit) half words from the table 44 // start to the next table node 45 // 46 // The table is accessed by successive lookup up on the 47 // next Step bits of the input bitstream until a leaf node 48 // is obtained. The Step sizes are supplied to the VLD macro. 49 50 // The VLC tables used for Intra and non inta coefficients in non Escape mode 51 // contains symbols with both Last=0 and Last=1. 52 // If a symbol is not found in the table it will be coded as 0xFFF 53 54 55 const OMX_U16 armVCM4P2_InterVlcL0L1[200] = { 56 0x0020, 0x0108, 0x0148, 0x0170, 0x0178, 0x0180, 0x0188, 0x1b09, 57 0x4009, 0x4009, 0x4009, 0x4009, 0x2109, 0x2109, 0x0209, 0x0011, 58 0x0028, 0x0060, 0x00b8, 0x00e0, 0x0030, 0x0048, 0x0050, 0x0058, 59 0x3fff, 0x3fff, 0x0038, 0x0040, 0x2115, 0x2115, 0x201d, 0x201d, 60 0x2059, 0x2059, 0x2051, 0x2051, 0x1c0d, 0x1b0d, 0x1a0d, 0x190d, 61 0x0911, 0x0811, 0x0711, 0x0611, 0x0511, 0x0319, 0x0219, 0x0121, 62 0x0068, 0x0090, 0x3fff, 0x3fff, 0x0070, 0x0078, 0x0080, 0x0088, 63 0x2061, 0x2061, 0x2129, 0x2129, 0x3709, 0x3709, 0x3809, 0x3809, 64 0x3d0d, 0x3d0d, 0x3e0d, 0x3e0d, 0x3f0d, 0x3f0d, 0x200d, 0x200d, 65 0x0098, 0x00a0, 0x00a8, 0x00b0, 0x0131, 0x0221, 0x0419, 0x0519, 66 0x0619, 0x0a11, 0x1909, 0x1a09, 0x210d, 0x220d, 0x230d, 0x240d, 67 0x250d, 0x260d, 0x270d, 0x280d, 0x00c0, 0x00c8, 0x00d0, 0x00d8, 68 0x0049, 0x0041, 0x380d, 0x380d, 0x370d, 0x370d, 0x360d, 0x360d, 69 0x350d, 0x350d, 0x340d, 0x340d, 0x330d, 0x330d, 0x320d, 0x320d, 70 0x00e8, 0x00f0, 0x00f8, 0x0100, 0x310d, 0x310d, 0x2015, 0x2015, 71 0x3609, 0x3609, 0x3509, 0x3509, 0x3409, 0x3409, 0x3309, 0x3309, 72 0x3209, 0x3209, 0x3109, 0x3109, 0x0110, 0x0130, 0x0138, 0x0140, 73 0x0118, 0x0120, 0x0128, 0x100d, 0x3009, 0x3009, 0x2f09, 0x2f09, 74 0x2411, 0x2411, 0x2311, 0x2311, 0x2039, 0x2039, 0x2031, 0x2031, 75 0x0f0d, 0x0e0d, 0x0d0d, 0x0c0d, 0x0b0d, 0x0a0d, 0x090d, 0x0e09, 76 0x0d09, 0x0211, 0x0119, 0x0029, 0x0150, 0x0158, 0x0160, 0x0168, 77 0x280d, 0x280d, 0x270d, 0x270d, 0x260d, 0x260d, 0x250d, 0x250d, 78 0x2c09, 0x2c09, 0xb759, 0xb759, 0x2a09, 0x2a09, 0x2021, 0x2021, 79 0x040d, 0x030d, 0x0b35, 0x010d, 0x0909, 0x0809, 0x0709, 0x0609, 80 0x0111, 0x0019, 0x2509, 0x2509, 0x2409, 0x2409, 0x2309, 0x2309 81 }; 82 83 84 const OMX_U16 armVCM4P2_IntraVlcL0L1[200] = { 85 0x0020, 0x0108, 0x0148, 0x0170, 0x0178, 0x0180, 0x0188, 0x0f09, 86 0x4009, 0x4009, 0x4009, 0x4009, 0x2011, 0x2011, 0x0109, 0x0019, 87 0x0028, 0x0060, 0x00b8, 0x00e0, 0x0030, 0x0048, 0x0050, 0x0058, 88 0x3fff, 0x3fff, 0x0038, 0x0040, 0x203d, 0x203d, 0x2035, 0x2035, 89 0x20b1, 0x20b1, 0x20a9, 0x20a9, 0x0215, 0x011d, 0x002d, 0x0d09, 90 0x0519, 0x0811, 0x0419, 0x0321, 0x0221, 0x0139, 0x00a1, 0x0099, 91 0x0068, 0x0090, 0x3fff, 0x3fff, 0x0070, 0x0078, 0x0080, 0x0088, 92 0x20b9, 0x20b9, 0x20c1, 0x20c1, 0x2141, 0x2141, 0x2911, 0x2911, 93 0x2315, 0x2315, 0x2415, 0x2415, 0x2f0d, 0x2f0d, 0x300d, 0x300d, 94 0x0098, 0x00a0, 0x00a8, 0x00b0, 0x00c9, 0x00d1, 0x00d9, 0x0149, 95 0x0619, 0x0151, 0x0229, 0x0719, 0x0e09, 0x0045, 0x0515, 0x0615, 96 0x110d, 0x120d, 0x130d, 0x140d, 0x00c0, 0x00c8, 0x00d0, 0x00d8, 97 0x0091, 0x0089, 0x2e0d, 0x2e0d, 0x2d0d, 0x2d0d, 0x2c0d, 0x2c0d, 98 0x2b0d, 0x2b0d, 0x2a0d, 0x2a0d, 0x2115, 0x2115, 0x2025, 0x2025, 99 0x00e8, 0x00f0, 0x00f8, 0x0100, 0x2c09, 0x2c09, 0x2b09, 0x2b09, 100 0x2711, 0x2711, 0x2611, 0x2611, 0x2511, 0x2511, 0x2319, 0x2319, 101 0x2219, 0x2219, 0x2131, 0x2131, 0x0110, 0x0130, 0x0138, 0x0140, 102 0x0118, 0x0120, 0x0128, 0x080d, 0x2129, 0x2129, 0x2081, 0x2081, 103 0x2411, 0x2411, 0x2079, 0x2079, 0x2071, 0x2071, 0x2069, 0x2069, 104 0x1bb5, 0x060d, 0x001d, 0xd3f9, 0x0909, 0x0809, 0x090d, 0x0311, 105 0x0121, 0x0061, 0x0059, 0x0051, 0x0150, 0x0158, 0x0160, 0x0168, 106 0x240d, 0x240d, 0x230d, 0x230d, 0x2609, 0x2609, 0x250d, 0x250d, 107 0x2709, 0x2709, 0x2211, 0x2211, 0x2119, 0x2119, 0x2049, 0x2049, 108 0x0015, 0x0509, 0x020d, 0x010d, 0x0409, 0x0309, 0x0041, 0x0039, 109 0x0111, 0x0031, 0x2209, 0x2209, 0x2029, 0x2029, 0x2021, 0x2021 110 }; 111 112 const OMX_U16 armVCM4P2_aIntraDCLumaChromaIndex[64] = { 113 0x0020, 0x000b, 0x2009, 0x2009, 0x2007, 0x2007, 0x2001, 0x2001, 114 0x4005, 0x4005, 0x4005, 0x4005, 0x4003, 0x4003, 0x4003, 0x4003, 115 0x0028, 0x000f, 0x200d, 0x200d, 0x0030, 0x0013, 0x2011, 0x2011, 116 0x0038, 0x0017, 0x2015, 0x2015, 0x3fff, 0x3fff, 0x2019, 0x2019, 117 118 0x0020, 0x0009, 0x2007, 0x2007, 0x4005, 0x4005, 0x4005, 0x4005, 119 0x4003, 0x4003, 0x4003, 0x4003, 0x4001, 0x4001, 0x4001, 0x4001, 120 0x0028, 0x000d, 0x200b, 0x200b, 0x0030, 0x0011, 0x200f, 0x200f, 121 0x0038, 0x0015, 0x2013, 0x2013, 0x1fff, 0x0019, 0x2017, 0x2017 122 }; 123 124 125 const OMX_U16 armVCM4P2_aVlcMVD[124] = { 126 0x0010, 0x00f0, 0x0043, 0x003f, 0x4041, 0x4041, 0x4041, 0x4041, 127 0x0018, 0x00d8, 0x0047, 0x003b, 0x0020, 0x0080, 0x00a8, 0x00d0, 128 0x0028, 0x0048, 0x0070, 0x0078, 0x1fff, 0x0030, 0x0038, 0x0040, 129 0x0081, 0x0001, 0x007f, 0x0003, 0x207d, 0x207d, 0x2005, 0x2005, 130 0x207b, 0x207b, 0x2007, 0x2007, 0x0050, 0x0058, 0x0060, 0x0068, 131 0x2079, 0x2079, 0x2009, 0x2009, 0x2077, 0x2077, 0x200b, 0x200b, 132 0x2075, 0x2075, 0x200d, 0x200d, 0x2073, 0x2073, 0x200f, 0x200f, 133 0x0071, 0x0011, 0x006f, 0x0013, 0x006d, 0x0015, 0x006b, 0x0017, 134 0x0088, 0x0090, 0x0098, 0x00a0, 0x0069, 0x0019, 0x0067, 0x001b, 135 0x0065, 0x001d, 0x0063, 0x001f, 0x0061, 0x0021, 0x005f, 0x0023, 136 0x005d, 0x0025, 0x005b, 0x0027, 0x00b0, 0x00b8, 0x00c0, 0x00c8, 137 0x0059, 0x0029, 0x0057, 0x002b, 0x2055, 0x2055, 0x202d, 0x202d, 138 0x2053, 0x2053, 0x202f, 0x202f, 0x2051, 0x2051, 0x2031, 0x2031, 139 0x204f, 0x204f, 0x2033, 0x2033, 0x00e0, 0x00e8, 0x0049, 0x0039, 140 0x204d, 0x204d, 0x2035, 0x2035, 0x204b, 0x204b, 0x2037, 0x2037, 141 0x2045, 0x2045, 0x203d, 0x203d 142 }; 143 144 /* LMAX table for non Inter (Last == 0 and Last=1) 145 Level - 1 Indexed 146 padded armVCM4P2_InterL0L1LMAX[27-31] with zeros to acess entries for Last=1 effectively 147 148 */ 149 const OMX_U8 armVCM4P2_InterL0L1LMAX[73] = 150 { 151 12, 6, 4, 3, 3, 3, 3, 2, 152 2, 2, 2, 1, 1, 1, 1, 1, 153 1, 1, 1, 1, 1, 1, 1, 1, 154 1, 1, 1, 0, 0, 0, 0, 0, 155 3, 2, 1, 1, 1, 1, 1, 1, 156 1, 1, 1, 1, 1, 1, 1, 1, 157 1, 1, 1, 1, 1, 1, 1, 1, 158 1, 1, 1, 1, 1, 1, 1, 1, 159 1, 1, 1, 1, 1, 1, 1, 1, 160 1 161 }; 162 163 /* RMAX table for non Inter (Last == 0 and Last=1) 164 Level - 1 Indexed 165 padded armVCM4P2_InterL0L1RMAX[12-31] with zeros to access entries for Last=1 table effectively */ 166 167 168 const OMX_U8 armVCM4P2_InterL0L1RMAX[35] = 169 { 170 26, 10, 6, 2, 1, 1, 171 0, 0, 0, 0, 0, 0, 172 0, 0, 0, 0, 0, 0, 173 0, 0, 0, 0, 0, 0, 174 0, 0, 0, 0, 175 0, 0, 0, 0, 40, 1, 0 176 }; 177 178 /* LMAX table for non Intra (Last == 0 and Last=1) 179 Level - 1 Indexed 180 padded armVCM4P2_IntraL0L1LMAX[15-31] with zeros to acess entries for Last=1 effectively 181 182 */ 183 const OMX_U8 armVCM4P2_IntraL0L1LMAX[53] = 184 { 185 27, 10, 5, 4, 3, 3, 3, 186 3, 2, 2, 1, 1, 1, 1, 1, 0, 187 0, 0, 0, 0, 0, 0, 0, 0, 188 0, 0, 0, 0, 0, 0, 0, 0, 189 190 8, 3, 2, 2, 2, 2, 2, 1, 191 1, 1, 1, 1, 1, 1, 1, 1, 192 1, 1, 1, 1, 1 193 }; 194 195 196 /* RMAX table for non Inter (Last == 0 and Last=1) 197 Level - 1 Indexed 198 padded armVCM4P2_IntraL0L1RMAX[27-31] with zeros to access entries for Last=1 table effectively */ 199 200 201 const OMX_U8 armVCM4P2_IntraL0L1RMAX[40] = 202 { 203 14, 9, 7, 3, 2, 1, 1, 204 1, 1, 1, 0, 0, 0, 0, 205 0, 0, 0, 0, 0, 0, 0, 206 0, 0, 0, 0, 0, 0, 0, 207 0, 0, 0, 0, 208 209 20, 6, 1, 0, 0, 0, 0, 0 210 211 }; 212