From 69690a0fe158740ce217b4e578cfb0e617a4b4e4 Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 14 Feb 2014 10:43:53 +0800 Subject: [PATCH 1/2] scePsmf : add pause mode (PSMF_PLAYER_MODE_PAUSE) --- Core/HLE/scePsmf.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/Core/HLE/scePsmf.cpp b/Core/HLE/scePsmf.cpp index 21599023ff..8fe906e356 100644 --- a/Core/HLE/scePsmf.cpp +++ b/Core/HLE/scePsmf.cpp @@ -46,8 +46,6 @@ const int PSMF_PLAYER_CONFIG_NO_LOOP = 1; const int PSMF_PLAYER_CONFIG_MODE_LOOP = 0; const int PSMF_PLAYER_CONFIG_MODE_PIXEL_TYPE = 1; -const int TPSM_PIXEL_STORAGE_MODE_32BIT_ABGR8888 = 0X03; - int psmfCurrentPts = 0; int psmfAvcStreamNum = 1; int psmfAtracStreamNum = 1; @@ -56,7 +54,7 @@ int psmfPlayerVersion = PSMF_PLAYER_VERSION_FULL; int psmfMaxAheadTimestamp = 40000; int audioSamples = 2048; int audioSamplesBytes = audioSamples * 4; -int videoPixelMode = TPSM_PIXEL_STORAGE_MODE_32BIT_ABGR8888; +int videoPixelMode = GE_MMODE_32BIT_ABGR8888; int videoLoopStatus = PSMF_PLAYER_CONFIG_NO_LOOP; enum PsmfPlayerStatus { @@ -68,6 +66,15 @@ enum PsmfPlayerStatus { PSMF_PLAYER_STATUS_PLAYING_FINISHED = 0x200, }; +enum PsmfPlayerMode { + PSMF_PLAYER_MODE_PLAY = 0, + PSMF_PLAYER_MODE_SLOWMOTION = 1, + PSMF_PLAYER_MODE_STEPFRAME = 2, + PSMF_PLAYER_MODE_PAUSE = 3, + PSMF_PLAYER_MODE_FORWARD = 4, + PSMF_PLAYER_MODE_REWIND = 5, +}; + struct PsmfData { u32_le version; u32_le headerSize; @@ -457,7 +464,7 @@ PsmfPlayer *getPsmfPlayer(u32 psmfplayer) void __PsmfInit() { - videoPixelMode = TPSM_PIXEL_STORAGE_MODE_32BIT_ABGR8888; + videoPixelMode = GE_CMODE_32BIT_ABGR8888; videoLoopStatus = PSMF_PLAYER_CONFIG_NO_LOOP; } @@ -1124,6 +1131,11 @@ int scePsmfPlayerGetVideoData(u32 psmfPlayer, u32 videoDataAddr) return ERROR_PSMF_NOT_INITIALIZED; } + if (psmfplayer->playMode == PSMF_PLAYER_MODE_PAUSE) { + INFO_LOG(HLE, "scePsmfPlayerGetVideoData(%08x): paused mode", psmfPlayer); + return 0; + } + if (Memory::IsValidAddress(videoDataAddr)) { int frameWidth = Memory::Read_U32(videoDataAddr); u32 displaybuf = Memory::Read_U32(videoDataAddr + 4); @@ -1164,6 +1176,11 @@ int scePsmfPlayerGetAudioData(u32 psmfPlayer, u32 audioDataAddr) return ERROR_PSMF_NOT_INITIALIZED; } + if (psmfplayer->playMode == PSMF_PLAYER_MODE_PAUSE) { + INFO_LOG(HLE, "scePsmfPlayerGetAudioData(%08x): paused mode", psmfPlayer); + return 0; + } + if (Memory::IsValidAddress(audioDataAddr)) { Memory::Memset(audioDataAddr, 0, audioSamplesBytes); psmfplayer->mediaengine->getAudioSamples(audioDataAddr); From 7fbee7bb19463abf2a8480682fc5067c21cecfb0 Mon Sep 17 00:00:00 2001 From: raven02 Date: Fri, 14 Feb 2014 18:45:12 +0800 Subject: [PATCH 2/2] Typo fix --- Core/HLE/scePsmf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/HLE/scePsmf.cpp b/Core/HLE/scePsmf.cpp index 8fe906e356..c50db2a4c3 100644 --- a/Core/HLE/scePsmf.cpp +++ b/Core/HLE/scePsmf.cpp @@ -54,7 +54,7 @@ int psmfPlayerVersion = PSMF_PLAYER_VERSION_FULL; int psmfMaxAheadTimestamp = 40000; int audioSamples = 2048; int audioSamplesBytes = audioSamples * 4; -int videoPixelMode = GE_MMODE_32BIT_ABGR8888; +int videoPixelMode = GE_CMODE_32BIT_ABGR8888; int videoLoopStatus = PSMF_PLAYER_CONFIG_NO_LOOP; enum PsmfPlayerStatus {