Add empty AtracCtx2 implementation, and a dev setting to select it. Savestates don't work.

This commit is contained in:
Henrik Rydgård
2024-04-15 13:50:16 +02:00
parent 073a5c7dca
commit f3d6c93339
16 changed files with 163 additions and 18 deletions
+2
View File
@@ -2081,6 +2081,8 @@ add_library(${CoreLibName} ${CoreLinkType}
Core/HLE/sceAdler.h
Core/HLE/AtracCtx.cpp
Core/HLE/AtracCtx.h
Core/HLE/AtracCtx2.cpp
Core/HLE/AtracCtx2.h
Core/HLE/sceAtrac.cpp
Core/HLE/sceAtrac.h
Core/HLE/sceAudio.cpp
+1
View File
@@ -699,6 +699,7 @@ static const ConfigSetting soundSettings[] = {
ConfigSetting("AchievementSoundVolume", &g_Config.iAchievementSoundVolume, 6, CfgFlag::PER_GAME),
ConfigSetting("AudioDevice", &g_Config.sAudioDevice, "", CfgFlag::DEFAULT),
ConfigSetting("AutoAudioDevice", &g_Config.bAutoAudioDevice, true, CfgFlag::DEFAULT),
ConfigSetting("UseNewAtrac", &g_Config.bUseNewAtrac, false, CfgFlag::DEFAULT),
};
static bool DefaultShowTouchControls() {
+1
View File
@@ -274,6 +274,7 @@ public:
bool bExtraAudioBuffering; // For bluetooth
std::string sAudioDevice;
bool bAutoAudioDevice;
bool bUseNewAtrac;
// UI
bool bShowDebuggerOnLoad;
+2
View File
@@ -567,6 +567,7 @@
<ClCompile Include="FileSystems\BlobFileSystem.cpp" />
<ClCompile Include="FrameTiming.cpp" />
<ClCompile Include="HLE\AtracCtx.cpp" />
<ClCompile Include="HLE\AtracCtx2.cpp" />
<ClCompile Include="HLE\KUBridge.cpp" />
<ClCompile Include="HLE\Plugins.cpp" />
<ClCompile Include="HLE\sceKernelHeap.cpp" />
@@ -1176,6 +1177,7 @@
<ClInclude Include="FileSystems\BlobFileSystem.h" />
<ClInclude Include="FrameTiming.h" />
<ClInclude Include="HLE\AtracCtx.h" />
<ClInclude Include="HLE\AtracCtx2.h" />
<ClInclude Include="HLE\KernelThreadDebugInterface.h" />
<ClInclude Include="HLE\KUBridge.h" />
<ClInclude Include="HLE\Plugins.h" />
+6
View File
@@ -1312,6 +1312,9 @@
<ClCompile Include="HLE\AtracCtx.cpp">
<Filter>HLE\Libraries</Filter>
</ClCompile>
<ClCompile Include="HLE\AtracCtx2.cpp">
<Filter>HLE\Libraries</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="ELF\ElfReader.h">
@@ -2100,6 +2103,9 @@
<ClInclude Include="HLE\AtracCtx.h">
<Filter>HLE\Libraries</Filter>
</ClInclude>
<ClInclude Include="HLE\AtracCtx2.h">
<Filter>HLE\Libraries</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\LICENSE.TXT" />
+4
View File
@@ -175,6 +175,10 @@ void Atrac::AnalyzeReset() {
bufferPos_ = 0;
}
u8 *Atrac::BufferStart() {
return ignoreDataBuf_ ? Memory::GetPointerWrite(first_.addr) : dataBuf_;
}
void AtracBase::UpdateContextFromPSPMem() {
if (!context_.IsValid()) {
return;
+6 -9
View File
@@ -17,9 +17,12 @@
#pragma once
#include <vector>
#include "Common/CommonTypes.h"
#include "Common/Swap.h"
#include "Core/MemMap.h"
#include "Core/HLE/sceAtrac.h"
struct AtracSingleResetBufferInfo {
@@ -205,7 +208,6 @@ public:
void CreateDecoder();
virtual uint32_t CurBufferAddress(int adjust = 0) const = 0;
virtual int CurrentSample() const = 0;
virtual int RemainingFrames() const = 0;
virtual u32 SecondBufferSize() const = 0;
@@ -230,8 +232,6 @@ public:
virtual void InitLowLevel(u32 paramsAddr, bool jointStereo) = 0;
protected:
virtual void AnalyzeReset() = 0;
Track track_{};
u16 outputChannels_ = 2;
int loopNum_ = 0;
@@ -247,7 +247,7 @@ public:
ResetData();
}
uint32_t CurBufferAddress(int adjust = 0) const override {
uint32_t CurBufferAddress(int adjust = 0) const {
u32 off = track_.FileOffsetBySample(currentSample_ + adjust);
if (off < first_.size && ignoreDataBuf_) {
return first_.addr + off;
@@ -256,10 +256,7 @@ public:
return 0;
}
u8 *BufferStart() {
return ignoreDataBuf_ ? Memory::GetPointerWrite(first_.addr) : dataBuf_;
}
u8 *BufferStart();
void DoState(PointerWrap &p) override;
void WriteContextToPSPMem() override;
@@ -285,7 +282,7 @@ public:
int GetSecondBufferInfo(u32 *fileOffset, u32 *desiredSize) override;
u32 DecodeData(u8 *outbuf, u32 outbufPtr, u32 *SamplesNum, u32 *finish, int *remains) override;
u32 GetNextSamples() override;
void InitLowLevel(u32 paramsAddr, bool jointStereo);
void InitLowLevel(u32 paramsAddr, bool jointStereo) override;
protected:
void AnalyzeReset();
+73
View File
@@ -0,0 +1,73 @@
#include "Common/Log.h"
#include "AtracCtx2.h"
void Atrac2::DoState(PointerWrap &p) {
_assert_msg_(false, "Savestates not yet support with new Atrac implementation");
}
void Atrac2::WriteContextToPSPMem() {
}
int Atrac2::Analyze(u32 addr, u32 size) {
return 0;
}
int Atrac2::AnalyzeAA3(u32 addr, u32 size, u32 filesize) {
return 0;
}
int Atrac2::RemainingFrames() const {
return 0;
}
u32 Atrac2::SecondBufferSize() const {
return 0;
}
void Atrac2::GetStreamDataInfo(u32 *writePtr, u32 *writableBytes, u32 *readOffset) {
}
int Atrac2::AddStreamData(u32 bytesToAdd) {
return 0;
}
u32 Atrac2::AddStreamDataSas(u32 bufPtr, u32 bytesToAdd) {
return 0;
}
void Atrac2::SetLoopNum(int loopNum) {
}
u32 Atrac2::ResetPlayPosition(int sample, int bytesWrittenFirstBuf, int bytesWrittenSecondBuf) {
return 0;
}
void Atrac2::GetResetBufferInfo(AtracResetBufferInfo *bufferInfo, int sample) {
}
int Atrac2::SetData(u32 buffer, u32 readSize, u32 bufferSize, int outputChannels, int successCode) {
return 0;
}
u32 Atrac2::SetSecondBuffer(u32 secondBuffer, u32 secondBufferSize) {
return 0;
}
int Atrac2::GetSecondBufferInfo(u32 *fileOffset, u32 *desiredSize) {
return 0;
}
u32 Atrac2::DecodeData(u8 *outbuf, u32 outbufPtr, u32 *SamplesNum, u32 *finish, int *remains) {
return 0;
}
u32 Atrac2::GetNextSamples() {
return 0;
}
void Atrac2::InitLowLevel(u32 paramsAddr, bool jointStereo) {
}
+35
View File
@@ -0,0 +1,35 @@
#pragma once
#include <cstdint>
#include "Core/HLE/AtracCtx.h"
class Atrac2 : public AtracBase {
public:
void DoState(PointerWrap &p) override;
void WriteContextToPSPMem() override;
int Analyze(u32 addr, u32 size) override;
int AnalyzeAA3(u32 addr, u32 size, u32 filesize) override;
int CurrentSample() const override { return currentSample_; }
int RemainingFrames() const override;
u32 SecondBufferSize() const override;
void GetStreamDataInfo(u32 *writePtr, u32 *writableBytes, u32 *readOffset) override;
int AddStreamData(u32 bytesToAdd) override;
u32 AddStreamDataSas(u32 bufPtr, u32 bytesToAdd) override;
void SetLoopNum(int loopNum) override;
u32 ResetPlayPosition(int sample, int bytesWrittenFirstBuf, int bytesWrittenSecondBuf) override;
void GetResetBufferInfo(AtracResetBufferInfo *bufferInfo, int sample) override;
int SetData(u32 buffer, u32 readSize, u32 bufferSize, int outputChannels, int successCode) override;
u32 SetSecondBuffer(u32 secondBuffer, u32 secondBufferSize) override;
int GetSecondBufferInfo(u32 *fileOffset, u32 *desiredSize) override;
u32 DecodeData(u8 *outbuf, u32 outbufPtr, u32 *SamplesNum, u32 *finish, int *remains) override;
u32 GetNextSamples() override;
void InitLowLevel(u32 paramsAddr, bool jointStereo) override;
private:
int currentSample_ = 0;
};
+18 -8
View File
@@ -35,6 +35,7 @@
#include "Core/HLE/sceKernelMemory.h"
#include "Core/HLE/sceAtrac.h"
#include "Core/HLE/AtracCtx.h"
#include "Core/HLE/AtracCtx2.h"
#include "Core/System.h"
// Notes about sceAtrac buffer management
@@ -136,6 +137,14 @@ void __AtracDoState(PointerWrap &p) {
}
}
static AtracBase *allocAtrac(bool forceOld = false) {
if (g_Config.bUseNewAtrac && !forceOld) {
return new Atrac2();
} else {
return new Atrac();
}
}
static AtracBase *getAtrac(int atracID) {
if (atracID < 0 || atracID >= PSP_NUM_ATRAC_IDS) {
return nullptr;
@@ -169,13 +178,14 @@ static int deleteAtrac(int atracID) {
return ATRAC_ERROR_BAD_ATRACID;
}
// Really, allocate a new Atrac context of a specific codec type.
// Really, allocate an Atrac context of a specific codec type.
// Useful to initialize a context for low level decode.
static u32 sceAtracGetAtracID(int codecType) {
if (codecType != PSP_MODE_AT_3 && codecType != PSP_MODE_AT_3_PLUS) {
return hleReportError(ME, ATRAC_ERROR_INVALID_CODECTYPE, "invalid codecType");
}
AtracBase *atrac = new Atrac();
AtracBase *atrac = allocAtrac();
atrac->GetTrackMut().codecType = codecType;
int atracID = createAtrac(atrac);
if (atracID < 0) {
@@ -619,7 +629,7 @@ static int sceAtracSetDataAndGetID(u32 buffer, int bufferSize) {
bufferSize = 0x10000000;
}
Atrac *atrac = new Atrac();
AtracBase *atrac = allocAtrac();
int ret = atrac->Analyze(buffer, bufferSize);
if (ret < 0) {
// Already logged.
@@ -639,7 +649,7 @@ static int sceAtracSetHalfwayBufferAndGetID(u32 buffer, u32 readSize, u32 buffer
if (readSize > bufferSize) {
return hleLogError(ME, ATRAC_ERROR_INCORRECT_READ_SIZE, "read size too large");
}
Atrac *atrac = new Atrac();
AtracBase *atrac = allocAtrac();
int ret = atrac->Analyze(buffer, readSize);
if (ret < 0) {
// Already logged.
@@ -795,7 +805,7 @@ static u32 sceAtracSetMOutData(int atracID, u32 buffer, u32 bufferSize) {
// Note: This doesn't seem to be part of any available libatrac3plus library.
static int sceAtracSetMOutDataAndGetID(u32 buffer, u32 bufferSize) {
Atrac *atrac = new Atrac();
AtracBase *atrac = allocAtrac();
int ret = atrac->Analyze(buffer, bufferSize);
if (ret < 0) {
// Already logged.
@@ -819,7 +829,7 @@ static int sceAtracSetMOutHalfwayBufferAndGetID(u32 buffer, u32 readSize, u32 bu
if (readSize > bufferSize) {
return hleLogError(ME, ATRAC_ERROR_INCORRECT_READ_SIZE, "read size too large");
}
Atrac *atrac = new Atrac();
AtracBase *atrac = allocAtrac();
int ret = atrac->Analyze(buffer, readSize);
if (ret < 0) {
// Already logged.
@@ -840,7 +850,7 @@ static int sceAtracSetMOutHalfwayBufferAndGetID(u32 buffer, u32 readSize, u32 bu
}
static int sceAtracSetAA3DataAndGetID(u32 buffer, u32 bufferSize, u32 fileSize, u32 metadataSizeAddr) {
Atrac *atrac = new Atrac();
AtracBase *atrac = allocAtrac();
int ret = atrac->AnalyzeAA3(buffer, bufferSize, fileSize);
if (ret < 0) {
// Already logged.
@@ -962,7 +972,7 @@ static int sceAtracSetAA3HalfwayBufferAndGetID(u32 buffer, u32 readSize, u32 buf
return hleLogError(ME, ATRAC_ERROR_INCORRECT_READ_SIZE, "read size too large");
}
Atrac *atrac = new Atrac();
AtracBase *atrac = allocAtrac();
int ret = atrac->AnalyzeAA3(buffer, readSize, fileSize);
if (ret < 0) {
// Already logged.
+3 -1
View File
@@ -17,6 +17,8 @@
#pragma once
class PointerWrap;
typedef struct {
s32_le unk0;
s32_le unk4;
@@ -58,4 +60,4 @@ typedef struct {
void __AudioCodecInit();
void __AudioCodecShutdown();
void Register_sceAudiocodec();
void __sceAudiocodecDoState(PointerWrap &p);
void __sceAudiocodecDoState(PointerWrap &p);
+2
View File
@@ -1783,6 +1783,8 @@ void DeveloperToolsScreen::CreateViews() {
cpuTests->SetEnabled(TestsAvailable());
#endif
list->Add(new CheckBox(&g_Config.bUseNewAtrac, dev->T("Use experimental sceAtrac")));
AddOverlayList(list, screenManager());
list->Add(new CheckBox(&g_Config.bEnableLogging, dev->T("Enable Logging")))->OnClick.Handle(this, &DeveloperToolsScreen::OnLoggingChanged);
+2
View File
@@ -175,6 +175,7 @@
<ClInclude Include="..\..\Core\FrameTiming.h" />
<ClInclude Include="..\..\Core\HDRemaster.h" />
<ClInclude Include="..\..\Core\HLE\AtracCtx.h" />
<ClInclude Include="..\..\Core\HLE\AtracCtx2.h" />
<ClInclude Include="..\..\Core\HLE\sceNp2.h" />
<ClInclude Include="..\..\Core\Instance.h" />
<ClInclude Include="..\..\Core\HLE\FunctionWrappers.h" />
@@ -427,6 +428,7 @@
<ClCompile Include="..\..\Core\FrameTiming.cpp" />
<ClCompile Include="..\..\Core\HDRemaster.cpp" />
<ClCompile Include="..\..\Core\HLE\AtracCtx.cpp" />
<ClCompile Include="..\..\Core\HLE\AtracCtx2.cpp" />
<ClCompile Include="..\..\Core\HLE\sceNp2.cpp" />
<ClCompile Include="..\..\Core\Instance.cpp" />
<ClCompile Include="..\..\Core\HLE\HLE.cpp" />
+6
View File
@@ -1202,6 +1202,9 @@
<ClCompile Include="..\..\Core\HLE\AtracCtx.cpp">
<Filter>HLE</Filter>
</ClCompile>
<ClCompile Include="..\..\Core\HLE\AtracCtx2.cpp">
<Filter>HLE</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h" />
@@ -1888,6 +1891,9 @@
<ClInclude Include="..\..\Core\HLE\AtracCtx.h">
<Filter>HLE</Filter>
</ClInclude>
<ClInclude Include="..\..\Core\HLE\AtracCtx2.h">
<Filter>HLE</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\ext\gason\LICENSE">
+1
View File
@@ -615,6 +615,7 @@ EXEC_AND_LIB_FILES := \
$(SRC)/Core/HLE/sceAdler.cpp \
$(SRC)/Core/HLE/sceAtrac.cpp \
$(SRC)/Core/HLE/AtracCtx.cpp \
$(SRC)/Core/HLE/AtracCtx2.cpp \
$(SRC)/Core/HLE/__sceAudio.cpp.arm \
$(SRC)/Core/HLE/sceAudio.cpp.arm \
$(SRC)/Core/HLE/sceAudiocodec.cpp.arm \
+1
View File
@@ -652,6 +652,7 @@ SOURCES_CXX += \
$(COREDIR)/HLE/HLEHelperThread.cpp \
$(COREDIR)/HLE/HLETables.cpp \
$(COREDIR)/HLE/AtracCtx.cpp \
$(COREDIR)/HLE/AtracCtx2.cpp \
$(COREDIR)/HLE/sceAdler.cpp \
$(COREDIR)/HLE/sceAtrac.cpp \
$(COREDIR)/HLE/sceAudio.cpp \