mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-07-11 01:25:07 +02:00
Add empty AtracCtx2 implementation, and a dev setting to select it. Savestates don't work.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -274,6 +274,7 @@ public:
|
||||
bool bExtraAudioBuffering; // For bluetooth
|
||||
std::string sAudioDevice;
|
||||
bool bAutoAudioDevice;
|
||||
bool bUseNewAtrac;
|
||||
|
||||
// UI
|
||||
bool bShowDebuggerOnLoad;
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
}
|
||||
@@ -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
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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 \
|
||||
|
||||
Reference in New Issue
Block a user