extracted shifting of samples

This commit is contained in:
Ahmet Inan 2024-04-30 20:06:46 +02:00
parent f809555ec9
commit e0542ea00b

View file

@ -215,6 +215,19 @@ public class Decoder {
} }
} }
private void shiftSamples(int shift) {
if (shift <= 0)
return;
lastSyncPulseIndex -= shift;
adjustSyncPulses(last5msSyncPulses, shift);
adjustSyncPulses(last9msSyncPulses, shift);
adjustSyncPulses(last20msSyncPulses, shift);
int endSample = curSample;
curSample = 0;
for (int i = shift; i < endSample; ++i)
scanLineBuffer[curSample++] = scanLineBuffer[i];
}
private boolean detectHeader(int syncPulseIndex) { private boolean detectHeader(int syncPulseIndex) {
if (!checkHeader) if (!checkHeader)
return false; return false;
@ -287,17 +300,7 @@ public class Decoder {
for (int i = 0; i < pulses.length; ++i) for (int i = 0; i < pulses.length; ++i)
pulses[i] = lastSyncPulseIndex + (i - pulses.length + 1) * lastScanLineSamples; pulses[i] = lastSyncPulseIndex + (i - pulses.length + 1) * lastScanLineSamples;
Arrays.fill(lines, lastScanLineSamples); Arrays.fill(lines, lastScanLineSamples);
int shift = lastSyncPulseIndex + mode.getBegin(); shiftSamples(lastSyncPulseIndex + mode.getBegin());
if (shift > 0) {
lastSyncPulseIndex -= shift;
adjustSyncPulses(last5msSyncPulses, shift);
adjustSyncPulses(last9msSyncPulses, shift);
adjustSyncPulses(last20msSyncPulses, shift);
int endSample = curSample;
curSample = 0;
for (int i = shift; i < endSample; ++i)
scanLineBuffer[curSample++] = scanLineBuffer[i];
}
drawLines(0xff00ff00, 8); drawLines(0xff00ff00, 8);
drawLines(0xff000000, 10); drawLines(0xff000000, 10);
return true; return true;
@ -337,20 +340,11 @@ public class Decoder {
} }
for (int i = pictureChanged ? 0 : lines.length - 1; i < lines.length; ++i) for (int i = pictureChanged ? 0 : lines.length - 1; i < lines.length; ++i)
copyLines(mode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, scopeBuffer.width, pulses[i], lines[i], frequencyOffset)); copyLines(mode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, scopeBuffer.width, pulses[i], lines[i], frequencyOffset));
int shift = pulses[pulses.length - 1] + mode.getBegin();
if (shift > 0) {
adjustSyncPulses(last5msSyncPulses, shift);
adjustSyncPulses(last9msSyncPulses, shift);
adjustSyncPulses(last20msSyncPulses, shift);
int endSample = curSample;
curSample = 0;
for (int i = shift; i < endSample; ++i)
scanLineBuffer[curSample++] = scanLineBuffer[i];
}
lastMode = mode; lastMode = mode;
lastSyncPulseIndex = pulses[pulses.length - 1]; lastSyncPulseIndex = pulses[pulses.length - 1];
lastScanLineSamples = scanLineSamples; lastScanLineSamples = scanLineSamples;
lastFrequencyOffset = frequencyOffset; lastFrequencyOffset = frequencyOffset;
shiftSamples(lastSyncPulseIndex + mode.getBegin());
return true; return true;
} }
@ -361,15 +355,8 @@ public class Decoder {
for (int j = 0; j < recordBuffer.length / channels; ++j) { for (int j = 0; j < recordBuffer.length / channels; ++j) {
scanLineBuffer[curSample++] = recordBuffer[j]; scanLineBuffer[curSample++] = recordBuffer[j];
if (curSample >= scanLineBuffer.length) { if (curSample >= scanLineBuffer.length) {
int shift = lastScanLineSamples; shiftSamples(lastScanLineSamples);
syncPulseIndex -= shift; syncPulseIndex -= lastScanLineSamples;
lastSyncPulseIndex -= shift;
adjustSyncPulses(last5msSyncPulses, shift);
adjustSyncPulses(last9msSyncPulses, shift);
adjustSyncPulses(last20msSyncPulses, shift);
curSample = 0;
for (int i = shift; i < scanLineBuffer.length; ++i)
scanLineBuffer[curSample++] = scanLineBuffer[i];
} }
} }
if (syncPulseDetected) { if (syncPulseDetected) {