1#ifndef _MPEG2_H
2#define _MPEG2_H
3
4/**
5 * mpeg2.h
6 * -------
7 * This file contains all the necessary enumerations and structures needed from
8 * the MPEG-2 Specification.
9 */
10
11/* Max Pan-Scan offsets */
12#define MPEG2_MAX_VID_OFFSETS 3
13
14/* Quantization matrix size */
15#define MPEG2_QUANT_MAT_SIZE  64
16
17/* MPEG2 Start Code Values */
18typedef enum {
19    MPEG2_SC_PICTURE           = 0x00,
20    MPEG2_SC_SLICE_HDR         = 0x01,
21    MPEG2_SC_SLICE_MIN         = 0x01,
22    MPEG2_SC_SLICE_MAX         = 0xAF,
23    MPEG2_SC_USER_DATA         = 0xB2,
24    MPEG2_SC_SEQ_HDR           = 0xB3,
25    MPEG2_SC_SEQ_ERR           = 0xB4,
26    MPEG2_SC_EXT               = 0xB5,
27    MPEG2_SC_SEQ_END           = 0xB7,
28    MPEG2_SC_GROUP             = 0xB8,
29    MPEG2_SC_SYS_MIN           = 0xB9,
30    MPEG2_SC_SYS_MAX           = 0xFF,
31    MPEG2_SC_ALL               = 0xFF
32} mpeg2_start_codes;
33
34/* MPEG2 Extension Start Code ID */
35typedef enum {
36    MPEG2_EXT_SEQ              = 1,
37    MPEG2_EXT_SEQ_DISP         = 2,
38    MPEG2_EXT_QUANT_MAT        = 3,
39    MPEG2_EXT_COPYRIGHT        = 4,
40    MPEG2_EXT_SEQ_SCAL         = 5,
41    MPEG2_EXT_PIC_DISP         = 7,
42    MPEG2_EXT_PIC_CODING       = 8,
43    MPEG2_EXT_PIC_SPA_SCAL     = 9,
44    MPEG2_EXT_PIC_TEMP_SCAL    = 10,
45    MPEG2_EXT_ALL              = 11
46} mpeg2_ext_start_codes;
47
48/* MPEG2 Picture Coding Type Values */
49typedef enum {
50    MPEG2_PC_TYPE_FORBIDDEN    = 0,
51    MPEG2_PC_TYPE_I            = 1,
52    MPEG2_PC_TYPE_P            = 2,
53    MPEG2_PC_TYPE_B            = 3
54} mpeg2_picture_type;
55
56/* MPEG2 Picture Structure Type Values */
57typedef enum {
58    MPEG2_PIC_STRUCT_RESERVED  = 0,
59    MPEG2_PIC_STRUCT_TOP       = 1,
60    MPEG2_PIC_STRUCT_BOTTOM    = 2,
61    MPEG2_PIC_STRUCT_FRAME     = 3
62} mpeg2_picture_structure;
63
64/* MPEG2 Chroma Format Values */
65typedef enum {
66    MPEG2_CF_RESERVED   = 0,
67    MPEG2_CF_420        = 1,
68    MPEG2_CF_422        = 2,
69    MPEG2_CF_444        = 3
70} mpeg2_chroma_format;
71
72/* MPEG2 Parser Structures */
73/* Sequence Header Info */
74struct mpeg2_sequence_hdr_info
75{
76    uint32_t   horizontal_size_value;
77    uint32_t   vertical_size_value;
78    uint32_t   aspect_ratio_information;
79    uint32_t   frame_rate_code;
80    uint32_t   bit_rate_value;
81    uint32_t   vbv_buffer_size_value;
82    uint32_t   constrained_parameters_flag;
83};
84
85/* Group of Pictures Header Info */
86struct mpeg2_gop_hdr_info
87{
88    uint32_t   closed_gop;
89    uint32_t   broken_link;
90};
91
92/* Picture Header */
93struct mpeg2_picture_hdr_info
94{
95    uint32_t   temporal_reference;
96    uint32_t   picture_coding_type;
97    uint32_t   full_pel_forward_vect;
98    uint32_t   forward_f_code;
99    uint32_t   full_pel_backward_vect;
100    uint32_t   backward_f_code;
101};
102
103/* Sequence Extension Info */
104struct mpeg2_sequence_ext_info
105{
106    uint32_t   profile_and_level_indication;
107    uint32_t   progressive_sequence;
108    uint32_t   chroma_format;
109    uint32_t   horizontal_size_extension;
110    uint32_t   vertical_size_extension;
111    uint32_t   bit_rate_extension;
112    uint32_t   vbv_buffer_size_extension;
113    uint32_t   frame_rate_extension_n;
114    uint32_t   frame_rate_extension_d;
115};
116
117/* Sequence Display Extension Info */
118struct mpeg2_sequence_disp_ext_info
119{
120    uint32_t  video_format;
121    uint32_t  colour_description;
122    uint32_t  colour_primaries;
123    uint32_t  transfer_characteristics;
124    uint32_t  display_horizontal_size;
125    uint32_t  display_vertical_size;
126};
127
128/* Sequence scalable extension Info */
129struct mpeg2_sequence_scal_ext_info
130{
131    uint32_t  scalable_mode;
132};
133
134/* Picture Coding Extension */
135struct mpeg2_picture_coding_ext_info
136{
137    uint32_t fcode00;
138    uint32_t fcode01;
139    uint32_t fcode10;
140    uint32_t fcode11;
141    uint32_t intra_dc_precision;
142    uint32_t picture_structure;
143    uint32_t top_field_first;
144    uint32_t frame_pred_frame_dct;
145    uint32_t concealment_motion_vectors;
146    uint32_t q_scale_type;
147    uint32_t intra_vlc_format;
148    uint32_t alternate_scan;
149    uint32_t repeat_first_field;
150    uint32_t chroma_420_type;
151    uint32_t progressive_frame;
152    uint32_t composite_display_flag;
153};
154
155/* Picture Display Extension */
156struct mpeg2_picture_disp_ext_info
157{
158    uint32_t frame_center_horizontal_offset[MPEG2_MAX_VID_OFFSETS];
159    uint32_t frame_center_vertical_offset[MPEG2_MAX_VID_OFFSETS];
160};
161
162/* Quantization Matrix Extension */
163struct mpeg2_quant_ext_info
164{
165    uint32_t load_intra_quantiser_matrix;
166    uint32_t load_non_intra_quantiser_matrix;
167    uint32_t load_chroma_intra_quantiser_matrix;
168    uint32_t load_chroma_non_intra_quantiser_matrix;
169};
170
171/* Quantization Matrices */
172struct mpeg2_quant_matrices
173{
174    uint8_t intra_quantiser_matrix[MPEG2_QUANT_MAT_SIZE];
175    uint8_t non_intra_quantiser_matrix[MPEG2_QUANT_MAT_SIZE];
176    uint8_t chroma_intra_quantiser_matrix[MPEG2_QUANT_MAT_SIZE];
177    uint8_t chroma_non_intra_quantiser_matrix[MPEG2_QUANT_MAT_SIZE];
178};
179
180/* MPEG2 Info */
181struct mpeg2_info
182{
183    struct mpeg2_sequence_hdr_info         seq_hdr;
184    struct mpeg2_gop_hdr_info              gop_hdr;
185    struct mpeg2_picture_hdr_info          pic_hdr;
186    struct mpeg2_sequence_ext_info         seq_ext;
187    struct mpeg2_sequence_disp_ext_info    seq_disp_ext;
188    struct mpeg2_sequence_scal_ext_info    seq_scal_ext;
189    struct mpeg2_picture_coding_ext_info   pic_cod_ext;
190    struct mpeg2_picture_disp_ext_info     pic_disp_ext;
191    struct mpeg2_quant_ext_info            qnt_ext;
192    struct mpeg2_quant_matrices            qnt_mat;
193};
194
195#endif
196