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