2 #ifndef __DIRAC_PARSE_H__
3 #define __DIRAC_PARSE_H__
16 typedef enum _SchroParseCode {
17 SCHRO_PARSE_CODE_SEQUENCE_HEADER = 0x00,
18 SCHRO_PARSE_CODE_END_OF_SEQUENCE = 0x10,
19 SCHRO_PARSE_CODE_AUXILIARY_DATA = 0x20,
20 SCHRO_PARSE_CODE_PADDING = 0x30,
22 SCHRO_PARSE_CODE_INTRA_REF = 0x0c,
23 SCHRO_PARSE_CODE_INTRA_NON_REF = 0x08,
24 SCHRO_PARSE_CODE_INTRA_REF_NOARITH = 0x4c,
25 SCHRO_PARSE_CODE_INTRA_NON_REF_NOARITH = 0x48,
27 SCHRO_PARSE_CODE_INTER_REF_1 = 0x0d,
28 SCHRO_PARSE_CODE_INTER_REF_1_NOARITH = 0x4d,
29 SCHRO_PARSE_CODE_INTER_REF_2 = 0x0e,
30 SCHRO_PARSE_CODE_INTER_REF_2_NOARITH = 0x4e,
32 SCHRO_PARSE_CODE_INTER_NON_REF_1 = 0x09,
33 SCHRO_PARSE_CODE_INTER_NON_REF_1_NOARITH = 0x49,
34 SCHRO_PARSE_CODE_INTER_NON_REF_2 = 0x0a,
35 SCHRO_PARSE_CODE_INTER_NON_REF_2_NOARITH = 0x4a,
37 SCHRO_PARSE_CODE_LD_INTRA_REF = 0xcc,
38 SCHRO_PARSE_CODE_LD_INTRA_NON_REF = 0xc8
41 #define SCHRO_PARSE_CODE_PICTURE(is_ref,n_refs,is_lowdelay,is_noarith) \
42 (8 | ((is_ref)<<2) | (n_refs) | ((is_lowdelay)<<7) | ((is_noarith)<<6))
44 #define SCHRO_PARSE_CODE_IS_SEQ_HEADER(x) ((x) == SCHRO_PARSE_CODE_SEQUENCE_HEADER)
45 #define SCHRO_PARSE_CODE_IS_END_OF_SEQUENCE(x) ((x) == SCHRO_PARSE_CODE_END_OF_SEQUENCE)
46 #define SCHRO_PARSE_CODE_IS_AUXILIARY_DATA(x) ((x) == SCHRO_PARSE_CODE_AUXILIARY_DATA)
47 #define SCHRO_PARSE_CODE_IS_PADDING(x) ((x) == SCHRO_PARSE_CODE_PADDING)
48 #define SCHRO_PARSE_CODE_IS_PICTURE(x) ((x) & 0x8)
49 #define SCHRO_PARSE_CODE_IS_LOW_DELAY(x) (((x) & 0x88) == 0x88)
50 #define SCHRO_PARSE_CODE_IS_CORE_SYNTAX(x) (((x) & 0x88) == 0x08)
51 #define SCHRO_PARSE_CODE_USING_AC(x) (((x) & 0x48) == 0x08)
52 #define SCHRO_PARSE_CODE_IS_REFERENCE(x) (((x) & 0xc) == 0x0c)
53 #define SCHRO_PARSE_CODE_IS_NON_REFERENCE(x) (((x) & 0xc) == 0x08)
54 #define SCHRO_PARSE_CODE_NUM_REFS(x) ((x) & 0x3)
55 #define SCHRO_PARSE_CODE_IS_INTRA(x) (SCHRO_PARSE_CODE_IS_PICTURE(x) && SCHRO_PARSE_CODE_NUM_REFS(x) == 0)
56 #define SCHRO_PARSE_CODE_IS_INTER(x) (SCHRO_PARSE_CODE_IS_PICTURE(x) && SCHRO_PARSE_CODE_NUM_REFS(x) > 0)
58 #define SCHRO_PARSE_HEADER_SIZE (4+1+4+4)
60 typedef enum _SchroVideoFormatEnum {
61 SCHRO_VIDEO_FORMAT_CUSTOM = 0,
62 SCHRO_VIDEO_FORMAT_QSIF,
63 SCHRO_VIDEO_FORMAT_QCIF,
64 SCHRO_VIDEO_FORMAT_SIF,
65 SCHRO_VIDEO_FORMAT_CIF,
66 SCHRO_VIDEO_FORMAT_4SIF,
67 SCHRO_VIDEO_FORMAT_4CIF,
68 SCHRO_VIDEO_FORMAT_SD480I_60,
69 SCHRO_VIDEO_FORMAT_SD576I_50,
70 SCHRO_VIDEO_FORMAT_HD720P_60,
71 SCHRO_VIDEO_FORMAT_HD720P_50,
72 SCHRO_VIDEO_FORMAT_HD1080I_60,
73 SCHRO_VIDEO_FORMAT_HD1080I_50,
74 SCHRO_VIDEO_FORMAT_HD1080P_60,
75 SCHRO_VIDEO_FORMAT_HD1080P_50,
76 SCHRO_VIDEO_FORMAT_DC2K_24,
77 SCHRO_VIDEO_FORMAT_DC4K_24
78 } SchroVideoFormatEnum;
80 typedef enum _SchroChromaFormat {
86 #define SCHRO_CHROMA_FORMAT_H_SHIFT(format) (((format) == SCHRO_CHROMA_444)?0:1)
87 #define SCHRO_CHROMA_FORMAT_V_SHIFT(format) (((format) == SCHRO_CHROMA_420)?1:0)
89 typedef enum _SchroSignalRange {
90 SCHRO_SIGNAL_RANGE_CUSTOM = 0,
91 SCHRO_SIGNAL_RANGE_8BIT_FULL = 1,
92 SCHRO_SIGNAL_RANGE_8BIT_VIDEO = 2,
93 SCHRO_SIGNAL_RANGE_10BIT_VIDEO = 3,
94 SCHRO_SIGNAL_RANGE_12BIT_VIDEO = 4
97 typedef enum _SchroColourSpec {
98 SCHRO_COLOUR_SPEC_CUSTOM = 0,
99 SCHRO_COLOUR_SPEC_SDTV_525 = 1,
100 SCHRO_COLOUR_SPEC_SDTV_625 = 2,
101 SCHRO_COLOUR_SPEC_HDTV = 3,
102 SCHRO_COLOUR_SPEC_CINEMA = 4
105 typedef enum _SchroColourPrimaries {
106 SCHRO_COLOUR_PRIMARY_HDTV = 0,
107 SCHRO_COLOUR_PRIMARY_SDTV_525 = 1,
108 SCHRO_COLOUR_PRIMARY_SDTV_625 = 2,
109 SCHRO_COLOUR_PRIMARY_CINEMA = 3
110 } SchroColourPrimaries;
112 typedef enum _SchroColourMatrix {
113 SCHRO_COLOUR_MATRIX_HDTV = 0,
114 SCHRO_COLOUR_MATRIX_SDTV = 1,
115 SCHRO_COLOUR_MATRIX_REVERSIBLE = 2
118 typedef enum _SchroTransferFunction {
119 SCHRO_TRANSFER_CHAR_TV_GAMMA = 0,
120 SCHRO_TRANSFER_CHAR_EXTENDED_GAMUT = 1,
121 SCHRO_TRANSFER_CHAR_LINEAR = 2,
122 SCHRO_TRANSFER_CHAR_DCI_GAMMA = 3
123 } SchroTransferFunction;
127 typedef struct _DiracSequenceHeader DiracSequenceHeader;
129 struct _DiracSequenceHeader {
143 int frame_rate_numerator;
144 int frame_rate_denominator;
145 int aspect_ratio_numerator;
146 int aspect_ratio_denominator;
156 int chroma_excursion;
158 int colour_primaries;
160 int transfer_function;
162 int interlaced_coding;
170 int dirac_sequence_header_parse (DiracSequenceHeader *header,
171 unsigned char *data, int length);