Core: Finally kill off GBAAudioCalculateRatio

This commit is contained in:
Vicki Pfau 2024-04-16 20:44:59 -07:00
parent 96a2ef5f42
commit 73a39dea65
9 changed files with 15 additions and 14 deletions

View File

@ -216,6 +216,8 @@ void* mCoreGetMemoryBlock(struct mCore* core, uint32_t start, size_t* size);
void* mCoreGetMemoryBlockMasked(struct mCore* core, uint32_t start, size_t* size, uint32_t mask);
const struct mCoreMemoryBlock* mCoreGetMemoryBlockInfo(struct mCore* core, uint32_t address);
double mCoreCalculateFramerateRatio(const struct mCore* core, double desiredFrameRate);
#ifdef USE_ELF
struct ELF;
bool mCoreLoadELF(struct mCore* core, struct ELF* elf);

View File

@ -313,8 +313,6 @@ struct GBASerializedState;
void GBAAudioSerialize(const struct GBAAudio* audio, struct GBASerializedState* state);
void GBAAudioDeserialize(struct GBAAudio* audio, const struct GBASerializedState* state);
float GBAAudioCalculateRatio(float inputSampleRate, float desiredFPS, float desiredSampleRatio);
CXX_GUARD_END
#endif

View File

@ -442,6 +442,12 @@ const struct mCoreMemoryBlock* mCoreGetMemoryBlockInfo(struct mCore* core, uint3
return NULL;
}
double mCoreCalculateFramerateRatio(const struct mCore* core, double desiredFrameRate) {
uint32_t clockRate = core->frequency(core);
uint32_t frameCycles = core->frameCycles(core);
return clockRate / (desiredFrameRate * frameCycles);
}
#ifdef USE_ELF
bool mCoreLoadELF(struct mCore* core, struct ELF* elf) {
struct ELFProgramHeaders ph;

View File

@ -587,7 +587,3 @@ void GBAAudioDeserialize(struct GBAAudio* audio, const struct GBASerializedState
}
mTimingSchedule(&audio->p->timing, &audio->sampleEvent, when);
}
float GBAAudioCalculateRatio(float inputSampleRate, float desiredFPS, float desiredSampleRate) {
return desiredSampleRate * GBA_ARM7TDMI_FREQUENCY / (VIDEO_TOTAL_LENGTH * desiredFPS * inputSampleRate);
}

View File

@ -376,7 +376,7 @@ void mPSP2Setup(struct mGUIRunner* runner) {
void mPSP2LoadROM(struct mGUIRunner* runner) {
float rate = 60.0f / 1.001f;
sceDisplayGetRefreshRate(&rate);
double ratio = GBAAudioCalculateRatio(1, rate, 1);
double ratio = mCoreCalculateFramerateRatio(runner->core, rate);
blip_set_rates(runner->core->getAudioChannel(runner->core, 0), runner->core->frequency(runner->core), 48000 * ratio);
blip_set_rates(runner->core->getAudioChannel(runner->core, 1), runner->core->frequency(runner->core), 48000 * ratio);

View File

@ -26,7 +26,7 @@ void AudioDevice::setFormat(const QAudioFormat& format) {
LOG(QT, INFO) << tr("Can't set format of context-less audio device");
return;
}
double fauxClock = GBAAudioCalculateRatio(1, m_context->impl->sync.fpsTarget, 1);
double fauxClock = mCoreCalculateFramerateRatio(m_context->core, m_context->impl->sync.fpsTarget);
mCoreSyncLockAudio(&m_context->impl->sync);
blip_set_rates(m_context->core->getAudioChannel(m_context->core, 0),
m_context->core->frequency(m_context->core), format.sampleRate() * fauxClock);

View File

@ -103,12 +103,11 @@ static void _mSDLAudioCallback(void* context, Uint8* data, int len) {
if (audioContext->core) {
left = audioContext->core->getAudioChannel(audioContext->core, 0);
right = audioContext->core->getAudioChannel(audioContext->core, 1);
clockRate = audioContext->core->frequency(audioContext->core);
}
double fauxClock = 1;
if (audioContext->sync) {
if (audioContext->sync->fpsTarget > 0) {
fauxClock = GBAAudioCalculateRatio(1, audioContext->sync->fpsTarget, 1);
if (audioContext->sync->fpsTarget > 0 && audioContext->core) {
fauxClock = mCoreCalculateFramerateRatio(audioContext->core, audioContext->sync->fpsTarget);
}
mCoreSyncLockAudio(audioContext->sync);
}

View File

@ -330,7 +330,7 @@ static void _setup(struct mGUIRunner* runner) {
static void _gameLoaded(struct mGUIRunner* runner) {
u32 samplerate = audoutGetSampleRate();
double ratio = GBAAudioCalculateRatio(1, 60.0, 1);
double ratio = mCoreCalculateFramerateRatio(runner->core, 60.0);
blip_set_rates(runner->core->getAudioChannel(runner->core, 0), runner->core->frequency(runner->core), samplerate * ratio);
blip_set_rates(runner->core->getAudioChannel(runner->core, 1), runner->core->frequency(runner->core), samplerate * ratio);

View File

@ -247,7 +247,7 @@ static void reconfigureScreen(struct mGUIRunner* runner) {
runner->params.width = vmode->fbWidth * guiScale * wAdjust;
runner->params.height = vmode->efbHeight * guiScale * hAdjust;
if (runner->core) {
double ratio = GBAAudioCalculateRatio(1, audioSampleRate, 1);
double ratio = mCoreCalculateFramerateRatio(runner->core, audioSampleRate);
blip_set_rates(runner->core->getAudioChannel(runner->core, 0), runner->core->frequency(runner->core), 48000 * ratio);
blip_set_rates(runner->core->getAudioChannel(runner->core, 1), runner->core->frequency(runner->core), 48000 * ratio);
}
@ -1422,7 +1422,7 @@ void _setup(struct mGUIRunner* runner) {
}
runner->core->setAudioBufferSize(runner->core, SAMPLES);
double ratio = GBAAudioCalculateRatio(1, audioSampleRate, 1);
double ratio = mCoreCalculateFramerateRatio(runner->core, audioSampleRate);
blip_set_rates(runner->core->getAudioChannel(runner->core, 0), runner->core->frequency(runner->core), 48000 * ratio);
blip_set_rates(runner->core->getAudioChannel(runner->core, 1), runner->core->frequency(runner->core), 48000 * ratio);