Mercurial > libavcodec.hg
annotate vc1data.h @ 11352:6e0af2cfdcfe libavcodec
Do MC and IDCT in coding (hilbert) order
This increases the slice size to 64 pixels, due to having to decode an
entire chroma superblock row per slice.
This can be up to 6% slower depending on clip and CPU, but is necessary
for future optimizations that gain significantly more than was lost.
author | conrad |
---|---|
date | Wed, 03 Mar 2010 23:27:40 +0000 |
parents | 0dce4fe6e6f3 |
children | 7dd2a45249a9 |
rev | line source |
---|---|
3699
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
1 /* |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
2 * VC-1 and WMV3 decoder |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
3 * copyright (c) 2006 Konstantin Shishkov |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
4 * (c) 2005 anonymous, Alex Beregszaszi, Michael Niedermayer |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
5 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
6 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
7 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
8 * FFmpeg is free software; you can redistribute it and/or |
3699
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
9 * modify it under the terms of the GNU Lesser General Public |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
10 * License as published by the Free Software Foundation; either |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
11 * version 2.1 of the License, or (at your option) any later version. |
3699
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
12 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
13 * FFmpeg is distributed in the hope that it will be useful, |
3699
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
16 * Lesser General Public License for more details. |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
17 * |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
18 * You should have received a copy of the GNU Lesser General Public |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3699
diff
changeset
|
19 * License along with FFmpeg; if not, write to the Free Software |
3699
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
21 */ |
c537a97eec66
Add official LGPL license headers to the files that were missing them.
diego
parents:
3689
diff
changeset
|
22 |
3359 | 23 /** |
8718
e9d9d946f213
Use full internal pathname in doxygen @file directives.
diego
parents:
7760
diff
changeset
|
24 * @file libavcodec/vc1data.h |
3360
2c4ddf5b9217
VC-1 decoder with I-frames support and partial P-frames decoding
kostya
parents:
3359
diff
changeset
|
25 * VC-1 tables. |
3359 | 26 */ |
27 | |
7760 | 28 #ifndef AVCODEC_VC1DATA_H |
29 #define AVCODEC_VC1DATA_H | |
3359 | 30 |
5162 | 31 #include <stdint.h> |
6763 | 32 #include "libavutil/rational.h" |
9428 | 33 #include "get_bits.h" |
5162 | 34 |
4926 | 35 /** Table for conversion between TTBLK and TTMB */ |
4949 | 36 extern const int ff_vc1_ttblk_to_tt[3][8]; |
4926 | 37 |
4949 | 38 extern const int ff_vc1_ttfrm_to_tt[4]; |
4926 | 39 |
40 /** MV P mode - the 5th element is only used for mode 1 */ | |
4949 | 41 extern const uint8_t ff_vc1_mv_pmode_table[2][5]; |
42 extern const uint8_t ff_vc1_mv_pmode_table2[2][4]; | |
4926 | 43 |
4949 | 44 extern const int ff_vc1_fps_nr[5], ff_vc1_fps_dr[2]; |
45 extern const uint8_t ff_vc1_pquant_table[3][32]; | |
4926 | 46 |
47 /** @name VC-1 VLC tables and defines | |
48 * @todo TODO move this into the context | |
49 */ | |
50 //@{ | |
51 #define VC1_BFRACTION_VLC_BITS 7 | |
4949 | 52 extern VLC ff_vc1_bfraction_vlc; |
4926 | 53 #define VC1_IMODE_VLC_BITS 4 |
4949 | 54 extern VLC ff_vc1_imode_vlc; |
4926 | 55 #define VC1_NORM2_VLC_BITS 3 |
4949 | 56 extern VLC ff_vc1_norm2_vlc; |
4926 | 57 #define VC1_NORM6_VLC_BITS 9 |
4949 | 58 extern VLC ff_vc1_norm6_vlc; |
4926 | 59 /* Could be optimized, one table only needs 8 bits */ |
60 #define VC1_TTMB_VLC_BITS 9 //12 | |
4949 | 61 extern VLC ff_vc1_ttmb_vlc[3]; |
4926 | 62 #define VC1_MV_DIFF_VLC_BITS 9 //15 |
4949 | 63 extern VLC ff_vc1_mv_diff_vlc[4]; |
4926 | 64 #define VC1_CBPCY_P_VLC_BITS 9 //14 |
4949 | 65 extern VLC ff_vc1_cbpcy_p_vlc[4]; |
4926 | 66 #define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6 |
4949 | 67 extern VLC ff_vc1_4mv_block_pattern_vlc[4]; |
4926 | 68 #define VC1_TTBLK_VLC_BITS 5 |
4949 | 69 extern VLC ff_vc1_ttblk_vlc[3]; |
4926 | 70 #define VC1_SUBBLKPAT_VLC_BITS 6 |
4949 | 71 extern VLC ff_vc1_subblkpat_vlc[3]; |
4926 | 72 |
4949 | 73 extern VLC ff_vc1_ac_coeff_table[8]; |
4926 | 74 //@} |
75 | |
76 | |
3689 | 77 #if 0 //original bfraction from vc9data.h, not conforming to standard |
4949 | 78 /* Denominator used for ff_vc1_bfraction_lut */ |
3515
20938be7b67b
Some B-frames support (parsing and decoding only, no motion compesation is done)
kostya
parents:
3360
diff
changeset
|
79 #define B_FRACTION_DEN 840 |
20938be7b67b
Some B-frames support (parsing and decoding only, no motion compesation is done)
kostya
parents:
3360
diff
changeset
|
80 |
3359 | 81 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */ |
4949 | 82 extern const int16_t ff_vc1_bfraction_lut[23]; |
3689 | 83 #else |
4949 | 84 /* Denominator used for ff_vc1_bfraction_lut */ |
3689 | 85 #define B_FRACTION_DEN 256 |
86 | |
87 /* pre-computed scales for all bfractions and base=256 */ | |
4949 | 88 extern const int16_t ff_vc1_bfraction_lut[23]; |
3689 | 89 #endif |
90 | |
4949 | 91 extern const uint8_t ff_vc1_bfraction_bits[23]; |
92 extern const uint8_t ff_vc1_bfraction_codes[23]; | |
3359 | 93 |
94 //Same as H.264 | |
4949 | 95 extern const AVRational ff_vc1_pixel_aspect[16]; |
3359 | 96 |
97 /* BitPlane IMODE - such a small table... */ | |
4949 | 98 extern const uint8_t ff_vc1_imode_codes[7]; |
99 extern const uint8_t ff_vc1_imode_bits[7]; | |
3359 | 100 |
101 /* Normal-2 imode */ | |
4949 | 102 extern const uint8_t ff_vc1_norm2_codes[4]; |
103 extern const uint8_t ff_vc1_norm2_bits[4]; | |
104 extern const uint16_t ff_vc1_norm6_codes[64]; | |
105 extern const uint8_t ff_vc1_norm6_bits[64]; | |
3359 | 106 /* Normal-6 imode */ |
4949 | 107 extern const uint8_t ff_vc1_norm6_spec[64][5]; |
3359 | 108 |
109 /* 4MV Block pattern VLC tables */ | |
4949 | 110 extern const uint8_t ff_vc1_4mv_block_pattern_codes[4][16]; |
111 extern const uint8_t ff_vc1_4mv_block_pattern_bits[4][16]; | |
3359 | 112 |
4928 | 113 extern const uint8_t wmv3_dc_scale_table[32]; |
3359 | 114 |
115 /* P-Picture CBPCY VLC tables */ | |
4949 | 116 extern const uint16_t ff_vc1_cbpcy_p_codes[4][64]; |
117 extern const uint8_t ff_vc1_cbpcy_p_bits[4][64]; | |
3359 | 118 |
119 /* MacroBlock Transform Type: 7.1.3.11, p89 | |
120 * 8x8:B | |
121 * 8x4:B:btm 8x4:B:top 8x4:B:both, | |
122 * 4x8:B:right 4x8:B:left 4x8:B:both | |
123 * 4x4:B 8x8:MB | |
124 * 8x4:MB:btm 8x4:MB:top 8x4,MB,both | |
125 * 4x8,MB,right 4x8,MB,left | |
126 * 4x4,MB */ | |
4949 | 127 extern const uint16_t ff_vc1_ttmb_codes[3][16]; |
3359 | 128 |
4949 | 129 extern const uint8_t ff_vc1_ttmb_bits[3][16]; |
3359 | 130 |
131 /* TTBLK (Transform Type per Block) tables */ | |
4949 | 132 extern const uint8_t ff_vc1_ttblk_codes[3][8]; |
133 extern const uint8_t ff_vc1_ttblk_bits[3][8]; | |
3359 | 134 |
135 /* SUBBLKPAT tables, p93-94, reordered */ | |
4949 | 136 extern const uint8_t ff_vc1_subblkpat_codes[3][15]; |
137 extern const uint8_t ff_vc1_subblkpat_bits[3][15]; | |
3359 | 138 |
139 /* MV differential tables, p265 */ | |
4949 | 140 extern const uint16_t ff_vc1_mv_diff_codes[4][73]; |
141 extern const uint8_t ff_vc1_mv_diff_bits[4][73]; | |
3359 | 142 |
143 /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */ | |
144 | |
145 /* Scantables/ZZ scan are at 11.9 (p262) and 8.1.1.12 (p10) */ | |
4949 | 146 extern const int8_t ff_vc1_simple_progressive_4x4_zz [16]; |
147 extern const int8_t ff_vc1_adv_progressive_8x4_zz [32]; | |
148 extern const int8_t ff_vc1_adv_progressive_4x8_zz [32]; | |
149 extern const int8_t ff_vc1_adv_interlaced_8x8_zz [64]; | |
150 extern const int8_t ff_vc1_adv_interlaced_8x4_zz [32]; | |
151 extern const int8_t ff_vc1_adv_interlaced_4x8_zz [32]; | |
152 extern const int8_t ff_vc1_adv_interlaced_4x4_zz [16]; | |
3360
2c4ddf5b9217
VC-1 decoder with I-frames support and partial P-frames decoding
kostya
parents:
3359
diff
changeset
|
153 |
2c4ddf5b9217
VC-1 decoder with I-frames support and partial P-frames decoding
kostya
parents:
3359
diff
changeset
|
154 /* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */ |
4949 | 155 extern const int32_t ff_vc1_dqscale[63]; |
4928 | 156 |
7760 | 157 #endif /* AVCODEC_VC1DATA_H */ |