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");
393 str = QString(
"%1 Descriptor tag(0x%2) length(%3)")
399 str.append(
" Dumping\n");
416 str =
"Invalid Descriptor";
420 str = descrToString<VideoStreamDescriptor>();
424 str = descrToString<AudioStreamDescriptor>();
428 str = descrToString<RegistrationDescriptor>();
432 str = descrToString<DataStreamAlignmentDescriptor>();
436 str = descrToString<ConditionalAccessDescriptor>();
440 str = descrToString<ISO639LanguageDescriptor>();
444 str = descrToString<SystemClockDescriptor>();
448 str = descrToString<MaximumBitrateDescriptor>();
452 str = descrToString<SmoothingBufferDescriptor>();
456 str = descrToString<AVCVideoDescriptor>();
460 str = descrToString<HEVCVideoDescriptor>();
464 str = descrToString<NetworkNameDescriptor>();
468 str = descrToString<ServiceListDescriptor>();
472 str = descrToString<SatelliteDeliverySystemDescriptor>();
476 str = descrToString<CableDeliverySystemDescriptor>();
480 str = descrToString<BouquetNameDescriptor>();
484 str = descrToString<ServiceDescriptor>();
488 str = descrToString<CountryAvailabilityDescriptor>();
496 str = descrToString<StreamIdentifierDescriptor>();
500 str = descrToString<TeletextDescriptor>();
504 str = descrToString<SubtitlingDescriptor>();
508 str = descrToString<TerrestrialDeliverySystemDescriptor>();
512 str = descrToString<FrequencyListDescriptor>();
516 str = descrToString<ScramblingDescriptor>();
520 str = descrToString<AC3Descriptor>();
528 str = descrToString<ApplicationSignallingDescriptor>();
532 str = descrToString<AdaptationFieldDataDescriptor>();
536 str = descrToString<DefaultAuthorityDescriptor>();
540 str = descrToString<S2SatelliteDeliverySystemDescriptor>();
547 str = descrToString<ImageIconDescriptor>();
552 str = descrToString<T2DeliverySystemDescriptor>();
557 str = descrToString<SHDeliverySystemDescriptor>();
562 str = descrToString<SupplementaryAudioDescriptor>();
567 str = descrToString<NetworkChangeNotifyDescriptor>();
572 str = descrToString<MessageDescriptor>();
577 str = descrToString<TargetRegionDescriptor>();
582 str = descrToString<TargetRegionNameDescriptor>();
587 str = descrToString<ServiceRelocatedDescriptor>();
592 str = descrToString<C2DeliverySystemDescriptor>();
597 str = descrToString<S2XSatelliteDeliverySystemDescriptor>();
604 str =
descrDump(
"NorDig Content Protection");
614 str = descrToString<SkyLCNDescriptor>();
619 str = descrToString<FreesatRegionDescriptor>();
624 str = descrToString<FreesatLCNDescriptor>();
629 str = descrToString<FreesatCallsignDescriptor>();
646 str = descrToString<DVBSimulcastChannelDescriptor>();
653 str = descrToString<DVBLogicalChannelDescriptor>();
670 str = descrToString<AC3AudioStreamDescriptor>();
674 str = descrToString<CaptionServiceDescriptor>();
678 str = descrToString<CueIdentifierDescriptor>();
682 str = descrToString<RevisionDetectionDescriptor>();
686 str = descrToString<ExtendedChannelNameDescriptor>();
688 else if (priv_dsid == 0 &&
691 str = descrToString<ComponentNameDescriptor>();
709 str += indent_0 +
"<Descriptor>\n";
710 str += indent_1 + QString(
"<Tag>0x%1</Tag>\n")
712 str += indent_1 + QString(
"<Description>%1</Description>\n")
715 str += indent_1 +
"<Data>";
718 if (((i%8) == 0) && i)
719 str +=
"\n" + indent_1 +
" ";
720 str += QString(
"0x%1 ").arg(
m_data[i+2],2,16,QChar(
'0'));
723 str +=
"\n" + indent_1 +
"</Data>\n";
724 str += indent_1 +
"<Decoded>" +
toString().toHtmlEscaped() +
"</Decoded>\n";
725 str += indent_0 +
"</Descriptor>";
740 hex.append(QString(
" %1").arg(ch, 2, 16, QChar(
'0')));
741 prt.append(QString(
"%1").arg(isprint(ch) ? QChar(ch) :
'.'));
742 if (((i+1) % 8) == 0)
744 if (((i+1) % 16) == 0)
746 str.append(QString(
" %1 %2 |%3|")
747 .arg(i - (i % 16),3,16,QChar(
'0'))
759 str.append(QString(
" %1 %2 |%3|")
760 .arg(i - (i % 16),3,16,QChar(
'0'))
761 .arg(hex,-50,
' ').arg(prt));
768 QString str = QString(
"Video Stream Descriptor: frame_rate(%1) MPEG-1(%2)")
773 str.append(QString(
" still_picture(%1) profile(%2)")
782 return QString(
"Audio Stream Descriptor: free_format(%1) ID(%2) layer(%3) variable_rate(%4)")
797 description_map[
"BDC0"] =
"Broadcast Data Corporation Software Data Service";
798 description_map[
"BSSD"] =
"SMPTE 302M-1998 Audio data as specified in (AES3)";
799 description_map[
"CAPO"] =
"SMPTE 315M-1999 Camera Positioning Information";
800 description_map[
"CUEI"] =
"SCTE 35 2003, Cable Digital Program Insertion Cueing Message";
801 description_map[
"DDED"] =
"LGEUS Digital Delivery with encryption and decryption";
803 description_map[
"DRA1"] =
"Chinese EIS SJ/T11368-2006 DRA digital audio";
811 description_map[
"HDMV"] =
"Blu-Ray A/V for read-only media (H.264 TS)";
820 description_map[
"SCTE"] =
"SCTE 54 2003 Digital Video Service Multiplex and TS for Cable";
821 description_map[
"SEN1"] =
"ATSC Private Information identifies source of stream";
822 description_map[
"SESF"] =
"Blu-Ray A/V for ReWritable media (H.264 TS)";
823 description_map[
"SPLC"] =
"SMPTE Proposed 312M Splice Point compatible TS";
824 description_map[
"SVMD"] =
"SMPTE Proposed Video Metatdata Dictionary for MPEG2-TS";
828 description_map[
"TSHV"] =
"Sony self-encoded MPEG-TS and private data";
829 description_map[
"TSMV"] =
"Sony self-encoded MPEG-TS and private data";
834 description_map[
"VC-1"] =
"SMPTE Draft RP 227 VC-1 Bitstream Transport Encodings";
836 for (
uint i = 0; i <= 99; i++)
839 "NIMA, Unspecified military application";
852 QMap<QString,QString>::const_iterator it =
description_map.constFind(fmt);
863 QString msg = QString(
"Registration Descriptor: '%1' ").arg(fmt);
867 msg2 =
"Unknown, see http://www.smpte-ra.org/mpegreg/mpegreg.html";
874 return QString(
"Data Stream Alignment Descriptor: alignment_type(%1)")
880 return QString(
"Conditional Access: sid(0x%1) pid(0x%2) data_size(%3)")
886 return QString(
"ISO-639 Language: code(%1) canonical(%2) eng(%3)")
893 return QString(
"System Clock Descriptor: extref(%1) accuracy(%2e-%3 ppm)")
901 return QString(
"Maximum Bitrate Descriptor: maximum_bitrate(0x%1) %2 Mbit/s")
908 QString str = QString(
"Smoothing Buffer Descriptor ");
909 str += QString(
"tag(0x%1) ").arg(
DescriptorTag(),2,16,QChar(
'0'));
913 QString(
"sb_leak_rate(0x%1) %2 kB/s ")
916 QString(
"sb_size(0x%1) %2 kB")
917 .arg(
SBSize(),6,16,QChar(
'0'))
924 return QString(
"AVC Video: IDC prof(%1) IDC level(%2) sets(%3%4%5) "
925 "compat(%6) still(%7) 24hr(%8) FramePacking(%9)")
938 QString str = QString(
"HEVC Video: ProfileSpace(%1) Tier(%2) ProfileIDC(%3)")
940 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)