MythTV master
mpegdescriptors.h
Go to the documentation of this file.
1// -*- Mode: c++ -*-
2// Copyright (c) 2003-2004, Daniel Thor Kristjansson
3#ifndef MPEG_DESCRIPTORS_H
4#define MPEG_DESCRIPTORS_H
5
6// C++ headers
7#include <array>
8#include <vector>
9
10// Qt headers
11#include <QMutex>
12#include <QString>
13
14// MythTV
15#include "libmythbase/iso639.h"
16#include "libmythtv/mythtvexp.h"
17
18using desc_list_t = std::vector<const unsigned char *>;
19
21{
22 public:
23 enum : std::uint8_t
24 {
25 // MPEG
28 hierarchy = 0x04,
29 registration = 0x05, /* implemented */
33 conditional_access = 0x09, /* implemented */
34 iso_639_language = 0x0A, /* implemented */
35 system_clock = 0x0B, /* implemented */
37 copyright = 0x0D,
38 maximum_bitrate = 0x0E, /* implemented */
41 std = 0x11,
42 ibp = 0x12,
46 /* RESERVED = 0x16, */
53 iod = 0x1D,
54 sl = 0x1E,
55 fmc = 0x1F,
57 mux_code = 0x21,
62 metadata = 0x26,
64 avc_video = 0x28, /* implemented */
65 ipmp = 0x29,
66 avc_timing_and_hrd = 0x2A, /* partial */
69 hevc_video = 0x38,
70
71 // DVB Bluebook A038 (Feb 2019) p 36-38, Table 12
72 network_name = 0x40, /* implemented */
73 service_list = 0x41, /* implemented */
74 dvb_stuffing = 0x42, /* implemented */
75 satellite_delivery_system = 0x43, /* implemented */
76 cable_delivery_system = 0x44, /* implemented */
77 vbi_data = 0x45, /* partial */
78 vbi_teletext = 0x46, /* partial */
79 bouquet_name = 0x47, /* implemented */
80 service = 0x48, /* implemented, toString lacking */
81 country_availability = 0x49, /* implemented */
82 linkage = 0x4A, /* partial */
83 nvod_reference = 0x4B, /* partial */
84 dvb_time_shifted_service = 0x4C, /* partial */
85 short_event = 0x4D, /* implemented */
86 extended_event = 0x4E, /* implemented */
87 time_shifted_event = 0x4F, /* partial */
88
89 component = 0x50, /* implemented, toString lacking */
90 mosaic = 0x51, /* partial */
91 stream_identifier = 0x52, /* implemented */
92 ca_identifier = 0x53, /* partial */
93 content = 0x54, /* implemented */
94 parental_rating = 0x55, /* partial */
95 teletext = 0x56, /* partial */
96 telephone = 0x57, /* partial */
98 subtitling = 0x59, /* partial */
99 terrestrial_delivery_system = 0x5A, /* implemented */
100 multilingual_network_name = 0x5B, /* partial */
101 multilingual_bouquet_name = 0x5C, /* partial */
102 multilingual_service_name = 0x5D, /* partial */
104 private_data_specifier = 0x5F, /* partial */
105
106 service_move = 0x60, /* partial */
107 short_smoothing_buffer = 0x61, /* partial */
108 frequency_list = 0x62, /* implemented */
109 partial_transport_stream = 0x63, /* partial */
110 data_broadcast = 0x64, /* partial */
111 scrambling = 0x65, /* partial */
112 data_broadcast_id = 0x66, /* partial */
113 transport_stream = 0x67, /* partial */
114 dsng = 0x68, /* partial */
115 pdc = 0x69, /* partial */
116 ac3 = 0x6A, /* partial */
117 ancillary_data = 0x6B, /* partial */
118 cell_list = 0x6C, /* partial */
119 cell_frequency_link = 0x6D, /* partial */
120 announcement_support = 0x6E, /* partial */
122
123 adaptation_field_data = 0x70, /* partial */
125 service_availability = 0x72, /* partial */
126 default_authority = 0x73, /* implemented */
128 tva_id = 0x75,
129 dvb_content_identifier = 0x76, /* partial */
132 s2_satellite_delivery_system = 0x79, /* partial */
133 eac3 = 0x7A,
134 dts = 0x7B,
135 aac = 0x7C,
138 extension = 0x7F,
139
140 // DVB Bluebook A038 (Feb 2019) p 94, Table 109
141 //
142 // Extension descriptors
148 message = 0x08,
152 xait_pid = 0x0C,
158
159 // ATSC
161 ac3_audio_stream = 0x81, /* partial */
163 caption_service = 0x86, /* implemented */
167
168 // SCTE
169 scte_frame_rate = 0x82, /* implemented, also ATSC */
170 scte_extended_video = 0x83, /* implemented, also ATSC */
171 scte_component_name = 0x84, /* implemented, also ATSC */
172 scte_cue_identifier = 0x8A, /* implemented */
173 scte_frequency_spec = 0x90, /* implemented */
174 scte_modulation_params = 0x91, /* implemented */
175 scte_transport_stream_id = 0x92, /* implemented */
176 scte_revision_detection = 0x93, /* implemented */
177
178 // ATSC
179 extended_channel_name = 0xA0, /* implemented */
182 component_name = 0xA3, /* implemented */
192
193 atsc_content_identifier = 0xB6, /* partial */
194 };
195};
196
198{
199 public:
200 enum : std::uint8_t
201 {
202 // These can conflict and should only be used
203 // on these specific networks.
204
205 // Private -- UK and NL
206 dvb_logical_channel_descriptor = 0x83, /* implemented */
207 dvb_simulcast_channel_descriptor = 0x88, /* implemented */
208
209 // Private -- NL Casema
212
213 // Private -- Dish Network
215 dish_event_mpaa = 0x89, /* implemented */
216 dish_event_name = 0x91, /* implemented */
217 dish_event_description = 0x92, /* implemented */
218 dish_event_properties = 0x94, /* implemented */
219 dish_event_vchip = 0x95, /* implemented */
220 dish_event_tags = 0x96, /* implemented */
221
222 // Private -- SES
224
225 // Private -- CH UPC Cablecom
227
228 // Private -- Sky Astra-2 28.2E and other Sky satellites
229 sky_lcn_table = 0xb1, /* implemented */
230
231 // Private -- FreeSat Astra-2 28.2E
232 freesat_lcn_table = 0xd3, /* implemented */
233 freesat_region_table = 0xd4, /* implemented */
234 freesat_chan_cat_mapping = 0xd5, /* todo */
235 freesat_d6_table = 0xd6, /* unknown */
236 freesat_d7_table = 0xd7, /* unknown */
237 freesat_category_table = 0xd8, /* todo */
238 freesat_callsign = 0xd9, /* partial */
239
240 // Private -- premiere.de
244
245 // Private -- OpenTV
254 opentv_channel_list = 0xB1, /* sky_lcn_table */
255
256 // Private -- CI Plus LPP
258 };
259};
260
261/*
262 * Private_Data_Specifier_ID from http://www.dvbservices.com/identifiers/private_data_spec_id
263 */
265{
266 public:
267 enum
268 {
269 SES = 0x00000001, // Société Européenne des Satellites
270 BSB1 = 0x00000002, // UK Sky (Astra 28.2E), Sky New Zealand (Optus D1 160E0)
271 CASEMA = 0x00000016, // NL Casema
272 EACEM = 0x00000028, // NL Ziggo
273 NORDIG = 0x00000029, // EU Nordig
274 CIPLUS = 0x00000040, // CI Plus LPP
275 ORS = 0x000001B0, // ORS comm GmbH & Co KG
276 UPC1 = 0x00000600, // UPC Cablecom
277 ITC = 0x0000233A, // Independent Television Commission
278 IRDETO = 0x00362275, // Irdeto
279 FSAT = 0x46534154, // UK BBC FreeSat on Astra 28.2E
280 OTV = 0x4f545600, // OpenTV
281 };
282};
283
284/*
285 * Original_Network_ID from http://www.dvbservices.com/identifiers/original_network_id
286 */
288{
289 public:
290 enum : std::uint16_t
291 {
292 SES2 = 0x0002, // Société Européenne des Satellites
293 BBC = 0x003B, // BBC / Freesat
294 TELENOR = 0x0046, // Telenor Norway
295 PREMIERE = 0x0085, // Sky Deutschland Fernsehen GmbH & Co. KG
296 SKYNZ = 0x00A9, // Sky New Zealand / Sky Network Television Ltd (NDS)
297 MCA = 0x1800, // Not defined in DVB-SI Original Network ID tables
298 NOZEMA = 0x2210, // Netherlands Digital Terrestrial Television
299 };
300};
301
303{
304 public:
305 operator const unsigned char*() const { return m_data; }
306
307 explicit MPEGDescriptor(const unsigned char *data, int len = 300) : m_data(data)
308 {
309 if ((len < 2) || (int(DescriptorLength()) + 2) > len)
310 m_data = nullptr;
311 }
312 explicit MPEGDescriptor(const std::vector<uint8_t> &data) : m_data(data.data())
313 {
314 if ((data.size() < 2) ||
315 ((static_cast<size_t>(DescriptorLength()) + 2) > data.size()))
316 m_data = nullptr;
317 }
318 MPEGDescriptor(const unsigned char *data,
319 int len, uint tag) : m_data(data)
320 {
321 if ((len < 2) || ((int(DescriptorLength()) + 2) > len)
322 || (DescriptorTag() != tag))
323 m_data = nullptr;
324 }
325 MPEGDescriptor(const std::vector<uint8_t> &data, uint tag) : m_data(data.data())
326 {
327 if ((data.size() < 2) ||
328 ((static_cast<size_t>(DescriptorLength()) + 2) > data.size())
329 || (DescriptorTag() != tag))
330 m_data = nullptr;
331 }
332 MPEGDescriptor(const unsigned char *data,
333 int len, uint tag, uint req_desc_len) : m_data(data)
334 {
335 if ((len < 2) || ((int(DescriptorLength()) + 2) > len)
336 || (DescriptorTag() != tag)
337 || (DescriptorLength() != req_desc_len))
338 m_data = nullptr;
339 }
340 virtual ~MPEGDescriptor() = default;
341
342 bool IsValid(void) const { return m_data; }
343 uint size(void) const { return DescriptorLength() + 2; }
344
345 uint DescriptorTag(void) const { return m_data[0]; }
346 uint DescriptorLength(void) const { return m_data[1]; }
347 uint DescriptorTagExtension(void) const { return m_data[2]; }
348 QString DescriptorTagString(void) const;
349
350 virtual QString toString(void) const;
351 virtual QString toStringPD(uint priv_dsid) const;
352 virtual QString toStringXML(uint indent_level) const;
353
354 template <typename DESC_NAME>
355 QString descrToString() const
356 {
357 if (!IsValid())
358 return {};
359 DESC_NAME d(m_data, DescriptorLength()+2);
360 if (!d.IsValid())
361 return {};
362 return d.toString();
363 }
364
365 static desc_list_t Parse(const unsigned char *data, uint len);
366 static desc_list_t ParseAndExclude(const unsigned char *data, uint len,
367 int excluded_descid);
368 static desc_list_t ParseOnlyInclude(const unsigned char *data, uint len,
369 int excluded_descid);
370
371 static const unsigned char *Find(const desc_list_t &parsed, uint desc_tag);
372 static const unsigned char *FindExtension(const desc_list_t &parsed, uint desc_tag);
373 static desc_list_t FindAll(const desc_list_t &parsed, uint desc_tag);
374
375 static const unsigned char *FindBestMatch(
376 const desc_list_t &parsed, uint desc_tag, QMap<uint,uint> &langPref);
377 static desc_list_t FindBestMatches(
378 const desc_list_t &parsed, uint desc_tag, QMap<uint,uint> &langPref);
379
380 protected:
381 const unsigned char *m_data;
382
383 public:
384 QString hexdump(void) const;
385 QString descrDump(const QString &name) const;
386};
387
388// ISO 13181-1:2019 page 75
390{
391 public:
392 explicit VideoStreamDescriptor(const unsigned char *data, int len = 300) :
393 MPEGDescriptor(data, len, DescriptorID::video_stream) { }
394 // Name bits loc expected value
395 // descriptor_tag 8 0.0 0x02
396 // descriptor_length 8 1.0
397 // multiple_frame_rate_flag 1 2.0
398 bool MultipleFrameRateFlag(void) const { return (m_data[2] & 0x80) != 0; }
399 // frame_rate_code 4 2.1
400 uint FrameRateCode(void) const { return (m_data[2]>>3) & 0x0F; }
401 // MPEG_1_only_flag 1 2.5
402 bool MPEG1OnlyFlag(void) const { return (m_data[2] & 0x04) != 0; }
403 // constrained_parameterflag 1 2.6
404 bool ConstrainedParameterFlag(void) const { return (m_data[2] & 0x02) != 0; }
405 // still_picture_flag 1 2.7
406 bool StillPictureFlag(void) const { return (m_data[2] & 0x01) != 0; }
407 // profile_and_level_indication 8 3.0
408 uint ProfileAndLevelIndication(void) const { return MPEG1OnlyFlag() ? 0 : m_data[3]; }
409 // chroma_format 2 4.0
410 uint ChromaFormat(void) const { return MPEG1OnlyFlag() ? 0 : (m_data[4] >> 6) & 0x03; }
411 // frame_rate_extension_flag 1 4.2
412 bool FrameRateExtensionFlag(void) const { return MPEG1OnlyFlag() ? false : (m_data[4] & 0x20) != 0; }
413
414 QString toString() const override; // MPEGDescriptor
415};
416
417// ISO 13181-1:2019 page 77
419{
420 public:
421 explicit AudioStreamDescriptor(const unsigned char *data, int len = 300) :
422 MPEGDescriptor(data, len, DescriptorID::audio_stream) { }
423 // Name bits loc expected value
424 // descriptor_tag 8 0.0 0x03
425 // descriptor_length 8 1.0
426 // free_format_flag 1 2.0
427 bool FreeFormatFlag(void) const { return (m_data[2] & 0x80) != 0; }
428 // ID 1 2.1
429 bool ID(void) const { return (m_data[2] & 0x40) != 0; }
430 // layer 2 2.2
431 uint Layer(void) const { return (m_data[2] >> 4) & 0x03; }
432 // variable_rate_audio_indicator 1 2.4
433 bool VariableRateAudioIndicator(void) const { return (m_data[2] & 0x08) != 0; }
434 // reserved 3 2.5
435
436 QString toString() const override; // MPEGDescriptor
437};
438
439// a_52a.pdf p119, Table A1
441{
442 public:
443 explicit RegistrationDescriptor(const unsigned char *data, int len = 300) :
444 MPEGDescriptor(data, len, DescriptorID::registration)
445 {
446 // The HD-PVR outputs a registration descriptor with a length
447 // of 8 rather than 4, so we accept any length >= 4, not just 4.
448 if (IsValid() && DescriptorLength() < 4)
449 m_data = nullptr;
450 }
451
453 { return (m_data[2]<<24) | (m_data[3]<<16) | (m_data[4]<<8) | m_data[5]; }
454 QString FormatIdentifierString(void) const
455 {
456 return QString("") + QChar(m_data[2]) + QChar(m_data[3]) +
457 QChar(m_data[4]) + QChar(m_data[5]);
458 }
459 QString toString() const override; // MPEGDescriptor
460
461 private:
462 static void InitializeDescriptionMap(void);
463 static QString GetDescription(const QString &fmt);
464
465 private:
466 static QMutex description_map_lock;
468 static QMap<QString,QString> description_map;
469};
470
471// ISO 13181-1:2019 page 79
473{
474 public:
475 explicit DataStreamAlignmentDescriptor(const unsigned char *data, int len = 300) :
476 MPEGDescriptor(data, len, DescriptorID::data_stream_alignment) { }
477 // Name bits loc expected value
478 // descriptor_tag 8 0.0 0x06
479 // descriptor_length 8 1.0
480 // alignment_type 2 2.0
481 uint AlignmentType(void) const { return m_data[2]; }
482
483 QString toString() const override; // MPEGDescriptor
484};
485
487{
488 public:
489 explicit ConditionalAccessDescriptor(const unsigned char *data, int len = 300) :
490 MPEGDescriptor(data, len, DescriptorID::conditional_access) { }
491
492 uint SystemID(void) const { return m_data[2] << 8 | m_data[3]; }
493 uint PID(void) const { return (m_data[4] & 0x1F) << 8 | m_data[5]; }
494 uint DataSize(void) const { return DescriptorLength() - 4; }
495 const unsigned char *Data(void) const { return &m_data[6]; }
496 QString toString() const override; // MPEGDescriptor
497};
498
500{
501 public:
502 explicit ISO639LanguageDescriptor(const unsigned char *data, int len = 300) :
503 MPEGDescriptor(data, len, DescriptorID::iso_639_language) { }
504
505 const unsigned char* CodeRaw() const { return &m_data[2]; }
506 uint AudioType() const { return m_data[5]; }
507
508 int LanguageKey(void) const
509 { return iso639_str3_to_key(&m_data[2]); }
510 QString LanguageString(void) const
511 { return iso639_key_to_str3(LanguageKey()); }
512 int CanonicalLanguageKey(void) const
514 QString CanonicalLanguageString(void) const
516
517 QString toString() const override; // MPEGDescriptor
518};
519
520// ISO 13181-1:2019 page 84
522{
523 public:
524 explicit SystemClockDescriptor(const unsigned char *data, int len = 300) :
525 MPEGDescriptor(data, len, DescriptorID::system_clock) { }
526 // Name bits loc expected value
527 // descriptor_tag 8 0.0 0x0B
528 // descriptor_length 8 1.0
529 // external_clock_reference_indicator 2 2.0
530 bool ExternalClockReferenceIndicator(void) const { return ( m_data[2]&0x80 ) != 0; }
531 // reserved 1 2.1
532 // clock_accuracy_integer 6 2.2
533 uint ClockAccuracyInteger(void) const { return m_data[2]&0x3F; }
534 // clock_accuracy_exponent 3 3.0
535 uint ClockAccuracyExponent(void) const { return m_data[3]>>5; }
536 // reserved 5 3.3
537
538 QString toString() const override; // MPEGDescriptor
539};
540
541// ISO 13181-1:2019 page 86
543{
544 public:
545 explicit MaximumBitrateDescriptor(const unsigned char *data, int len = 300) :
546 MPEGDescriptor(data, len, DescriptorID::maximum_bitrate) { }
547 // Name bits loc expected value
548 // descriptor_tag 8 0.0 0x0E
549 // descriptor_length 8 1.0 0x03
550 // reserved 2 2.0
551 // maximum_bitrate 22 2.2
553 { return (m_data[2] & 0x3f) << 16 | m_data[3]<<8 | m_data[4]; }
554 QString toString() const override; // MPEGDescriptor
555};
556
557// ISO/IEC 13818-1:2019 (E) p87
559{
560 public:
561 explicit SmoothingBufferDescriptor(const unsigned char *data, int len = 300) :
562 MPEGDescriptor(data, len, DescriptorID::smoothing_buffer) { }
563 // Name bits loc expected value
564 // descriptor_tag 8 0.0 0x10
565 // descriptor_length 8 1.0 0x06
566
567 // reserved 2 2.0
568 // sb_leak_rate 22 2.2
569 uint SBLeakRate(void) const
570 { return (m_data[2] & 0x3f) << 16 | m_data[3]<<8 | m_data[4]; }
571 // reserved 2 5.0
572 // sb_size 2 5.2
573 uint SBSize(void) const
574 { return (m_data[5] & 0x3f) << 16 | m_data[6]<<8 | m_data[7]; }
575 QString toString(void) const override; // MPEGDescriptor
576};
577
580{
581 public:
582 explicit AVCVideoDescriptor(const unsigned char *data, int len = 300) :
583 MPEGDescriptor(data, len, DescriptorID::avc_video) { }
584 // Name bits loc expected value
585 // descriptor_tag 8 0.0 0x28
586 // descriptor_length 8 1.0
587 // profile_idc 8 2.0
588 uint ProfileIDC(void) const { return m_data[2]; }
589 // constraint_set0_flag 1 3.0
590 bool ConstraintSet0(void) const { return ( m_data[3]&0x80 ) != 0; }
591 // constraint_set1_flag 1 3.1
592 bool ConstraintSet1(void) const { return ( m_data[3]&0x40 ) != 0; }
593 // constraint_set2_flag 1 3.2
594 bool ConstraintSet2(void) const { return ( m_data[3]&0x20 ) != 0; }
595 // AVC_compatible_flags 5 3.3
596 uint AVCCompatible(void) const { return m_data[3]&0x1f; }
597 // level_idc 8 4.0
598 uint LevelIDC(void) const { return m_data[4]; }
599 // AVC_still_present 1 5.0
600 bool AVCStill(void) const { return ( m_data[5]&0x80 ) != 0; }
601 // AVC_24_hour_picture_flag 1 5.1
602 bool AVC24HourPicture(void) const { return ( m_data[5]&0x40 ) != 0; }
604 const { return ( m_data[5]&0x20 ) != 0; }
605 // reserved 6 bslbf
606 QString toString() const override; // MPEGDescriptor
607};
608
612{
613 public:
614 explicit AVCTimingAndHRDDescriptor(const unsigned char *data, int len = 300) :
615 MPEGDescriptor(data, len, DescriptorID::avc_timing_and_hrd) { }
616 // Name bits loc expected value
617 // descriptor_tag 8 0.0 0x
618 // descriptor_length 8 1.0
619 // hrd_management_valid 1 2.0
620 bool HRDManagementValid(void) const { return ( m_data[2]&0x80 ) != 0; }
621 // reserved 6 2.1
622 // picture_and_timing_info_present 1 2.7
623 bool HasPictureAndTimingInfo(void) const { return (m_data[2]&0x01) != 0;}
624 // if (picture_and_timing_info_present) {
625 // 90kHz_flag 1 3.0
626 // reserved 7 3.1
627 // if (90kHz_flag == '0') {
628 // N 32 4.0 uimsbf
629 // K 32 8.0 uimsbf
630 // }
631 // num_units_in_tick 32 (90khz)?4.0:12.0 uimsbf
632 // }
633 // fixed_frame_rate_flag 1 (pict_info)?((90khz)?8.0:16.0):3.0
634 // temporal_poc_flag 1 (pict_info)?((90khz)?8.1:16.1):3.1
635 // picture_to_display_conversion_flag 1 (pict_info)?((90khz)?8.2:16.2):3.2
636 // reserved 5 bslbf
637};
638
642{
643 public:
644 explicit HEVCVideoDescriptor(const unsigned char *data, int len = 300) :
645 MPEGDescriptor(data, len, DescriptorID::hevc_video) { }
646 // Name bits loc expected value
647 // descriptor_tag 8 0.0 0x38
648 // descriptor_length 8 1.0
649
650 // the encoding of the following is specified in Rec. ITU-T H.265 | ISO/IEC 23008-2
651 // profile_space 2 2.0
652 uint ProfileSpace(void) const { return (m_data[2]&0xC0) >> 6; }
653 // tier_flag 1 2.2
654 bool Tier(void) const { return (m_data[2]&0x20) != 0; }
655 // profile_idc 5 2.3
656 uint ProfileIDC(void) const { return m_data[2]&0x1F; }
657 // profile_compatibility_indication 32 3.0
658 // progressive_source_flag 1 7.0
659 // interlaced_source_flag 1 7.1
660 // non_packed_constraint_flag 1 7.2
661 // frame_only_constraint_flag 1 7.3
662 // reserved_zero_44bits 44 7.4
663 // level_idc 8 13.0
664
665 // temporal_layer_subset_flag 1 14.0
666 // HEVC_still_present_flag 1 14.1
667 // HEVC_24hr_picture_present_flag 1 14.2
668 // reserved 5 14.3
669
670 // if temporal_layer_subset_flag == true and
671 // descriptor_length == 17 instead of 15 then
672 // reserved 5 15.0
673 // temporal_id_min 3 15.5
674 // reserved 5 16.0
675 // temporal_id_max 3 16.5
676
677 QString toString() const override; // MPEGDescriptor
678};
679
680// class HEVCTimingAndHRDDescriptor : public MPEGDescriptor
681// {
682// explicit HEVCTimingAndHRDDescriptor(const unsigned char *data, int len = 300) :
683// MPEGDescriptor(data, len, DescriptorID::hevc_timing_and_hrd) { }
684// // Name bits loc expected value
685// // descriptor_tag 8 0.0 0x38
686// // descriptor_length 8 1.0
687// };
688
689#endif // MPEG_DESCRIPTORS_H
ISO 13818-1:2000/Amd.3:2004 page 12 ISO/IEC 13818-1:2019 (E) p 103.
AVCTimingAndHRDDescriptor(const unsigned char *data, int len=300)
bool HRDManagementValid(void) const
bool HasPictureAndTimingInfo(void) const
ISO 13818-1:2000/Amd.3:2004 page 11.
bool AVCStill(void) const
uint LevelIDC(void) const
bool FramePackingSEINotPresentFlag(void) const
QString toString() const override
bool ConstraintSet1(void) const
bool ConstraintSet2(void) const
bool AVC24HourPicture(void) const
bool ConstraintSet0(void) const
AVCVideoDescriptor(const unsigned char *data, int len=300)
uint AVCCompatible(void) const
uint ProfileIDC(void) const
AudioStreamDescriptor(const unsigned char *data, int len=300)
bool FreeFormatFlag(void) const
QString toString() const override
bool ID(void) const
uint Layer(void) const
bool VariableRateAudioIndicator(void) const
QString toString() const override
const unsigned char * Data(void) const
ConditionalAccessDescriptor(const unsigned char *data, int len=300)
QString toString() const override
DataStreamAlignmentDescriptor(const unsigned char *data, int len=300)
@ terrestrial_delivery_system
@ s2x_satellite_delivery_system
@ s2_satellite_delivery_system
@ multiplex_buffer_utilization
ISO 13818-1:2013/FDAM 3 (E) page 7 ISO/IEC 13818-1:2019 (E) page 121.
HEVCVideoDescriptor(const unsigned char *data, int len=300)
QString toString() const override
uint ProfileSpace(void) const
uint ProfileIDC(void) const
bool Tier(void) const
QString LanguageString(void) const
QString CanonicalLanguageString(void) const
const unsigned char * CodeRaw() const
int CanonicalLanguageKey(void) const
QString toString() const override
ISO639LanguageDescriptor(const unsigned char *data, int len=300)
int LanguageKey(void) const
QString descrToString() const
virtual ~MPEGDescriptor()=default
MPEGDescriptor(const unsigned char *data, int len, uint tag, uint req_desc_len)
uint DescriptorLength(void) const
uint DescriptorTag(void) const
bool IsValid(void) const
uint size(void) const
MPEGDescriptor(const std::vector< uint8_t > &data)
uint DescriptorTagExtension(void) const
MPEGDescriptor(const unsigned char *data, int len, uint tag)
MPEGDescriptor(const unsigned char *data, int len=300)
MPEGDescriptor(const std::vector< uint8_t > &data, uint tag)
const unsigned char * m_data
uint MaximumBitrate(void) const
QString toString() const override
MaximumBitrateDescriptor(const unsigned char *data, int len=300)
static QMap< QString, QString > description_map
static void InitializeDescriptionMap(void)
static QMutex description_map_lock
static QString GetDescription(const QString &fmt)
static bool description_map_initialized
RegistrationDescriptor(const unsigned char *data, int len=300)
uint FormatIdentifier(void) const
QString toString() const override
QString FormatIdentifierString(void) const
QString toString(void) const override
uint SBLeakRate(void) const
SmoothingBufferDescriptor(const unsigned char *data, int len=300)
uint ClockAccuracyExponent(void) const
bool ExternalClockReferenceIndicator(void) const
uint ClockAccuracyInteger(void) const
SystemClockDescriptor(const unsigned char *data, int len=300)
QString toString() const override
VideoStreamDescriptor(const unsigned char *data, int len=300)
bool FrameRateExtensionFlag(void) const
bool ConstrainedParameterFlag(void) const
QString toString() const override
bool MultipleFrameRateFlag(void) const
uint ChromaFormat(void) const
uint ProfileAndLevelIndication(void) const
uint FrameRateCode(void) const
bool MPEG1OnlyFlag(void) const
bool StillPictureFlag(void) const
unsigned int uint
Definition: freesurround.h:24
int iso639_key_to_canonical_key(int iso639_2)
Definition: iso639.cpp:118
ISO 639-1 and ISO 639-2 support functions.
static QString iso639_key_to_str3(int code)
Definition: iso639.h:45
static int iso639_str3_to_key(const unsigned char *iso639_2)
Definition: iso639.h:60
static const iso6937table * d
unsigned short uint16_t
Definition: iso6937tables.h:3
std::vector< const unsigned char * > desc_list_t
#define MTV_PUBLIC
Definition: mythtvexp.h:15
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
Definition: mythdate.cpp:93
STL namespace.
VERBOSE_PREAMBLE false
Definition: verbosedefs.h:89