annotate h264data.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 7dd2a45249a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
1 /*
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
2 * H26L/H264/AVC/JVT/14496-10/... encoder/decoder
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3316
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3316
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3316
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
9 * 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: 3316
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3316
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
15 * Lesser General Public License for more details.
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
16 *
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
17 * 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: 3316
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
3036
0b546eab515d Update licensing information: The FSF changed postal address.
diego
parents: 2967
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
20 */
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
21
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
22 /**
11644
7dd2a45249a9 Remove explicit filename from Doxygen @file commands.
diego
parents: 11145
diff changeset
23 * @file
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2919
diff changeset
24 * @brief
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
25 * H264 / AVC / MPEG4 part10 codec data table
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
26 * @author Michael Niedermayer <michaelni@gmx.at>
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
27 */
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
28
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7407
diff changeset
29 #ifndef AVCODEC_H264DATA_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7407
diff changeset
30 #define AVCODEC_H264DATA_H
5163
9ecbfc0c82bf add multiple inclusion guards to headers
mru
parents: 5162
diff changeset
31
5162
4394344397d8 include all prerequisites in header files
mru
parents: 4277
diff changeset
32 #include <stdint.h>
6763
f7cbb7733146 Use full path for #includes from another directory.
diego
parents: 6481
diff changeset
33 #include "libavutil/rational.h"
5162
4394344397d8 include all prerequisites in header files
mru
parents: 4277
diff changeset
34 #include "mpegvideo.h"
8207
2f35f9781c31 Move #defines that are mostly used in h264.c out of h264data.h and into h264.h.
diego
parents: 8189
diff changeset
35 #include "h264.h"
5162
4394344397d8 include all prerequisites in header files
mru
parents: 4277
diff changeset
36
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
37
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
38 static const uint8_t golomb_to_pict_type[5]=
6481
493dc59d469a add FF_ prefix to all (frame)_TYPE usage
aurel
parents: 6429
diff changeset
39 {FF_P_TYPE, FF_B_TYPE, FF_I_TYPE, FF_SP_TYPE, FF_SI_TYPE};
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
40
10868
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
41 static const uint8_t golomb_to_intra4x4_cbp[48]={
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
42 47, 31, 15, 0, 23, 27, 29, 30, 7, 11, 13, 14, 39, 43, 45, 46,
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
43 16, 3, 5, 10, 12, 19, 21, 26, 28, 35, 37, 42, 44, 1, 2, 4,
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
44 8, 17, 18, 20, 24, 6, 9, 22, 25, 32, 33, 34, 36, 40, 38, 41
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
45 };
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
46
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
47 static const uint8_t golomb_to_inter_cbp[48]={
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
48 0, 16, 1, 2, 4, 8, 32, 3, 5, 10, 12, 15, 47, 7, 11, 13,
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
49 14, 6, 9, 31, 35, 37, 42, 44, 33, 34, 36, 40, 39, 43, 45, 46,
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
50 17, 18, 20, 24, 19, 21, 26, 28, 23, 27, 29, 30, 22, 25, 38, 41
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
51 };
13a84faba50d Move golomb_to_int*cbp tables back to h264_data.h as svq3.c used them.
michael
parents: 10866
diff changeset
52
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
53 static const uint8_t zigzag_scan[16]={
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2919
diff changeset
54 0+0*4, 1+0*4, 0+1*4, 0+2*4,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2919
diff changeset
55 1+1*4, 2+0*4, 3+0*4, 2+1*4,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2919
diff changeset
56 1+2*4, 0+3*4, 1+3*4, 2+2*4,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2919
diff changeset
57 3+1*4, 3+2*4, 2+3*4, 3+3*4,
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
58 };
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
59
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
60 static const uint8_t field_scan[16]={
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2919
diff changeset
61 0+0*4, 0+1*4, 1+0*4, 0+2*4,
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
62 0+3*4, 1+1*4, 1+2*4, 1+3*4,
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2919
diff changeset
63 2+0*4, 2+1*4, 2+2*4, 2+3*4,
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
64 3+0*4, 3+1*4, 3+2*4, 3+3*4,
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
65 };
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
66
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
67 static const uint8_t luma_dc_zigzag_scan[16]={
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
68 0*16 + 0*64, 1*16 + 0*64, 2*16 + 0*64, 0*16 + 2*64,
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
69 3*16 + 0*64, 0*16 + 1*64, 1*16 + 1*64, 2*16 + 1*64,
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
70 1*16 + 2*64, 2*16 + 2*64, 3*16 + 2*64, 0*16 + 3*64,
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
71 3*16 + 1*64, 1*16 + 3*64, 2*16 + 3*64, 3*16 + 3*64,
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
72 };
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
73
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
74 static const uint8_t luma_dc_field_scan[16]={
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2919
diff changeset
75 0*16 + 0*64, 2*16 + 0*64, 1*16 + 0*64, 0*16 + 2*64,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2919
diff changeset
76 2*16 + 2*64, 3*16 + 0*64, 1*16 + 2*64, 3*16 + 2*64,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2919
diff changeset
77 0*16 + 1*64, 2*16 + 1*64, 0*16 + 3*64, 2*16 + 3*64,
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
78 1*16 + 1*64, 3*16 + 1*64, 1*16 + 3*64, 3*16 + 3*64,
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
79 };
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
80
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
81 static const uint8_t chroma_dc_scan[4]={
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2919
diff changeset
82 (0+0*2)*16, (1+0*2)*16,
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
83 (0+1*2)*16, (1+1*2)*16, //FIXME
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
84 };
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
85
2755
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
86 // zigzag_scan8x8_cavlc[i] = zigzag_scan8x8[(i/4) + 16*(i%4)]
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
87 static const uint8_t zigzag_scan8x8_cavlc[64]={
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
88 0+0*8, 1+1*8, 1+2*8, 2+2*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
89 4+1*8, 0+5*8, 3+3*8, 7+0*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
90 3+4*8, 1+7*8, 5+3*8, 6+3*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
91 2+7*8, 6+4*8, 5+6*8, 7+5*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
92 1+0*8, 2+0*8, 0+3*8, 3+1*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
93 3+2*8, 0+6*8, 4+2*8, 6+1*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
94 2+5*8, 2+6*8, 6+2*8, 5+4*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
95 3+7*8, 7+3*8, 4+7*8, 7+6*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
96 0+1*8, 3+0*8, 0+4*8, 4+0*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
97 2+3*8, 1+5*8, 5+1*8, 5+2*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
98 1+6*8, 3+5*8, 7+1*8, 4+5*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
99 4+6*8, 7+4*8, 5+7*8, 6+7*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
100 0+2*8, 2+1*8, 1+3*8, 5+0*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
101 1+4*8, 2+4*8, 6+0*8, 4+3*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
102 0+7*8, 4+4*8, 7+2*8, 3+6*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
103 5+5*8, 6+5*8, 6+6*8, 7+7*8,
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
104 };
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
105
3316
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
106 static const uint8_t field_scan8x8[64]={
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
107 0+0*8, 0+1*8, 0+2*8, 1+0*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
108 1+1*8, 0+3*8, 0+4*8, 1+2*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
109 2+0*8, 1+3*8, 0+5*8, 0+6*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
110 0+7*8, 1+4*8, 2+1*8, 3+0*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
111 2+2*8, 1+5*8, 1+6*8, 1+7*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
112 2+3*8, 3+1*8, 4+0*8, 3+2*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
113 2+4*8, 2+5*8, 2+6*8, 2+7*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
114 3+3*8, 4+1*8, 5+0*8, 4+2*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
115 3+4*8, 3+5*8, 3+6*8, 3+7*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
116 4+3*8, 5+1*8, 6+0*8, 5+2*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
117 4+4*8, 4+5*8, 4+6*8, 4+7*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
118 5+3*8, 6+1*8, 6+2*8, 5+4*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
119 5+5*8, 5+6*8, 5+7*8, 6+3*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
120 7+0*8, 7+1*8, 6+4*8, 6+5*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
121 6+6*8, 6+7*8, 7+2*8, 7+3*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
122 7+4*8, 7+5*8, 7+6*8, 7+7*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
123 };
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
124
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
125 static const uint8_t field_scan8x8_cavlc[64]={
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
126 0+0*8, 1+1*8, 2+0*8, 0+7*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
127 2+2*8, 2+3*8, 2+4*8, 3+3*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
128 3+4*8, 4+3*8, 4+4*8, 5+3*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
129 5+5*8, 7+0*8, 6+6*8, 7+4*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
130 0+1*8, 0+3*8, 1+3*8, 1+4*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
131 1+5*8, 3+1*8, 2+5*8, 4+1*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
132 3+5*8, 5+1*8, 4+5*8, 6+1*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
133 5+6*8, 7+1*8, 6+7*8, 7+5*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
134 0+2*8, 0+4*8, 0+5*8, 2+1*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
135 1+6*8, 4+0*8, 2+6*8, 5+0*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
136 3+6*8, 6+0*8, 4+6*8, 6+2*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
137 5+7*8, 6+4*8, 7+2*8, 7+6*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
138 1+0*8, 1+2*8, 0+6*8, 3+0*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
139 1+7*8, 3+2*8, 2+7*8, 4+2*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
140 3+7*8, 5+2*8, 4+7*8, 5+4*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
141 6+3*8, 6+5*8, 7+3*8, 7+7*8,
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
142 };
7278f730af27 h264: MBAFF interlaced decoding
lorenm
parents: 3036
diff changeset
143
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
144 typedef struct IMbInfo{
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
145 uint16_t type;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
146 uint8_t pred_mode;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
147 uint8_t cbp;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
148 } IMbInfo;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
149
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
150 static const IMbInfo i_mb_type_info[26]={
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
151 {MB_TYPE_INTRA4x4 , -1, -1},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
152 {MB_TYPE_INTRA16x16, 2, 0},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
153 {MB_TYPE_INTRA16x16, 1, 0},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
154 {MB_TYPE_INTRA16x16, 0, 0},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
155 {MB_TYPE_INTRA16x16, 3, 0},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
156 {MB_TYPE_INTRA16x16, 2, 16},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
157 {MB_TYPE_INTRA16x16, 1, 16},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
158 {MB_TYPE_INTRA16x16, 0, 16},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
159 {MB_TYPE_INTRA16x16, 3, 16},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
160 {MB_TYPE_INTRA16x16, 2, 32},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
161 {MB_TYPE_INTRA16x16, 1, 32},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
162 {MB_TYPE_INTRA16x16, 0, 32},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
163 {MB_TYPE_INTRA16x16, 3, 32},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
164 {MB_TYPE_INTRA16x16, 2, 15+0},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
165 {MB_TYPE_INTRA16x16, 1, 15+0},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
166 {MB_TYPE_INTRA16x16, 0, 15+0},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
167 {MB_TYPE_INTRA16x16, 3, 15+0},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
168 {MB_TYPE_INTRA16x16, 2, 15+16},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
169 {MB_TYPE_INTRA16x16, 1, 15+16},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
170 {MB_TYPE_INTRA16x16, 0, 15+16},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
171 {MB_TYPE_INTRA16x16, 3, 15+16},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
172 {MB_TYPE_INTRA16x16, 2, 15+32},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
173 {MB_TYPE_INTRA16x16, 1, 15+32},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
174 {MB_TYPE_INTRA16x16, 0, 15+32},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
175 {MB_TYPE_INTRA16x16, 3, 15+32},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
176 {MB_TYPE_INTRA_PCM , -1, -1},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
177 };
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
178
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
179 typedef struct PMbInfo{
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
180 uint16_t type;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
181 uint8_t partition_count;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
182 } PMbInfo;
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
183
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
184 static const PMbInfo p_mb_type_info[5]={
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
185 {MB_TYPE_16x16|MB_TYPE_P0L0 , 1},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
186 {MB_TYPE_16x8 |MB_TYPE_P0L0|MB_TYPE_P1L0, 2},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
187 {MB_TYPE_8x16 |MB_TYPE_P0L0|MB_TYPE_P1L0, 2},
2535
e0bf024629cf vismv didn't display 8x8 mvs in H.264
lorenm
parents: 1908
diff changeset
188 {MB_TYPE_8x8 |MB_TYPE_P0L0|MB_TYPE_P1L0, 4},
e0bf024629cf vismv didn't display 8x8 mvs in H.264
lorenm
parents: 1908
diff changeset
189 {MB_TYPE_8x8 |MB_TYPE_P0L0|MB_TYPE_P1L0|MB_TYPE_REF0, 4},
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
190 };
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
191
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
192 static const PMbInfo p_sub_mb_type_info[4]={
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
193 {MB_TYPE_16x16|MB_TYPE_P0L0 , 1},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
194 {MB_TYPE_16x8 |MB_TYPE_P0L0 , 2},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
195 {MB_TYPE_8x16 |MB_TYPE_P0L0 , 2},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
196 {MB_TYPE_8x8 |MB_TYPE_P0L0 , 4},
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
197 };
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
198
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
199 static const PMbInfo b_mb_type_info[23]={
11145
8805efb4c3fd Move setting MB_TYPE_L0L1 for direct MBs up, this is simpler.
michael
parents: 10869
diff changeset
200 {MB_TYPE_DIRECT2|MB_TYPE_L0L1 , 1, },
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
201 {MB_TYPE_16x16|MB_TYPE_P0L0 , 1, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
202 {MB_TYPE_16x16 |MB_TYPE_P0L1 , 1, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
203 {MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1 , 1, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
204 {MB_TYPE_16x8 |MB_TYPE_P0L0 |MB_TYPE_P1L0 , 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
205 {MB_TYPE_8x16 |MB_TYPE_P0L0 |MB_TYPE_P1L0 , 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
206 {MB_TYPE_16x8 |MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
207 {MB_TYPE_8x16 |MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
208 {MB_TYPE_16x8 |MB_TYPE_P0L0 |MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
209 {MB_TYPE_8x16 |MB_TYPE_P0L0 |MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
210 {MB_TYPE_16x8 |MB_TYPE_P0L1|MB_TYPE_P1L0 , 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
211 {MB_TYPE_8x16 |MB_TYPE_P0L1|MB_TYPE_P1L0 , 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
212 {MB_TYPE_16x8 |MB_TYPE_P0L0 |MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
213 {MB_TYPE_8x16 |MB_TYPE_P0L0 |MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
214 {MB_TYPE_16x8 |MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
215 {MB_TYPE_8x16 |MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
216 {MB_TYPE_16x8 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0 , 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
217 {MB_TYPE_8x16 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0 , 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
218 {MB_TYPE_16x8 |MB_TYPE_P0L0|MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
219 {MB_TYPE_8x16 |MB_TYPE_P0L0|MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
220 {MB_TYPE_16x8 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
221 {MB_TYPE_8x16 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
2535
e0bf024629cf vismv didn't display 8x8 mvs in H.264
lorenm
parents: 1908
diff changeset
222 {MB_TYPE_8x8 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 4, },
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
223 };
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
224
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
225 static const PMbInfo b_sub_mb_type_info[13]={
1177
fea03d2c4946 simplified adressing of most mb based arrays (mb_x + mb_y*s->mb_stride) now instead of mb_x + mb_y*mb_width and 1+mb_x + (1+mb_y)*(mb_width+2) and ... mixture
michaelni
parents: 1168
diff changeset
226 {MB_TYPE_DIRECT2 , 1, },
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
227 {MB_TYPE_16x16|MB_TYPE_P0L0 , 1, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
228 {MB_TYPE_16x16 |MB_TYPE_P0L1 , 1, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
229 {MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1 , 1, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
230 {MB_TYPE_16x8 |MB_TYPE_P0L0 |MB_TYPE_P1L0 , 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
231 {MB_TYPE_8x16 |MB_TYPE_P0L0 |MB_TYPE_P1L0 , 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
232 {MB_TYPE_16x8 |MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
233 {MB_TYPE_8x16 |MB_TYPE_P0L1 |MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
234 {MB_TYPE_16x8 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
235 {MB_TYPE_8x16 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 2, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
236 {MB_TYPE_8x8 |MB_TYPE_P0L0 |MB_TYPE_P1L0 , 4, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
237 {MB_TYPE_8x8 |MB_TYPE_P0L1 |MB_TYPE_P1L1, 4, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
238 {MB_TYPE_8x8 |MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_P1L0|MB_TYPE_P1L1, 4, },
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
239 };
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
240
5578
05d19547df39 int->uint8_t
michael
parents: 5577
diff changeset
241 static const uint8_t dequant4_coeff_init[6][3]={
2919
71ca5ed04789 decode custom quant matrices.
lorenm
parents: 2761
diff changeset
242 {10,13,16},
71ca5ed04789 decode custom quant matrices.
lorenm
parents: 2761
diff changeset
243 {11,14,18},
71ca5ed04789 decode custom quant matrices.
lorenm
parents: 2761
diff changeset
244 {13,16,20},
71ca5ed04789 decode custom quant matrices.
lorenm
parents: 2761
diff changeset
245 {14,18,23},
71ca5ed04789 decode custom quant matrices.
lorenm
parents: 2761
diff changeset
246 {16,20,25},
71ca5ed04789 decode custom quant matrices.
lorenm
parents: 2761
diff changeset
247 {18,23,29},
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
248 };
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents:
diff changeset
249
5578
05d19547df39 int->uint8_t
michael
parents: 5577
diff changeset
250 static const uint8_t dequant8_coeff_init_scan[16] = {
2755
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
251 0,3,4,3, 3,1,5,1, 4,5,2,5, 3,1,5,1
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
252 };
5578
05d19547df39 int->uint8_t
michael
parents: 5577
diff changeset
253 static const uint8_t dequant8_coeff_init[6][6]={
2755
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
254 {20,18,32,19,25,24},
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
255 {22,19,35,21,28,26},
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
256 {26,23,42,24,33,31},
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
257 {28,25,45,26,35,33},
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
258 {32,28,51,30,40,38},
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
259 {36,32,58,34,46,43},
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
260 };
975074f04b95 decode H.264 with 8x8 transform.
lorenm
parents: 2535
diff changeset
261
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7407
diff changeset
262 #endif /* AVCODEC_H264DATA_H */