• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2011-2012 - Mauro Carvalho Chehab
3  * Copyright (c) 2012-2014 - Andre Roth <neolynx@gmail.com>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU Lesser General Public License as published by
7  * the Free Software Foundation version 2.1 of the License.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18  */
19 
20 /**
21  * @file descriptors.h
22  * @ingroup dvb_table
23  * @brief Provides a way to handle MPEG-TS descriptors found on Digital TV
24  * 	streams.
25  * @copyright GNU Lesser General Public License version 2.1 (LGPLv2.1)
26  * @author Mauro Carvalho Chehab
27  * @author Andre Roth
28  *
29  * @par Relevant specs
30  * The descriptors herein are defined on the following specs:
31  * - ISO/IEC 13818-1
32  * - ETSI EN 300 468 V1.11.1 (2010-04)
33  * - SCTE 35 2004
34  * - http://www.etherguidesystems.com/Help/SDOs/ATSC/Semantics/Descriptors/Default.aspx
35  * - http://www.coolstf.com/tsreader/descriptors.html
36  * - ABNT NBR 15603-1 2007
37  * - ATSC A/65:2009 spec
38  *
39  * @par Bug Report
40  * Please submit bug reports and patches to linux-media@vger.kernel.org
41  */
42 
43 
44 #ifndef _DESCRIPTORS_H
45 #define _DESCRIPTORS_H
46 
47 #include <unistd.h>
48 #include <stdint.h>
49 #include <arpa/inet.h>
50 
51 /**
52  * @brief Maximum size of a table session to be parsed
53  * @ingroup dvb_table
54  */
55 #define DVB_MAX_PAYLOAD_PACKET_SIZE 4096
56 
57 /**
58  * @brief number of bytes for the descriptor's CRC check
59  * @ingroup dvb_table
60  */
61 #define DVB_CRC_SIZE 4
62 
63 
64 #ifndef _DOXYGEN
65 struct dvb_v5_fe_parms;
66 #endif
67 
68 /**
69  * @brief Function prototype for a function that initializes the
70  *	  descriptors parsing on a table
71  * @ingroup dvb_table
72  *
73  * @param parms		Struct dvb_v5_fe_parms pointer
74  * @param buf		Buffer with data to be parsed
75  * @param buflen	Size of the buffer to be parsed
76  * @param table		pointer to a place where the allocated memory with the
77  *			table structure will be stored.
78  */
79 typedef void (*dvb_table_init_func)(struct dvb_v5_fe_parms *parms,
80 				    const uint8_t *buf, ssize_t buflen,
81 				    void **table);
82 
83 /**
84  * @brief Table with all possible descriptors
85  * @ingroup dvb_table
86  */
87 extern const dvb_table_init_func dvb_table_initializers[256];
88 
89 #ifndef _DOXYGEN
90 #define bswap16(b) do {\
91 	b = ntohs(b); \
92 } while (0)
93 
94 #define bswap32(b) do {\
95 	b = ntohl(b); \
96 } while (0)
97 
98 /* Deprecated */
99 #define DVB_DESC_HEADER() \
100 	uint8_t type; \
101 	uint8_t length; \
102 	struct dvb_desc *next
103 
104 #endif /* _DOXYGEN */
105 
106 /**
107  * @struct dvb_desc
108  * @brief Linked list containing the several descriptors found on a
109  * 	  MPEG-TS table
110  * @ingroup dvb_table
111  *
112  * @param type		Descriptor type
113  * @param length	Length of the descriptor
114  * @param next		pointer to the dvb_desc descriptor
115  * @param data		Descriptor data
116  */
117 struct dvb_desc {
118 	uint8_t type;
119 	uint8_t length;
120 	struct dvb_desc *next;
121 
122 	uint8_t data[];
123 } __attribute__((packed));
124 
125 #ifndef _DOXYGEN
126 
127 #define dvb_desc_foreach( _desc, _tbl ) \
128 	if (_tbl && _tbl->descriptor) \
129 		for( struct dvb_desc *_desc = _tbl->descriptor; _desc; _desc = _desc->next ) \
130 
131 #define dvb_desc_find(_struct, _desc, _tbl, _type) \
132 	if (_tbl && _tbl->descriptor) \
133 		for( _struct *_desc = (_struct *) _tbl->descriptor; _desc; _desc = (_struct *) _desc->next ) \
134 			if(_desc->type == _type) \
135 
136 #endif /* _DOXYGEN */
137 
138 #ifdef __cplusplus
139 extern "C" {
140 #endif
141 
142 /**
143  * @brief Converts from BCD to CPU integer internal representation
144  * @ingroup dvb_table
145  *
146  * @param bcd	value in BCD encoding
147  */
148 uint32_t dvb_bcd(uint32_t bcd);
149 
150 /**
151  * @brief dumps data into the logs in hexadecimal format
152  * @ingroup dvb_table
153  *
154  * @param parms		Struct dvb_v5_fe_parms pointer
155  * @param prefix	String to be printed before the dvb_hexdump
156  * @param buf		Buffer to hex dump
157  * @param len		Number of bytes to show
158  */
159 void dvb_hexdump(struct dvb_v5_fe_parms *parms, const char *prefix,
160 		 const unsigned char *buf, int len);
161 
162 /**
163  * @brief parse MPEG-TS descriptors
164  * @ingroup dvb_table
165  *
166  * @param parms		Struct dvb_v5_fe_parms pointer
167  * @param buf		Buffer with data to be parsed
168  * @param buflen	Size of the buffer to be parsed
169  * @param head_desc	pointer to the place to store the parsed data
170  *
171  * This function takes a buf as argument and parses it to find the
172  * MPEG-TS descriptors inside it, creating a linked list.
173  *
174  * On success, head_desc will be allocated and filled with a linked list
175  * with the descriptors found inside the buffer.
176  *
177  * This function is used by the several MPEG-TS table handlers to parse
178  * the entire table that got read by dvb_read_sessions and other similar
179  * functions.
180  *
181  * @return Returns 0 on success, a negative value otherwise.
182  */
183 int  dvb_desc_parse(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
184 		    uint16_t buflen, struct dvb_desc **head_desc);
185 
186 /**
187  * @brief frees a dvb_desc linked list
188  * @ingroup dvb_table
189  *
190  * @param list	struct dvb_desc pointer.
191  */
192 void dvb_desc_free (struct dvb_desc **list);
193 
194 /**
195  * @brief prints the contents of a struct dvb_desc linked list
196  * @ingroup dvb_table
197  *
198  * @param parms		Struct dvb_v5_fe_parms pointer
199  * @param desc		struct dvb_desc pointer.
200  */
201 void dvb_desc_print(struct dvb_v5_fe_parms *parms, struct dvb_desc *desc);
202 
203 #ifdef __cplusplus
204 }
205 #endif
206 
207 /**
208  * @brief Function prototype for the descriptors parsing init code
209  * @ingroup dvb_table
210  *
211  * @param parms		Struct dvb_v5_fe_parms pointer
212  * @param buf		buffer with the content of the descriptor
213  * @param desc		struct dvb_desc pointer
214  */
215 typedef int (*dvb_desc_init_func) (struct dvb_v5_fe_parms *parms,
216 				   const uint8_t *buf, struct dvb_desc *desc);
217 
218 /**
219  * @brief Function prototype for the descriptors parsing print code
220  * @ingroup dvb_table
221  *
222  * @param parms		Struct dvb_v5_fe_parms pointer
223  * @param desc		struct dvb_desc pointer
224  */
225 typedef void (*dvb_desc_print_func)(struct dvb_v5_fe_parms *parms,
226 				    const struct dvb_desc *desc);
227 
228 /**
229  * @brief Function prototype for the descriptors memory free code
230  * @ingroup dvb_table
231  *
232  * @param desc		pointer to struct dvb_desc pointer to be freed
233  */
234 typedef void (*dvb_desc_free_func) (struct dvb_desc *desc);
235 
236 /**
237  * @struct dvb_descriptor
238  * @brief Contains the parser information for the MPEG-TS parser code
239  * @ingroup dvb_table
240  *
241  * @param name		String containing the name of the descriptor
242  * @param init		Pointer to a function to initialize the descriptor
243  *			parser. This function fills the descriptor-specific
244  *			internal structures
245  * @param print		Prints the content of the descriptor
246  * @param free		Frees all memory blocks allocated by the init function
247  * @param size		Descriptor's size, in bytes.
248  */
249 struct dvb_descriptor {
250 	const char *name;
251 	dvb_desc_init_func init;
252 	dvb_desc_print_func print;
253 	dvb_desc_free_func free;
254 	ssize_t size;
255 };
256 
257 /**
258  * @brief Contains the parsers for the several descriptors
259  * @ingroup dvb_table
260  */
261 extern const struct dvb_descriptor dvb_descriptors[];
262 
263 /**
264  * @enum descriptors
265  * @brief List containing all descriptors used by Digital TV MPEG-TS
266  * @ingroup dvb_table
267  *
268  * @var video_stream_descriptor
269  *	@brief	video_stream descriptor - ISO/IEC 13818-1
270  * @var audio_stream_descriptor
271  *	@brief	audio_stream descriptor - ISO/IEC 13818-1
272  * @var hierarchy_descriptor
273  *	@brief	hierarchy descriptor - ISO/IEC 13818-1
274  * @var registration_descriptor
275  *	@brief	registration descriptor - ISO/IEC 13818-1
276  * @var ds_alignment_descriptor
277  *	@brief	ds_alignment descriptor - ISO/IEC 13818-1
278  * @var target_background_grid_descriptor
279  *	@brief	target_background_grid descriptor - ISO/IEC 13818-1
280  * @var video_window_descriptor
281  *	@brief	video_window descriptor - ISO/IEC 13818-1
282  * @var conditional_access_descriptor
283  *	@brief	conditional_access descriptor - ISO/IEC 13818-1
284  * @var iso639_language_descriptor
285  *	@brief	iso639_language descriptor - ISO/IEC 13818-1
286  * @var system_clock_descriptor
287  *	@brief	system_clock descriptor - ISO/IEC 13818-1
288  * @var multiplex_buffer_utilization_descriptor
289  *	@brief	multiplex_buffer_utilization descriptor - ISO/IEC 13818-1
290  * @var copyright_descriptor
291  *	@brief	copyright descriptor - ISO/IEC 13818-1
292  * @var maximum_bitrate_descriptor
293  *	@brief	maximum_bitrate descriptor - ISO/IEC 13818-1
294  * @var private_data_indicator_descriptor
295  *	@brief	private_data_indicator descriptor - ISO/IEC 13818-1
296  * @var smoothing_buffer_descriptor
297  *	@brief	smoothing_buffer descriptor - ISO/IEC 13818-1
298  * @var std_descriptor
299  *	@brief	std descriptor - ISO/IEC 13818-1
300  * @var ibp_descriptor
301  *	@brief	ibp descriptor - ISO/IEC 13818-1
302  * @var mpeg4_video_descriptor
303  *	@brief	mpeg4_video descriptor - ISO/IEC 13818-1
304  * @var mpeg4_audio_descriptor
305  *	@brief	mpeg4_audio descriptor - ISO/IEC 13818-1
306  * @var iod_descriptor
307  *	@brief	iod descriptor - ISO/IEC 13818-1
308  * @var sl_descriptor
309  *	@brief	sl descriptor - ISO/IEC 13818-1
310  * @var fmc_descriptor
311  *	@brief	fmc descriptor - ISO/IEC 13818-1
312  * @var external_es_id_descriptor
313  *	@brief	external_es_id descriptor - ISO/IEC 13818-1
314  * @var muxcode_descriptor
315  *	@brief	muxcode descriptor - ISO/IEC 13818-1
316  * @var fmxbuffersize_descriptor
317  *	@brief	fmxbuffersize descriptor - ISO/IEC 13818-1
318  * @var multiplexbuffer_descriptor
319  *	@brief	multiplexbuffer descriptor - ISO/IEC 13818-1
320  * @var content_labeling_descriptor
321  *	@brief	content_labeling descriptor - ISO/IEC 13818-1
322  * @var metadata_pointer_descriptor
323  *	@brief	metadata_pointer descriptor - ISO/IEC 13818-1
324  * @var metadata_descriptor
325  *	@brief	metadata descriptor - ISO/IEC 13818-1
326  * @var metadata_std_descriptor
327  *	@brief	metadata_std descriptor - ISO/IEC 13818-1
328  * @var AVC_video_descriptor
329  *	@brief	AVC_video descriptor - ISO/IEC 13818-1
330  * @var ipmp_descriptor
331  *	@brief	ipmp descriptor - ISO/IEC 13818-1
332  * @var AVC_timing_and_HRD_descriptor
333  *	@brief	AVC_timing_and_HRD descriptor - ISO/IEC 13818-1
334  * @var mpeg2_aac_audio_descriptor
335  *	@brief	mpeg2_aac_audio descriptor - ISO/IEC 13818-1
336  * @var flexmux_timing_descriptor
337  *	@brief	flexmux_timing descriptor - ISO/IEC 13818-1
338  * @var network_name_descriptor
339  *	@brief	network_name descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
340  * @var service_list_descriptor
341  *	@brief	service_list descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
342  * @var stuffing_descriptor
343  *	@brief	stuffing descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
344  * @var satellite_delivery_system_descriptor
345  *	@brief	satellite_delivery_system descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
346  * @var cable_delivery_system_descriptor
347  *	@brief	cable_delivery_system descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
348  * @var VBI_data_descriptor
349  *	@brief	VBI_data descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
350  * @var VBI_teletext_descriptor
351  *	@brief	VBI_teletext descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
352  * @var bouquet_name_descriptor
353  *	@brief	bouquet_name descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
354  * @var service_descriptor
355  *	@brief	service descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
356  * @var country_availability_descriptor
357  *	@brief	country_availability descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
358  * @var linkage_descriptor
359  *	@brief	linkage descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
360  * @var NVOD_reference_descriptor
361  *	@brief	NVOD_reference descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
362  * @var time_shifted_service_descriptor
363  *	@brief	time_shifted_service descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
364  * @var short_event_descriptor
365  *	@brief	short_event descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
366  * @var extended_event_descriptor
367  *	@brief	extended_event descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
368  * @var time_shifted_event_descriptor
369  *	@brief	time_shifted_event descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
370  * @var component_descriptor
371  *	@brief	component descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
372  * @var mosaic_descriptor
373  *	@brief	mosaic descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
374  * @var stream_identifier_descriptor
375  *	@brief	stream_identifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
376  * @var CA_identifier_descriptor
377  *	@brief	CA_identifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
378  * @var content_descriptor
379  *	@brief	content descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
380  * @var parental_rating_descriptor
381  *	@brief	parental_rating descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
382  * @var teletext_descriptor
383  *	@brief	teletext descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
384  * @var telephone_descriptor
385  *	@brief	telephone descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
386  * @var local_time_offset_descriptor
387  *	@brief	local_time_offset descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
388  * @var subtitling_descriptor
389  *	@brief	subtitling descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
390  * @var terrestrial_delivery_system_descriptor
391  *	@brief	terrestrial_delivery_system descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
392  * @var multilingual_network_name_descriptor
393  *	@brief	multilingual_network_name descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
394  * @var multilingual_bouquet_name_descriptor
395  *	@brief	multilingual_bouquet_name descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
396  * @var multilingual_service_name_descriptor
397  *	@brief	multilingual_service_name descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
398  * @var multilingual_component_descriptor
399  *	@brief	multilingual_component descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
400  * @var private_data_specifier_descriptor
401  *	@brief	private_data_specifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
402  * @var service_move_descriptor
403  *	@brief	service_move descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
404  * @var short_smoothing_buffer_descriptor
405  *	@brief	short_smoothing_buffer descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
406  * @var frequency_list_descriptor
407  *	@brief	frequency_list descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
408  * @var partial_transport_stream_descriptor
409  *	@brief	partial_transport_stream descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
410  * @var data_broadcast_descriptor
411  *	@brief	data_broadcast descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
412  * @var scrambling_descriptor
413  *	@brief	scrambling descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
414  * @var data_broadcast_id_descriptor
415  *	@brief	data_broadcast_id descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
416  * @var transport_stream_descriptor
417  *	@brief	transport_stream descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
418  * @var DSNG_descriptor
419  *	@brief	DSNG descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
420  * @var PDC_descriptor
421  *	@brief	PDC descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
422  * @var AC_3_descriptor
423  *	@brief	AC_3 descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
424  * @var ancillary_data_descriptor
425  *	@brief	ancillary_data descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
426  * @var cell_list_descriptor
427  *	@brief	cell_list descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
428  * @var cell_frequency_link_descriptor
429  *	@brief	cell_frequency_link descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
430  * @var announcement_support_descriptor
431  *	@brief	announcement_support descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
432  * @var application_signalling_descriptor
433  *	@brief	application_signalling descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
434  * @var adaptation_field_data_descriptor
435  *	@brief	adaptation_field_data descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
436  * @var service_identifier_descriptor
437  *	@brief	service_identifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
438  * @var service_availability_descriptor
439  *	@brief	service_availability descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
440  * @var default_authority_descriptor
441  *	@brief	default_authority descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
442  * @var related_content_descriptor
443  *	@brief	related_content descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
444  * @var TVA_id_descriptor
445  *	@brief	TVA_id descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
446  * @var content_identifier_descriptor
447  *	@brief	content_identifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
448  * @var time_slice_fec_identifier_descriptor
449  *	@brief	time_slice_fec_identifier descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
450  * @var ECM_repetition_rate_descriptor
451  *	@brief	ECM_repetition_rate descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
452  * @var S2_satellite_delivery_system_descriptor
453  *	@brief	S2_satellite_delivery_system descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
454  * @var enhanced_AC_3_descriptor
455  *	@brief	enhanced_AC_3 descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
456  * @var DTS_descriptor
457  *	@brief	DTS descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
458  * @var AAC_descriptor
459  *	@brief	AAC descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
460  * @var XAIT_location_descriptor
461  *	@brief	XAIT_location descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
462  * @var FTA_content_management_descriptor
463  *	@brief	FTA_content_management descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
464  * @var extension_descriptor
465  *	@brief	extension descriptor - ETSI EN 300 468 V1.11.1 (2010-04)
466  * @var CUE_identifier_descriptor
467  *	@brief	CUE_identifier descriptor - SCTE 35 2004
468  * @var extended_channel_name
469  *	@brief	extended_channel_name descriptor - SCTE 35 2004
470  * @var service_location
471  *	@brief service_location descriptor - SCTE 35 2004
472  * @var component_name_descriptor
473  *	@brief	component_name descriptor - SCTE 35 2004
474  *	@see http://www.etherguidesystems.com/Help/SDOs/ATSC/Semantics/Descriptors/Default.aspx
475  * @var logical_channel_number_descriptor
476  *	@brief	logical_channel_number descriptor - SCTE 35 2004
477  *	@see http://www.coolstf.com/tsreader/descriptors.html
478  *
479  * @var carousel_id_descriptor
480  *	@brief	carousel_id descriptor - ABNT NBR 15603-1 2007
481  * @var association_tag_descriptor
482  *	@brief	association_tag descriptor - ABNT NBR 15603-1 2007
483  * @var deferred_association_tags_descriptor
484  *	@brief	deferred_association_tags descriptor - ABNT NBR 15603-1 2007
485 
486  * @var hierarchical_transmission_descriptor
487  *	@brief	hierarchical_transmission descriptor - ABNT NBR 15603-1 2007
488  * @var digital_copy_control_descriptor
489  *	@brief	digital_copy_control descriptor - ABNT NBR 15603-1 2007
490  * @var network_identifier_descriptor
491  *	@brief	network_identifier descriptor - ABNT NBR 15603-1 2007
492  * @var partial_transport_stream_time_descriptor
493  *	@brief	partial_transport_stream_time descriptor - ABNT NBR 15603-1 2007
494  * @var audio_component_descriptor
495  *	@brief	audio_component descriptor - ABNT NBR 15603-1 2007
496  * @var hyperlink_descriptor
497  *	@brief	hyperlink descriptor - ABNT NBR 15603-1 2007
498  * @var target_area_descriptor
499  *	@brief	target_area descriptor - ABNT NBR 15603-1 2007
500  * @var data_contents_descriptor
501  *	@brief	data_contents descriptor - ABNT NBR 15603-1 2007
502  * @var video_decode_control_descriptor
503  *	@brief	video_decode_control descriptor - ABNT NBR 15603-1 2007
504  * @var download_content_descriptor
505  *	@brief	download_content descriptor - ABNT NBR 15603-1 2007
506  * @var CA_EMM_TS_descriptor
507  *	@brief	CA_EMM_TS descriptor - ABNT NBR 15603-1 2007
508  * @var CA_contract_information_descriptor
509  *	@brief	CA_contract_information descriptor - ABNT NBR 15603-1 2007
510  * @var CA_service_descriptor
511  *	@brief	CA_service descriptor - ABNT NBR 15603-1 2007
512  * @var TS_Information_descriptor
513  *	@brief transport_stream_information descriptor - ABNT NBR 15603-1 2007
514  * @var extended_broadcaster_descriptor
515  *	@brief	extended_broadcaster descriptor - ABNT NBR 15603-1 2007
516  * @var logo_transmission_descriptor
517  *	@brief	logo_transmission descriptor - ABNT NBR 15603-1 2007
518  * @var basic_local_event_descriptor
519  *	@brief	basic_local_event descriptor - ABNT NBR 15603-1 2007
520  * @var reference_descriptor
521  *	@brief	reference descriptor - ABNT NBR 15603-1 2007
522  * @var node_relation_descriptor
523  *	@brief	node_relation descriptor - ABNT NBR 15603-1 2007
524  * @var short_node_information_descriptor
525  *	@brief	short_node_information descriptor - ABNT NBR 15603-1 2007
526  * @var STC_reference_descriptor
527  *	@brief	STC_reference descriptor - ABNT NBR 15603-1 2007
528  * @var series_descriptor
529  *	@brief	series descriptor - ABNT NBR 15603-1 2007
530  * @var event_group_descriptor
531  *	@brief	event_group descriptor - ABNT NBR 15603-1 2007
532  * @var SI_parameter_descriptor
533  *	@brief	SI_parameter descriptor - ABNT NBR 15603-1 2007
534  * @var broadcaster_Name_Descriptor
535  * 	@brief broadcaster_Name descriptor - ABNT NBR 15603-1 2007
536  * @var component_group_descriptor
537  *	@brief	component_group descriptor - ABNT NBR 15603-1 2007
538  * @var SI_prime_TS_descriptor
539  *	@brief	SI_prime_transport_stream descriptor - ABNT NBR 15603-1 2007
540  * @var board_information_descriptor
541  *	@brief	board_information descriptor - ABNT NBR 15603-1 2007
542  * @var LDT_linkage_descriptor
543  *	@brief	LDT_linkage descriptor - ABNT NBR 15603-1 2007
544  * @var connected_transmission_descriptor
545  *	@brief	connected_transmission descriptor - ABNT NBR 15603-1 2007
546  * @var content_availability_descriptor
547  *	@brief	content_availability descriptor - ABNT NBR 15603-1 2007
548  * @var service_group_descriptor
549  *	@brief	service_group descriptor - ABNT NBR 15603-1 2007
550  * @var carousel_compatible_composite_descriptor
551  *	@brief	carousel_compatible_composite descriptor - ABNT NBR 15603-1 2007
552  * @var conditional_playback_descriptor
553  *	@brief	conditional_playback descriptor - ABNT NBR 15603-1 2007
554  * @var ISDBT_delivery_system_descriptor
555  *	@brief	ISDBT terrestrial_delivery_system descriptor - ABNT NBR 15603-1 2007
556  * @var partial_reception_descriptor
557  *	@brief	partial_reception descriptor - ABNT NBR 15603-1 2007
558  * @var emergency_information_descriptor
559  *	@brief	emergency_information descriptor - ABNT NBR 15603-1 2007
560  * @var data_component_descriptor
561  *	@brief	data_component descriptor - ABNT NBR 15603-1 2007
562  * @var system_management_descriptor
563  *	@brief	system_management descriptor - ABNT NBR 15603-1 2007
564  *
565  * @var atsc_stuffing_descriptor
566  *	@brief	atsc_stuffing descriptor - ATSC A/65:2009
567  * @var atsc_ac3_audio_descriptor
568  *	@brief	atsc_ac3_audio descriptor - ATSC A/65:2009
569  * @var atsc_caption_service_descriptor
570  *	@brief	atsc_caption_service descriptor - ATSC A/65:2009
571  * @var atsc_content_advisory_descriptor
572  *	@brief	atsc_content_advisory descriptor - ATSC A/65:2009
573  * @var atsc_extended_channel_descriptor
574  *	@brief	atsc_extended_channel descriptor - ATSC A/65:2009
575  * @var atsc_service_location_descriptor
576  *	@brief	atsc_service_location descriptor - ATSC A/65:2009
577  * @var atsc_time_shifted_service_descriptor
578  *	@brief	atsc_time_shifted_service descriptor - ATSC A/65:2009
579  * @var atsc_component_name_descriptor
580  *	@brief	atsc_component_name descriptor - ATSC A/65:2009
581  * @var atsc_DCC_departing_request_descriptor
582  *	@brief	atsc_DCC_departing_request descriptor - ATSC A/65:2009
583  * @var atsc_DCC_arriving_request_descriptor
584  *	@brief	atsc_DCC_arriving_request descriptor - ATSC A/65:2009
585  * @var atsc_redistribution_control_descriptor
586  *	@brief	atsc_redistribution_control descriptor - ATSC A/65:2009
587  * @var atsc_ATSC_private_information_descriptor
588  *	@brief	atsc_ATSC_private_information descriptor - ATSC A/65:2009
589  * @var atsc_genre_descriptor
590  *	@brief	atsc_genre descriptor - ATSC A/65:2009
591  */
592 enum descriptors {
593 	/* ISO/IEC 13818-1 */
594 	video_stream_descriptor				= 0x02,
595 	audio_stream_descriptor				= 0x03,
596 	hierarchy_descriptor				= 0x04,
597 	registration_descriptor				= 0x05,
598 	ds_alignment_descriptor				= 0x06,
599 	target_background_grid_descriptor		= 0x07,
600 	video_window_descriptor				= 0x08,
601 	conditional_access_descriptor			= 0x09,
602 	iso639_language_descriptor			= 0x0a,
603 	system_clock_descriptor				= 0x0b,
604 	multiplex_buffer_utilization_descriptor		= 0x0c,
605 	copyright_descriptor				= 0x0d,
606 	maximum_bitrate_descriptor			= 0x0e,
607 	private_data_indicator_descriptor		= 0x0f,
608 	smoothing_buffer_descriptor			= 0x10,
609 	std_descriptor					= 0x11,
610 	ibp_descriptor					= 0x12,
611 
612 	mpeg4_video_descriptor				= 0x1b,
613 	mpeg4_audio_descriptor				= 0x1c,
614 	iod_descriptor					= 0x1d,
615 	sl_descriptor					= 0x1e,
616 	fmc_descriptor					= 0x1f,
617 	external_es_id_descriptor			= 0x20,
618 	muxcode_descriptor				= 0x21,
619 	fmxbuffersize_descriptor			= 0x22,
620 	multiplexbuffer_descriptor			= 0x23,
621 	content_labeling_descriptor			= 0x24,
622 	metadata_pointer_descriptor			= 0x25,
623 	metadata_descriptor				= 0x26,
624 	metadata_std_descriptor				= 0x27,
625 	AVC_video_descriptor				= 0x28,
626 	ipmp_descriptor					= 0x29,
627 	AVC_timing_and_HRD_descriptor			= 0x2a,
628 	mpeg2_aac_audio_descriptor			= 0x2b,
629 	flexmux_timing_descriptor			= 0x2c,
630 
631 	/* ETSI EN 300 468 V1.11.1 (2010-04) */
632 
633 	network_name_descriptor				= 0x40,
634 	service_list_descriptor				= 0x41,
635 	stuffing_descriptor				= 0x42,
636 	satellite_delivery_system_descriptor		= 0x43,
637 	cable_delivery_system_descriptor		= 0x44,
638 	VBI_data_descriptor				= 0x45,
639 	VBI_teletext_descriptor				= 0x46,
640 	bouquet_name_descriptor				= 0x47,
641 	service_descriptor				= 0x48,
642 	country_availability_descriptor			= 0x49,
643 	linkage_descriptor				= 0x4a,
644 	NVOD_reference_descriptor			= 0x4b,
645 	time_shifted_service_descriptor			= 0x4c,
646 	short_event_descriptor				= 0x4d,
647 	extended_event_descriptor			= 0x4e,
648 	time_shifted_event_descriptor			= 0x4f,
649 	component_descriptor				= 0x50,
650 	mosaic_descriptor				= 0x51,
651 	stream_identifier_descriptor			= 0x52,
652 	CA_identifier_descriptor			= 0x53,
653 	content_descriptor				= 0x54,
654 	parental_rating_descriptor			= 0x55,
655 	teletext_descriptor				= 0x56,
656 	telephone_descriptor				= 0x57,
657 	local_time_offset_descriptor			= 0x58,
658 	subtitling_descriptor				= 0x59,
659 	terrestrial_delivery_system_descriptor		= 0x5a,
660 	multilingual_network_name_descriptor		= 0x5b,
661 	multilingual_bouquet_name_descriptor		= 0x5c,
662 	multilingual_service_name_descriptor		= 0x5d,
663 	multilingual_component_descriptor		= 0x5e,
664 	private_data_specifier_descriptor		= 0x5f,
665 	service_move_descriptor				= 0x60,
666 	short_smoothing_buffer_descriptor		= 0x61,
667 	frequency_list_descriptor			= 0x62,
668 	partial_transport_stream_descriptor		= 0x63,
669 	data_broadcast_descriptor			= 0x64,
670 	scrambling_descriptor				= 0x65,
671 	data_broadcast_id_descriptor			= 0x66,
672 	transport_stream_descriptor			= 0x67,
673 	DSNG_descriptor					= 0x68,
674 	PDC_descriptor					= 0x69,
675 	AC_3_descriptor					= 0x6a,
676 	ancillary_data_descriptor			= 0x6b,
677 	cell_list_descriptor				= 0x6c,
678 	cell_frequency_link_descriptor			= 0x6d,
679 	announcement_support_descriptor			= 0x6e,
680 	application_signalling_descriptor		= 0x6f,
681 	adaptation_field_data_descriptor		= 0x70,
682 	service_identifier_descriptor			= 0x71,
683 	service_availability_descriptor			= 0x72,
684 	default_authority_descriptor			= 0x73,
685 	related_content_descriptor			= 0x74,
686 	TVA_id_descriptor				= 0x75,
687 	content_identifier_descriptor			= 0x76,
688 	time_slice_fec_identifier_descriptor		= 0x77,
689 	ECM_repetition_rate_descriptor			= 0x78,
690 	S2_satellite_delivery_system_descriptor		= 0x79,
691 	enhanced_AC_3_descriptor			= 0x7a,
692 	DTS_descriptor					= 0x7b,
693 	AAC_descriptor					= 0x7c,
694 	XAIT_location_descriptor			= 0x7d,
695 	FTA_content_management_descriptor		= 0x7e,
696 	extension_descriptor				= 0x7f,
697 
698 	/* SCTE 35 2004 */
699 	CUE_identifier_descriptor			= 0x8a,
700 
701 	extended_channel_name				= 0xa0,
702 	service_location				= 0xa1,
703 	/* From http://www.etherguidesystems.com/Help/SDOs/ATSC/Semantics/Descriptors/Default.aspx */
704 	component_name_descriptor			= 0xa3,
705 
706 	/* From http://www.coolstf.com/tsreader/descriptors.html */
707 	logical_channel_number_descriptor		= 0x83,
708 
709 	/* ISDB Descriptors, as defined on ABNT NBR 15603-1 2007 */
710 
711 	carousel_id_descriptor				= 0x13,
712 	association_tag_descriptor			= 0x14,
713 	deferred_association_tags_descriptor		= 0x15,
714 
715 	hierarchical_transmission_descriptor		= 0xc0,
716 	digital_copy_control_descriptor			= 0xc1,
717 	network_identifier_descriptor			= 0xc2,
718 	partial_transport_stream_time_descriptor	= 0xc3,
719 	audio_component_descriptor			= 0xc4,
720 	hyperlink_descriptor				= 0xc5,
721 	target_area_descriptor				= 0xc6,
722 	data_contents_descriptor			= 0xc7,
723 	video_decode_control_descriptor			= 0xc8,
724 	download_content_descriptor			= 0xc9,
725 	CA_EMM_TS_descriptor				= 0xca,
726 	CA_contract_information_descriptor		= 0xcb,
727 	CA_service_descriptor				= 0xcc,
728 	TS_Information_descriptor			= 0xcd,
729 	extended_broadcaster_descriptor			= 0xce,
730 	logo_transmission_descriptor			= 0xcf,
731 	basic_local_event_descriptor			= 0xd0,
732 	reference_descriptor				= 0xd1,
733 	node_relation_descriptor			= 0xd2,
734 	short_node_information_descriptor		= 0xd3,
735 	STC_reference_descriptor			= 0xd4,
736 	series_descriptor				= 0xd5,
737 	event_group_descriptor				= 0xd6,
738 	SI_parameter_descriptor				= 0xd7,
739 	broadcaster_Name_Descriptor			= 0xd8,
740 	component_group_descriptor			= 0xd9,
741 	SI_prime_TS_descriptor				= 0xda,
742 	board_information_descriptor			= 0xdb,
743 	LDT_linkage_descriptor				= 0xdc,
744 	connected_transmission_descriptor		= 0xdd,
745 	content_availability_descriptor			= 0xde,
746 	service_group_descriptor			= 0xe0,
747 	carousel_compatible_composite_descriptor	= 0xf7,
748 	conditional_playback_descriptor			= 0xf8,
749 	ISDBT_delivery_system_descriptor		= 0xfa,
750 	partial_reception_descriptor			= 0xfb,
751 	emergency_information_descriptor		= 0xfc,
752 	data_component_descriptor			= 0xfd,
753 	system_management_descriptor			= 0xfe,
754 
755 	/* ATSC descriptors - ATSC A/65:2009 spec */
756 	atsc_stuffing_descriptor			= 0x80,
757 	atsc_ac3_audio_descriptor			= 0x81,
758 	atsc_caption_service_descriptor			= 0x86,
759 	atsc_content_advisory_descriptor		= 0x87,
760 	atsc_extended_channel_descriptor		= 0xa0,
761 	atsc_service_location_descriptor		= 0xa1,
762 	atsc_time_shifted_service_descriptor		= 0xa2,
763 	atsc_component_name_descriptor			= 0xa3,
764 	atsc_DCC_departing_request_descriptor		= 0xa8,
765 	atsc_DCC_arriving_request_descriptor		= 0xa9,
766 	atsc_redistribution_control_descriptor		= 0xaa,
767 	atsc_ATSC_private_information_descriptor	= 0xad,
768 	atsc_genre_descriptor				= 0xab,
769 };
770 
771 
772 /*
773  * NOTE: this is here just to avoid API break. There was a typo
774  * on the name of this descriptor
775  */
776 #define TS_Information_descriptior TS_Information_descriptor
777 
778 /* Please see desc_extension.h for extension_descriptor types */
779 
780 #endif
781