Go to the documentation of this file.
17 const unsigned char *data,
uint len)
23 tmp.push_back(data+off);
36 const unsigned char *data,
uint len,
int excluded_descid)
42 if ((data+off)[0] != excluded_descid)
43 tmp.push_back(data+off);
47 if ((data+off)[0] != excluded_descid)
57 const unsigned char *data,
uint len,
int excluded_descid)
63 if ((data+off)[0] == excluded_descid)
64 tmp.push_back(data+off);
68 if ((data+off)[0] == excluded_descid)
80 auto sametag = [desc_tag](
const auto *item){
return item[0] == desc_tag; };
81 auto it = std::find_if(parsed.cbegin(), parsed.cend(), sametag);
82 return (it != parsed.cend()) ? *it :
nullptr;
88 auto sametag = [desc_tag](
const auto *item)
91 item[2] == desc_tag; };
92 auto it = std::find_if(parsed.cbegin(), parsed.cend(), sametag);
93 return (it != parsed.cend()) ? *it :
nullptr;
99 auto sametag = [desc_tag](
const auto *item){
return item[0] == desc_tag; };
100 std::copy_if(parsed.cbegin(), parsed.cend(), std::back_inserter(
tmp), sametag);
107 for (
uint pref : langPrefs)
108 max_pri = std::max(max_pri, pref);
116 uint match_pri = UINT_MAX;
117 int unmatched_idx = -1;
120 for (; i < parsed.size(); i++)
127 QMap<uint,uint>::const_iterator it =
130 if ((it != langPrefs.constEnd()) && (*it < match_pri))
136 if (unmatched_idx < 0)
141 if (match_pri != UINT_MAX)
142 return parsed[match_idx];
150 return parsed[unmatched_idx];
160 uint match_pri = UINT_MAX;
162 int unmatched_idx = -1;
165 for (; i < parsed.size(); i++)
172 QMap<uint,uint>::const_iterator it =
175 if ((it != langPrefs.constEnd()) && (*it < match_pri))
181 if (unmatched_idx < 0)
187 (match_key == 0) && (unmatched_idx >= 0))
198 if (match_pri == UINT_MAX)
201 for (
const auto *j : parsed)
215 #define EMPTY_STR_16 "","","","", "","","","", "","","","", "","","","",
221 "Hierarchy",
"Registration",
222 "Data Stream Alignment",
"Target Background Grid",
223 "Video Window",
"Conditional Access",
224 "ISO-639 Language",
"System Clock",
225 "Multiplex Buffer Utilization",
"Copyright",
226 "Maximum Bitrate",
"Private Data Indicator",
228 "Smoothing Buffer",
"STD",
229 "IBP",
"DSM-CC Carousel Identifier",
230 "DSM-CC Association Tag",
231 "DSM-CC Deferred Association Tag",
232 "Reserved(0x16)",
"DSM-CC NPT Reference",
233 "DSM-CC NPT Endpoint",
"DSM-CC Stream Mode",
234 "DSM-CC Stream Event",
"MPEG-4 Video",
235 "MPEG-4 Audio",
"IOD",
238 "External ES ID",
"Multimpex Code",
239 "FMX buffer Size",
"Multiplex Buffer",
240 "Content Labeling",
"Metadata Pointer",
241 "Metadata",
"Metadata Std",
242 "AVC Video",
"IPMP DRM",
243 "AVC Timing & HRD",
"AAC Audio",
244 "Flex Mux Timing",
"",
249 "Network Name",
"Service List",
250 "DVB Stuffing",
"Satellite Delivery System",
251 "Cable Delivery System",
"VBI Data",
252 "VBI Teletext",
"Bouquet Name",
253 "Service",
"Country Availability",
254 "Linkage",
"NVOD Reference",
255 "DVB Time-shifted Service",
"Short Event",
256 "Extended Event",
"Time-shifted Event",
258 "Component",
"Mosaic",
260 "Conditional Access Identifier",
261 "Content",
"Parental Rating",
262 "Teletext",
"Telephone",
263 "Local Time Offset",
"Subtitling",
264 "Terrestrial Delivery System",
265 "Multilingual Network Name",
266 "Multilingual Bouquet Name",
267 "Multilingual Service Name",
268 "Multilingual Component",
269 "Private Data Specifier",
271 "Service Move",
"Short Smoothing Buffer",
272 "Frequency List",
"Partial Transport Stream",
273 "Data Broadcast",
"Scrambling",
274 "Data Broadcast ID",
"Transport Stream",
276 "AC-3",
"Ancillary Data",
277 "Cell List",
"Cell Frequency Link",
278 "Announcement Support",
"Application Signalling",
280 "Adaptation Field Data",
"Service Identifier",
281 "Service Availability",
"Default Authority",
282 "Related Content",
"TVA ID",
283 "DVB Content Identifier",
"Time Slice FEC Identifier",
284 "ECM Repetition Rate",
"DVB-S2 Delivery Identifier",
286 "AAC",
"XAIT location",
287 "FTA content management",
"Extension",
289 "ATSC Stuffing",
"AC-3 Audio",
290 "SCTE Frame Rate",
"SCTE Extended Video",
291 "SCTE Component Name",
"ATSC Program Identifier",
292 "Caption Service",
"Content Advisory",
293 "ATSC CA",
"ATSC Descriptor Tag",
294 "SCTE CUE Identifier",
"",
298 "SCTE Frequency Spec",
"SCTE Modulation Params",
299 "SCTE TSID",
"SCTE Revision Detection",
300 "SCTE Two part channel",
"SCTE Channel Properties",
301 "SCTE Daylight Savings",
"SCTE AFD",
307 "Extended Channel Name",
"Service Location",
308 "ATSC Time-shifted Service",
"Component Name",
309 "ATSC Data Service",
"ATSC PID Count",
311 "ATSC Multiprotocol Encapsulation",
312 "DCC Departing Request",
"DCC Arriving Request",
313 "ATSC Restrictions Control",
"ATSC Genre",
314 "SCTE MAC Address List",
"ATSC Private Information",
315 "ATSC Compatibility Wrap",
"ATSC Broadcaster Policy",
320 "ATSC Content ID",
"",
337 str = str +
", " + extra;
385 str = QString(
"Unknown");
390 #define SET_STRING(DESC_NAME) do { \
391 if (IsValid()) { DESC_NAME d(m_data, DescriptorLength()+2); \
392 if (d.IsValid()) str = d.toString(); } } while (false)
397 str = QString(
"%1 Descriptor tag(0x%2) length(%3)")
403 str.append(
" Dumping\n");
420 str =
"Invalid Descriptor";
608 str =
descrDump(
"NorDig Content Protection");
692 else if (priv_dsid == 0 &&
713 str += indent_0 +
"<Descriptor>\n";
714 str += indent_1 + QString(
"<Tag>0x%1</Tag>\n")
716 str += indent_1 + QString(
"<Description>%1</Description>\n")
719 str += indent_1 +
"<Data>";
722 if (((i%8) == 0) && i)
723 str +=
"\n" + indent_1 +
" ";
724 str += QString(
"0x%1 ").arg(
m_data[i+2],2,16,QChar(
'0'));
727 str +=
"\n" + indent_1 +
"</Data>\n";
728 str += indent_1 +
"<Decoded>" +
toString().toHtmlEscaped() +
"</Decoded>\n";
729 str += indent_0 +
"</Descriptor>";
744 hex.append(QString(
" %1").arg(ch, 2, 16, QChar(
'0')));
745 prt.append(QString(
"%1").arg(isprint(ch) ? QChar(ch) :
'.'));
746 if (((i+1) % 8) == 0)
748 if (((i+1) % 16) == 0)
750 str.append(QString(
" %1 %2 |%3|")
751 .arg(i - (i % 16),3,16,QChar(
'0'))
763 str.append(QString(
" %1 %2 |%3|")
764 .arg(i - (i % 16),3,16,QChar(
'0'))
765 .arg(hex,-50,
' ').arg(prt));
772 QString str = QString(
"Video Stream Descriptor: frame_rate(%1) MPEG-1(%2)")
777 str.append(QString(
" still_picture(%1) profile(%2)")
786 return QString(
"Audio Stream Descriptor: free_format(%1) ID(%2) layer(%3) variable_rate(%4)")
801 description_map[
"BDC0"] =
"Broadcast Data Corporation Software Data Service";
802 description_map[
"BSSD"] =
"SMPTE 302M-1998 Audio data as specified in (AES3)";
803 description_map[
"CAPO"] =
"SMPTE 315M-1999 Camera Positioning Information";
804 description_map[
"CUEI"] =
"SCTE 35 2003, Cable Digital Program Insertion Cueing Message";
805 description_map[
"DDED"] =
"LGEUS Digital Delivery with encryption and decryption";
807 description_map[
"DRA1"] =
"Chinese EIS SJ/T11368-2006 DRA digital audio";
815 description_map[
"HDMV"] =
"Blu-Ray A/V for read-only media (H.264 TS)";
824 description_map[
"SCTE"] =
"SCTE 54 2003 Digital Video Service Multiplex and TS for Cable";
825 description_map[
"SEN1"] =
"ATSC Private Information identifies source of stream";
826 description_map[
"SESF"] =
"Blu-Ray A/V for ReWritable media (H.264 TS)";
827 description_map[
"SPLC"] =
"SMPTE Proposed 312M Splice Point compatible TS";
828 description_map[
"SVMD"] =
"SMPTE Proposed Video Metatdata Dictionary for MPEG2-TS";
832 description_map[
"TSHV"] =
"Sony self-encoded MPEG-TS and private data";
833 description_map[
"TSMV"] =
"Sony self-encoded MPEG-TS and private data";
838 description_map[
"VC-1"] =
"SMPTE Draft RP 227 VC-1 Bitstream Transport Encodings";
840 for (
uint i = 0; i <= 99; i++)
843 "NIMA, Unspecified military application";
856 QMap<QString,QString>::const_iterator it =
description_map.constFind(fmt);
867 QString msg = QString(
"Registration Descriptor: '%1' ").arg(fmt);
871 msg2 =
"Unknown, see http://www.smpte-ra.org/mpegreg/mpegreg.html";
878 return QString(
"Data Stream Alignment Descriptor: alignment_type(%1)")
884 return QString(
"Conditional Access: sid(0x%1) pid(0x%2) data_size(%3)")
890 return QString(
"ISO-639 Language: code(%1) canonical(%2) eng(%3)")
897 return QString(
"System Clock Descriptor: extref(%1) accuracy(%2e-%3 ppm)")
905 return QString(
"Maximum Bitrate Descriptor: maximum_bitrate(0x%1) %2 Mbit/s")
912 QString str = QString(
"Smoothing Buffer Descriptor ");
913 str += QString(
"tag(0x%1) ").arg(
DescriptorTag(),2,16,QChar(
'0'));
917 QString(
"sb_leak_rate(0x%1) %2 kB/s ")
920 QString(
"sb_size(0x%1) %2 kB")
921 .arg(
SBSize(),6,16,QChar(
'0'))
928 return QString(
"AVC Video: IDC prof(%1) IDC level(%2) sets(%3%4%5) "
929 "compat(%6) still(%7) 24hr(%8) FramePacking(%9)")
942 QString str = QString(
"HEVC Video: ProfileSpace(%1) Tier(%2) ProfileIDC(%3)")
944 str.append(
" Dumping\n");
virtual QString toString(void) const
bool StillPictureFlag(void) const
QString toString() const override
bool ExternalClockReferenceIndicator(void) const
QString CanonicalLanguageString(void) const
@ satellite_delivery_system
uint ProfileSpace(void) const
uint DescriptorTag(void) const
uint DescriptorLength(void) const
QString descrDump(const QString &name) const
uint ClockAccuracyInteger(void) const
Freesat Logical Channel Number descriptor.
uint ProfileIDC(void) const
int CanonicalLanguageKey(void) const
Provides the long channel name for the virtual channel containing this descriptor.
bool VariableRateAudioIndicator(void) const
@ ci_protection_descriptor
QString hexdump(void) const
int LanguageKey(void) const
bool FramePackingSEINotPresentFlag(void) const
QString toString() const override
uint MaximumBitrate(void) const
QString toString() const override
QString indentSpaces(unsigned int level, unsigned int size=4)
QString toString() const override
This descriptor is used to identify streams with SpliceInformationTable data in them.
@ terrestrial_delivery_system
DVB Logical Channel Descriptor.
@ nordig_content_protection
int CanonicalLanguageKey(void) const
uint DataSize(void) const
QString iso639_key_toName(int iso639_2)
Converts a canonical key to language name in English.
const std::array< const std::string, 256 > descriptor_tag_strings
uint ClockAccuracyExponent(void) const
QString toString() const override
QString FormatIdentifierString(void) const
static desc_list_t ParseAndExclude(const unsigned char *data, uint len, int excluded_descid)
uint FrameRateCode(void) const
static const unsigned char * FindExtension(const desc_list_t &parsed, uint desc_tag)
@ s2x_satellite_delivery_system
virtual QString toStringXML(uint indent_level) const
Returns XML representation of string the TS Reader XML format.
static uint maxPriority(const QMap< uint, uint > &langPrefs)
static desc_list_t Parse(const unsigned char *data, uint len)
uint SystemID(void) const
@ scte_revision_detection
bool MPEG1OnlyFlag(void) const
const unsigned char * m_data
@ ziggo_package_descriptor
std::vector< const unsigned char * > desc_list_t
static desc_list_t ParseOnlyInclude(const unsigned char *data, uint len, int excluded_descid)
uint SBLeakRate(void) const
@ s2_satellite_delivery_system
QString toString() const override
@ dvb_simulcast_channel_descriptor
bool AVC24HourPicture(void) const
bool FreeFormatFlag(void) const
Sky Logical Channel Number descriptor.
#define SET_STRING(DESC_NAME)
DVB HD Simulcast Logical Channel Descriptor.
bool ConstraintSet2(void) const
uint DescriptorTagExtension(void) const
virtual QString toStringPD(uint priv_dsid) const
static void comma_list_append(QString &str, const QString &extra)
ISO 13818-1:2013/FDAM 3 (E) page 7 ISO/IEC 13818-1:2019 (E) page 121.
static desc_list_t FindAll(const desc_list_t &parsed, uint desc_tag)
Freesat Channel Callsign descriptor.
QString LanguageString(void) const
bool AVCStill(void) const
@ dvb_logical_channel_descriptor
@ premiere_content_transmission
QString DescriptorTagString(void) const
int CanonicalLanguageKey(void) const
static void InitializeDescriptionMap(void)
static const unsigned char * FindBestMatch(const desc_list_t &parsed, uint desc_tag, QMap< uint, uint > &langPref)
uint AlignmentType(void) const
This is used to label streams so the can be treated differently, for instance each stream may get it'...
QString toString(void) const override
static desc_list_t FindBestMatches(const desc_list_t &parsed, uint desc_tag, QMap< uint, uint > &langPref)
QString toString() const override
ISO 13818-1:2000/Amd.3:2004 page 11.
Freesat Region descriptor.
uint AVCCompatible(void) const
bool ConstraintSet1(void) const
static bool description_map_initialized
static QString GetDescription(const QString &fmt)
QString toString() const override
QString toString() const override
uint ProfileIDC(void) const
@ premiere_parental_information
static QMutex description_map_lock
QString toString() const override
static const unsigned char * Find(const desc_list_t &parsed, uint desc_tag)
uint ProfileAndLevelIndication(void) const
static QMap< QString, QString > description_map
bool ConstraintSet0(void) const
uint LevelIDC(void) const