From 1805910fac735a9545dfb00e0e021f9b6157878d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Wed, 10 Apr 2024 12:19:48 +0200 Subject: [PATCH] More refactoring --- Core/HLE/sceAudiocodec.cpp | 8 ++++---- Core/HW/MediaEngine.h | 7 +++---- Core/HW/SimpleAudioDec.cpp | 8 ++++---- Core/HW/SimpleAudioDec.h | 23 +++++++++++++---------- UI/BackgroundAudio.cpp | 4 ++-- 5 files changed, 26 insertions(+), 24 deletions(-) diff --git a/Core/HLE/sceAudiocodec.cpp b/Core/HLE/sceAudiocodec.cpp index 0b1e32c52e..0da9ede65d 100644 --- a/Core/HLE/sceAudiocodec.cpp +++ b/Core/HLE/sceAudiocodec.cpp @@ -36,12 +36,12 @@ struct AudioCodecContext { }; // audioList is to store current playing audios. -static std::map audioList; +static std::map audioList; static bool oldStateLoaded = false; // find the audio decoder for corresponding ctxPtr in audioList -static SimpleAudio *findDecoder(u32 ctxPtr) { +static AudioDecoder *findDecoder(u32 ctxPtr) { auto it = audioList.find(ctxPtr); if (it != audioList.end()) { return it->second; @@ -83,7 +83,7 @@ static int sceAudiocodecInit(u32 ctxPtr, int codec) { if (removeDecoder(ctxPtr)) { WARN_LOG_REPORT(HLE, "sceAudiocodecInit(%08x, %d): replacing existing context", ctxPtr, codec); } - auto decoder = CreateAudioDecoder(audioType); + AudioDecoder *decoder = CreateAudioDecoder(audioType); decoder->SetCtxPtr(ctxPtr); audioList[ctxPtr] = decoder; INFO_LOG(ME, "sceAudiocodecInit(%08x, %i (%s))", ctxPtr, codec, GetCodecName(audioType)); @@ -216,7 +216,7 @@ void __sceAudiocodecDoState(PointerWrap &p){ auto ctxPtr_ = new u32[count]; int i = 0; for (auto it = audioList.begin(), end = audioList.end(); it != end; it++) { - const SimpleAudio *decoder = it->second; + const AudioDecoder *decoder = it->second; codec_[i] = decoder->GetAudioType(); ctxPtr_[i] = decoder->GetCtxPtr(); i++; diff --git a/Core/HW/MediaEngine.h b/Core/HW/MediaEngine.h index 251916685f..e0a54c1343 100644 --- a/Core/HW/MediaEngine.h +++ b/Core/HW/MediaEngine.h @@ -31,7 +31,7 @@ #include "Core/HW/SimpleAudioDec.h" class PointerWrap; -class SimpleAudio; +class AudioDecoder; #ifdef USE_FFMPEG struct SwsContext; @@ -50,8 +50,7 @@ inline s64 getMpegTimeStamp(const u8 *buf) { bool InitFFmpeg(); #endif -class MediaEngine -{ +class MediaEngine { public: MediaEngine(); ~MediaEngine(); @@ -144,7 +143,7 @@ private: s64 m_lastPts = -1; MpegDemux *m_demux = nullptr; - SimpleAudio *m_audioContext = nullptr; + AudioDecoder *m_audioContext = nullptr; s64 m_audiopts = 0; // used for audio type diff --git a/Core/HW/SimpleAudioDec.cpp b/Core/HW/SimpleAudioDec.cpp index d850058ddd..38f7d5a764 100644 --- a/Core/HW/SimpleAudioDec.cpp +++ b/Core/HW/SimpleAudioDec.cpp @@ -38,11 +38,11 @@ extern "C" { #endif // USE_FFMPEG // TODO: This should also be able to create other types of decoders. -SimpleAudio *CreateAudioDecoder(PSPAudioType audioType, int sampleRateHz, int channels) { +AudioDecoder *CreateAudioDecoder(PSPAudioType audioType, int sampleRateHz, int channels) { return new SimpleAudio(audioType, sampleRateHz, channels); } -int SimpleAudio::GetAudioCodecID(int audioType) { +static int GetAudioCodecID(int audioType) { #ifdef USE_FFMPEG switch (audioType) { case PSP_CODEC_AAC: @@ -62,7 +62,7 @@ int SimpleAudio::GetAudioCodecID(int audioType) { } SimpleAudio::SimpleAudio(PSPAudioType audioType, int sampleRateHz, int channels) - : ctxPtr(0xFFFFFFFF), audioType(audioType), sample_rate_(sampleRateHz), channels_(channels), + : audioType(audioType), sample_rate_(sampleRateHz), channels_(channels), outSamples(0), srcPos(0), frame_(0), codec_(0), codecCtx_(0), swrCtx_(0), codecOpen_(false) { @@ -125,7 +125,7 @@ bool SimpleAudio::OpenCodec(int block_align) { #endif // USE_FFMPEG } -void SimpleAudio::SetExtraData(const u8 *data, int size, int wav_bytes_per_packet) { +void SimpleAudio::SetExtraData(const uint8_t *data, int size, int wav_bytes_per_packet) { #ifdef USE_FFMPEG if (codecCtx_) { codecCtx_->extradata = (uint8_t *)av_mallocz(size); diff --git a/Core/HW/SimpleAudioDec.h b/Core/HW/SimpleAudioDec.h index 5433b4166e..06feb1c6e3 100644 --- a/Core/HW/SimpleAudioDec.h +++ b/Core/HW/SimpleAudioDec.h @@ -58,6 +58,16 @@ public: virtual int GetOutSamples() const = 0; virtual int GetSourcePos() const = 0; virtual PSPAudioType GetAudioType() const = 0; + + virtual void SetChannels(int channels) = 0; + virtual void SetExtraData(const uint8_t *data, int size, int wav_bytes_per_packet) = 0; + + // Just metadata. + void SetCtxPtr(uint32_t ptr) { ctxPtr = ptr; } + uint32_t GetCtxPtr() const { return ctxPtr; } + +private: + uint32_t ctxPtr = 0xFFFFFFFF; }; // FFMPEG-based decoder @@ -76,24 +86,17 @@ public: return srcPos; } - int GetAudioCodecID(int audioType); // Get audioCodecId from audioType - // Not save stated, only used by UI. Used for ATRAC3 (non+) files. - void SetExtraData(const u8 *data, int size, int wav_bytes_per_packet); + void SetExtraData(const uint8_t *data, int size, int wav_bytes_per_packet) override; - void SetChannels(int channels); + void SetChannels(int channels) override; // These two are only here because of save states. PSPAudioType GetAudioType() const { return audioType; } - // Just metadata. - void SetCtxPtr(u32 ptr) { ctxPtr = ptr; } - u32 GetCtxPtr() const { return ctxPtr; } - private: bool OpenCodec(int block_align); - u32 ctxPtr; PSPAudioType audioType; int sample_rate_; int channels_; @@ -115,7 +118,7 @@ void AudioClose(SimpleAudio **ctx); void AudioClose(AudioDecoder **ctx); const char *GetCodecName(int codec); // audioType bool IsValidCodec(PSPAudioType codec); -SimpleAudio *CreateAudioDecoder(PSPAudioType audioType, int sampleRateHz = 44100, int channels = 2); +AudioDecoder *CreateAudioDecoder(PSPAudioType audioType, int sampleRateHz = 44100, int channels = 2); class AuCtx { public: diff --git a/UI/BackgroundAudio.cpp b/UI/BackgroundAudio.cpp index d7bacd6814..471d245476 100644 --- a/UI/BackgroundAudio.cpp +++ b/UI/BackgroundAudio.cpp @@ -256,7 +256,7 @@ private: int skip_next_samples_ = 0; FixedSizeQueue bgQueue; short *buffer_ = nullptr; - SimpleAudio *decoder_ = nullptr; + AudioDecoder *decoder_ = nullptr; }; BackgroundAudio g_BackgroundAudio; @@ -433,7 +433,7 @@ Sample *Sample::Load(const std::string &path) { // mp3_info contains the decoded data. int16_t *sample_data = new int16_t[mp3_info.samples]; memcpy(sample_data, mp3_info.buffer, mp3_info.samples * sizeof(int16_t)); - Sample *sample = new Sample(sample_data, mp3_info.channels, mp3_info.samples, mp3_info.hz); + Sample *sample = new Sample(sample_data, mp3_info.channels, (int)mp3_info.samples, mp3_info.hz); free(mp3_info.buffer); delete[] data; return sample;