mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
PsmfPlayer:The status will not be changed until the delay result is finished.
This commit is contained in:
parent
27d41693fc
commit
d940f80b88
1 changed files with 24 additions and 7 deletions
|
@ -29,6 +29,7 @@
|
|||
#include "Core/HLE/sceMpeg.h"
|
||||
#include "Core/HLE/sceKernelMemory.h"
|
||||
#include "Core/HW/MediaEngine.h"
|
||||
#include "Core/CoreTiming.h"
|
||||
#include "GPU/GPUInterface.h"
|
||||
#include "GPU/GPUState.h"
|
||||
|
||||
|
@ -59,6 +60,8 @@ static int videoPixelMode = GE_CMODE_32BIT_ABGR8888;
|
|||
static int videoLoopStatus = PSMF_PLAYER_CONFIG_NO_LOOP;
|
||||
static int psmfPlayerLibVersion = 0;
|
||||
|
||||
int eventPsmfPlayerStatusChange = -1;
|
||||
|
||||
enum PsmfPlayerError {
|
||||
ERROR_PSMF_NOT_INITIALIZED = 0x80615001,
|
||||
ERROR_PSMF_BAD_VERSION = 0x80615002,
|
||||
|
@ -666,10 +669,20 @@ static PsmfPlayer *getPsmfPlayer(u32 psmfplayer)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void __PsmfPlayerStatusChange(u64 userdata, int cyclesLate) {
|
||||
PsmfPlayerStatus status = PsmfPlayerStatus(userdata & 0xFFFFFFFF);
|
||||
u32 psmfPlayer = userdata >> 32;
|
||||
PsmfPlayer *player = getPsmfPlayer(psmfPlayer);
|
||||
if (player) {
|
||||
player->status = status;
|
||||
}
|
||||
}
|
||||
|
||||
void __PsmfInit() {
|
||||
videoPixelMode = GE_CMODE_32BIT_ABGR8888;
|
||||
videoLoopStatus = PSMF_PLAYER_CONFIG_NO_LOOP;
|
||||
psmfPlayerLibVersion = 0;
|
||||
eventPsmfPlayerStatusChange = CoreTiming::RegisterEvent("PsmfPlayerStatusChange", &__PsmfPlayerStatusChange);
|
||||
}
|
||||
|
||||
void __PsmfPlayerLoadModule(int devkitVersion) {
|
||||
|
@ -1129,8 +1142,9 @@ static int scePsmfPlayerCreate(u32 psmfPlayer, u32 dataPtr)
|
|||
videoPixelMode = GE_CMODE_32BIT_ABGR8888;
|
||||
videoLoopStatus = PSMF_PLAYER_CONFIG_NO_LOOP;
|
||||
|
||||
psmfplayer->status = PSMF_PLAYER_STATUS_INIT;
|
||||
return hleDelayResult(0, "player create", 20000);
|
||||
int delayUs = 20000;
|
||||
CoreTiming::ScheduleEvent(usToCycles(delayUs), eventPsmfPlayerStatusChange, (u64)psmfPlayer << 32 | PSMF_PLAYER_STATUS_INIT);
|
||||
return hleDelayResult(0, "player create", delayUs);
|
||||
}
|
||||
|
||||
static int scePsmfPlayerStop(u32 psmfPlayer) {
|
||||
|
@ -1146,8 +1160,9 @@ static int scePsmfPlayerStop(u32 psmfPlayer) {
|
|||
psmfplayer->AbortFinish();
|
||||
|
||||
INFO_LOG(ME, "scePsmfPlayerStop(%08x)", psmfPlayer);
|
||||
psmfplayer->status = PSMF_PLAYER_STATUS_STANDBY;
|
||||
return hleDelayResult(0, "psmfplayer stop", 3000);
|
||||
int delayUs = 3000;
|
||||
CoreTiming::ScheduleEvent(usToCycles(delayUs), eventPsmfPlayerStatusChange, (u64)psmfPlayer << 32 | PSMF_PLAYER_STATUS_STANDBY);
|
||||
return hleDelayResult(0, "psmfplayer stop", delayUs);
|
||||
}
|
||||
|
||||
static int scePsmfPlayerBreak(u32 psmfPlayer)
|
||||
|
@ -1275,8 +1290,7 @@ static int _PsmfPlayerSetPsmfOffset(u32 psmfPlayer, const char *filename, int of
|
|||
psmfplayer->totalDurationTimestamp = psmfplayer->mediaengine->getLastTimeStamp();
|
||||
|
||||
|
||||
psmfplayer->status = PSMF_PLAYER_STATUS_STANDBY;
|
||||
|
||||
CoreTiming::ScheduleEvent(usToCycles(delayUs), eventPsmfPlayerStatusChange, (u64)psmfPlayer << 32 | PSMF_PLAYER_STATUS_STANDBY);
|
||||
return hleDelayResult(0, "psmfplayer set", delayUs);
|
||||
}
|
||||
|
||||
|
@ -1460,7 +1474,10 @@ static int scePsmfPlayerStart(u32 psmfPlayer, u32 psmfPlayerData, int initPts)
|
|||
// Does not alter current pts, it just catches up when Update()/etc. get there.
|
||||
|
||||
int delayUs = psmfplayer->status == PSMF_PLAYER_STATUS_PLAYING ? 3000 : 0;
|
||||
psmfplayer->status = PSMF_PLAYER_STATUS_PLAYING;
|
||||
if(delayUs == 0)
|
||||
psmfplayer->status = PSMF_PLAYER_STATUS_PLAYING;
|
||||
else
|
||||
CoreTiming::ScheduleEvent(usToCycles(delayUs), eventPsmfPlayerStatusChange, (u64)psmfPlayer << 32 | PSMF_PLAYER_STATUS_PLAYING);
|
||||
psmfplayer->warmUp = 0;
|
||||
|
||||
psmfplayer->mediaengine->openContext();
|
||||
|
|
Loading…
Add table
Reference in a new issue