mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-06-03 12:27:21 +12:00
Merge pull request #566 from wheremyfoodat/hle-dsp
Fixing remaining HLE DSP hangs
This commit is contained in:
commit
0cf5687e64
7 changed files with 85 additions and 26 deletions
|
@ -43,7 +43,7 @@ namespace Audio {
|
|||
virtual ~DSPCore() {}
|
||||
|
||||
virtual void reset() = 0;
|
||||
virtual void runAudioFrame() = 0;
|
||||
virtual void runAudioFrame(u64 eventTimestamp) = 0;
|
||||
virtual u8* getDspMemory() = 0;
|
||||
|
||||
virtual u16 recvData(u32 regId) = 0;
|
||||
|
|
|
@ -42,6 +42,7 @@ namespace Audio {
|
|||
return this->bufferID > other.bufferID;
|
||||
}
|
||||
};
|
||||
|
||||
// Buffer of decoded PCM16 samples. TODO: Are there better alternatives to use over deque?
|
||||
using SampleBuffer = std::deque<std::array<s16, 2>>;
|
||||
|
||||
|
@ -53,6 +54,7 @@ namespace Audio {
|
|||
|
||||
std::array<float, 3> gain0, gain1, gain2;
|
||||
u32 samplePosition; // Sample number into the current audio buffer
|
||||
float rateMultiplier;
|
||||
u16 syncCount;
|
||||
u16 currentBufferID;
|
||||
u16 previousBufferID;
|
||||
|
@ -142,7 +144,7 @@ namespace Audio {
|
|||
} else if (counter1 == 0xffff && counter0 != 0xfffe) {
|
||||
return 0;
|
||||
} else {
|
||||
return counter0 > counter1 ? 0 : 0;
|
||||
return (counter0 > counter1) ? 0 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -185,7 +187,7 @@ namespace Audio {
|
|||
~HLE_DSP() override {}
|
||||
|
||||
void reset() override;
|
||||
void runAudioFrame() override;
|
||||
void runAudioFrame(u64 eventTimestamp) override;
|
||||
|
||||
u8* getDspMemory() override { return dspRam.rawMemory.data(); }
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ namespace Audio {
|
|||
~NullDSP() override {}
|
||||
|
||||
void reset() override;
|
||||
void runAudioFrame() override;
|
||||
void runAudioFrame(u64 eventTimestamp) override;
|
||||
|
||||
u8* getDspMemory() override { return dspRam.data(); }
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ namespace Audio {
|
|||
void reset() override;
|
||||
|
||||
// Run 1 slice of DSP instructions and schedule the next audio frame
|
||||
void runAudioFrame() override {
|
||||
void runAudioFrame(u64 eventTimestamp) override {
|
||||
runSlice();
|
||||
scheduler.addEvent(Scheduler::EventType::RunDSP, scheduler.currentTimestamp + Audio::lleSlice * 2);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue