mirror of
https://github.com/libretro/ppsspp.git
synced 2025-02-16 15:08:34 +00:00
sceMpegGetUserDataAu: return ERROR_MPEG_NO_DATA. Add some notes for later implementing mpeg user data. Fixes part of #2172. Thanks to [unknown]
This commit is contained in:
parent
04df8ac4dc
commit
b8959b956b
@ -1323,10 +1323,14 @@ int sceMpegAvcConvertToYuv420(u32 mpeg, u32 bufferOutput, u32 unknown1, int unkn
|
||||
int sceMpegGetUserdataAu(u32 mpeg, u32 streamUid, u32 auAddr, u32 resultAddr)
|
||||
{
|
||||
ERROR_LOG(HLE, "UNIMPL sceMpegGetUserdataAu(%08x, %08x, %08x, %08x)", mpeg, streamUid, auAddr, resultAddr);
|
||||
|
||||
// TODO: Are these at all right? Seen in Phantasy Star Portable 2.
|
||||
Memory::Write_U32(0, resultAddr);
|
||||
Memory::Write_U32(0, resultAddr + 4);
|
||||
return 0;
|
||||
|
||||
// We currently can't demux userdata so this seems like the best thing to return in the meantime..
|
||||
// Then we probably shouldn't do the above writes? but it works...
|
||||
return ERROR_MPEG_NO_DATA;
|
||||
}
|
||||
|
||||
const HLEFunction sceMpeg[] =
|
||||
|
@ -3,6 +3,9 @@
|
||||
const int PACKET_START_CODE_MASK = 0xffffff00;
|
||||
const int PACKET_START_CODE_PREFIX = 0x00000100;
|
||||
|
||||
// http://dvd.sourceforge.net/dvdinfo/mpeghdrs.html
|
||||
|
||||
const int USER_DATA_START_CODE = 0x000001b2;
|
||||
const int SEQUENCE_START_CODE = 0x000001b3;
|
||||
const int EXT_START_CODE = 0x000001b5;
|
||||
const int SEQUENCE_END_CODE = 0x000001b7;
|
||||
@ -156,33 +159,36 @@ void MpegDemux::demux(int audioChannel)
|
||||
startCode = (startCode << 8) | read8();
|
||||
}
|
||||
switch (startCode) {
|
||||
case PACK_START_CODE: {
|
||||
skip(10);
|
||||
break;
|
||||
}
|
||||
case SYSTEM_HEADER_START_CODE: {
|
||||
skip(14);
|
||||
break;
|
||||
}
|
||||
case PADDING_STREAM:
|
||||
case PRIVATE_STREAM_2: {
|
||||
case PACK_START_CODE:
|
||||
skip(10);
|
||||
break;
|
||||
case SYSTEM_HEADER_START_CODE:
|
||||
skip(14);
|
||||
break;
|
||||
case PADDING_STREAM:
|
||||
case PRIVATE_STREAM_2:
|
||||
{
|
||||
int length = read16();
|
||||
skip(length);
|
||||
break;
|
||||
}
|
||||
case PRIVATE_STREAM_1: {
|
||||
// Audio stream
|
||||
m_audioChannel = demuxStream(true, startCode, m_audioChannel);
|
||||
break;
|
||||
}
|
||||
case 0x1E0: case 0x1E1: case 0x1E2: case 0x1E3:
|
||||
case 0x1E4: case 0x1E5: case 0x1E6: case 0x1E7:
|
||||
case 0x1E8: case 0x1E9: case 0x1EA: case 0x1EB:
|
||||
case 0x1EC: case 0x1ED: case 0x1EE: case 0x1EF: {
|
||||
// Video Stream
|
||||
demuxStream(false, startCode, -1);
|
||||
break;
|
||||
}
|
||||
case PRIVATE_STREAM_1: {
|
||||
// Audio stream
|
||||
m_audioChannel = demuxStream(true, startCode, m_audioChannel);
|
||||
break;
|
||||
}
|
||||
case 0x1E0: case 0x1E1: case 0x1E2: case 0x1E3:
|
||||
case 0x1E4: case 0x1E5: case 0x1E6: case 0x1E7:
|
||||
case 0x1E8: case 0x1E9: case 0x1EA: case 0x1EB:
|
||||
case 0x1EC: case 0x1ED: case 0x1EE: case 0x1EF:
|
||||
// Video Stream
|
||||
demuxStream(false, startCode, -1);
|
||||
break;
|
||||
case USER_DATA_START_CODE:
|
||||
// User data, probably same as queried by sceMpegGetUserdataAu.
|
||||
// Not sure what exactly to do or how much to read.
|
||||
// TODO: implement properly.
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -191,4 +197,4 @@ int MpegDemux::getaudioStream(u8** audioStream)
|
||||
{
|
||||
*audioStream = m_audioStream;
|
||||
return m_audiopos;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user