From f809555ec9cdc50b6a73deab0219cb606a794684 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Tue, 30 Apr 2024 19:57:56 +0200 Subject: [PATCH] let modes decide how much we can shift --- app/src/main/java/xdsopl/robot36/Decoder.java | 26 ++++++++++--------- app/src/main/java/xdsopl/robot36/Mode.java | 2 ++ app/src/main/java/xdsopl/robot36/PaulDon.java | 5 ++++ .../main/java/xdsopl/robot36/RGBDecoder.java | 5 ++++ .../main/java/xdsopl/robot36/RawDecoder.java | 5 ++++ .../java/xdsopl/robot36/Robot_36_Color.java | 5 ++++ .../java/xdsopl/robot36/Robot_72_Color.java | 5 ++++ 7 files changed, 41 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/xdsopl/robot36/Decoder.java b/app/src/main/java/xdsopl/robot36/Decoder.java index 93ea1f3..19a6c16 100644 --- a/app/src/main/java/xdsopl/robot36/Decoder.java +++ b/app/src/main/java/xdsopl/robot36/Decoder.java @@ -281,20 +281,23 @@ public class Decoder { imageBuffer.height = mode.getHeight(); imageBuffer.line = 0; lastMode = mode; - lastSyncPulseIndex = mode.getFirstSyncPulseIndex(); + lastSyncPulseIndex = leaderBreakIndex + leaderToneSamples + visCodeSamples + mode.getFirstSyncPulseIndex(); lastScanLineSamples = mode.getScanLineSamples(); lastFrequencyOffset = leaderFreqOffset; for (int i = 0; i < pulses.length; ++i) pulses[i] = lastSyncPulseIndex + (i - pulses.length + 1) * lastScanLineSamples; Arrays.fill(lines, lastScanLineSamples); - int shift = leaderBreakIndex + leaderToneSamples + visCodeSamples; - 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]; + int shift = 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(0xff000000, 10); return true; @@ -334,9 +337,8 @@ public class Decoder { } 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)); - int reserve = (scanLineSamples * 3) / 4; - int shift = pulses[pulses.length - 1] - reserve; - if (shift > reserve) { + int shift = pulses[pulses.length - 1] + mode.getBegin(); + if (shift > 0) { adjustSyncPulses(last5msSyncPulses, shift); adjustSyncPulses(last9msSyncPulses, shift); adjustSyncPulses(last20msSyncPulses, shift); diff --git a/app/src/main/java/xdsopl/robot36/Mode.java b/app/src/main/java/xdsopl/robot36/Mode.java index e821120..3614711 100644 --- a/app/src/main/java/xdsopl/robot36/Mode.java +++ b/app/src/main/java/xdsopl/robot36/Mode.java @@ -15,6 +15,8 @@ public interface Mode { int getHeight(); + int getBegin(); + int getFirstSyncPulseIndex(); int getScanLineSamples(); diff --git a/app/src/main/java/xdsopl/robot36/PaulDon.java b/app/src/main/java/xdsopl/robot36/PaulDon.java index ab435ca..616f9ca 100644 --- a/app/src/main/java/xdsopl/robot36/PaulDon.java +++ b/app/src/main/java/xdsopl/robot36/PaulDon.java @@ -72,6 +72,11 @@ public class PaulDon implements Mode { return verticalPixels; } + @Override + public int getBegin() { + return beginSamples; + } + @Override public int getFirstSyncPulseIndex() { return firstSyncPulseIndex; diff --git a/app/src/main/java/xdsopl/robot36/RGBDecoder.java b/app/src/main/java/xdsopl/robot36/RGBDecoder.java index 16d7cb1..febef26 100644 --- a/app/src/main/java/xdsopl/robot36/RGBDecoder.java +++ b/app/src/main/java/xdsopl/robot36/RGBDecoder.java @@ -65,6 +65,11 @@ public class RGBDecoder implements Mode { return verticalPixels; } + @Override + public int getBegin() { + return beginSamples; + } + @Override public int getFirstSyncPulseIndex() { return firstSyncPulseIndex; diff --git a/app/src/main/java/xdsopl/robot36/RawDecoder.java b/app/src/main/java/xdsopl/robot36/RawDecoder.java index 5a917b0..33700d9 100644 --- a/app/src/main/java/xdsopl/robot36/RawDecoder.java +++ b/app/src/main/java/xdsopl/robot36/RawDecoder.java @@ -41,6 +41,11 @@ public class RawDecoder implements Mode { return -1; } + @Override + public int getBegin() { + return 0; + } + @Override public int getFirstSyncPulseIndex() { return -1; diff --git a/app/src/main/java/xdsopl/robot36/Robot_36_Color.java b/app/src/main/java/xdsopl/robot36/Robot_36_Color.java index 932169a..0ccbb00 100644 --- a/app/src/main/java/xdsopl/robot36/Robot_36_Color.java +++ b/app/src/main/java/xdsopl/robot36/Robot_36_Color.java @@ -75,6 +75,11 @@ public class Robot_36_Color implements Mode { return verticalPixels; } + @Override + public int getBegin() { + return beginSamples; + } + @Override public int getFirstSyncPulseIndex() { return firstSyncPulseIndex; diff --git a/app/src/main/java/xdsopl/robot36/Robot_72_Color.java b/app/src/main/java/xdsopl/robot36/Robot_72_Color.java index 40a123f..8d5d01b 100644 --- a/app/src/main/java/xdsopl/robot36/Robot_72_Color.java +++ b/app/src/main/java/xdsopl/robot36/Robot_72_Color.java @@ -73,6 +73,11 @@ public class Robot_72_Color implements Mode { return verticalPixels; } + @Override + public int getBegin() { + return beginSamples; + } + @Override public int getFirstSyncPulseIndex() { return firstSyncPulseIndex;