Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/*
2
 * H26L/H264/AVC/JVT/14496-10/... encoder/decoder
3
 * Copyright (c) 2003 Michael Niedermayer 
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * FFmpeg is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with FFmpeg; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21
 
22
/**
23
 * @file
24
 * @brief
25
 *     H264 / AVC / MPEG4 part10 codec data table
26
 * @author Michael Niedermayer 
27
 */
28
 
29
#ifndef AVCODEC_H264DATA_H
30
#define AVCODEC_H264DATA_H
31
 
32
#include 
33
 
34
#include "libavutil/rational.h"
35
#include "mpegvideo.h"
36
#include "h264.h"
37
 
38
static const uint8_t golomb_to_pict_type[5] = {
39
    AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, AV_PICTURE_TYPE_I,
40
    AV_PICTURE_TYPE_SP, AV_PICTURE_TYPE_SI
41
};
42
 
43
static const uint8_t golomb_to_intra4x4_cbp[48] = {
44
    47, 31, 15, 0,  23, 27, 29, 30, 7,  11, 13, 14, 39, 43, 45, 46,
45
    16, 3,  5,  10, 12, 19, 21, 26, 28, 35, 37, 42, 44, 1,  2,  4,
46
    8,  17, 18, 20, 24, 6,  9,  22, 25, 32, 33, 34, 36, 40, 38, 41
47
};
48
 
49
static const uint8_t golomb_to_inter_cbp[48] = {
50
    0,  16, 1,  2,  4,  8,  32, 3,  5,  10, 12, 15, 47, 7,  11, 13,
51
    14, 6,  9,  31, 35, 37, 42, 44, 33, 34, 36, 40, 39, 43, 45, 46,
52
    17, 18, 20, 24, 19, 21, 26, 28, 23, 27, 29, 30, 22, 25, 38, 41
53
};
54
 
55
static const uint8_t zigzag_scan[16+1] = {
56
 
57
    1 + 1 * 4, 2 + 0 * 4, 3 + 0 * 4, 2 + 1 * 4,
58
    1 + 2 * 4, 0 + 3 * 4, 1 + 3 * 4, 2 + 2 * 4,
59
    3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4,
60
};
61
 
62
static const uint8_t chroma_dc_scan[4] = {
63
    (0 + 0 * 2) * 16, (1 + 0 * 2) * 16,
64
    (0 + 1 * 2) * 16, (1 + 1 * 2) * 16,
65
};
66
 
67
static const uint8_t chroma422_dc_scan[8] = {
68
    (0 + 0 * 2) * 16, (0 + 1 * 2) * 16,
69
    (1 + 0 * 2) * 16, (0 + 2 * 2) * 16,
70
    (0 + 3 * 2) * 16, (1 + 1 * 2) * 16,
71
    (1 + 2 * 2) * 16, (1 + 3 * 2) * 16,
72
};
73
 
74
typedef struct IMbInfo {
75
    uint16_t type;
76
    uint8_t pred_mode;
77
    uint8_t cbp;
78
} IMbInfo;
79
 
80
static const IMbInfo i_mb_type_info[26] = {
81
    { MB_TYPE_INTRA4x4,  -1,  -1 },
82
    { MB_TYPE_INTRA16x16, 2,   0 },
83
    { MB_TYPE_INTRA16x16, 1,   0 },
84
    { MB_TYPE_INTRA16x16, 0,   0 },
85
    { MB_TYPE_INTRA16x16, 3,   0 },
86
    { MB_TYPE_INTRA16x16, 2,  16 },
87
    { MB_TYPE_INTRA16x16, 1,  16 },
88
    { MB_TYPE_INTRA16x16, 0,  16 },
89
    { MB_TYPE_INTRA16x16, 3,  16 },
90
    { MB_TYPE_INTRA16x16, 2,  32 },
91
    { MB_TYPE_INTRA16x16, 1,  32 },
92
    { MB_TYPE_INTRA16x16, 0,  32 },
93
    { MB_TYPE_INTRA16x16, 3,  32 },
94
    { MB_TYPE_INTRA16x16, 2,  15 +  0 },
95
    { MB_TYPE_INTRA16x16, 1,  15 +  0 },
96
    { MB_TYPE_INTRA16x16, 0,  15 +  0 },
97
    { MB_TYPE_INTRA16x16, 3,  15 +  0 },
98
    { MB_TYPE_INTRA16x16, 2,  15 + 16 },
99
    { MB_TYPE_INTRA16x16, 1,  15 + 16 },
100
    { MB_TYPE_INTRA16x16, 0,  15 + 16 },
101
    { MB_TYPE_INTRA16x16, 3,  15 + 16 },
102
    { MB_TYPE_INTRA16x16, 2,  15 + 32 },
103
    { MB_TYPE_INTRA16x16, 1,  15 + 32 },
104
    { MB_TYPE_INTRA16x16, 0,  15 + 32 },
105
    { MB_TYPE_INTRA16x16, 3,  15 + 32 },
106
    { MB_TYPE_INTRA_PCM,  -1, -1 },
107
};
108
 
109
typedef struct PMbInfo {
110
    uint16_t type;
111
    uint8_t partition_count;
112
} PMbInfo;
113
 
114
static const PMbInfo p_mb_type_info[5] = {
115
    { MB_TYPE_16x16 | MB_TYPE_P0L0,                               1 },
116
    { MB_TYPE_16x8  | MB_TYPE_P0L0 | MB_TYPE_P1L0,                2 },
117
    { MB_TYPE_8x16  | MB_TYPE_P0L0 | MB_TYPE_P1L0,                2 },
118
    { MB_TYPE_8x8   | MB_TYPE_P0L0 | MB_TYPE_P1L0,                4 },
119
    { MB_TYPE_8x8   | MB_TYPE_P0L0 | MB_TYPE_P1L0 | MB_TYPE_REF0, 4 },
120
};
121
 
122
static const PMbInfo p_sub_mb_type_info[4] = {
123
    { MB_TYPE_16x16 | MB_TYPE_P0L0, 1 },
124
    { MB_TYPE_16x8  | MB_TYPE_P0L0, 2 },
125
    { MB_TYPE_8x16  | MB_TYPE_P0L0, 2 },
126
    { MB_TYPE_8x8   | MB_TYPE_P0L0, 4 },
127
};
128
 
129
static const PMbInfo b_mb_type_info[23] = {
130
    { MB_TYPE_DIRECT2 | MB_TYPE_L0L1,                                              1, },
131
    { MB_TYPE_16x16   | MB_TYPE_P0L0,                                              1, },
132
    { MB_TYPE_16x16   | MB_TYPE_P0L1,                                              1, },
133
    { MB_TYPE_16x16   | MB_TYPE_P0L0 | MB_TYPE_P0L1,                               1, },
134
    { MB_TYPE_16x8    | MB_TYPE_P0L0 | MB_TYPE_P1L0,                               2, },
135
    { MB_TYPE_8x16    | MB_TYPE_P0L0 | MB_TYPE_P1L0,                               2, },
136
    { MB_TYPE_16x8    | MB_TYPE_P0L1 | MB_TYPE_P1L1,                               2, },
137
    { MB_TYPE_8x16    | MB_TYPE_P0L1 | MB_TYPE_P1L1,                               2, },
138
    { MB_TYPE_16x8    | MB_TYPE_P0L0 | MB_TYPE_P1L1,                               2, },
139
    { MB_TYPE_8x16    | MB_TYPE_P0L0 | MB_TYPE_P1L1,                               2, },
140
    { MB_TYPE_16x8    | MB_TYPE_P0L1 | MB_TYPE_P1L0,                               2, },
141
    { MB_TYPE_8x16    | MB_TYPE_P0L1 | MB_TYPE_P1L0,                               2, },
142
    { MB_TYPE_16x8    | MB_TYPE_P0L0 | MB_TYPE_P1L0 | MB_TYPE_P1L1,                2, },
143
    { MB_TYPE_8x16    | MB_TYPE_P0L0 | MB_TYPE_P1L0 | MB_TYPE_P1L1,                2, },
144
    { MB_TYPE_16x8    | MB_TYPE_P0L1 | MB_TYPE_P1L0 | MB_TYPE_P1L1,                2, },
145
    { MB_TYPE_8x16    | MB_TYPE_P0L1 | MB_TYPE_P1L0 | MB_TYPE_P1L1,                2, },
146
    { MB_TYPE_16x8    | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_P1L0,                2, },
147
    { MB_TYPE_8x16    | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_P1L0,                2, },
148
    { MB_TYPE_16x8    | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_P1L1,                2, },
149
    { MB_TYPE_8x16    | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_P1L1,                2, },
150
    { MB_TYPE_16x8    | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_P1L0 | MB_TYPE_P1L1, 2, },
151
    { MB_TYPE_8x16    | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_P1L0 | MB_TYPE_P1L1, 2, },
152
    { MB_TYPE_8x8     | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_P1L0 | MB_TYPE_P1L1, 4, },
153
};
154
 
155
static const PMbInfo b_sub_mb_type_info[13] = {
156
    { MB_TYPE_DIRECT2,                                                           1, },
157
    { MB_TYPE_16x16 | MB_TYPE_P0L0,                                              1, },
158
    { MB_TYPE_16x16 | MB_TYPE_P0L1,                                              1, },
159
    { MB_TYPE_16x16 | MB_TYPE_P0L0 | MB_TYPE_P0L1,                               1, },
160
    { MB_TYPE_16x8  | MB_TYPE_P0L0 | MB_TYPE_P1L0,                               2, },
161
    { MB_TYPE_8x16  | MB_TYPE_P0L0 | MB_TYPE_P1L0,                               2, },
162
    { MB_TYPE_16x8  | MB_TYPE_P0L1 | MB_TYPE_P1L1,                               2, },
163
    { MB_TYPE_8x16  | MB_TYPE_P0L1 | MB_TYPE_P1L1,                               2, },
164
    { MB_TYPE_16x8  | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_P1L0 | MB_TYPE_P1L1, 2, },
165
    { MB_TYPE_8x16  | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_P1L0 | MB_TYPE_P1L1, 2, },
166
    { MB_TYPE_8x8   | MB_TYPE_P0L0 | MB_TYPE_P1L0,                               4, },
167
    { MB_TYPE_8x8   | MB_TYPE_P0L1 | MB_TYPE_P1L1,                               4, },
168
    { MB_TYPE_8x8   | MB_TYPE_P0L0 | MB_TYPE_P0L1 | MB_TYPE_P1L0 | MB_TYPE_P1L1, 4, },
169
};
170
 
171
#endif /* AVCODEC_H264DATA_H */