mirror of
https://github.com/libretro/ppsspp.git
synced 2025-02-12 04:11:56 +00:00
Mpeg: Validate the pack header.
This commit is contained in:
parent
b191fd2914
commit
4d16835990
@ -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:
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user