ignore scan lines shorter than 50 ms

This commit is contained in:
Ahmet Inan 2024-04-29 12:15:42 +02:00
parent e5ce8a5ee1
commit f725809fa8

View file

@ -26,6 +26,7 @@ public class Decoder {
private final float[] last9msFrequencyOffsets;
private final float[] last20msFrequencyOffsets;
private final float[] visCodeBitFrequencies;
private final int scanLineMinSamples;
private final int scanLineReserveSamples;
private final int syncPulseToleranceSamples;
private final int scanLineToleranceSamples;
@ -80,6 +81,8 @@ public class Decoder {
last5msFrequencyOffsets = new float[syncPulseCount];
last9msFrequencyOffsets = new float[syncPulseCount];
last20msFrequencyOffsets = new float[syncPulseCount];
double scanLineMinSeconds = 0.05;
scanLineMinSamples = (int) Math.round(scanLineMinSeconds * sampleRate);
double syncPulseToleranceSeconds = 0.03;
syncPulseToleranceSamples = (int) Math.round(syncPulseToleranceSeconds * sampleRate);
double scanLineToleranceSeconds = 0.001;
@ -253,7 +256,7 @@ public class Decoder {
return false;
double mean = scanLineMean(lines);
int scanLineSamples = (int) Math.round(mean);
if (scanLineSamples > scratchBuffer.length)
if (scanLineSamples < scanLineMinSamples || scanLineSamples > scratchBuffer.length)
return false;
if (scanLineStdDev(lines, mean) > scanLineToleranceSamples)
return false;