Add Dsp last frame boundary

This commit is contained in:
scawful
2024-04-24 23:35:07 -04:00
parent c3379d8adc
commit 66922ccd7f
2 changed files with 8 additions and 1 deletions

View File

@@ -129,6 +129,10 @@ void Dsp::Reset() {
sampleOffset = 0;
}
void Dsp::NewFrame() {
lastFrameBoundary = sampleOffset;
}
void Dsp::Cycle() {
sampleOutL = 0;
sampleOutR = 0;
@@ -619,7 +623,7 @@ void Dsp::GetSamples(int16_t* sample_data, int samples_per_frame,
// resample from 534 / 641 samples per frame to wanted value
float wantedSamples = (pal_timing ? 641.0 : 534.0);
double adder = wantedSamples / samples_per_frame;
double location = sample_offset_ - wantedSamples;
double location = lastFrameBoundary - wantedSamples;
for (int i = 0; i < samples_per_frame; i++) {
sample_data[i * 2] = sample_buffer_[(((int)location) & 0x3ff) * 2];
sample_data[i * 2 + 1] = sample_buffer_[(((int)location) & 0x3ff) * 2 + 1];

View File

@@ -87,6 +87,8 @@ class Dsp {
public:
Dsp(std::vector<uint8_t>& aram) : aram_(aram) {}
void NewFrame();
void Reset();
void Cycle();
@@ -150,6 +152,7 @@ class Dsp {
// sample ring buffer (1024 samples, *2 for stereo)
int16_t sampleBuffer[0x400 * 2];
uint16_t sampleOffset; // current offset in samplebuffer
uint32_t lastFrameBoundary;
};
} // namespace audio