throw away up to end of header and signal status

This commit is contained in:
Ahmet Inan 2024-04-29 16:16:22 +02:00
parent cc7a6dcf71
commit daf4d88702

View file

@ -200,6 +200,14 @@ public class Decoder {
copyScaled(scale); copyScaled(scale);
} }
private void drawLines(int color, int count) {
for (int i = 0; i < count; ++i) {
Arrays.fill(scopeBuffer.pixels, scopeBuffer.line * scopeBuffer.width, (scopeBuffer.line + 1) * scopeBuffer.width, color);
Arrays.fill(scopeBuffer.pixels, (scopeBuffer.line + scopeBuffer.height / 2) * scopeBuffer.width, (scopeBuffer.line + 1 + scopeBuffer.height / 2) * scopeBuffer.width, color);
scopeBuffer.line = (scopeBuffer.line + 1) % (scopeBuffer.height / 2);
}
}
private boolean detectHeader(int syncPulseIndex) { private boolean detectHeader(int syncPulseIndex) {
if (!checkHeader) if (!checkHeader)
return false; return false;
@ -324,7 +332,8 @@ public class Decoder {
return false; return false;
} }
} }
if (detectHeader(last9msSyncPulses[last9msSyncPulses.length - 1])) { int leaderBreakIndex = last9msSyncPulses[last9msSyncPulses.length - 1];
if (detectHeader(leaderBreakIndex)) {
Mode mode; Mode mode;
int[] pulses = null; int[] pulses = null;
int[] lines = null; int[] lines = null;
@ -340,24 +349,25 @@ public class Decoder {
} }
if (mode != null && pulses != null && lines != null) { if (mode != null && pulses != null && lines != null) {
lastMode = mode; lastMode = mode;
lastSyncPulseIndex = pulses[pulses.length - 1] + leaderToneSamples + visCodeSamples + mode.getFirstSyncPulseIndex(); lastSyncPulseIndex = mode.getFirstSyncPulseIndex();
lastScanLineSamples = mode.getScanLineSamples(); lastScanLineSamples = mode.getScanLineSamples();
lastFrequencyOffset = leaderFreqOffset; lastFrequencyOffset = leaderFreqOffset;
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 - scanLineReserveSamples; int shift = leaderBreakIndex + leaderToneSamples + visCodeSamples;
if (shift > scanLineReserveSamples) { adjustSyncPulses(last5msSyncPulses, shift);
lastSyncPulseIndex -= shift; adjustSyncPulses(last9msSyncPulses, shift);
adjustSyncPulses(last5msSyncPulses, shift); adjustSyncPulses(last20msSyncPulses, shift);
adjustSyncPulses(last9msSyncPulses, shift); int endSample = curSample;
adjustSyncPulses(last20msSyncPulses, shift); curSample = 0;
int endSample = curSample; for (int i = shift; i < endSample; ++i)
curSample = 0; scanLineBuffer[curSample++] = scanLineBuffer[i];
for (int i = shift; i < endSample; ++i) drawLines(0xff00ff00, 8);
scanLineBuffer[curSample++] = scanLineBuffer[i]; } else {
} drawLines(0xffff0000, 8);
} }
drawLines(0xff000000, 10);
} }
if (lastSyncPulseIndex >= scanLineReserveSamples && curSample > lastSyncPulseIndex + (lastScanLineSamples * 5) / 4) { if (lastSyncPulseIndex >= scanLineReserveSamples && curSample > lastSyncPulseIndex + (lastScanLineSamples * 5) / 4) {
copyLines(lastMode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, scopeBuffer.width, lastSyncPulseIndex, lastScanLineSamples, lastFrequencyOffset)); copyLines(lastMode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, scopeBuffer.width, lastSyncPulseIndex, lastScanLineSamples, lastFrequencyOffset));