21#ifndef SPLICE_DESCRIPTOR_H
22#define SPLICE_DESCRIPTOR_H
32 const unsigned char *data,
uint len)
38 tmp.push_back(data+off);
51 const unsigned char *data,
uint len,
int excluded_descid)
57 if ((data+off)[0] != excluded_descid)
58 tmp.push_back(data+off);
62 if ((data+off)[0] != excluded_descid)
72 const unsigned char *data,
uint len,
int excluded_descid)
78 if ((data+off)[0] == excluded_descid)
79 tmp.push_back(data+off);
83 if ((data+off)[0] == excluded_descid)
95 auto sametag = [desc_tag](
const auto *item){
return item[0] == desc_tag; };
96 auto it = std::ranges::find_if(parsed, sametag);
97 return (it != parsed.cend()) ? *it :
nullptr;
103 auto sametag = [desc_tag](
const auto *item) {
return item[0] == desc_tag; };
104 std::ranges::copy_if(parsed, std::back_inserter(tmp), sametag);
117 return {
"Segmentation"};
128 return "Invalid Splice Descriptor";
133 str = desc.toString();
139 str = desc.toString();
145 str = desc.toString();
149 str.append(QString(
"%1 Splice Descriptor (0x%2)")
154 str.append(QString(
" 0x%1").arg(
int(
m_data[i+2]), 0, 16));
157 return str.isEmpty() ?
"Invalid Splice Descriptor" : str;
168 str += indent_0 +
"<DESCRIPTOR namespace=\"splice\">\n";
169 str += indent_1 + QString(
"<TAG>0x%1</TAG>\n")
171 str += indent_1 + QString(
"<DESCRIPTION>%1</DESCRIPTION>\n")
174 str += indent_1 +
"<DATA>";
176 str += QString(
"0x%1 ").arg(
m_data[i+2],2,16,QChar(
'0'));
180 str += indent_1 +
"<DECODED>" +
toString() +
"</DECODED>";
182 str += indent_0 +
"</DESCRIPTOR>";
194 if (len + 2 > safe_bytes)
196 if (data[2] !=
'C' || data[3] !=
'U' ||
197 data[4] !=
'E' || data[5] !=
'I')
199 return len == (6 +
uint(data[7]>>5));
static bool IsParsible(const unsigned char *data, uint safe_bytes)
std::array< unsigned char const *, 3 > _ptrs
bool Parse(void) override
uint SegmentationUPIDLength(void) const
QString SegmentationEventIdString(void) const
QString toString(void) const override
bool IsProgramSegmentation(void) const
uint ComponentCount(void) const
bool HasSegmentationDuration(void) const
static desc_list_t ParseAndExclude(const unsigned char *data, uint len, int excluded_descid)
uint DescriptorLength(void) const
virtual QString toStringXML(uint indent_level) const
Returns XML representation of string the TS Reader XML format.
const unsigned char * m_data
static desc_list_t ParseOnlyInclude(const unsigned char *data, uint len, int excluded_descid)
uint DescriptorTag(void) const
QString DescriptorTagString(void) const
static desc_list_t FindAll(const desc_list_t &parsed, uint desc_tag)
virtual QString toString(void) const
static const unsigned char * Find(const desc_list_t &parsed, uint desc_tag)
std::vector< const unsigned char * > desc_list_t
QString indentSpaces(unsigned int level, unsigned int size=4)