From 00a9ddb21a0e6aa8ea2c444272e92bc163254abd Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Sat, 20 Apr 2024 11:50:59 +0200 Subject: [PATCH] be consistent with begin and end samples --- app/src/main/java/xdsopl/robot36/PaulDon.java | 8 +++++--- app/src/main/java/xdsopl/robot36/RawDecoder.java | 2 +- app/src/main/java/xdsopl/robot36/Robot_72_Color.java | 8 +++++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/xdsopl/robot36/PaulDon.java b/app/src/main/java/xdsopl/robot36/PaulDon.java index 23fa4a8..1afeedb 100644 --- a/app/src/main/java/xdsopl/robot36/PaulDon.java +++ b/app/src/main/java/xdsopl/robot36/PaulDon.java @@ -9,11 +9,12 @@ package xdsopl.robot36; public class PaulDon implements Mode { private final int scanLineSamples; private final int channelSamples; + private final int beginSamples; private final int yEvenBeginSamples; private final int vAvgBeginSamples; private final int uAvgBeginSamples; private final int yOddBeginSamples; - private final int yOddEndSamples; + private final int endSamples; private final String name; PaulDon(String name, double channelSeconds, int sampleRate) { @@ -25,6 +26,7 @@ public class PaulDon implements Mode { channelSamples = (int) Math.round(channelSeconds * sampleRate); double yEvenBeginSeconds = syncPulseSeconds / 2 + syncPorchSeconds; yEvenBeginSamples = (int) Math.round(yEvenBeginSeconds * sampleRate); + beginSamples = yEvenBeginSamples; double vAvgBeginSeconds = yEvenBeginSeconds + channelSeconds; vAvgBeginSamples = (int) Math.round(vAvgBeginSeconds * sampleRate); double uAvgBeginSeconds = vAvgBeginSeconds + channelSeconds; @@ -32,7 +34,7 @@ public class PaulDon implements Mode { double yOddBeginSeconds = uAvgBeginSeconds + channelSeconds; yOddBeginSamples = (int) Math.round(yOddBeginSeconds * sampleRate); double yOddEndSeconds = yOddBeginSeconds + channelSeconds; - yOddEndSamples = (int) Math.round(yOddEndSeconds * sampleRate); + endSamples = (int) Math.round(yOddEndSeconds * sampleRate); } @Override @@ -47,7 +49,7 @@ public class PaulDon implements Mode { @Override public int decodeScanLine(int[] evenBuffer, int[] oddBuffer, float[] scanLineBuffer, int prevPulseIndex, int scanLineSamples) { - if (prevPulseIndex + yEvenBeginSamples < 0 || prevPulseIndex + yOddEndSamples > scanLineBuffer.length) + if (prevPulseIndex + beginSamples < 0 || prevPulseIndex + endSamples > scanLineBuffer.length) return 0; for (int i = 0; i < evenBuffer.length; ++i) { int position = (i * channelSamples) / evenBuffer.length + prevPulseIndex; diff --git a/app/src/main/java/xdsopl/robot36/RawDecoder.java b/app/src/main/java/xdsopl/robot36/RawDecoder.java index f997c56..3812cc4 100644 --- a/app/src/main/java/xdsopl/robot36/RawDecoder.java +++ b/app/src/main/java/xdsopl/robot36/RawDecoder.java @@ -23,7 +23,7 @@ public class RawDecoder implements Mode { @Override public int decodeScanLine(int[] evenBuffer, int[] oddBuffer, float[] scanLineBuffer, int prevPulseIndex, int scanLineSamples) { - if (prevPulseIndex < 0 || prevPulseIndex + scanLineSamples >= scanLineBuffer.length) + if (prevPulseIndex < 0 || prevPulseIndex + scanLineSamples > scanLineBuffer.length) return 0; for (int i = 0; i < evenBuffer.length; ++i) { int position = (i * scanLineSamples) / evenBuffer.length + prevPulseIndex; 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 ab292c5..0572bbe 100644 --- a/app/src/main/java/xdsopl/robot36/Robot_72_Color.java +++ b/app/src/main/java/xdsopl/robot36/Robot_72_Color.java @@ -10,10 +10,11 @@ public class Robot_72_Color implements Mode { private final int scanLineSamples; private final int luminanceSamples; private final int chrominanceSamples; + private final int beginSamples; private final int yBeginSamples; private final int vBeginSamples; private final int uBeginSamples; - private final int uEndSamples; + private final int endSamples; Robot_72_Color(int sampleRate) { double syncPulseSeconds = 0.009; @@ -28,6 +29,7 @@ public class Robot_72_Color implements Mode { chrominanceSamples = (int) Math.round(chrominanceSeconds * sampleRate); double yBeginSeconds = syncPulseSeconds / 2 + syncPorchSeconds; yBeginSamples = (int) Math.round(yBeginSeconds * sampleRate); + beginSamples = yBeginSamples; double yEndSeconds = yBeginSeconds + luminanceSeconds; double vBeginSeconds = yEndSeconds + separatorSeconds + porchSeconds; vBeginSamples = (int) Math.round(vBeginSeconds * sampleRate); @@ -35,7 +37,7 @@ public class Robot_72_Color implements Mode { double uBeginSeconds = vEndSeconds + separatorSeconds + porchSeconds; uBeginSamples = (int) Math.round(uBeginSeconds * sampleRate); double uEndSeconds = uBeginSeconds + chrominanceSeconds; - uEndSamples = (int) Math.round(uEndSeconds * sampleRate); + endSamples = (int) Math.round(uEndSeconds * sampleRate); } @Override @@ -50,7 +52,7 @@ public class Robot_72_Color implements Mode { @Override public int decodeScanLine(int[] evenBuffer, int[] oddBuffer, float[] scanLineBuffer, int prevPulseIndex, int scanLineSamples) { - if (prevPulseIndex + yBeginSamples < 0 || prevPulseIndex + uEndSamples > scanLineBuffer.length) + if (prevPulseIndex + beginSamples < 0 || prevPulseIndex + endSamples > scanLineBuffer.length) return 0; for (int i = 0; i < evenBuffer.length; ++i) { int yPos = yBeginSamples + (i * luminanceSamples) / evenBuffer.length + prevPulseIndex;