Go to the documentation of this file.
18 const unsigned char *data,
uint len)
24 tmp.push_back(data+off);
37 const unsigned char *data,
uint len,
int excluded_descid)
43 if ((data+off)[0] != excluded_descid)
44 tmp.push_back(data+off);
48 if ((data+off)[0] != excluded_descid)
58 const unsigned char *data,
uint len,
int excluded_descid)
64 if ((data+off)[0] == excluded_descid)
65 tmp.push_back(data+off);
69 if ((data+off)[0] == excluded_descid)
81 auto sametag = [desc_tag](
const auto *item){
return item[0] == desc_tag; };
82 auto it = std::find_if(parsed.cbegin(), parsed.cend(), sametag);
83 return (it != parsed.cend()) ? *it :
nullptr;
89 auto sametag = [desc_tag](
const auto *item)
92 item[2] == desc_tag; };
93 auto it = std::find_if(parsed.cbegin(), parsed.cend(), sametag);
94 return (it != parsed.cend()) ? *it :
nullptr;
100 auto sametag = [desc_tag](
const auto *item){
return item[0] == desc_tag; };
101 std::copy_if(parsed.cbegin(), parsed.cend(), std::back_inserter(
tmp), sametag);
108 for (
uint pref : langPrefs)
109 max_pri = std::max(max_pri, pref);
117 uint match_pri = UINT_MAX;
118 int unmatched_idx = -1;
121 for (; i < parsed.size(); i++)
128 QMap<uint,uint>::const_iterator it =
131 if ((it != langPrefs.constEnd()) && (*it < match_pri))
137 if (unmatched_idx < 0)
142 if (match_pri != UINT_MAX)
143 return parsed[match_idx];
151 return parsed[unmatched_idx];
161 uint match_pri = UINT_MAX;
163 int unmatched_idx = -1;
166 for (; i < parsed.size(); i++)
173 QMap<uint,uint>::const_iterator it =
176 if ((it != langPrefs.constEnd()) && (*it < match_pri))
182 if (unmatched_idx < 0)
188 (match_key == 0) && (unmatched_idx >= 0))
199 if (match_pri == UINT_MAX)
202 for (
const auto *j : parsed)
216 #define EMPTY_STR_16 "","","","", "","","","", "","","","", "","","","",
222 "Hierarchy",
"Registration",
223 "Data Stream Alignment",
"Target Background Grid",
224 "Video Window",
"Conditional Access",
225 "ISO-639 Language",
"System Clock",
226 "Multiplex Buffer Utilization",
"Copyright",
227 "Maximum Bitrate",
"Private Data Indicator",
229 "Smoothing Buffer",
"STD",
230 "IBP",
"DSM-CC Carousel Identifier",
231 "DSM-CC Association Tag",
232 "DSM-CC Deferred Association Tag",
233 "Reserved(0x16)",
"DSM-CC NPT Reference",
234 "DSM-CC NPT Endpoint",
"DSM-CC Stream Mode",
235 "DSM-CC Stream Event",
"MPEG-4 Video",
236 "MPEG-4 Audio",
"IOD",
239 "External ES ID",
"Multimpex Code",
240 "FMX buffer Size",
"Multiplex Buffer",
241 "Content Labeling",
"Metadata Pointer",
242 "Metadata",
"Metadata Std",
243 "AVC Video",
"IPMP DRM",
244 "AVC Timing & HRD",
"AAC Audio",
245 "Flex Mux Timing",
"",
250 "Network Name",
"Service List",
251 "DVB Stuffing",
"Satellite Delivery System",
252 "Cable Delivery System",
"VBI Data",
253 "VBI Teletext",
"Bouquet Name",
254 "Service",
"Country Availability",
255 "Linkage",
"NVOD Reference",
256 "DVB Time-shifted Service",
"Short Event",
257 "Extended Event",
"Time-shifted Event",
259 "Component",
"Mosaic",
261 "Conditional Access Identifier",
262 "Content",
"Parental Rating",
263 "Teletext",
"Telephone",
264 "Local Time Offset",
"Subtitling",
265 "Terrestrial Delivery System",
266 "Multilingual Network Name",
267 "Multilingual Bouquet Name",
268 "Multilingual Service Name",
269 "Multilingual Component",
270 "Private Data Specifier",
272 "Service Move",
"Short Smoothing Buffer",
273 "Frequency List",
"Partial Transport Stream",
274 "Data Broadcast",
"Scrambling",
275 "Data Broadcast ID",
"Transport Stream",
277 "AC-3",
"Ancillary Data",
278 "Cell List",
"Cell Frequency Link",
279 "Announcement Support",
"Application Signalling",
281 "Adaptation Field Data",
"Service Identifier",
282 "Service Availability",
"Default Authority",
283 "Related Content",
"TVA ID",
284 "DVB Content Identifier",
"Time Slice FEC Identifier",
285 "ECM Repetition Rate",
"DVB-S2 Delivery Identifier",
287 "AAC",
"XAIT location",
288 "FTA content management",
"Extension",
290 "ATSC Stuffing",
"AC-3 Audio",
291 "SCTE Frame Rate",
"SCTE Extended Video",
292 "SCTE Component Name",
"ATSC Program Identifier",
293 "Caption Service",
"Content Advisory",
294 "ATSC CA",
"ATSC Descriptor Tag",
295 "SCTE CUE Identifier",
"",
299 "SCTE Frequency Spec",
"SCTE Modulation Params",
300 "SCTE TSID",
"SCTE Revision Detection",
301 "SCTE Two part channel",
"SCTE Channel Properties",
302 "SCTE Daylight Savings",
"SCTE AFD",
308 "Extended Channel Name",
"Service Location",
309 "ATSC Time-shifted Service",
"Component Name",
310 "ATSC Data Service",
"ATSC PID Count",
312 "ATSC Multiprotocol Encapsulation",
313 "DCC Departing Request",
"DCC Arriving Request",
314 "ATSC Restrictions Control",
"ATSC Genre",
315 "SCTE MAC Address List",
"ATSC Private Information",
316 "ATSC Compatibility Wrap",
"ATSC Broadcaster Policy",
321 "ATSC Content ID",
"",
338 str = str +
", " + extra;
386 str = QString(
"Unknown");
391 #define SET_STRING(DESC_NAME) do { \
392 if (IsValid()) { DESC_NAME d(m_data, DescriptorLength()+2); \
393 if (d.IsValid()) str = d.toString(); } } while (false)
398 str = QString(
"%1 Descriptor tag(0x%2) length(%3)")
404 str.append(
" Dumping\n");
421 str =
"Invalid Descriptor";
609 str =
descrDump(
"NorDig Content Protection");
693 else if (priv_dsid == 0 &&
714 str += indent_0 +
"<Descriptor>\n";
715 str += indent_1 + QString(
"<Tag>0x%1</Tag>\n")
717 str += indent_1 + QString(
"<Description>%1</Description>\n")
720 str += indent_1 +
"<Data>";
723 if (((i%8) == 0) && i)
724 str +=
"\n" + indent_1 +
" ";
725 str += QString(
"0x%1 ").arg(
m_data[i+2],2,16,QChar(
'0'));
728 str +=
"\n" + indent_1 +
"</Data>\n";
729 str += indent_1 +
"<Decoded>" +
toString().toHtmlEscaped() +
"</Decoded>\n";
730 str += indent_0 +
"</Descriptor>";
745 hex.append(QString(
" %1").arg(ch, 2, 16, QChar(
'0')));
746 prt.append(QString(
"%1").arg(isprint(ch) ? QChar(ch) :
'.'));
747 if (((i+1) % 8) == 0)
749 if (((i+1) % 16) == 0)
751 str.append(QString(
" %1 %2 |%3|")
752 .arg(i - (i % 16),3,16,QChar(
'0'))
764 str.append(QString(
" %1 %2 |%3|")
765 .arg(i - (i % 16),3,16,QChar(
'0'))
766 .arg(hex,-50,
' ').arg(prt));
773 QString str = QString(
"Video Stream Descriptor: frame_rate(%1) MPEG-1(%2)")
778 str.append(QString(
" still_picture(%1) profile(%2)")
787 return QString(
"Audio Stream Descriptor: free_format(%1) ID(%2) layer(%3) variable_rate(%4)")
802 description_map[
"BDC0"] =
"Broadcast Data Corporation Software Data Service";
803 description_map[
"BSSD"] =
"SMPTE 302M-1998 Audio data as specified in (AES3)";
804 description_map[
"CAPO"] =
"SMPTE 315M-1999 Camera Positioning Information";
805 description_map[
"CUEI"] =
"SCTE 35 2003, Cable Digital Program Insertion Cueing Message";
806 description_map[
"DDED"] =
"LGEUS Digital Delivery with encryption and decryption";
808 description_map[
"DRA1"] =
"Chinese EIS SJ/T11368-2006 DRA digital audio";
816 description_map[
"HDMV"] =
"Blu-Ray A/V for read-only media (H.264 TS)";
825 description_map[
"SCTE"] =
"SCTE 54 2003 Digital Video Service Multiplex and TS for Cable";
826 description_map[
"SEN1"] =
"ATSC Private Information identifies source of stream";
827 description_map[
"SESF"] =
"Blu-Ray A/V for ReWritable media (H.264 TS)";
828 description_map[
"SPLC"] =
"SMPTE Proposed 312M Splice Point compatible TS";
829 description_map[
"SVMD"] =
"SMPTE Proposed Video Metatdata Dictionary for MPEG2-TS";
833 description_map[
"TSHV"] =
"Sony self-encoded MPEG-TS and private data";
834 description_map[
"TSMV"] =
"Sony self-encoded MPEG-TS and private data";
839 description_map[
"VC-1"] =
"SMPTE Draft RP 227 VC-1 Bitstream Transport Encodings";
841 for (
uint i = 0; i <= 99; i++)
844 "NIMA, Unspecified military application";
857 QMap<QString,QString>::const_iterator it =
description_map.constFind(fmt);
868 QString msg = QString(
"Registration Descriptor: '%1' ").arg(fmt);
872 msg2 =
"Unknown, see http://www.smpte-ra.org/mpegreg/mpegreg.html";
879 return QString(
"Data Stream Alignment Descriptor: alignment_type(%1)")
885 return QString(
"Conditional Access: sid(0x%1) pid(0x%2) data_size(%3)")
891 return QString(
"ISO-639 Language: code(%1) canonical(%2) eng(%3)")
898 return QString(
"System Clock Descriptor: extref(%1) accuracy(%2e-%3 ppm)")
906 return QString(
"Maximum Bitrate Descriptor: maximum_bitrate(0x%1) %2 Mbit/s")
913 QString str = QString(
"Smoothing Buffer Descriptor ");
914 str += QString(
"tag(0x%1) ").arg(
DescriptorTag(),2,16,QChar(
'0'));
918 QString(
"sb_leak_rate(0x%1) %2 kB/s ")
921 QString(
"sb_size(0x%1) %2 kB")
922 .arg(
SBSize(),6,16,QChar(
'0'))
929 return QString(
"AVC Video: IDC prof(%1) IDC level(%2) sets(%3%4%5) "
930 "compat(%6) still(%7) 24hr(%8) FramePacking(%9)")
943 QString str = QString(
"HEVC Video: ProfileSpace(%1) Tier(%2) ProfileIDC(%3)")
945 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