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
2 changed files with 35 additions and 25 deletions
|
@ -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[] =
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue