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