diff --git a/Core/HLE/scePsmf.cpp b/Core/HLE/scePsmf.cpp index 73f3a6f9c6..a0aa01a727 100644 --- a/Core/HLE/scePsmf.cpp +++ b/Core/HLE/scePsmf.cpp @@ -471,6 +471,24 @@ u32 scePsmfGetStreamSize(u32 psmfStruct, u32 sizeAddr) return 0; } +u32 scePsmfQueryStreamOffset(u32 bufferAddr, u32 offsetAddr) +{ + ERROR_LOG(HLE, "UNIMPL scePsmfQueryStreamOffset(%08x, %08x)", bufferAddr, offsetAddr); + if (Memory::IsValidAddress(offsetAddr)) { + Memory::Write_U32(0, offsetAddr); + } + return 0; +} + +u32 scePsmfQueryStreamSize(u32 bufferAddr, u32 sizeAddr) +{ + ERROR_LOG(HLE, "UNIMPL scePsmfQueryStreamSize(%08x, %08x)", bufferAddr, sizeAddr); + if (Memory::IsValidAddress(sizeAddr)) { + Memory::Write_U32(1, sizeAddr); + } + return 0; +} + u32 scePsmfGetHeaderSize(u32 psmfStruct, u32 sizeAddr) { DEBUG_LOG(HLE, "scePsmfGetHeaderSize(%08x, %08x)", psmfStruct, sizeAddr); @@ -701,8 +719,11 @@ int scePsmfPlayerDelete(u32 psmfPlayer) { ERROR_LOG(HLE, "UNIMPL scePsmfPlayerDelete(%08x)", psmfPlayer); PsmfPlayer *psmfplayer = getPsmfPlayer(psmfPlayer); - if (psmfplayer) + if (psmfplayer) { psmfplayer->status = PSMF_PLAYER_STATUS_NONE; + delete psmfplayer; + psmfPlayerMap.erase(psmfPlayer); + } return 0; } @@ -734,6 +755,33 @@ int scePsmfPlayerReleasePsmf(u32 psmfPlayer) return 0; } +int scePsmfPlayerGetVideoData(u32 psmfPlayer, u32 videoDataAddr) +{ + ERROR_LOG(HLE, "UNIMPL scePsmfPlayerGetVideoData(%08x, %08x)", psmfPlayer, videoDataAddr); + PsmfPlayer *psmfplayer = getPsmfPlayer(psmfPlayer); + if (!psmfplayer) { + ERROR_LOG(HLE, "scePsmfPlayerGetVideoData - invalid psmf"); + return ERROR_PSMF_NOT_FOUND; + } + + // TODO: Once we start increasing pts somewhere, and actually know the last timestamp, do this better. + psmfplayer->status = PSMF_PLAYER_STATUS_PLAYING_FINISHED; + return 0; +} + +int scePsmfPlayerGetAudioData(u32 psmfPlayer, u32 audioDataAddr) +{ + ERROR_LOG(HLE, "UNIMPL scePsmfPlayerGetAudioData(%08x, %08x)", psmfPlayer, audioDataAddr); + PsmfPlayer *psmfplayer = getPsmfPlayer(psmfPlayer); + if (!psmfplayer) { + ERROR_LOG(HLE, "scePsmfPlayerGetAudioData - invalid psmf"); + return ERROR_PSMF_NOT_FOUND; + } + + Memory::Memset(audioDataAddr, 0, audioSamplesBytes); + return 0; +} + int scePsmfPlayerGetCurrentStatus(u32 psmfPlayer) { ERROR_LOG(HLE, "scePsmfPlayerGetCurrentStatus(%08x)", psmfPlayer); @@ -949,8 +997,8 @@ const HLEFunction scePsmf[] = { {0xA83F7113, WrapU_UU, "scePsmfGetAudioInfo"}, {0x971A3A90, 0, "scePsmfCheckEPmap"}, {0x68d42328, WrapU_UU, "scePsmfGetNumberOfSpecificStreams"}, - {0x5b70fcc1, 0, "scePsmfQueryStreamOffset"}, - {0x9553cc91, 0, "scePsmfQueryStreamSize"}, + {0x5b70fcc1, WrapU_UU, "scePsmfQueryStreamOffset"}, + {0x9553cc91, WrapU_UU, "scePsmfQueryStreamSize"}, {0xB78EB9E9, WrapU_UU, "scePsmfGetHeaderSize"}, {0xA5EBFE81, WrapU_UU, "scePsmfGetStreamSize"}, {0xE1283895, WrapU_U, "scePsmfGetPsmfVersion"}, @@ -970,7 +1018,7 @@ const HLEFunction scePsmfPlayer[] = {0x58B83577, WrapI_UC, "scePsmfPlayerSetPsmfCB"}, {0x3ea82a4b, WrapI_U, "scePsmfPlayerGetAudioOutSize"}, {0x3ed62233, WrapU_UU, "scePsmfPlayerGetCurrentPts"}, - {0x46f61f8b, 0, "scePsmfPlayerGetVideoData"}, + {0x46f61f8b, WrapI_UU, "scePsmfPlayerGetVideoData"}, {0x68f07175, WrapU_UUU, "scePsmfPlayerGetCurrentAudioStream"}, {0x75f03fa2, WrapU_UII, "scePsmfPlayerSelectSpecificVideo"}, {0x85461eff, WrapU_UII, "scePsmfPlayerSelectSpecificAudio"}, @@ -981,7 +1029,7 @@ const HLEFunction scePsmfPlayer[] = {0xa0b8ca55, WrapI_U, "scePsmfPlayerUpdate"}, {0xa3d81169, WrapU_UII, "scePsmfPlayerChangePlayMode"}, {0xb8d10c56, WrapU_U, "scePsmfPlayerSelectAudio"}, - {0xb9848a74, 0, "scePsmfPlayerGetAudioData"}, + {0xb9848a74, WrapI_UU, "scePsmfPlayerGetAudioData"}, {0xdf089680, WrapU_UU, "scePsmfPlayerGetPsmfInfo"}, {0xe792cd94, WrapI_U, "scePsmfPlayerReleasePsmf"}, {0xf3efaa91, WrapU_UUU, "scePsmfPlayerGetCurrentPlayMode"},