2 * This file is part of FFmpeg.
4 * FFmpeg is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 #ifndef AVCODEC_CBS_MPEG2_H
20 #define AVCODEC_CBS_MPEG2_H
25 #include "libavutil/buffer.h"
29 MPEG2_START_PICTURE
= 0x00,
30 MPEG2_START_SLICE_MIN
= 0x01,
31 MPEG2_START_SLICE_MAX
= 0xaf,
32 MPEG2_START_USER_DATA
= 0xb2,
33 MPEG2_START_SEQUENCE_HEADER
= 0xb3,
34 MPEG2_START_SEQUENCE_ERROR
= 0xb4,
35 MPEG2_START_EXTENSION
= 0xb5,
36 MPEG2_START_SEQUENCE_END
= 0xb7,
37 MPEG2_START_GROUP
= 0xb8,
40 #define MPEG2_START_IS_SLICE(type) \
41 ((type) >= MPEG2_START_SLICE_MIN && \
42 (type) <= MPEG2_START_SLICE_MAX)
45 MPEG2_EXTENSION_SEQUENCE
= 0x1,
46 MPEG2_EXTENSION_SEQUENCE_DISPLAY
= 0x2,
47 MPEG2_EXTENSION_QUANT_MATRIX
= 0x3,
48 MPEG2_EXTENSION_COPYRIGHT
= 0x4,
49 MPEG2_EXTENSION_SEQUENCE_SCALABLE
= 0x5,
50 MPEG2_EXTENSION_PICTURE_DISPLAY
= 0x7,
51 MPEG2_EXTENSION_PICTURE_CODING
= 0x8,
52 MPEG2_EXTENSION_PICTURE_SPATIAL_SCALABLE
= 0x9,
53 MPEG2_EXTENSION_PICTURE_TEMPORAL_SCALABLE
= 0xa,
54 MPEG2_EXTENSION_CAMERA_PARAMETERS
= 0xb,
55 MPEG2_EXTENSION_ITU_T
= 0xc,
59 typedef struct MPEG2RawSequenceHeader
{
60 uint8_t sequence_header_code
;
62 uint16_t horizontal_size_value
;
63 uint16_t vertical_size_value
;
64 uint8_t aspect_ratio_information
;
65 uint8_t frame_rate_code
;
66 uint32_t bit_rate_value
;
67 uint16_t vbv_buffer_size_value
;
68 uint8_t constrained_parameters_flag
;
70 uint8_t load_intra_quantiser_matrix
;
71 uint8_t intra_quantiser_matrix
[64];
72 uint8_t load_non_intra_quantiser_matrix
;
73 uint8_t non_intra_quantiser_matrix
[64];
74 } MPEG2RawSequenceHeader
;
76 typedef struct MPEG2RawUserData
{
77 uint8_t user_data_start_code
;
80 AVBufferRef
*user_data_ref
;
81 size_t user_data_length
;
84 typedef struct MPEG2RawSequenceExtension
{
85 uint8_t profile_and_level_indication
;
86 uint8_t progressive_sequence
;
87 uint8_t chroma_format
;
88 uint8_t horizontal_size_extension
;
89 uint8_t vertical_size_extension
;
90 uint16_t bit_rate_extension
;
91 uint8_t vbv_buffer_size_extension
;
93 uint8_t frame_rate_extension_n
;
94 uint8_t frame_rate_extension_d
;
95 } MPEG2RawSequenceExtension
;
97 typedef struct MPEG2RawSequenceDisplayExtension
{
100 uint8_t colour_description
;
101 uint8_t colour_primaries
;
102 uint8_t transfer_characteristics
;
103 uint8_t matrix_coefficients
;
105 uint16_t display_horizontal_size
;
106 uint16_t display_vertical_size
;
107 } MPEG2RawSequenceDisplayExtension
;
109 typedef struct MPEG2RawGroupOfPicturesHeader
{
110 uint8_t group_start_code
;
115 } MPEG2RawGroupOfPicturesHeader
;
117 typedef struct MPEG2RawExtraInformation
{
118 uint8_t *extra_information
;
119 AVBufferRef
*extra_information_ref
;
120 size_t extra_information_length
;
121 } MPEG2RawExtraInformation
;
123 typedef struct MPEG2RawPictureHeader
{
124 uint8_t picture_start_code
;
126 uint16_t temporal_reference
;
127 uint8_t picture_coding_type
;
130 uint8_t full_pel_forward_vector
;
131 uint8_t forward_f_code
;
132 uint8_t full_pel_backward_vector
;
133 uint8_t backward_f_code
;
135 MPEG2RawExtraInformation extra_information_picture
;
136 } MPEG2RawPictureHeader
;
138 typedef struct MPEG2RawPictureCodingExtension
{
139 uint8_t f_code
[2][2];
141 uint8_t intra_dc_precision
;
142 uint8_t picture_structure
;
143 uint8_t top_field_first
;
144 uint8_t frame_pred_frame_dct
;
145 uint8_t concealment_motion_vectors
;
146 uint8_t q_scale_type
;
147 uint8_t intra_vlc_format
;
148 uint8_t alternate_scan
;
149 uint8_t repeat_first_field
;
150 uint8_t chroma_420_type
;
151 uint8_t progressive_frame
;
153 uint8_t composite_display_flag
;
155 uint8_t field_sequence
;
157 uint8_t burst_amplitude
;
158 uint8_t sub_carrier_phase
;
159 } MPEG2RawPictureCodingExtension
;
161 typedef struct MPEG2RawQuantMatrixExtension
{
162 uint8_t load_intra_quantiser_matrix
;
163 uint8_t intra_quantiser_matrix
[64];
164 uint8_t load_non_intra_quantiser_matrix
;
165 uint8_t non_intra_quantiser_matrix
[64];
166 uint8_t load_chroma_intra_quantiser_matrix
;
167 uint8_t chroma_intra_quantiser_matrix
[64];
168 uint8_t load_chroma_non_intra_quantiser_matrix
;
169 uint8_t chroma_non_intra_quantiser_matrix
[64];
170 } MPEG2RawQuantMatrixExtension
;
172 typedef struct MPEG2RawPictureDisplayExtension
{
173 int16_t frame_centre_horizontal_offset
[3];
174 int16_t frame_centre_vertical_offset
[3];
175 } MPEG2RawPictureDisplayExtension
;
177 typedef struct MPEG2RawExtensionData
{
178 uint8_t extension_start_code
;
179 uint8_t extension_start_code_identifier
;
182 MPEG2RawSequenceExtension sequence
;
183 MPEG2RawSequenceDisplayExtension sequence_display
;
184 MPEG2RawQuantMatrixExtension quant_matrix
;
185 MPEG2RawPictureCodingExtension picture_coding
;
186 MPEG2RawPictureDisplayExtension picture_display
;
188 } MPEG2RawExtensionData
;
190 typedef struct MPEG2RawSliceHeader
{
191 uint8_t slice_vertical_position
;
193 uint8_t slice_vertical_position_extension
;
194 uint8_t priority_breakpoint
;
196 uint8_t quantiser_scale_code
;
198 uint8_t slice_extension_flag
;
200 uint8_t slice_picture_id_enable
;
201 uint8_t slice_picture_id
;
203 MPEG2RawExtraInformation extra_information_slice
;
204 } MPEG2RawSliceHeader
;
206 typedef struct MPEG2RawSlice
{
207 MPEG2RawSliceHeader header
;
210 AVBufferRef
*data_ref
;
215 typedef struct MPEG2RawSequenceEnd
{
216 uint8_t sequence_end_code
;
217 } MPEG2RawSequenceEnd
;
220 typedef struct CodedBitstreamMPEG2Context
{
221 // Elements stored in headers which are required for other decoding.
222 uint16_t horizontal_size
;
223 uint16_t vertical_size
;
225 uint8_t scalable_mode
;
226 uint8_t progressive_sequence
;
227 uint8_t number_of_frame_centre_offsets
;
228 } CodedBitstreamMPEG2Context
;
231 #endif /* AVCODEC_CBS_MPEG2_H */