1 
2 #ifndef _SCHRO_BITSTREAM_H_
3 #define _SCHRO_BITSTREAM_H_
4 
5 #include <schroedinger/schroutils.h>
6 
7 SCHRO_BEGIN_DECLS
8 
9 #define SCHRO_N_WAVELETS 7
10 
11 typedef enum _SchroParseCode {
12   SCHRO_PARSE_CODE_SEQUENCE_HEADER = 0x00,
13   SCHRO_PARSE_CODE_END_OF_SEQUENCE = 0x10,
14   SCHRO_PARSE_CODE_AUXILIARY_DATA = 0x20,
15   SCHRO_PARSE_CODE_PADDING = 0x30,
16 
17   SCHRO_PARSE_CODE_INTRA_REF = 0x0c,
18   SCHRO_PARSE_CODE_INTRA_NON_REF = 0x08,
19   SCHRO_PARSE_CODE_INTRA_REF_NOARITH = 0x4c,
20   SCHRO_PARSE_CODE_INTRA_NON_REF_NOARITH = 0x48,
21 
22   SCHRO_PARSE_CODE_INTER_REF_1 = 0x0d,
23   SCHRO_PARSE_CODE_INTER_REF_1_NOARITH = 0x4d,
24   SCHRO_PARSE_CODE_INTER_REF_2 = 0x0e,
25   SCHRO_PARSE_CODE_INTER_REF_2_NOARITH = 0x4e,
26 
27   SCHRO_PARSE_CODE_INTER_NON_REF_1 = 0x09,
28   SCHRO_PARSE_CODE_INTER_NON_REF_1_NOARITH = 0x49,
29   SCHRO_PARSE_CODE_INTER_NON_REF_2 = 0x0a,
30   SCHRO_PARSE_CODE_INTER_NON_REF_2_NOARITH = 0x4a,
31 
32   SCHRO_PARSE_CODE_LD_INTRA_REF = 0xcc,
33   SCHRO_PARSE_CODE_LD_INTRA_NON_REF = 0xc8
34 } SchroParseCode;
35 
36 #define SCHRO_PARSE_CODE_PICTURE(is_ref,n_refs,is_lowdelay,is_noarith) \
37   (8 | ((is_ref)<<2) | (n_refs) | ((is_lowdelay)<<7) | ((is_noarith)<<6))
38 
39 #define SCHRO_PARSE_CODE_IS_SEQ_HEADER(x) ((x) == SCHRO_PARSE_CODE_SEQUENCE_HEADER)
40 #define SCHRO_PARSE_CODE_IS_END_OF_SEQUENCE(x) ((x) == SCHRO_PARSE_CODE_END_OF_SEQUENCE)
41 #define SCHRO_PARSE_CODE_IS_AUXILIARY_DATA(x) ((x) == SCHRO_PARSE_CODE_AUXILIARY_DATA)
42 #define SCHRO_PARSE_CODE_IS_PADDING(x) ((x) == SCHRO_PARSE_CODE_PADDING)
43 #define SCHRO_PARSE_CODE_IS_PICTURE(x) ((x) & 0x8)
44 #define SCHRO_PARSE_CODE_IS_LOW_DELAY(x) (((x) & 0x88) == 0x88)
45 #define SCHRO_PARSE_CODE_IS_CORE_SYNTAX(x) (((x) & 0x88) == 0x08)
46 #define SCHRO_PARSE_CODE_USING_AC(x) (((x) & 0x48) == 0x08)
47 #define SCHRO_PARSE_CODE_IS_REFERENCE(x) (((x) & 0xc) == 0x0c)
48 #define SCHRO_PARSE_CODE_IS_NON_REFERENCE(x) (((x) & 0xc) == 0x08)
49 #define SCHRO_PARSE_CODE_NUM_REFS(x) ((x) & 0x3)
50 #define SCHRO_PARSE_CODE_IS_INTRA(x) (SCHRO_PARSE_CODE_IS_PICTURE(x) && SCHRO_PARSE_CODE_NUM_REFS(x) == 0)
51 #define SCHRO_PARSE_CODE_IS_INTER(x) (SCHRO_PARSE_CODE_IS_PICTURE(x) && SCHRO_PARSE_CODE_NUM_REFS(x) > 0)
52 
53 #define SCHRO_PARSE_HEADER_SIZE (4+1+4+4)
54 
55 typedef enum _SchroVideoFormatEnum {
56   SCHRO_VIDEO_FORMAT_CUSTOM = 0,
57   SCHRO_VIDEO_FORMAT_QSIF,
58   SCHRO_VIDEO_FORMAT_QCIF,
59   SCHRO_VIDEO_FORMAT_SIF,
60   SCHRO_VIDEO_FORMAT_CIF,
61   SCHRO_VIDEO_FORMAT_4SIF,
62   SCHRO_VIDEO_FORMAT_4CIF,
63   SCHRO_VIDEO_FORMAT_SD480I_60,
64   SCHRO_VIDEO_FORMAT_SD576I_50,
65   SCHRO_VIDEO_FORMAT_HD720P_60,
66   SCHRO_VIDEO_FORMAT_HD720P_50,
67   SCHRO_VIDEO_FORMAT_HD1080I_60,
68   SCHRO_VIDEO_FORMAT_HD1080I_50,
69   SCHRO_VIDEO_FORMAT_HD1080P_60,
70   SCHRO_VIDEO_FORMAT_HD1080P_50,
71   SCHRO_VIDEO_FORMAT_DC2K_24,
72   SCHRO_VIDEO_FORMAT_DC4K_24,
73   SCHRO_VIDEO_FORMAT_UHDTV_4K_60,
74   SCHRO_VIDEO_FORMAT_UHDTV_4K_50,
75   SCHRO_VIDEO_FORMAT_UHDTV_8K_60,
76   SCHRO_VIDEO_FORMAT_UHDTV_8K_50
77 } SchroVideoFormatEnum;
78 
79 typedef enum _SchroChromaFormat {
80   SCHRO_CHROMA_444 = 0,
81   SCHRO_CHROMA_422,
82   SCHRO_CHROMA_420
83 } SchroChromaFormat;
84 
85 #define SCHRO_CHROMA_FORMAT_H_SHIFT(format) (((format) == SCHRO_CHROMA_444)?0:1)
86 #define SCHRO_CHROMA_FORMAT_V_SHIFT(format) (((format) == SCHRO_CHROMA_420)?1:0)
87 
88 typedef enum _SchroSignalRange {
89   SCHRO_SIGNAL_RANGE_CUSTOM = 0,
90   SCHRO_SIGNAL_RANGE_8BIT_FULL = 1,
91   SCHRO_SIGNAL_RANGE_8BIT_VIDEO = 2,
92   SCHRO_SIGNAL_RANGE_10BIT_VIDEO = 3,
93   SCHRO_SIGNAL_RANGE_12BIT_VIDEO = 4
94 } SchroSignalRange;
95 
96 typedef enum _SchroColourSpec {
97   SCHRO_COLOUR_SPEC_CUSTOM = 0,
98   SCHRO_COLOUR_SPEC_SDTV_525 = 1,
99   SCHRO_COLOUR_SPEC_SDTV_625 = 2,
100   SCHRO_COLOUR_SPEC_HDTV = 3,
101   SCHRO_COLOUR_SPEC_CINEMA = 4
102 } SchroColourSpec;
103 
104 typedef enum _SchroColourPrimaries {
105   SCHRO_COLOUR_PRIMARY_HDTV = 0,
106   SCHRO_COLOUR_PRIMARY_SDTV_525 = 1,
107   SCHRO_COLOUR_PRIMARY_SDTV_625 = 2,
108   SCHRO_COLOUR_PRIMARY_CINEMA = 3
109 } SchroColourPrimaries;
110 
111 typedef enum _SchroColourMatrix {
112   SCHRO_COLOUR_MATRIX_HDTV = 0,
113   SCHRO_COLOUR_MATRIX_SDTV = 1,
114   SCHRO_COLOUR_MATRIX_REVERSIBLE = 2
115 }SchroColourMatrix;
116 
117 typedef enum _SchroTransferFunction {
118   SCHRO_TRANSFER_CHAR_TV_GAMMA = 0,
119   SCHRO_TRANSFER_CHAR_EXTENDED_GAMUT = 1,
120   SCHRO_TRANSFER_CHAR_LINEAR = 2,
121   SCHRO_TRANSFER_CHAR_DCI_GAMMA = 3
122 } SchroTransferFunction;
123 
124 typedef enum _SchroWaveletIndex {
125   SCHRO_WAVELET_DESLAURIERS_DUBUC_9_7,
126   SCHRO_WAVELET_LE_GALL_5_3,
127   SCHRO_WAVELET_DESLAURIERS_DUBUC_13_7,
128   SCHRO_WAVELET_HAAR_0,
129   SCHRO_WAVELET_HAAR_1,
130   SCHRO_WAVELET_FIDELITY,
131   SCHRO_WAVELET_DAUBECHIES_9_7
132 } SchroWaveletIndex;
133 
134 #ifndef SCHRO_DISABLE_DEPRECATED
135 /* misspellings in older versions */
136 #define SCHRO_WAVELET_DESLAURIES_DUBUC_9_7 SCHRO_WAVELET_DESLAURIERS_DUBUC_9_7
137 #define SCHRO_WAVELET_DESLAURIES_DUBUC_13_7 SCHRO_WAVELET_DESLAURIERS_DUBUC_13_7
138 #endif
139 
140 typedef enum _SchroAuxiliaryDataID {
141   SCHRO_AUX_DATA_INVALID,
142   SCHRO_AUX_DATA_ENCODER_STRING,
143   SCHRO_AUX_DATA_SMPTE_12M_TIMECODE,
144   SCHRO_AUX_DATA_MD5_CHECKSUM,
145   SCHRO_AUX_DATA_BITRATE,
146   SCHRO_AUX_DATA_USER = 0x80
147 }SchroAuxiliaryDataID;
148 
149 typedef enum _SchroProfile {
150   SCHRO_PROFILE_LOW_DELAY = 0,
151   SCHRO_PROFILE_SIMPLE = 1,
152   SCHRO_PROFILE_MAIN_INTRA = 2,
153   SCHRO_PROFILE_MAIN = 8
154 } SchroProfile;
155 
156 SCHRO_END_DECLS
157 
158 #endif
159 
160