descriptors.h 29 KB

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