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";
605 str =
descrDump(
"NorDig Content Protection");
689 else if (priv_dsid == 0 &&
710 str += indent_0 +
"<Descriptor>\n";
711 str += indent_1 + QString(
"<Tag>0x%1</Tag>\n")
713 str += indent_1 + QString(
"<Description>%1</Description>\n")
716 str += indent_1 +
"<Data>";
719 if (((i%8) == 0) && i)
720 str +=
"\n" + indent_1 +
" ";
721 str += QString(
"0x%1 ").arg(
m_data[i+2],2,16,QChar(
'0'));
724 str +=
"\n" + indent_1 +
"</Data>\n";
725 str += indent_1 +
"<Decoded>" +
toString().toHtmlEscaped() +
"</Decoded>\n";
726 str += indent_0 +
"</Descriptor>";
741 hex.append(QString(
" %1").arg(ch, 2, 16, QChar(
'0')));
742 prt.append(QString(
"%1").arg(isprint(ch) ? QChar(ch) :
'.'));
743 if (((i+1) % 8) == 0)
745 if (((i+1) % 16) == 0)
747 str.append(QString(
" %1 %2 |%3|")
748 .arg(i - (i % 16),3,16,QChar(
'0'))
760 str.append(QString(
" %1 %2 |%3|")
761 .arg(i - (i % 16),3,16,QChar(
'0'))
762 .arg(hex,-50,
' ').arg(prt));
769 QString str = QString(
"Video Stream Descriptor: frame_rate(%1) MPEG-1(%2)")
774 str.append(QString(
" still_picture(%1) profile(%2)")
783 return QString(
"Audio Stream Descriptor: free_format(%1) ID(%2) layer(%3) variable_rate(%4)")
798 description_map[
"BDC0"] =
"Broadcast Data Corporation Software Data Service";
799 description_map[
"BSSD"] =
"SMPTE 302M-1998 Audio data as specified in (AES3)";
800 description_map[
"CAPO"] =
"SMPTE 315M-1999 Camera Positioning Information";
801 description_map[
"CUEI"] =
"SCTE 35 2003, Cable Digital Program Insertion Cueing Message";
802 description_map[
"DDED"] =
"LGEUS Digital Delivery with encryption and decryption";
804 description_map[
"DRA1"] =
"Chinese EIS SJ/T11368-2006 DRA digital audio";
812 description_map[
"HDMV"] =
"Blu-Ray A/V for read-only media (H.264 TS)";
821 description_map[
"SCTE"] =
"SCTE 54 2003 Digital Video Service Multiplex and TS for Cable";
822 description_map[
"SEN1"] =
"ATSC Private Information identifies source of stream";
823 description_map[
"SESF"] =
"Blu-Ray A/V for ReWritable media (H.264 TS)";
824 description_map[
"SPLC"] =
"SMPTE Proposed 312M Splice Point compatible TS";
825 description_map[
"SVMD"] =
"SMPTE Proposed Video Metatdata Dictionary for MPEG2-TS";
829 description_map[
"TSHV"] =
"Sony self-encoded MPEG-TS and private data";
830 description_map[
"TSMV"] =
"Sony self-encoded MPEG-TS and private data";
835 description_map[
"VC-1"] =
"SMPTE Draft RP 227 VC-1 Bitstream Transport Encodings";
837 for (
uint i = 0; i <= 99; i++)
840 "NIMA, Unspecified military application";
853 QMap<QString,QString>::const_iterator it =
description_map.constFind(fmt);
864 QString msg = QString(
"Registration Descriptor: '%1' ").arg(fmt);
868 msg2 =
"Unknown, see http://www.smpte-ra.org/mpegreg/mpegreg.html";
875 return QString(
"Data Stream Alignment Descriptor: alignment_type(%1)")
881 return QString(
"Conditional Access: sid(0x%1) pid(0x%2) data_size(%3)")
887 return QString(
"ISO-639 Language: code(%1) canonical(%2) eng(%3)")
894 return QString(
"System Clock Descriptor: extref(%1) accuracy(%2e-%3 ppm)")
902 return QString(
"Maximum Bitrate Descriptor: maximum_bitrate(0x%1) %2 Mbit/s")
909 QString str = QString(
"Smoothing Buffer Descriptor ");
910 str += QString(
"tag(0x%1) ").arg(
DescriptorTag(),2,16,QChar(
'0'));
914 QString(
"sb_leak_rate(0x%1) %2 kB/s ")
917 QString(
"sb_size(0x%1) %2 kB")
918 .arg(
SBSize(),6,16,QChar(
'0'))
925 return QString(
"AVC Video: IDC prof(%1) IDC level(%2) sets(%3%4%5) "
926 "compat(%6) still(%7) 24hr(%8) FramePacking(%9)")
939 QString str = QString(
"HEVC Video: ProfileSpace(%1) Tier(%2) ProfileIDC(%3)")
941 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
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
@ premiere_content_transmission
@ dvb_simulcast_channel_descriptor
QString hexdump(void) const
@ s2x_satellite_delivery_system
int LanguageKey(void) const
bool FramePackingSEINotPresentFlag(void) const
QString toString() const override
uint MaximumBitrate(void) const
@ ci_protection_descriptor
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.
DVB Logical Channel Descriptor.
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)
@ terrestrial_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
bool MPEG1OnlyFlag(void) const
const unsigned char * m_data
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
QString toString() const override
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
@ scte_revision_detection
uint DescriptorTagExtension(void) const
virtual QString toStringPD(uint priv_dsid) const
@ dvb_logical_channel_descriptor
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
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
@ ziggo_package_descriptor
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
static QMutex description_map_lock
QString toString() const override
static const unsigned char * Find(const desc_list_t &parsed, uint desc_tag)
@ premiere_parental_information
@ nordig_content_protection
uint ProfileAndLevelIndication(void) const
@ satellite_delivery_system
static QMap< QString, QString > description_map
bool ConstraintSet0(void) const
uint LevelIDC(void) const