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:
Henrik Rydgard 2013-06-11 19:22:08 +02:00
parent 04df8ac4dc
commit b8959b956b
2 changed files with 35 additions and 25 deletions

View file

@ -1323,10 +1323,14 @@ int sceMpegAvcConvertToYuv420(u32 mpeg, u32 bufferOutput, u32 unknown1, int unkn
int sceMpegGetUserdataAu(u32 mpeg, u32 streamUid, u32 auAddr, u32 resultAddr) int sceMpegGetUserdataAu(u32 mpeg, u32 streamUid, u32 auAddr, u32 resultAddr)
{ {
ERROR_LOG(HLE, "UNIMPL sceMpegGetUserdataAu(%08x, %08x, %08x, %08x)", mpeg, streamUid, auAddr, 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. // TODO: Are these at all right? Seen in Phantasy Star Portable 2.
Memory::Write_U32(0, resultAddr); Memory::Write_U32(0, resultAddr);
Memory::Write_U32(0, resultAddr + 4); 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[] = const HLEFunction sceMpeg[] =

View file

@ -3,6 +3,9 @@
const int PACKET_START_CODE_MASK = 0xffffff00; const int PACKET_START_CODE_MASK = 0xffffff00;
const int PACKET_START_CODE_PREFIX = 0x00000100; 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 SEQUENCE_START_CODE = 0x000001b3;
const int EXT_START_CODE = 0x000001b5; const int EXT_START_CODE = 0x000001b5;
const int SEQUENCE_END_CODE = 0x000001b7; const int SEQUENCE_END_CODE = 0x000001b7;
@ -156,16 +159,15 @@ void MpegDemux::demux(int audioChannel)
startCode = (startCode << 8) | read8(); startCode = (startCode << 8) | read8();
} }
switch (startCode) { switch (startCode) {
case PACK_START_CODE: { case PACK_START_CODE:
skip(10); skip(10);
break; break;
} case SYSTEM_HEADER_START_CODE:
case SYSTEM_HEADER_START_CODE: {
skip(14); skip(14);
break; break;
}
case PADDING_STREAM: case PADDING_STREAM:
case PRIVATE_STREAM_2: { case PRIVATE_STREAM_2:
{
int length = read16(); int length = read16();
skip(length); skip(length);
break; break;
@ -178,11 +180,15 @@ void MpegDemux::demux(int audioChannel)
case 0x1E0: case 0x1E1: case 0x1E2: case 0x1E3: case 0x1E0: case 0x1E1: case 0x1E2: case 0x1E3:
case 0x1E4: case 0x1E5: case 0x1E6: case 0x1E7: case 0x1E4: case 0x1E5: case 0x1E6: case 0x1E7:
case 0x1E8: case 0x1E9: case 0x1EA: case 0x1EB: case 0x1E8: case 0x1E9: case 0x1EA: case 0x1EB:
case 0x1EC: case 0x1ED: case 0x1EE: case 0x1EF: { case 0x1EC: case 0x1ED: case 0x1EE: case 0x1EF:
// Video Stream // Video Stream
demuxStream(false, startCode, -1); demuxStream(false, startCode, -1);
break; 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;
} }
} }
} }