1 #ifndef CCX_CONSTANTS_H 2 #define CCX_CONSTANTS_H 3 4 #include "stdio.h" 5 6 #ifndef __cplusplus 7 #define false 0 8 #define true 1 9 #endif 10 11 extern const char *framerates_types[16]; 12 extern const double framerates_values[16]; 13 14 extern const char *aspect_ratio_types[16]; 15 extern const char *pict_types[8]; 16 extern const char *slice_types[10]; 17 extern const char *cc_types[4]; 18 19 extern const unsigned char BROADCAST_HEADER[4]; 20 extern const unsigned char LITTLE_ENDIAN_BOM[2]; 21 extern const unsigned char UTF8_BOM[3]; 22 extern const unsigned char DVD_HEADER[8]; 23 extern const unsigned char lc1[1]; 24 extern const unsigned char lc2[1]; 25 extern const unsigned char lc3[2]; 26 extern const unsigned char lc4[2]; 27 extern const unsigned char lc5[1]; 28 extern const unsigned char lc6[1]; 29 30 extern unsigned char rcwt_header[11]; 31 32 #define ONEPASS 120 /* Bytes we can always look ahead without going out of limits */ 33 #define BUFSIZE (2048*1024+ONEPASS) /* 2 Mb plus the safety pass */ 34 #define MAX_CLOSED_CAPTION_DATA_PER_PICTURE 32 35 #define EIA_708_BUFFER_LENGTH 2048 // TODO: Find out what the real limit is 36 #define TS_PACKET_PAYLOAD_LENGTH 184 // From specs 37 #define SUBLINESIZE 2048 // Max. length of a .srt line - TODO: Get rid of this 38 #define STARTBYTESLENGTH (1024*1024) 39 #define UTF8_MAX_BYTES 6 40 #define XMLRPC_CHUNK_SIZE (64*1024) // 64 Kb per chunk, to avoid too many realloc() 41 42 enum ccx_debug_message_types 43 { 44 /* Each debug message now belongs to one of these types. Use bitmaps in case 45 we want one message to belong to more than one type. */ 46 CCX_DMT_PARSE=1, // Show information related to parsing the container 47 CCX_DMT_VIDES=2, // Show video stream related information 48 CCX_DMT_TIME=4, // Show GOP and PTS timing information 49 CCX_DMT_VERBOSE=8, // Show lots of debugging output 50 CCX_DMT_DECODER_608=0x10, // Show CC-608 decoder debug? 51 CCX_DMT_708=0x20, // Show CC-708 decoder debug? 52 CCX_DMT_DECODER_XDS=0x40, // Show XDS decoder debug? 53 CCX_DMT_CBRAW=0x80, // Caption blocks with FTS timing 54 CCX_DMT_GENERIC_NOTICES=0x100, // Generic, always displayed even if no debug is selected 55 CCX_DMT_TELETEXT=0x200, // Show teletext debug? 56 CCX_DMT_PAT=0x400, // Program Allocation Table dump 57 CCX_DMT_PMT=0x800, // Program Map Table dump 58 CCX_DMT_LEVENSHTEIN=0x1000, // Levenshtein distance calculations 59 #ifdef ENABLE_SHARING 60 CCX_DMT_SHARE = 0x2000, // Extracted captions sharing service 61 #endif //ENABLE_SHARING 62 CCX_DMT_DUMPDEF=0x4000, // Dump defective TS packets 63 }; 64 65 // AVC NAL types 66 enum ccx_avc_nal_types 67 { 68 CCX_NAL_TYPE_UNSPECIFIED_0 = 0, 69 CCX_NAL_TYPE_CODED_SLICE_NON_IDR_PICTURE_1 = 1, 70 CCX_NAL_TYPE_CODED_SLICE_PARTITION_A = 2, 71 CCX_NAL_TYPE_CODED_SLICE_PARTITION_B = 3, 72 CCX_NAL_TYPE_CODED_SLICE_PARTITION_C = 4, 73 CCX_NAL_TYPE_CODED_SLICE_IDR_PICTURE = 5, 74 CCX_NAL_TYPE_SEI = 6, 75 CCX_NAL_TYPE_SEQUENCE_PARAMETER_SET_7 = 7, 76 CCX_NAL_TYPE_PICTURE_PARAMETER_SET = 8, 77 CCX_NAL_TYPE_ACCESS_UNIT_DELIMITER_9 = 9, 78 CCX_NAL_TYPE_END_OF_SEQUENCE = 10, 79 CCX_NAL_TYPE_END_OF_STREAM = 11, 80 CCX_NAL_TYPE_FILLER_DATA = 12, 81 CCX_NAL_TYPE_SEQUENCE_PARAMETER_SET_EXTENSION = 13, 82 CCX_NAL_TYPE_PREFIX_NAL_UNIT = 14, 83 CCX_NAL_TYPE_SUBSET_SEQUENCE_PARAMETER_SET = 15, 84 CCX_NAL_TYPE_RESERVED_16 = 16, 85 CCX_NAL_TYPE_RESERVED_17 = 18, 86 CCX_NAL_TYPE_RESERVED_18 = 18, 87 CCX_NAL_TYPE_CODED_SLICE_AUXILIARY_PICTURE = 19, 88 CCX_NAL_TYPE_CODED_SLICE_EXTENSION = 20, 89 CCX_NAL_TYPE_RESERVED_21 = 21, 90 CCX_NAL_TYPE_RESERVED_22 = 22, 91 CCX_NAL_TYPE_RESERVED_23 = 23, 92 CCX_NAL_TYPE_UNSPECIFIED_24 = 24, 93 CCX_NAL_TYPE_UNSPECIFIED_25 = 25, 94 CCX_NAL_TYPE_UNSPECIFIED_26 = 26, 95 CCX_NAL_TYPE_UNSPECIFIED_27 = 27, 96 CCX_NAL_TYPE_UNSPECIFIED_28 = 28, 97 CCX_NAL_TYPE_UNSPECIFIED_29 = 29, 98 CCX_NAL_TYPE_UNSPECIFIED_30 = 30, 99 CCX_NAL_TYPE_UNSPECIFIED_31 = 31 100 }; 101 102 // MPEG-2 TS stream types 103 enum ccx_stream_type 104 { 105 CCX_STREAM_TYPE_UNKNOWNSTREAM = 0, 106 CCX_STREAM_TYPE_VIDEO_MPEG1 = 0x01, 107 CCX_STREAM_TYPE_VIDEO_MPEG2 = 0x02, 108 CCX_STREAM_TYPE_AUDIO_MPEG1 = 0x03, 109 CCX_STREAM_TYPE_AUDIO_MPEG2 = 0x04, 110 CCX_STREAM_TYPE_PRIVATE_TABLE_MPEG2 = 0x05, 111 CCX_STREAM_TYPE_PRIVATE_MPEG2 = 0x06, 112 CCX_STREAM_TYPE_MHEG_PACKETS = 0x07, 113 CCX_STREAM_TYPE_MPEG2_ANNEX_A_DSM_CC = 0x08, 114 CCX_STREAM_TYPE_ITU_T_H222_1 = 0x09, 115 CCX_STREAM_TYPE_ISO_IEC_13818_6_TYPE_A = 0x0A, 116 CCX_STREAM_TYPE_ISO_IEC_13818_6_TYPE_B = 0x0B, 117 CCX_STREAM_TYPE_ISO_IEC_13818_6_TYPE_C = 0x0C, 118 CCX_STREAM_TYPE_ISO_IEC_13818_6_TYPE_D = 0x0D, 119 CCX_STREAM_TYPE_AUDIO_AAC = 0x0f, 120 CCX_STREAM_TYPE_VIDEO_MPEG4 = 0x10, 121 CCX_STREAM_TYPE_VIDEO_H264 = 0x1b, 122 CCX_STREAM_TYPE_PRIVATE_USER_MPEG2=0x80, 123 CCX_STREAM_TYPE_AUDIO_AC3 = 0x81, 124 CCX_STREAM_TYPE_AUDIO_HDMV_DTS = 0x82, 125 CCX_STREAM_TYPE_AUDIO_DTS = 0x8a, 126 }; 127 128 enum ccx_mpeg_descriptor 129 { 130 CCX_MPEG_DSC_REGISTRATION = 0x05, 131 CCX_MPEG_DSC_DATA_STREAM_ALIGNMENT = 0x06, 132 CCX_MPEG_DSC_ISO639_LANGUAGE = 0x0A, 133 CCX_MPEG_DSC_VBI_DATA_DESCRIPTOR = 0x45, 134 CCX_MPEG_DSC_VBI_TELETEXT_DESCRIPTOR = 0x46, 135 CCX_MPEG_DSC_TELETEXT_DESCRIPTOR = 0x56, 136 CCX_MPEG_DSC_DVB_SUBTITLE = 0x59, 137 CCX_MPEG_DSC_CAPTION_SERVICE = 0x86, 138 CCX_MPEG_DESC_DATA_COMP = 0xfd, 139 }; 140 141 142 enum 143 { 144 CCX_MESSAGES_QUIET = 0, 145 CCX_MESSAGES_STDOUT =1, 146 CCX_MESSAGES_STDERR =2 147 }; 148 149 enum ccx_datasource 150 { 151 CCX_DS_FILE=0, 152 CCX_DS_STDIN=1, 153 CCX_DS_NETWORK=2, 154 CCX_DS_TCP=3 155 }; 156 157 enum ccx_output_format 158 { 159 CCX_OF_RAW = 0, 160 CCX_OF_SRT = 1, 161 CCX_OF_SAMI = 2, 162 CCX_OF_TRANSCRIPT = 3, 163 CCX_OF_RCWT = 4, 164 CCX_OF_NULL = 5, 165 CCX_OF_SMPTETT = 6, 166 CCX_OF_SPUPNG = 7, 167 CCX_OF_DVDRAW = 8, // See -d at http://www.theneitherworld.com/mcpoodle/SCC_TOOLS/DOCS/SCC_TOOLS.HTML#CCExtract 168 CCX_OF_WEBVTT = 9, 169 CCX_OF_SIMPLE_XML = 10, 170 CCX_OF_G608 = 11, 171 CCX_OF_CURL = 12, 172 CCX_OF_SSA = 13, 173 }; 174 175 enum ccx_output_date_format 176 { 177 ODF_NONE = 0, 178 ODF_HHMMSS = 1, 179 ODF_SECONDS = 2, 180 ODF_DATE =3, 181 ODF_HHMMSSMS = 4, // HH:MM:SS,MILIS (.srt style) 182 }; 183 184 enum ccx_stream_mode_enum 185 { 186 CCX_SM_ELEMENTARY_OR_NOT_FOUND=0, 187 CCX_SM_TRANSPORT=1, 188 CCX_SM_PROGRAM=2, 189 CCX_SM_ASF=3, 190 CCX_SM_MCPOODLESRAW = 4, 191 CCX_SM_RCWT = 5, // Raw Captions With Time, not used yet. 192 CCX_SM_MYTH = 6, // Use the myth loop 193 CCX_SM_MP4 = 7, // MP4, ISO- 194 #ifdef WTV_DEBUG 195 CCX_SM_HEX_DUMP = 8, // Hexadecimal dump generated by wtvccdump 196 #endif 197 CCX_SM_WTV = 9, 198 #ifdef ENABLE_FFMPEG 199 CCX_SM_FFMPEG = 10, 200 #endif 201 CCX_SM_GXF = 11, 202 CCX_SM_AUTODETECT = 16 203 }; 204 205 enum ccx_encoding_type 206 { 207 CCX_ENC_UNICODE = 0, 208 CCX_ENC_LATIN_1 = 1, 209 CCX_ENC_UTF_8 = 2, 210 CCX_ENC_ASCII = 3 211 }; 212 213 enum ccx_bufferdata_type 214 { 215 CCX_UNKNOWN = 0, 216 CCX_PES = 1, 217 CCX_RAW = 2, 218 CCX_H264 = 3, 219 CCX_HAUPPAGE = 4, 220 CCX_TELETEXT = 5, 221 CCX_PRIVATE_MPEG2_CC = 6, 222 CCX_DVB_SUBTITLE = 7, 223 CCX_ISDB_SUBTITLE = 8, 224 /* BUffer where cc data contain 3 byte cc_valid ccdata 1 ccdata 2 */ 225 CCX_RAW_TYPE = 9, 226 CCX_DVD_SUBTITLE =10, 227 }; 228 229 enum ccx_frame_type 230 { 231 CCX_FRAME_TYPE_RESET_OR_UNKNOWN = 0, 232 CCX_FRAME_TYPE_I_FRAME = 1, 233 CCX_FRAME_TYPE_P_FRAME = 2, 234 CCX_FRAME_TYPE_B_FRAME = 3, 235 CCX_FRAME_TYPE_D_FRAME = 4 236 }; 237 238 typedef enum { 239 YES = 1, 240 NO = 0, 241 UNDEFINED = 0xff 242 } bool_t; 243 244 enum ccx_code_type 245 { 246 CCX_CODEC_ANY, 247 CCX_CODEC_TELETEXT, 248 CCX_CODEC_DVB, 249 CCX_CODEC_ISDB_CC, 250 CCX_CODEC_ATSC_CC, 251 CCX_CODEC_NONE, 252 }; 253 254 enum cdp_section_type 255 { 256 CDP_SECTION_DATA = 0x72, 257 CDP_SECTION_SVC_INFO = 0x73, 258 CDP_SECTION_FOOTER = 0x74 259 }; 260 261 /* 262 * This Macro check whether descriptor tag is valid for teletext 263 * codec or not. 264 * 265 * @param desc descriptor tag given for each stream 266 * 267 * @return if descriptor tag is valid then it return 1 otherwise 0 268 * 269 */ 270 271 #define IS_VALID_TELETEXT_DESC(desc) ( ((desc) == CCX_MPEG_DSC_VBI_DATA_DESCRIPTOR )|| \ 272 ( (desc) == CCX_MPEG_DSC_VBI_TELETEXT_DESCRIPTOR ) || \ 273 ( (desc) == CCX_MPEG_DSC_TELETEXT_DESCRIPTOR ) ) 274 275 /* 276 * This macro to be used when you want to find out whether you 277 * should parse f_sel subtitle codec type or not 278 * 279 * @param u_sel pass the codec selected by user to be searched in 280 * all elementary stream, we ignore the not to be selected stream 281 * if we find stream this is selected stream. since setting 282 * selected stream and not selected to same codec does not 283 * make ay sense. 284 * 285 * @param u_nsel pass the codec selected by user not to be parsed 286 * we give false value if f_sel is equal to n_sel 287 * and vice versa true if ... 288 * 289 * @param f_sel pass the codec name whom you are testing to be feasible 290 * to parse. 291 */ 292 #define IS_FEASIBLE(u_sel,u_nsel,f_sel) ( ( (u_sel) == CCX_CODEC_ANY && (u_nsel) != (f_sel) ) || (u_sel) == (f_sel) ) 293 #define CCX_TXT_FORBIDDEN 0 // Ignore teletext packets 294 #define CCX_TXT_AUTO_NOT_YET_FOUND 1 295 #define CCX_TXT_IN_USE 2 // Positive auto-detected, or forced, etc 296 297 #define NB_LANGUAGE 100 298 extern const char *language[NB_LANGUAGE]; 299 300 #define DEF_VAL_STARTCREDITSNOTBEFORE "0" 301 // To catch the theme after the teaser in TV shows 302 #define DEF_VAL_STARTCREDITSNOTAFTER "5:00" 303 #define DEF_VAL_STARTCREDITSFORATLEAST "2" 304 #define DEF_VAL_STARTCREDITSFORATMOST "5" 305 #define DEF_VAL_ENDCREDITSFORATLEAST "2" 306 #define DEF_VAL_ENDCREDITSFORATMOST "5" 307 #endif 308