From f6598d2cd6527791507aaa6cf1c428dc21272ce9 Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 24 Jan 2013 19:40:26 +0800 Subject: [PATCH] Add psmfPlayerLastTimestamp to psmfplayer --- Core/HLE/scePsmf.cpp | 77 ++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/Core/HLE/scePsmf.cpp b/Core/HLE/scePsmf.cpp index 5c37d8c5d7..893459c167 100644 --- a/Core/HLE/scePsmf.cpp +++ b/Core/HLE/scePsmf.cpp @@ -79,6 +79,7 @@ struct PsmfPlayerData { int audioStreamNum; int playMode; int playSpeed; + long psmfPlayerLastTimestamp; }; struct PsmfEntry { @@ -149,12 +150,12 @@ public: int audioStreamNum; int playMode; int playSpeed; + long psmfPlayerLastTimestamp; int displayBuffer; int displayBufferSize; int playbackThreadPriority; int psmfMaxAheadTimestamp; - long psmfPlayerLastTimestamp; SceMpegAu psmfPlayerAtracAu; SceMpegAu psmfPlayerAvcAu; @@ -249,6 +250,7 @@ PsmfPlayer::PsmfPlayer(u32 data) { audioStreamNum = Memory::Read_U32(data + 12); playMode = Memory::Read_U32(data+ 16); playSpeed = Memory::Read_U32(data + 20); + psmfPlayerLastTimestamp = bswap32(Memory::Read_U32(data + PSMF_LAST_TIMESTAMP_OFFSET)) ; } void Psmf::DoState(PointerWrap &p) { @@ -298,11 +300,11 @@ void Psmf::DoState(PointerWrap &p) { void PsmfPlayer::DoState(PointerWrap &p) { p.Do(videoCodec); - p.Do(videoStreamNum); - p.Do(audioCodec); - p.Do(audioStreamNum); - p.Do(playMode); - p.Do(playSpeed); + p.Do(videoStreamNum); + p.Do(audioCodec); + p.Do(audioStreamNum); + p.Do(playMode); + p.Do(playSpeed); p.Do(displayBuffer); p.Do(displayBufferSize); @@ -367,9 +369,6 @@ void __PsmfDoState(PointerWrap &p) } } - // TODO: Actually load this from a map. - psmfPlayerStatus = PSMF_PLAYER_STATUS_NONE; - p.DoMarker("scePsmf"); } @@ -652,32 +651,6 @@ u32 scePsmfGetEPidWithTimestamp(u32 psmfStruct, u32 ts) return psmf->psmfEntry.id; } -const HLEFunction scePsmf[] = { - {0xc22c8327, WrapU_UU, "scePsmfSetPsmf"}, - {0xC7DB3A5B, WrapU_UUU, "scePsmfGetCurrentStreamType"}, - {0x28240568, WrapU_U, "scePsmfGetCurrentStreamNumber"}, - {0x1E6D9013, WrapU_UUU, "scePsmfSpecifyStreamWithStreamType"}, - {0x0C120E1D, WrapU_UUU, "scePsmfSpecifyStreamWithStreamTypeNumber"}, - {0x4BC9BDE0, 0, "scePsmfSpecifyStream"}, - {0x76D3AEBA, WrapU_UU, "scePsmfGetPresentationStartTime"}, - {0xBD8AE0D8, WrapU_UU, "scePsmfGetPresentationEndTime"}, - {0xEAED89CD, WrapU_U, "scePsmfGetNumberOfStreams"}, - {0x7491C438, WrapU_U, "scePsmfGetNumberOfEPentries"}, - {0x0BA514E5, WrapU_UU, "scePsmfGetVideoInfo"}, - {0xA83F7113, WrapU_UU, "scePsmfGetAudioInfo"}, - {0x971A3A90, 0, "scePsmfCheckEPmap"}, - {0x68d42328, WrapU_UU, "scePsmfGetNumberOfSpecificStreams"}, - {0x5b70fcc1, 0, "scePsmfQueryStreamOffset"}, - {0x9553cc91, 0, "scePsmfQueryStreamSize"}, - {0xB78EB9E9, WrapU_UU, "scePsmfGetHeaderSize"}, - {0xA5EBFE81, WrapU_UU, "scePsmfGetStreamSize"}, - {0xE1283895, WrapU_U, "scePsmfGetPsmfVersion"}, - {0x2673646B, 0, "scePsmfVerifyPsmf"}, - {0x4E624A34, WrapU_UIU, "scePsmfGetEPWithId"}, - {0x7C0E7AC3, WrapU_UUU, "scePsmfGetEPWithTimestamp"}, - {0x5F457515, WrapU_UU, "scePsmfGetEPidWithTimestamp"}, -}; - int scePsmfPlayerCreate(u32 psmfPlayer, u32 psmfPlayerDataAddr) { ERROR_LOG(HLE, "UNIMPL scePsmfPlayerCreate(%08x, %08x)", psmfPlayer, psmfPlayerDataAddr); @@ -686,14 +659,14 @@ int scePsmfPlayerCreate(u32 psmfPlayer, u32 psmfPlayerDataAddr) ERROR_LOG(HLE, "scePsmfPlayerCreate - invalid psmf"); return ERROR_PSMF_NOT_FOUND; } - + if (Memory::IsValidAddress(psmfPlayerDataAddr)) { psmfplayer->displayBuffer = Memory::Read_U32(psmfPlayerDataAddr); psmfplayer->displayBufferSize = Memory::Read_U32(psmfPlayerDataAddr + 4); psmfplayer->playbackThreadPriority = Memory::Read_U32(psmfPlayerDataAddr + 8); } - psmfplayer->psmfMaxAheadTimestamp = getMaxAheadTimestamp(581); + psmfplayer->psmfMaxAheadTimestamp = getMaxAheadTimestamp(581); psmfPlayerStatus = PSMF_PLAYER_STATUS_INIT; return 0; } @@ -749,6 +722,7 @@ int scePsmfPlayerStart(u32 psmfPlayer, u32 psmfPlayerData, int initPts) data.audioStreamNum = psmfplayer->audioStreamNum; data.playMode = psmfplayer->playMode; data.playSpeed = psmfplayer->playSpeed; + data.psmfPlayerLastTimestamp = psmfplayer->psmfPlayerLastTimestamp; Memory::WriteStruct(psmfPlayer, &data); psmfplayer->psmfPlayerAtracAu.dts = initPts; @@ -756,7 +730,6 @@ int scePsmfPlayerStart(u32 psmfPlayer, u32 psmfPlayerData, int initPts) psmfplayer->psmfPlayerAvcAu.dts = initPts; psmfplayer->psmfPlayerAvcAu.pts = initPts; - //TODO : analyzePSMFLastTimestamp psmfPlayerStatus = PSMF_PLAYER_STATUS_PLAYING; return 0; } @@ -777,7 +750,7 @@ int scePsmfPlayerUpdate(u32 psmfPlayer) return ERROR_PSMF_NOT_FOUND; } - if (psmfplayer->psmfPlayerAvcAu.pts > 0) { + if (psmfplayer->psmfPlayerAvcAu.pts > 0) { if (psmfplayer->psmfPlayerAvcAu.pts > psmfplayer->psmfPlayerLastTimestamp) { psmfPlayerStatus = PSMF_PLAYER_STATUS_PLAYING_FINISHED; } @@ -982,6 +955,32 @@ u32 scePsmfPlayerConfigPlayer(u32 psmfPlayer, int configMode, int configAttr) return 0; } +const HLEFunction scePsmf[] = { + {0xc22c8327, WrapU_UU, "scePsmfSetPsmf"}, + {0xC7DB3A5B, WrapU_UUU, "scePsmfGetCurrentStreamType"}, + {0x28240568, WrapU_U, "scePsmfGetCurrentStreamNumber"}, + {0x1E6D9013, WrapU_UUU, "scePsmfSpecifyStreamWithStreamType"}, + {0x0C120E1D, WrapU_UUU, "scePsmfSpecifyStreamWithStreamTypeNumber"}, + {0x4BC9BDE0, 0, "scePsmfSpecifyStream"}, + {0x76D3AEBA, WrapU_UU, "scePsmfGetPresentationStartTime"}, + {0xBD8AE0D8, WrapU_UU, "scePsmfGetPresentationEndTime"}, + {0xEAED89CD, WrapU_U, "scePsmfGetNumberOfStreams"}, + {0x7491C438, WrapU_U, "scePsmfGetNumberOfEPentries"}, + {0x0BA514E5, WrapU_UU, "scePsmfGetVideoInfo"}, + {0xA83F7113, WrapU_UU, "scePsmfGetAudioInfo"}, + {0x971A3A90, 0, "scePsmfCheckEPmap"}, + {0x68d42328, WrapU_UU, "scePsmfGetNumberOfSpecificStreams"}, + {0x5b70fcc1, 0, "scePsmfQueryStreamOffset"}, + {0x9553cc91, 0, "scePsmfQueryStreamSize"}, + {0xB78EB9E9, WrapU_UU, "scePsmfGetHeaderSize"}, + {0xA5EBFE81, WrapU_UU, "scePsmfGetStreamSize"}, + {0xE1283895, WrapU_U, "scePsmfGetPsmfVersion"}, + {0x2673646B, 0, "scePsmfVerifyPsmf"}, + {0x4E624A34, WrapU_UIU, "scePsmfGetEPWithId"}, + {0x7C0E7AC3, WrapU_UUU, "scePsmfGetEPWithTimestamp"}, + {0x5F457515, WrapU_UU, "scePsmfGetEPidWithTimestamp"}, +}; + const HLEFunction scePsmfPlayer[] = { {0x235d8787, WrapI_UU, "scePsmfPlayerCreate"},