From f7cc470e184294030e1a861932d6e25d98ddd048 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Fri, 26 Apr 2024 08:38:27 +0200 Subject: [PATCH] added scopeBufferWidth argument to fix the raw decoder --- app/src/main/java/xdsopl/robot36/Decoder.java | 10 ++++------ app/src/main/java/xdsopl/robot36/Mode.java | 2 +- app/src/main/java/xdsopl/robot36/PaulDon.java | 2 +- app/src/main/java/xdsopl/robot36/RGBDecoder.java | 2 +- app/src/main/java/xdsopl/robot36/RawDecoder.java | 4 ++-- app/src/main/java/xdsopl/robot36/Robot_36_Color.java | 2 +- app/src/main/java/xdsopl/robot36/Robot_72_Color.java | 2 +- 7 files changed, 11 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/xdsopl/robot36/Decoder.java b/app/src/main/java/xdsopl/robot36/Decoder.java index 69e0744..42c1c4d 100644 --- a/app/src/main/java/xdsopl/robot36/Decoder.java +++ b/app/src/main/java/xdsopl/robot36/Decoder.java @@ -158,7 +158,7 @@ public class Decoder { } private void copyLines(boolean okay) { - if (!okay || pixelBuffer.width <= 0) + if (!okay) return; int scale = scopeBuffer.width / pixelBuffer.width; if (scale == 1) @@ -190,16 +190,15 @@ public class Decoder { boolean pictureChanged = lastMode != mode || Math.abs(lastScanLineSamples - scanLineSamples) > scanLineToleranceSamples || Math.abs(lastSyncPulseIndex + scanLineSamples - pulses[pulses.length - 1]) > syncPulseToleranceSamples; - pixelBuffer.width = scopeBuffer.width; if (pulses[0] >= scanLineSamples && pictureChanged) { int endPulse = pulses[0]; int extrapolate = endPulse / scanLineSamples; int firstPulse = endPulse - extrapolate * scanLineSamples; for (int pulseIndex = firstPulse; pulseIndex < endPulse; pulseIndex += scanLineSamples) - copyLines(mode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, pulseIndex, scanLineSamples, frequencyOffset)); + copyLines(mode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, scopeBuffer.width, pulseIndex, scanLineSamples, frequencyOffset)); } for (int i = pictureChanged ? 0 : lines.length - 1; i < lines.length; ++i) - copyLines(mode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, pulses[i], lines[i], frequencyOffset)); + copyLines(mode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, scopeBuffer.width, pulses[i], lines[i], frequencyOffset)); int shift = pulses[pulses.length - 1] - scanLineReserveSamples; if (shift > scanLineReserveSamples) { adjustSyncPulses(last5msSyncPulses, shift); @@ -245,8 +244,7 @@ public class Decoder { return processSyncPulse(syncPulse20msModes, last20msFrequencyOffsets, last20msSyncPulses, last20msScanLines, syncPulseIndex); } } else if (lastSyncPulseIndex >= scanLineReserveSamples && curSample > lastSyncPulseIndex + (lastScanLineSamples * 5) / 4) { - pixelBuffer.width = scopeBuffer.width; - copyLines(lastMode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, lastSyncPulseIndex, lastScanLineSamples, lastFrequencyOffset)); + copyLines(lastMode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, scopeBuffer.width, lastSyncPulseIndex, lastScanLineSamples, lastFrequencyOffset)); lastSyncPulseIndex += lastScanLineSamples; return true; } diff --git a/app/src/main/java/xdsopl/robot36/Mode.java b/app/src/main/java/xdsopl/robot36/Mode.java index 8a53a07..30c7e4e 100644 --- a/app/src/main/java/xdsopl/robot36/Mode.java +++ b/app/src/main/java/xdsopl/robot36/Mode.java @@ -11,5 +11,5 @@ public interface Mode { int getScanLineSamples(); - boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int syncPulseIndex, int scanLineSamples, float frequencyOffset); + boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int scopeBufferWidth, int syncPulseIndex, int scanLineSamples, float frequencyOffset); } diff --git a/app/src/main/java/xdsopl/robot36/PaulDon.java b/app/src/main/java/xdsopl/robot36/PaulDon.java index 5245e42..da08414 100644 --- a/app/src/main/java/xdsopl/robot36/PaulDon.java +++ b/app/src/main/java/xdsopl/robot36/PaulDon.java @@ -57,7 +57,7 @@ public class PaulDon implements Mode { } @Override - public boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int syncPulseIndex, int scanLineSamples, float frequencyOffset) { + public boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int scopeBufferWidth, int syncPulseIndex, int scanLineSamples, float frequencyOffset) { if (syncPulseIndex + beginSamples < 0 || syncPulseIndex + endSamples > scanLineBuffer.length) return false; lowPassFilter.cutoff(horizontalPixels, 2 * channelSamples, 2); diff --git a/app/src/main/java/xdsopl/robot36/RGBDecoder.java b/app/src/main/java/xdsopl/robot36/RGBDecoder.java index 6faa66f..e9eee60 100644 --- a/app/src/main/java/xdsopl/robot36/RGBDecoder.java +++ b/app/src/main/java/xdsopl/robot36/RGBDecoder.java @@ -50,7 +50,7 @@ public class RGBDecoder implements Mode { } @Override - public boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int syncPulseIndex, int scanLineSamples, float frequencyOffset) { + public boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int scopeBufferWidth, int syncPulseIndex, int scanLineSamples, float frequencyOffset) { if (syncPulseIndex + beginSamples < 0 || syncPulseIndex + endSamples > scanLineBuffer.length) return false; lowPassFilter.cutoff(horizontalPixels, 2 * greenSamples, 2); diff --git a/app/src/main/java/xdsopl/robot36/RawDecoder.java b/app/src/main/java/xdsopl/robot36/RawDecoder.java index 90109c7..622f6f7 100644 --- a/app/src/main/java/xdsopl/robot36/RawDecoder.java +++ b/app/src/main/java/xdsopl/robot36/RawDecoder.java @@ -32,10 +32,10 @@ public class RawDecoder implements Mode { } @Override - public boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int syncPulseIndex, int scanLineSamples, float frequencyOffset) { + public boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int scopeBufferWidth, int syncPulseIndex, int scanLineSamples, float frequencyOffset) { if (syncPulseIndex < 0 || syncPulseIndex + scanLineSamples > scanLineBuffer.length) return false; - int horizontalPixels = pixelBuffer.width; + int horizontalPixels = scopeBufferWidth; if (scanLineSamples < smallPictureMaxSamples) horizontalPixels /= 2; if (scanLineSamples < mediumPictureMaxSamples) 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 9c01e64..9bb36c1 100644 --- a/app/src/main/java/xdsopl/robot36/Robot_36_Color.java +++ b/app/src/main/java/xdsopl/robot36/Robot_36_Color.java @@ -62,7 +62,7 @@ public class Robot_36_Color implements Mode { } @Override - public boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int syncPulseIndex, int scanLineSamples, float frequencyOffset) { + public boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int scopeBufferWidth, int syncPulseIndex, int scanLineSamples, float frequencyOffset) { if (syncPulseIndex + beginSamples < 0 || syncPulseIndex + endSamples > scanLineBuffer.length) return false; float separator = 0; 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 3b830ba..db918e8 100644 --- a/app/src/main/java/xdsopl/robot36/Robot_72_Color.java +++ b/app/src/main/java/xdsopl/robot36/Robot_72_Color.java @@ -60,7 +60,7 @@ public class Robot_72_Color implements Mode { } @Override - public boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int syncPulseIndex, int scanLineSamples, float frequencyOffset) { + public boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int scopeBufferWidth, int syncPulseIndex, int scanLineSamples, float frequencyOffset) { if (syncPulseIndex + beginSamples < 0 || syncPulseIndex + endSamples > scanLineBuffer.length) return false; lowPassFilter.cutoff(horizontalPixels, 2 * luminanceSamples, 2);