Go to the documentation of this file.
21 #ifndef SPLICE_DESCRIPTOR_H
22 #define SPLICE_DESCRIPTOR_H
28 const unsigned char *data,
uint len)
34 tmp.push_back(data+off);
47 const unsigned char *data,
uint len,
int excluded_descid)
53 if ((data+off)[0] != excluded_descid)
54 tmp.push_back(data+off);
58 if ((data+off)[0] != excluded_descid)
68 const unsigned char *data,
uint len,
int excluded_descid)
74 if ((data+off)[0] == excluded_descid)
75 tmp.push_back(data+off);
79 if ((data+off)[0] == excluded_descid)
91 auto sametag = [desc_tag](
const auto *item){
return item[0] == 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);
113 return {
"Segmentation"};
124 return "Invalid Splice Descriptor";
129 str = desc.toString();
135 str = desc.toString();
141 str = desc.toString();
145 str.append(QString(
"%1 Splice Descriptor (0x%2)")
150 str.append(QString(
" 0x%1").arg(
int(
m_data[i+2]), 0, 16));
153 return str.isEmpty() ?
"Invalid Splice Descriptor" : str;
164 str += indent_0 +
"<DESCRIPTOR namespace=\"splice\">\n";
165 str += indent_1 + QString(
"<TAG>0x%1</TAG>\n")
167 str += indent_1 + QString(
"<DESCRIPTION>%1</DESCRIPTION>\n")
170 str += indent_1 +
"<DATA>";
172 str += QString(
"0x%1 ").arg(
m_data[i+2],2,16,QChar(
'0'));
176 str += indent_1 +
"<DECODED>" +
toString() +
"</DECODED>";
178 str += indent_0 +
"</DESCRIPTOR>";
190 if (len + 2 > safe_bytes)
192 if (data[2] !=
'C' || data[3] !=
'U' ||
193 data[4] !=
'E' || data[5] !=
'I')
195 return len == (6 +
uint(data[7]>>5));
212 #endif // SPLICE_DESCRIPTOR_H
virtual QString toString(void) const
virtual QString toStringXML(uint indent_level) const
Returns XML representation of string the TS Reader XML format.
static desc_list_t ParseAndExclude(const unsigned char *data, uint len, int excluded_descid)
std::array< unsigned char const *, 3 > _ptrs
bool Parse(void) override
QString indentSpaces(unsigned int level, unsigned int size=4)
bool IsProgramSegmentation(void) const
static desc_list_t FindAll(const desc_list_t &parsed, uint desc_tag)
uint SegmentationUPIDLength(void) const
QString toString(void) const override
std::vector< const unsigned char * > desc_list_t
uint DescriptorTag(void) const
QString SegmentationEventIdString(void) const
uint ComponentCount(void) const
uint DescriptorLength(void) const
static desc_list_t ParseOnlyInclude(const unsigned char *data, uint len, int excluded_descid)
const unsigned char * m_data
QString DescriptorTagString(void) const
static bool IsParsible(const unsigned char *data, uint safe_bytes)
static const unsigned char * Find(const desc_list_t &parsed, uint desc_tag)
bool HasSegmentationDuration(void) const