mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Keep track of the loaded sceMpeg_library version.
They have variations in behavior.
This commit is contained in:
parent
d2ce324c52
commit
cda1bc2772
3 changed files with 35 additions and 14 deletions
|
@ -46,6 +46,7 @@
|
|||
#include "Core/HLE/sceKernelModule.h"
|
||||
#include "Core/HLE/sceKernelThread.h"
|
||||
#include "Core/HLE/sceKernelMemory.h"
|
||||
#include "Core/HLE/sceMpeg.h"
|
||||
#include "Core/HLE/sceIo.h"
|
||||
#include "Core/HLE/KernelWaitHelpers.h"
|
||||
#include "Core/ELF/ParamSFO.h"
|
||||
|
@ -822,6 +823,10 @@ Module *__KernelLoadELFFromPtr(const u8 *ptr, u32 loadAddress, std::string *erro
|
|||
char temp[256];
|
||||
snprintf(temp, sizeof(temp), "Loading module %s with version %%04x", head->modname);
|
||||
INFO_LOG_REPORT(SCEMODULE,temp, ver);
|
||||
|
||||
if (!strcmp(head->modname, "sceMpeg_library")) {
|
||||
__MpegLoadModule(ver);
|
||||
}
|
||||
}
|
||||
|
||||
const u8 *in = ptr;
|
||||
|
@ -926,6 +931,10 @@ Module *__KernelLoadELFFromPtr(const u8 *ptr, u32 loadAddress, std::string *erro
|
|||
char temp[256];
|
||||
snprintf(temp, sizeof(temp), "Loading module %s with version %%04x", modinfo->name);
|
||||
INFO_LOG_REPORT(SCEMODULE, temp, modinfo->moduleVersion);
|
||||
|
||||
if (!strcmp(modinfo->name, "sceMpeg_library")) {
|
||||
__MpegLoadModule(modinfo->moduleVersion);
|
||||
}
|
||||
}
|
||||
|
||||
// Check for module blacklist - we don't allow games to load these modules from disc
|
||||
|
|
|
@ -20,10 +20,10 @@
|
|||
#include <map>
|
||||
#include <algorithm>
|
||||
|
||||
#include "sceMpeg.h"
|
||||
#include "sceKernelThread.h"
|
||||
#include "HLE.h"
|
||||
#include "../HW/MediaEngine.h"
|
||||
#include "Core/HLE/sceMpeg.h"
|
||||
#include "Core/HLE/sceKernelThread.h"
|
||||
#include "Core/HLE/HLE.h"
|
||||
#include "Core/HW/MediaEngine.h"
|
||||
#include "Core/Config.h"
|
||||
#include "Core/Reporting.h"
|
||||
#include "GPU/GPUInterface.h"
|
||||
|
@ -196,11 +196,10 @@ struct MpegContext {
|
|||
};
|
||||
|
||||
static bool isMpegInit;
|
||||
static int mpegLibVersion;
|
||||
static u32 streamIdGen;
|
||||
static bool isCurrentMpegAnalyzed;
|
||||
static int actionPostPut;
|
||||
static std::map<u32, MpegContext *> mpegMap;
|
||||
static u32 lastMpegHandle = 0;
|
||||
|
||||
MpegContext *getMpegCtx(u32 mpegAddr) {
|
||||
if (!Memory::IsValidAddress(mpegAddr))
|
||||
|
@ -322,10 +321,9 @@ private:
|
|||
};
|
||||
|
||||
void __MpegInit() {
|
||||
lastMpegHandle = 0;
|
||||
streamIdGen = 1;
|
||||
isCurrentMpegAnalyzed = false;
|
||||
isMpegInit = false;
|
||||
mpegLibVersion = 0x010A;
|
||||
streamIdGen = 1;
|
||||
actionPostPut = __KernelRegisterActionType(PostPutAction::Create);
|
||||
|
||||
#ifdef USING_FFMPEG
|
||||
|
@ -335,13 +333,22 @@ void __MpegInit() {
|
|||
}
|
||||
|
||||
void __MpegDoState(PointerWrap &p) {
|
||||
auto s = p.Section("sceMpeg", 1);
|
||||
auto s = p.Section("sceMpeg", 1, 2);
|
||||
if (!s)
|
||||
return;
|
||||
|
||||
p.Do(lastMpegHandle);
|
||||
p.Do(streamIdGen);
|
||||
p.Do(isCurrentMpegAnalyzed);
|
||||
if (s < 2) {
|
||||
int oldLastMpeg = -1;
|
||||
bool oldIsMpegAnaltized = false;
|
||||
p.Do(oldLastMpeg);
|
||||
p.Do(streamIdGen);
|
||||
p.Do(oldIsMpegAnaltized);
|
||||
// Let's assume the oldest version.
|
||||
mpegLibVersion = 0x0101;
|
||||
} else {
|
||||
p.Do(streamIdGen);
|
||||
p.Do(mpegLibVersion);
|
||||
}
|
||||
p.Do(isMpegInit);
|
||||
p.Do(actionPostPut);
|
||||
__KernelRestoreActionType(actionPostPut, PostPutAction::Create);
|
||||
|
@ -357,6 +364,10 @@ void __MpegShutdown() {
|
|||
mpegMap.clear();
|
||||
}
|
||||
|
||||
void __MpegLoadModule(int version) {
|
||||
mpegLibVersion = version;
|
||||
}
|
||||
|
||||
u32 sceMpegInit() {
|
||||
if (isMpegInit) {
|
||||
WARN_LOG(ME, "sceMpegInit(): already initialized");
|
||||
|
@ -445,7 +456,6 @@ u32 sceMpegCreate(u32 mpegAddr, u32 dataPtr, u32 size, u32 ringbufferAddr, u32 f
|
|||
}
|
||||
MpegContext *ctx = new MpegContext;
|
||||
mpegMap[mpegHandle] = ctx;
|
||||
lastMpegHandle = mpegHandle;
|
||||
|
||||
// Initialize mpeg values.
|
||||
ctx->mpegRingbufferAddr = ringbufferAddr;
|
||||
|
|
|
@ -84,4 +84,6 @@ void __MpegInit();
|
|||
void __MpegDoState(PointerWrap &p);
|
||||
void __MpegShutdown();
|
||||
|
||||
void __MpegLoadModule(int version);
|
||||
|
||||
void Register_sceMpeg();
|
||||
|
|
Loading…
Add table
Reference in a new issue