38 changes: 35 additions & 3 deletions mythtv/libs/libmythtv/mpeg/mpegdescriptors.h
Original file line number Diff line number Diff line change
Expand Up @@ -535,14 +535,35 @@ class MaximumBitrateDescriptor : public MPEGDescriptor
MPEGDescriptor(data, len, DescriptorID::maximum_bitrate) { }
// Name bits loc expected value
// descriptor_tag 8 0.0 0x0E
// descriptor_length 8 1.0
// descriptor_length 8 1.0 0x03
// reserved 2 2.0
// maximum_bitrate 22 2.2
uint MaximumBitrate(void) const { return (m_data[2]<<16 | m_data[3]<<8 | m_data[4]) & 0x3FFFFF; }

uint MaximumBitrate(void) const
{ return (m_data[2] & 0x3f) << 16 | m_data[3]<<8 | m_data[4]; }
QString toString() const override; // MPEGDescriptor
};

// ISO/IEC 13818-1:2019 (E) p87
class SmoothingBufferDescriptor : public MPEGDescriptor
{
public:
explicit SmoothingBufferDescriptor(const unsigned char *data, int len = 300) :
MPEGDescriptor(data, len, DescriptorID::smoothing_buffer) { }
// Name bits loc expected value
// descriptor_tag 8 0.0 0x10
// descriptor_length 8 1.0 0x06

// reserved 2 2.0
// sb_leak_rate 22 2.2
uint SBLeakRate(void) const
{ return (m_data[2] & 0x3f) << 16 | m_data[3]<<8 | m_data[4]; }
// reserved 2 5.0
// sb_size 2 5.2
uint SBSize(void) const
{ return (m_data[5] & 0x3f) << 16 | m_data[6]<<8 | m_data[7]; }
QString toString(void) const override; // MPEGDescriptor
};

/// ISO 13818-1:2000/Amd.3:2004 page 11
class AVCVideoDescriptor : public MPEGDescriptor
{
Expand Down Expand Up @@ -575,6 +596,7 @@ class AVCVideoDescriptor : public MPEGDescriptor
};

/// ISO 13818-1:2000/Amd.3:2004 page 12
/// ISO/IEC 13818-1:2019 (E) p 103
class AVCTimingAndHRDDescriptor : public MPEGDescriptor
{
public:
Expand Down Expand Up @@ -604,6 +626,7 @@ class AVCTimingAndHRDDescriptor : public MPEGDescriptor
};

/// ISO 13818-1:2013/FDAM 3 (E) page 7
/// ISO/IEC 13818-1:2019 (E) page 121
class HEVCVideoDescriptor : public MPEGDescriptor
{
public:
Expand Down Expand Up @@ -643,4 +666,13 @@ class HEVCVideoDescriptor : public MPEGDescriptor
QString toString() const override; // MPEGDescriptor
};

// class HEVCTimingAndHRDDescriptor : public MPEGDescriptor
// {
// explicit HEVCTimingAndHRDDescriptor(const unsigned char *data, int len = 300) :
// MPEGDescriptor(data, len, DescriptorID::hevc_timing_and_hrd) { }
// // Name bits loc expected value
// // descriptor_tag 8 0.0 0x38
// // descriptor_length 8 1.0
// };

#endif // MPEG_DESCRIPTORS_H
8 changes: 4 additions & 4 deletions mythtv/libs/libmythtv/mpeg/mpegtables.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -881,7 +881,7 @@ QString ProgramMapTable::toString(void) const
QString str =
QString("Program Map Section"
"\n%1"
" pnum(%2) pid(0x%3) pcrpid(0x%4)\n")
" pnum(%2) pid(0x%3) pcrpid(0x%4)")
.arg(PSIPTable::toString())
.arg(ProgramNumber())
.arg(tsheader()->PID(),0,16)
Expand All @@ -891,20 +891,20 @@ QString ProgramMapTable::toString(void) const
MPEGDescriptor::Parse(ProgramInfo(), ProgramInfoLength());
for (auto & d : desc)
{
str.append(QString(" %1\n")
str.append(QString("\n %1")
.arg(MPEGDescriptor(d, 300).toString()));
}

for (uint i = 0; i < StreamCount(); i++)
{
str.append(QString(" Stream #%1 pid(0x%2) type(0x%3 %4)\n")
str.append(QString("\n Stream #%1 pid(0x%2) type(0x%3 %4)")
.arg(i).arg(StreamPID(i), 0, 16)
.arg(StreamType(i), 2, 16, QChar('0'))
.arg(StreamTypeString(i)));
desc = MPEGDescriptor::Parse(StreamInfo(i), StreamInfoLength(i));
for (auto & d : desc)
{
str.append(QString(" %1\n")
str.append(QString("\n %1")
.arg(MPEGDescriptor(d, 300).toString()));
}
}
Expand Down