From cdf12d2c09cfae8a8a7463d497ad2a5c7814f6d8 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Thu, 25 Apr 2024 18:43:03 +0200 Subject: [PATCH] preserve scope position on decoder reconstruction --- app/src/main/java/xdsopl/robot36/Decoder.java | 11 +++++------ app/src/main/java/xdsopl/robot36/MainActivity.java | 2 +- app/src/main/java/xdsopl/robot36/PixelBuffer.java | 2 ++ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/xdsopl/robot36/Decoder.java b/app/src/main/java/xdsopl/robot36/Decoder.java index fbbae3f..e6dc31b 100644 --- a/app/src/main/java/xdsopl/robot36/Decoder.java +++ b/app/src/main/java/xdsopl/robot36/Decoder.java @@ -34,7 +34,6 @@ public class Decoder { private final ArrayList syncPulse20msModes; public Mode lastMode; - public int curLine; private int curSample; private int lastSyncPulseIndex; private int lastScanLineSamples; @@ -135,11 +134,11 @@ public class Decoder { if (!okay) return; for (int row = 0; row < pixelBuffer.height; ++row) { - System.arraycopy(pixelBuffer.pixels, row * pixelBuffer.width, scopeBuffer.pixels, scopeBuffer.width * curLine, pixelBuffer.width); - Arrays.fill(scopeBuffer.pixels, scopeBuffer.width * curLine + pixelBuffer.width, scopeBuffer.width * curLine + scopeBuffer.width, 0); - System.arraycopy(pixelBuffer.pixels, row * pixelBuffer.width, scopeBuffer.pixels, scopeBuffer.width * (curLine + scopeBuffer.height / 2), pixelBuffer.width); - Arrays.fill(scopeBuffer.pixels, scopeBuffer.width * (curLine + scopeBuffer.height / 2) + pixelBuffer.width, scopeBuffer.width * (curLine + scopeBuffer.height / 2) + scopeBuffer.width, 0); - curLine = (curLine + 1) % (scopeBuffer.height / 2); + System.arraycopy(pixelBuffer.pixels, row * pixelBuffer.width, scopeBuffer.pixels, scopeBuffer.width * scopeBuffer.line, pixelBuffer.width); + Arrays.fill(scopeBuffer.pixels, scopeBuffer.width * scopeBuffer.line + pixelBuffer.width, scopeBuffer.width * scopeBuffer.line + scopeBuffer.width, 0); + System.arraycopy(pixelBuffer.pixels, row * pixelBuffer.width, scopeBuffer.pixels, scopeBuffer.width * (scopeBuffer.line + scopeBuffer.height / 2), pixelBuffer.width); + Arrays.fill(scopeBuffer.pixels, scopeBuffer.width * (scopeBuffer.line + scopeBuffer.height / 2) + pixelBuffer.width, scopeBuffer.width * (scopeBuffer.line + scopeBuffer.height / 2) + scopeBuffer.width, 0); + scopeBuffer.line = (scopeBuffer.line + 1) % (scopeBuffer.height / 2); } } diff --git a/app/src/main/java/xdsopl/robot36/MainActivity.java b/app/src/main/java/xdsopl/robot36/MainActivity.java index eaf2411..19ec2ce 100644 --- a/app/src/main/java/xdsopl/robot36/MainActivity.java +++ b/app/src/main/java/xdsopl/robot36/MainActivity.java @@ -62,7 +62,7 @@ public class MainActivity extends AppCompatActivity { public void onPeriodicNotification(AudioRecord audioRecord) { audioRecord.read(recordBuffer, 0, recordBuffer.length, AudioRecord.READ_BLOCKING); if (decoder.process(recordBuffer, recordChannel)) { - scopeBitmap.setPixels(scopeBuffer.pixels, scopeBuffer.width * decoder.curLine, scopeBuffer.width, 0, 0, scopeBuffer.width, scopeBuffer.height / 2); + scopeBitmap.setPixels(scopeBuffer.pixels, scopeBuffer.width * scopeBuffer.line, scopeBuffer.width, 0, 0, scopeBuffer.width, scopeBuffer.height / 2); scopeView.invalidate(); setStatus(decoder.lastMode.getName()); } diff --git a/app/src/main/java/xdsopl/robot36/PixelBuffer.java b/app/src/main/java/xdsopl/robot36/PixelBuffer.java index 2b29935..de19ba6 100644 --- a/app/src/main/java/xdsopl/robot36/PixelBuffer.java +++ b/app/src/main/java/xdsopl/robot36/PixelBuffer.java @@ -10,10 +10,12 @@ public class PixelBuffer { public int[] pixels; public int width; public int height; + public int line; PixelBuffer(int width, int height) { this.width = width; this.height = height; + this.line = 0; this.pixels = new int[width * height]; } }