From bbe9c410989b37059b6cba8a72886bb890472a2f Mon Sep 17 00:00:00 2001 From: sum2012 Date: Tue, 4 Oct 2022 09:21:11 +0800 Subject: [PATCH] Add crc record into mpeg module --- Core/HLE/sceKernelModule.cpp | 4 ++-- Core/HLE/sceMpeg.cpp | 17 +++++++++++++---- Core/HLE/sceMpeg.h | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index 5029e22ade..c53811c752 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -1178,7 +1178,7 @@ static PSPModule *__KernelLoadELFFromPtr(const u8 *ptr, size_t elfSize, u32 load reportedModule = true; if (!strcmp(head->modname, "sceMpeg_library")) { - __MpegLoadModule(ver); + __MpegLoadModule(ver, crcstring); } if (!strcmp(head->modname, "scePsmfP_library") || !strcmp(head->modname, "scePsmfPlayer")) { __PsmfPlayerLoadModule(head->devkitversion); @@ -1614,7 +1614,7 @@ static PSPModule *__KernelLoadELFFromPtr(const u8 *ptr, size_t elfSize, u32 load INFO_LOG(SCEMODULE, "Loading module %s with version %04x, devkit %08x", modinfo->name, modinfo->moduleVersion, devkitVersion); if (!strcmp(modinfo->name, "sceMpeg_library")) { - __MpegLoadModule(modinfo->moduleVersion); + __MpegLoadModule(modinfo->moduleVersion, crcstring); } if (!strcmp(modinfo->name, "scePsmfP_library") || !strcmp(modinfo->name, "scePsmfPlayer")) { __PsmfPlayerLoadModule(devkitVersion); diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp index 0d7a81b758..cb9fd9aba1 100644 --- a/Core/HLE/sceMpeg.cpp +++ b/Core/HLE/sceMpeg.cpp @@ -258,7 +258,8 @@ struct MpegContext { }; static bool isMpegInit; -static int mpegLibVersion; +static int mpegLibVersion = 0; +static std::string mpegLibCrcstring = "null"; static u32 streamIdGen; static int actionPostPut; static std::map mpegMap; @@ -403,7 +404,7 @@ void __MpegInit() { } void __MpegDoState(PointerWrap &p) { - auto s = p.Section("sceMpeg", 1, 3); + auto s = p.Section("sceMpeg", 1, 4); if (!s) return; @@ -421,7 +422,14 @@ void __MpegDoState(PointerWrap &p) { ringbufferPutPacketsAdded = 0; } else { Do(p, ringbufferPutPacketsAdded); + } + if (s < 4) { + mpegLibCrcstring = "null"; } + else { + Do(p, mpegLibCrcstring); + } + Do(p, streamIdGen); Do(p, mpegLibVersion); } @@ -440,8 +448,9 @@ void __MpegShutdown() { mpegMap.clear(); } -void __MpegLoadModule(int version) { +void __MpegLoadModule(int version,std::string crcstr) { mpegLibVersion = version; + mpegLibCrcstring = crcstr; } static u32 sceMpegInit() { @@ -450,7 +459,7 @@ static u32 sceMpegInit() { // TODO: Need to properly hook module load/unload for this to work right. //return ERROR_MPEG_ALREADY_INIT; } else { - INFO_LOG(ME, "sceMpegInit()"); + INFO_LOG(ME, "sceMpegInit(), mpegLibVersion 0x%0x, mpegLibcrc %s", mpegLibVersion, mpegLibCrcstring.c_str()); } isMpegInit = true; return hleDelayResult(0, "mpeg init", 750); diff --git a/Core/HLE/sceMpeg.h b/Core/HLE/sceMpeg.h index aded1238cc..538c60c9a8 100644 --- a/Core/HLE/sceMpeg.h +++ b/Core/HLE/sceMpeg.h @@ -79,7 +79,7 @@ void __MpegInit(); void __MpegDoState(PointerWrap &p); void __MpegShutdown(); -void __MpegLoadModule(int version); +void __MpegLoadModule(int version,std::string crcstr); void Register_sceMpeg();