From 0f0c3e616d09b1769fa19b22f88df9912becb5b4 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 2 Sep 2020 08:17:01 -0400 Subject: [PATCH] Tweaks some numbers. I'm largely treading water here. Probably time to think about the race. --- OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm | 6 +++--- OSBindings/Mac/Clock Signal/ScanTarget/ScanTarget.metal | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm b/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm index eaa34017b..00c163fa4 100644 --- a/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm +++ b/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm @@ -567,10 +567,10 @@ using BufferingScanTarget = Outputs::Display::BufferingScanTarget; // Generate the chrominance filter. { auto *const chromaCoefficients = uniforms()->chromaCoefficients; - SignalProcessing::FIRFilter chrominancefilter(15, float(_lineBufferPixelsPerLine), 0.0f, colourCyclesPerLine * (isSVideoOutput ? 1.0f : 1.0f)); + SignalProcessing::FIRFilter chrominancefilter(15, float(_lineBufferPixelsPerLine), 0.0f, colourCyclesPerLine); // * (isSVideoOutput ? 1.0f : 0.25f) const auto calculatedCoefficients = chrominancefilter.get_coefficients(); for(size_t c = 0; c < 8; ++c) { - chromaCoefficients[c].y = chromaCoefficients[c].z = calculatedCoefficients[c] * (isSVideoOutput ? 4.0f : 8.0f); + chromaCoefficients[c].y = chromaCoefficients[c].z = calculatedCoefficients[c] * (isSVideoOutput ? 4.0f : 4.0f); chromaCoefficients[c].x = 0.0f; } chromaCoefficients[7].x = 1.0f; @@ -579,7 +579,7 @@ using BufferingScanTarget = Outputs::Display::BufferingScanTarget; // Generate the luminance filter. { auto *const luminanceCoefficients = uniforms()->lumaCoefficients; - SignalProcessing::FIRFilter luminancefilter(15, float(_lineBufferPixelsPerLine), 0.0f, colourCyclesPerLine * 0.5f); + SignalProcessing::FIRFilter luminancefilter(15, float(_lineBufferPixelsPerLine), 0.0f, colourCyclesPerLine * 0.85f); const auto calculatedCoefficients = luminancefilter.get_coefficients(); memcpy(luminanceCoefficients, calculatedCoefficients.data(), sizeof(float)*8); } diff --git a/OSBindings/Mac/Clock Signal/ScanTarget/ScanTarget.metal b/OSBindings/Mac/Clock Signal/ScanTarget/ScanTarget.metal index 5e5020a61..b25368e45 100644 --- a/OSBindings/Mac/Clock Signal/ScanTarget/ScanTarget.metal +++ b/OSBindings/Mac/Clock Signal/ScanTarget/ScanTarget.metal @@ -441,9 +441,11 @@ kernel void separateLumaKernel( texture2d inTexture [[textu Sample(8, 6) + Sample(9, 5) + Sample(10, 4) + Sample(11, 3) + Sample(12, 2) + Sample(13, 1) + Sample(14, 0); #undef Sample + // TODO: determine why centreSample.a doesn't seem to be giving the real composite amplitude, and stop + // hard-coding 0.3f below. outTexture.write(float4( - luminance, - (centreSample.gb - float2(0.5f)) * (centreSample.r - luminance) + float2(0.5f), + luminance / (1.0f - 0.3f), + (centreSample.gb - float2(0.5f)) * (centreSample.r - luminance) * 1.0f / 0.3f + float2(0.5f), 1.0f ), gid + uint2(7, offset));