From 28ebde8e934f8585633b89fdd062ee77744bd705 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Fri, 22 Nov 2024 16:34:07 +0100 Subject: [PATCH] support full resolution saving of PD290 images the scope image of PD290 is still cropped to 640 pixels but aspect ratio is now correct --- app/src/main/java/xdsopl/robot36/Decoder.java | 13 +++++++------ app/src/main/java/xdsopl/robot36/MainActivity.java | 2 +- 2 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 aa591d3..30344e3 100644 --- a/app/src/main/java/xdsopl/robot36/Decoder.java +++ b/app/src/main/java/xdsopl/robot36/Decoder.java @@ -54,7 +54,7 @@ public class Decoder { this.scopeBuffer = scopeBuffer; this.imageBuffer = imageBuffer; imageBuffer.line = -1; - pixelBuffer = new PixelBuffer(scopeBuffer.width, 2); + pixelBuffer = new PixelBuffer(800, 2); demodulator = new Demodulator(sampleRate); double pulseFilterSeconds = 0.0025; int pulseFilterSamples = (int) Math.round(pulseFilterSeconds * sampleRate) | 1; @@ -115,7 +115,7 @@ public class Decoder { syncPulse20msModes.add(new PaulDon("160", 98, 512, 400, 0.195584, sampleRate)); syncPulse20msModes.add(new PaulDon("180", 96, 640, 496, 0.18304, sampleRate)); syncPulse20msModes.add(new PaulDon("240", 97, 640, 496, 0.24448, sampleRate)); - syncPulse20msModes.add(new PaulDon("290", 94, 640, 616, 0.2288, sampleRate)); + syncPulse20msModes.add(new PaulDon("290", 94, 800, 616, 0.2288, sampleRate)); } private double scanLineMean(int[] lines) { @@ -170,11 +170,12 @@ public class Decoder { } private void copyUnscaled() { + int width = Math.min(scopeBuffer.width, pixelBuffer.width); for (int row = 0; row < pixelBuffer.height; ++row) { int line = scopeBuffer.width * scopeBuffer.line; - System.arraycopy(pixelBuffer.pixels, row * pixelBuffer.width, scopeBuffer.pixels, line, pixelBuffer.width); - Arrays.fill(scopeBuffer.pixels, line + pixelBuffer.width, line + scopeBuffer.width, 0); - System.arraycopy(scopeBuffer.pixels, line, scopeBuffer.pixels, scopeBuffer.width * (scopeBuffer.line + scopeBuffer.height / 2), scopeBuffer.width); + System.arraycopy(pixelBuffer.pixels, row * pixelBuffer.width, scopeBuffer.pixels, line, width); + Arrays.fill(scopeBuffer.pixels, line + width, line + scopeBuffer.width, 0); + System.arraycopy(scopeBuffer.pixels, line, scopeBuffer.pixels, scopeBuffer.width * (scopeBuffer.line + scopeBuffer.height / 2), width); scopeBuffer.line = (scopeBuffer.line + 1) % (scopeBuffer.height / 2); } } @@ -207,7 +208,7 @@ public class Decoder { finish = imageBuffer.line == imageBuffer.height; } int scale = scopeBuffer.width / pixelBuffer.width; - if (scale == 1) + if (scale <= 1) copyUnscaled(); else copyScaled(scale); diff --git a/app/src/main/java/xdsopl/robot36/MainActivity.java b/app/src/main/java/xdsopl/robot36/MainActivity.java index c702934..386ef81 100644 --- a/app/src/main/java/xdsopl/robot36/MainActivity.java +++ b/app/src/main/java/xdsopl/robot36/MainActivity.java @@ -457,7 +457,7 @@ public class MainActivity extends AppCompatActivity { scopeBuffer = new PixelBuffer(640, 2 * 1280); freqPlotBuffer = new PixelBuffer(256, 2 * 256); peakMeterBuffer = new PixelBuffer(1, 16); - imageBuffer = new PixelBuffer(640, 616); + imageBuffer = new PixelBuffer(800, 616); createScope(config); createFreqPlot(config); createPeakMeter();