19 const unsigned char *data,
uint len)
25 tmp.push_back(data+off);
38 const unsigned char *data,
uint len,
int excluded_descid)
44 if ((data+off)[0] != excluded_descid)
45 tmp.push_back(data+off);
49 if ((data+off)[0] != excluded_descid)
59 const unsigned char *data,
uint len,
int excluded_descid)
65 if ((data+off)[0] == excluded_descid)
66 tmp.push_back(data+off);
70 if ((data+off)[0] == excluded_descid)
82 auto sametag = [desc_tag](
const auto *item){
return item[0] == desc_tag; };
83 auto it = std::ranges::find_if(parsed, sametag);
84 return (it != parsed.cend()) ? *it :
nullptr;
90 auto sametag = [desc_tag](
const auto *item)
93 item[2] == desc_tag; };
94 auto it = std::ranges::find_if(parsed, sametag);
95 return (it != parsed.cend()) ? *it :
nullptr;
101 auto sametag = [desc_tag](
const auto *item){
return item[0] == desc_tag; };
102 std::ranges::copy_if(parsed, std::back_inserter(tmp), sametag);
109 for (
uint pref : langPrefs)
110 max_pri = std::max(max_pri, pref);
118 uint match_pri = UINT_MAX;
119 int unmatched_idx = -1;
122 for (; i < parsed.size(); i++)
129 QMap<uint,uint>::const_iterator it =
132 if ((it != langPrefs.constEnd()) && (*it < match_pri))
138 if (unmatched_idx < 0)
143 if (match_pri != UINT_MAX)
144 return parsed[match_idx];
152 return parsed[unmatched_idx];
162 uint match_pri = UINT_MAX;
164 int unmatched_idx = -1;
167 for (; i < parsed.size(); i++)
174 QMap<uint,uint>::const_iterator it =
177 if ((it != langPrefs.constEnd()) && (*it < match_pri))
183 if (unmatched_idx < 0)
189 (match_key == 0) && (unmatched_idx >= 0))
200 if (match_pri == UINT_MAX)
203 for (
const auto *j : parsed)
217#define EMPTY_STR_16 "","","","", "","","","", "","","","", "","","","",
223 "Hierarchy",
"Registration",
224 "Data Stream Alignment",
"Target Background Grid",
225 "Video Window",
"Conditional Access",
226 "ISO-639 Language",
"System Clock",
227 "Multiplex Buffer Utilization",
"Copyright",
228 "Maximum Bitrate",
"Private Data Indicator",
230 "Smoothing Buffer",
"STD",
231 "IBP",
"DSM-CC Carousel Identifier",
232 "DSM-CC Association Tag",
233 "DSM-CC Deferred Association Tag",
234 "Reserved(0x16)",
"DSM-CC NPT Reference",
235 "DSM-CC NPT Endpoint",
"DSM-CC Stream Mode",
236 "DSM-CC Stream Event",
"MPEG-4 Video",
237 "MPEG-4 Audio",
"IOD",
240 "External ES ID",
"Multimpex Code",
241 "FMX buffer Size",
"Multiplex Buffer",
242 "Content Labeling",
"Metadata Pointer",
243 "Metadata",
"Metadata Std",
244 "AVC Video",
"IPMP DRM",
245 "AVC Timing & HRD",
"AAC Audio",
246 "Flex Mux Timing",
"",
251 "Network Name",
"Service List",
252 "DVB Stuffing",
"Satellite Delivery System",
253 "Cable Delivery System",
"VBI Data",
254 "VBI Teletext",
"Bouquet Name",
255 "Service",
"Country Availability",
256 "Linkage",
"NVOD Reference",
257 "DVB Time-shifted Service",
"Short Event",
258 "Extended Event",
"Time-shifted Event",
260 "Component",
"Mosaic",
262 "Conditional Access Identifier",
263 "Content",
"Parental Rating",
264 "Teletext",
"Telephone",
265 "Local Time Offset",
"Subtitling",
266 "Terrestrial Delivery System",
267 "Multilingual Network Name",
268 "Multilingual Bouquet Name",
269 "Multilingual Service Name",
270 "Multilingual Component",
271 "Private Data Specifier",
273 "Service Move",
"Short Smoothing Buffer",
274 "Frequency List",
"Partial Transport Stream",
275 "Data Broadcast",
"Scrambling",
276 "Data Broadcast ID",
"Transport Stream",
278 "AC-3",
"Ancillary Data",
279 "Cell List",
"Cell Frequency Link",
280 "Announcement Support",
"Application Signalling",
282 "Adaptation Field Data",
"Service Identifier",
283 "Service Availability",
"Default Authority",
284 "Related Content",
"TVA ID",
285 "DVB Content Identifier",
"Time Slice FEC Identifier",
286 "ECM Repetition Rate",
"DVB-S2 Delivery Identifier",
288 "AAC",
"XAIT location",
289 "FTA content management",
"Extension",
291 "ATSC Stuffing",
"AC-3 Audio",
292 "SCTE Frame Rate",
"SCTE Extended Video",
293 "SCTE Component Name",
"ATSC Program Identifier",
294 "Caption Service",
"Content Advisory",
295 "ATSC CA",
"ATSC Descriptor Tag",
296 "SCTE CUE Identifier",
"",
300 "SCTE Frequency Spec",
"SCTE Modulation Params",
301 "SCTE TSID",
"SCTE Revision Detection",
302 "SCTE Two part channel",
"SCTE Channel Properties",
303 "SCTE Daylight Savings",
"SCTE AFD",
309 "Extended Channel Name",
"Service Location",
310 "ATSC Time-shifted Service",
"Component Name",
311 "ATSC Data Service",
"ATSC PID Count",
313 "ATSC Multiprotocol Encapsulation",
314 "DCC Departing Request",
"DCC Arriving Request",
315 "ATSC Restrictions Control",
"ATSC Genre",
316 "SCTE MAC Address List",
"ATSC Private Information",
317 "ATSC Compatibility Wrap",
"ATSC Broadcaster Policy",
322 "ATSC Content ID",
"",
339 str = str +
", " + extra;
387 str = QString(
"Unknown");
395 str = QString(
"%1 Descriptor tag(0x%2) length(%3)")
401 str.append(
" Dumping\n");
418 str =
"Invalid Descriptor";
422 str = descrToString<VideoStreamDescriptor>();
426 str = descrToString<AudioStreamDescriptor>();
430 str = descrToString<RegistrationDescriptor>();
434 str = descrToString<DataStreamAlignmentDescriptor>();
438 str = descrToString<ConditionalAccessDescriptor>();
442 str = descrToString<ISO639LanguageDescriptor>();
446 str = descrToString<SystemClockDescriptor>();
450 str = descrToString<MaximumBitrateDescriptor>();
454 str = descrToString<SmoothingBufferDescriptor>();
458 str = descrToString<AVCVideoDescriptor>();
462 str = descrToString<HEVCVideoDescriptor>();
466 str = descrToString<NetworkNameDescriptor>();
470 str = descrToString<ServiceListDescriptor>();
474 str = descrToString<SatelliteDeliverySystemDescriptor>();
478 str = descrToString<CableDeliverySystemDescriptor>();
482 str = descrToString<BouquetNameDescriptor>();
486 str = descrToString<ServiceDescriptor>();
490 str = descrToString<CountryAvailabilityDescriptor>();
498 str = descrToString<StreamIdentifierDescriptor>();
502 str = descrToString<TeletextDescriptor>();
506 str = descrToString<SubtitlingDescriptor>();
510 str = descrToString<TerrestrialDeliverySystemDescriptor>();
514 str = descrToString<FrequencyListDescriptor>();
518 str = descrToString<ScramblingDescriptor>();
522 str = descrToString<AC3Descriptor>();
530 str = descrToString<ApplicationSignallingDescriptor>();
534 str = descrToString<AdaptationFieldDataDescriptor>();
538 str = descrToString<DefaultAuthorityDescriptor>();
542 str = descrToString<S2SatelliteDeliverySystemDescriptor>();
549 str = descrToString<ImageIconDescriptor>();
554 str = descrToString<T2DeliverySystemDescriptor>();
559 str = descrToString<SHDeliverySystemDescriptor>();
564 str = descrToString<SupplementaryAudioDescriptor>();
569 str = descrToString<NetworkChangeNotifyDescriptor>();
574 str = descrToString<MessageDescriptor>();
579 str = descrToString<TargetRegionDescriptor>();
584 str = descrToString<TargetRegionNameDescriptor>();
589 str = descrToString<ServiceRelocatedDescriptor>();
594 str = descrToString<C2DeliverySystemDescriptor>();
599 str = descrToString<S2XSatelliteDeliverySystemDescriptor>();
606 str =
descrDump(
"NorDig Content Protection");
616 str = descrToString<SkyLCNDescriptor>();
621 str = descrToString<FreesatRegionDescriptor>();
626 str = descrToString<FreesatLCNDescriptor>();
631 str = descrToString<FreesatCallsignDescriptor>();
648 str = descrToString<DVBSimulcastChannelDescriptor>();
655 str = descrToString<DVBLogicalChannelDescriptor>();
672 str = descrToString<AC3AudioStreamDescriptor>();
676 str = descrToString<CaptionServiceDescriptor>();
680 str = descrToString<CueIdentifierDescriptor>();
684 str = descrToString<RevisionDetectionDescriptor>();
688 str = descrToString<ExtendedChannelNameDescriptor>();
690 else if (priv_dsid == 0 &&
693 str = descrToString<ComponentNameDescriptor>();
711 str += indent_0 +
"<Descriptor>\n";
712 str += indent_1 + QString(
"<Tag>0x%1</Tag>\n")
714 str += indent_1 + QString(
"<Description>%1</Description>\n")
717 str += indent_1 +
"<Data>";
720 if (((i%8) == 0) && i)
721 str +=
"\n" + indent_1 +
" ";
722 str += QString(
"0x%1 ").arg(
m_data[i+2],2,16,QChar(
'0'));
725 str +=
"\n" + indent_1 +
"</Data>\n";
726 str += indent_1 +
"<Decoded>" +
toString().toHtmlEscaped() +
"</Decoded>\n";
727 str += indent_0 +
"</Descriptor>";
742 hex.append(QString(
" %1").arg(ch, 2, 16, QChar(
'0')));
743 prt.append(QString(
"%1").arg(isprint(ch) ? QChar(ch) :
'.'));
744 if (((i+1) % 8) == 0)
746 if (((i+1) % 16) == 0)
748 str.append(QString(
" %1 %2 |%3|")
749 .arg(i - (i % 16),3,16,QChar(
'0'))
761 str.append(QString(
" %1 %2 |%3|")
762 .arg(i - (i % 16),3,16,QChar(
'0'))
763 .arg(hex,-50,
' ').arg(prt));
770 QString str = QString(
"Video Stream Descriptor: frame_rate(%1) MPEG-1(%2)")
775 str.append(QString(
" still_picture(%1) profile(%2)")
784 return QString(
"Audio Stream Descriptor: free_format(%1) ID(%2) layer(%3) variable_rate(%4)")
799 description_map[
"BDC0"] =
"Broadcast Data Corporation Software Data Service";
800 description_map[
"BSSD"] =
"SMPTE 302M-1998 Audio data as specified in (AES3)";
801 description_map[
"CAPO"] =
"SMPTE 315M-1999 Camera Positioning Information";
802 description_map[
"CUEI"] =
"SCTE 35 2003, Cable Digital Program Insertion Cueing Message";
803 description_map[
"DDED"] =
"LGEUS Digital Delivery with encryption and decryption";
805 description_map[
"DRA1"] =
"Chinese EIS SJ/T11368-2006 DRA digital audio";
813 description_map[
"HDMV"] =
"Blu-Ray A/V for read-only media (H.264 TS)";
822 description_map[
"SCTE"] =
"SCTE 54 2003 Digital Video Service Multiplex and TS for Cable";
823 description_map[
"SEN1"] =
"ATSC Private Information identifies source of stream";
824 description_map[
"SESF"] =
"Blu-Ray A/V for ReWritable media (H.264 TS)";
825 description_map[
"SPLC"] =
"SMPTE Proposed 312M Splice Point compatible TS";
826 description_map[
"SVMD"] =
"SMPTE Proposed Video Metatdata Dictionary for MPEG2-TS";
830 description_map[
"TSHV"] =
"Sony self-encoded MPEG-TS and private data";
831 description_map[
"TSMV"] =
"Sony self-encoded MPEG-TS and private data";
836 description_map[
"VC-1"] =
"SMPTE Draft RP 227 VC-1 Bitstream Transport Encodings";
838 for (
uint i = 0; i <= 99; i++)
841 "NIMA, Unspecified military application";
854 QMap<QString,QString>::const_iterator it =
description_map.constFind(fmt);
865 QString msg = QString(
"Registration Descriptor: '%1' ").arg(fmt);
869 msg2 =
"Unknown, see http://www.smpte-ra.org/mpegreg/mpegreg.html";
876 return QString(
"Data Stream Alignment Descriptor: alignment_type(%1)")
882 return QString(
"Conditional Access: sid(0x%1) pid(0x%2) data_size(%3)")
888 return QString(
"ISO-639 Language: code(%1) canonical(%2) eng(%3)")
895 return QString(
"System Clock Descriptor: extref(%1) accuracy(%2e-%3 ppm)")
903 return QString(
"Maximum Bitrate Descriptor: maximum_bitrate(0x%1) %2 Mbit/s")
910 QString str = QString(
"Smoothing Buffer Descriptor ");
911 str += QString(
"tag(0x%1) ").arg(
DescriptorTag(),2,16,QChar(
'0'));
915 QString(
"sb_leak_rate(0x%1) %2 kB/s ")
918 QString(
"sb_size(0x%1) %2 kB")
919 .arg(
SBSize(),6,16,QChar(
'0'))
926 return QString(
"AVC Video: IDC prof(%1) IDC level(%2) sets(%3%4%5) "
927 "compat(%6) still(%7) 24hr(%8) FramePacking(%9)")
940 QString str = QString(
"HEVC Video: ProfileSpace(%1) Tier(%2) ProfileIDC(%3)")
942 str.append(
" Dumping\n");
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
uint AVCCompatible(void) const
uint ProfileIDC(void) const
bool FreeFormatFlag(void) const
QString toString() const override
bool VariableRateAudioIndicator(void) const
QString toString() const override
uint DataSize(void) const
uint SystemID(void) const
QString toString() const override
uint AlignmentType(void) const
@ satellite_delivery_system
@ terrestrial_delivery_system
@ scte_revision_detection
@ s2x_satellite_delivery_system
@ s2_satellite_delivery_system
int LanguageKey(void) const
int CanonicalLanguageKey(void) const
QString toString() const override
uint ProfileSpace(void) const
uint ProfileIDC(void) const
QString LanguageString(void) const
QString CanonicalLanguageString(void) const
int CanonicalLanguageKey(void) const
QString toString() const override
static desc_list_t FindAll(const desc_list_t &parsed, uint desc_tag)
uint DescriptorLength(void) const
static const unsigned char * FindExtension(const desc_list_t &parsed, uint desc_tag)
static desc_list_t Parse(const unsigned char *data, uint len)
static desc_list_t ParseAndExclude(const unsigned char *data, uint len, int excluded_descid)
QString hexdump(void) const
uint DescriptorTag(void) const
static desc_list_t ParseOnlyInclude(const unsigned char *data, uint len, int excluded_descid)
uint DescriptorTagExtension(void) const
QString descrDump(const QString &name) const
static desc_list_t FindBestMatches(const desc_list_t &parsed, uint desc_tag, QMap< uint, uint > &langPref)
static const unsigned char * FindBestMatch(const desc_list_t &parsed, uint desc_tag, QMap< uint, uint > &langPref)
virtual QString toStringPD(uint priv_dsid) const
QString DescriptorTagString(void) const
static const unsigned char * Find(const desc_list_t &parsed, uint desc_tag)
virtual QString toStringXML(uint indent_level) const
Returns XML representation of string the TS Reader XML format.
virtual QString toString(void) const
const unsigned char * m_data
uint MaximumBitrate(void) const
QString toString() const override
@ ziggo_package_descriptor
@ premiere_parental_information
@ dvb_logical_channel_descriptor
@ premiere_content_transmission
@ nordig_content_protection
@ ci_protection_descriptor
@ dvb_simulcast_channel_descriptor
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
QString toString() const override
QString FormatIdentifierString(void) const
int CanonicalLanguageKey(void) const
QString toString(void) const override
uint SBLeakRate(void) const
uint ClockAccuracyExponent(void) const
bool ExternalClockReferenceIndicator(void) const
uint ClockAccuracyInteger(void) const
QString toString() const override
QString toString() const override
uint ProfileAndLevelIndication(void) const
uint FrameRateCode(void) const
bool MPEG1OnlyFlag(void) const
bool StillPictureFlag(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
static uint maxPriority(const QMap< uint, uint > &langPrefs)
static void comma_list_append(QString &str, const QString &extra)
std::vector< const unsigned char * > desc_list_t
QString indentSpaces(unsigned int level, unsigned int size=4)