Converter: Fix DSD gaplessness

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
CQTexperiment
Christopher Snowhill 2022-02-05 04:03:40 -08:00
parent 637ea4efe1
commit 4cdca2f5f8
1 changed files with 18 additions and 1 deletions

View File

@ -693,7 +693,18 @@ tryagain:
inputBuffer = realloc(inputBuffer, inputBufferSize = newSize * 3);
}
memmove(inputBuffer + N_samples_to_add_ * floatFormat.mBytesPerPacket, inputBuffer, bytesReadFromInput);
size_t bytesToSkip = 0;
if (dsd2pcm) {
bytesToSkip = dsd2pcmLatency * floatFormat.mBytesPerPacket;
if (bytesReadFromInput >= bytesToSkip) {
bytesReadFromInput -= bytesToSkip;
}
else {
bytesToSkip = 0;
}
}
memmove(inputBuffer + N_samples_to_add_ * floatFormat.mBytesPerPacket, inputBuffer + bytesToSkip, bytesReadFromInput);
lpc_extrapolate_bkwd(inputBuffer + N_samples_to_add_ * floatFormat.mBytesPerPacket, samples_in_buffer, prime, floatFormat.mChannelsPerFrame, LPC_ORDER, N_samples_to_add_, &extrapolateBuffer, &extrapolateBufferSize);
bytesReadFromInput += N_samples_to_add_ * floatFormat.mBytesPerPacket;
@ -709,6 +720,12 @@ tryagain:
if (is_postextrapolated_ == 1)
{
size_t samples_in_buffer = bytesReadFromInput / floatFormat.mBytesPerPacket;
if (dsd2pcm) {
if (samples_in_buffer >= dsd2pcmLatency)
samples_in_buffer -= dsd2pcmLatency;
}
size_t prime = min(samples_in_buffer, PRIME_LEN_);
size_t newSize = bytesReadFromInput;