fake pulses for faster synchronization

This commit is contained in:
Ahmet Inan 2024-04-29 10:21:43 +02:00
parent 51c241b6fb
commit e5ce8a5ee1

View file

@ -153,17 +153,11 @@ public class Decoder {
return bestMode; return bestMode;
} }
private Mode findMode(int code) { private Mode findMode(ArrayList<Mode> modes, int code) {
for (Mode mode : syncPulse5msModes) for (Mode mode : modes)
if (mode.getCode() == code) if (mode.getCode() == code)
return mode; return mode;
for (Mode mode : syncPulse9msModes) return null;
if (mode.getCode() == code)
return mode;
for (Mode mode : syncPulse20msModes)
if (mode.getCode() == code)
return mode;
return rawMode;
} }
private void copyUnscaled() { private void copyUnscaled() {
@ -326,12 +320,27 @@ public class Decoder {
} }
} }
if (detectHeader(last9msSyncPulses[last9msSyncPulses.length - 1])) { if (detectHeader(last9msSyncPulses[last9msSyncPulses.length - 1])) {
Mode visMode = findMode(visCode); Mode mode;
if (visMode != rawMode) { int[] pulses = null;
lastMode = visMode; int[] lines = null;
lastSyncPulseIndex = last9msSyncPulses[last9msSyncPulses.length - 1] + leaderToneSamples + visCodeSamples + visMode.getFirstSyncPulseIndex(); if ((mode = findMode(syncPulse5msModes, visCode)) != null) {
lastScanLineSamples = visMode.getScanLineSamples(); pulses = last5msSyncPulses;
lines = last5msScanLines;
} else if ((mode = findMode(syncPulse9msModes, visCode)) != null) {
pulses = last9msSyncPulses;
lines = last9msScanLines;
} else if ((mode = findMode(syncPulse20msModes, visCode)) != null) {
pulses = last20msSyncPulses;
lines = last20msScanLines;
}
if (mode != null && pulses != null && lines != null) {
lastMode = mode;
lastSyncPulseIndex = pulses[pulses.length - 1] + leaderToneSamples + visCodeSamples + mode.getFirstSyncPulseIndex();
lastScanLineSamples = mode.getScanLineSamples();
lastFrequencyOffset = leaderFreqOffset; lastFrequencyOffset = leaderFreqOffset;
for (int i = 0; i < pulses.length; ++i)
pulses[i] = lastSyncPulseIndex + (i - pulses.length + 1) * lastScanLineSamples;
Arrays.fill(lines, lastScanLineSamples);
int shift = lastSyncPulseIndex - scanLineReserveSamples; int shift = lastSyncPulseIndex - scanLineReserveSamples;
if (shift > scanLineReserveSamples) { if (shift > scanLineReserveSamples) {
lastSyncPulseIndex -= shift; lastSyncPulseIndex -= shift;