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