1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-23 03:32:32 +00:00

Also calculates a chroma kernel size, though it isn't used for anything yet.

This commit is contained in:
Thomas Harte 2020-09-08 20:08:56 -04:00
parent dda1649ab7
commit 18571e8351

View File

@ -261,6 +261,7 @@ using BufferingScanTarget = Outputs::Display::BufferingScanTarget;
// Additional pipeline information.
size_t _lumaKernelSize;
size_t _chromaKernelSize;
// The output view.
__weak MTKView *_view;
@ -652,9 +653,13 @@ using BufferingScanTarget = Outputs::Display::BufferingScanTarget;
{
auto *const firCoefficients = uniforms()->chromaCoefficients;
const auto chromaCoefficients = boxCoefficients(uniforms()->radiansPerPixel, 3.141592654f);
_chromaKernelSize = 15;
for(size_t c = 0; c < 8; ++c) {
firCoefficients[c].y = firCoefficients[c].z = (isSVideoOutput ? 2.0f : 1.0f) * chromaCoefficients[c];
firCoefficients[c].x = 0.0f;
if(fabsf(chromaCoefficients[c]) < 0.01f) {
_chromaKernelSize -= 2;
}
}
firCoefficients[7].x = 1.0f;
@ -665,11 +670,16 @@ using BufferingScanTarget = Outputs::Display::BufferingScanTarget;
//
// The low cut off ['Hz' but per line, not per second] is somewhat arbitrary.
if(!isSVideoOutput) {
SignalProcessing::FIRFilter sharpenFilter(15, float(_lineBufferPixelsPerLine), 20.0f, colourCyclesPerLine);
SignalProcessing::FIRFilter sharpenFilter(15, float(_lineBufferPixelsPerLine), 40.0f, colourCyclesPerLine);
const auto sharpen = sharpenFilter.get_coefficients();
size_t sharpenFilterSize = 15;
bool isStart = true;
for(size_t c = 0; c < 8; ++c) {
firCoefficients[c].x = sharpen[c];
if(fabsf(sharpen[c]) > 0.01f) isStart = false;
if(isStart) sharpenFilterSize -= 2;
}
_chromaKernelSize = std::max(_chromaKernelSize, sharpenFilterSize);
}
}
@ -680,7 +690,7 @@ using BufferingScanTarget = Outputs::Display::BufferingScanTarget;
_lumaKernelSize = 15;
for(size_t c = 0; c < 8; ++c) {
filter[c] = __fp16(coefficients[c]);
if(coefficients[c] < 0.01f) {
if(fabsf(coefficients[c]) < 0.01f) {
_lumaKernelSize -= 2;
}
}