Mpeg: Validate the pack header.

This commit is contained in:
Unknown W. Brackets 2016-06-04 16:12:23 -07:00
parent b191fd2914
commit 4d16835990
2 changed files with 37 additions and 2 deletions

View File

@ -154,6 +154,37 @@ int MpegDemux::demuxStream(bool bdemux, int startCode, int channel)
return channel;
}
bool MpegDemux::skipPackHeader() {
// MPEG version / SCR
if ((read8() & 0xC4) != 0x44) {
return false;
}
skip(1);
if ((read8() & 0x04) != 0x04) {
return false;
}
skip(1);
if ((read8() & 0x04) != 0x04) {
return false;
}
// SCR_ext
if ((read8() & 0x01) != 0x01) {
return false;
}
int muxrate = read24();
if ((muxrate & 3) != 3) {
return false;
}
int stuffing = read8() & 7;
while (stuffing > 0) {
if (read8() != 0xFF) {
return false;
}
}
return true;
}
void MpegDemux::demux(int audioChannel)
{
if (audioChannel >= 0)
@ -169,10 +200,10 @@ void MpegDemux::demux(int audioChannel)
}
switch (startCode) {
case PACK_START_CODE:
skip(10);
skipPackHeader();
break;
case SYSTEM_HEADER_START_CODE:
skip(14);
skip(read16());
break;
case PADDING_STREAM:
case PRIVATE_STREAM_2:

View File

@ -46,6 +46,9 @@ private:
int read16() {
return (read8() << 8) | read8();
}
int read24() {
return (read8() << 16) | (read8() << 8) | read8();
}
s64 readPts() {
return readPts(read8());
}
@ -62,6 +65,7 @@ private:
}
int readPesHeader(PesHeader &pesHeader, int length, int startCode);
int demuxStream(bool bdemux, int startCode, int channel);
bool skipPackHeader();
int m_index;
int m_len;