From 2562c4eac535c890beffe9db86fd730da032cbd7 Mon Sep 17 00:00:00 2001 From: jojo61 Date: Fri, 16 Apr 2021 13:50:45 +0200 Subject: [PATCH] Support for colortemp adjustment with libplacebo --- softhdcuvid.cpp | 23 ++++++++++++++++++----- video.c | 13 ++++++++++++- video.h | 3 +++ 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/softhdcuvid.cpp b/softhdcuvid.cpp index 7c2a76b..ee38b82 100644 --- a/softhdcuvid.cpp +++ b/softhdcuvid.cpp @@ -63,7 +63,7 @@ extern void ToggleLUT(); /// vdr-plugin version number. /// Makefile extracts the version number for generating the file name /// for the distribution archive. -static const char *const VERSION = "3.4.4" +static const char *const VERSION = "3.5" #ifdef GIT_REV "-GIT" GIT_REV #endif @@ -108,7 +108,8 @@ static int ConfigVideoBrightness; ///< config video brightness static int ConfigVideoContrast = 100; ///< config video contrast static int ConfigVideoSaturation = 100; ///< config video saturation static int ConfigVideoHue; ///< config video hue -static int ConfigGamma=100; ///< config Gamma +static int ConfigGamma=100; ///< config Gamma +static int ConfigTemperature=0; ///< config Temperature static int ConfigTargetColorSpace; ///< config Target Colrospace static int ConfigScalerTest; /// Test for Scalers static int ConfigColorBlindness; @@ -979,6 +980,7 @@ class cMenuSetupSoft:public cMenuSetupPage int Saturation; int Hue; int Gamma; + int Temperature; int TargetColorSpace; int ScalerTest; int ColorBlindnessFaktor; @@ -1202,10 +1204,10 @@ void cMenuSetupSoft::Create(void) Add(new cMenuEditIntItem(tr("Saturation (0..100)"), &Saturation, 0, 100, tr("min"), tr("max"))); Add(new cMenuEditIntItem(tr("Gamma (0..100)"), &Gamma, 0, 100, tr("min"), tr("max"))); Add(new cMenuEditIntItem(tr("Hue (-314..314) "), &Hue, -314, 314, tr("min"), tr("max"))); - + Add(new cMenuEditIntItem(tr("Temperature 6500K + x * 100K"), &Temperature, -35, 35, NULL, NULL)); + Add(new cMenuEditStraItem(tr("Color Blindness"), &ColorBlindness, 5, target_colorblindness)); - Add(new cMenuEditIntItem(tr("Color Correction (-100..100) "), &ColorBlindnessFaktor, -100, 100, tr("min"), - tr("max"))); + Add(new cMenuEditIntItem(tr("Color Correction (-100..100) "), &ColorBlindnessFaktor, -100, 100, tr("min"), tr("max"))); #endif Add(new cMenuEditStraItem(tr("Monitor Type"), &TargetColorSpace, 4, target_colorspace)); for (i = 0; i < RESOLUTIONS; ++i) { @@ -1402,6 +1404,7 @@ cMenuSetupSoft::cMenuSetupSoft(void) Saturation = ConfigVideoSaturation; Hue = ConfigVideoHue; Gamma = ConfigGamma; + Temperature = ConfigTemperature; TargetColorSpace = ConfigTargetColorSpace; ColorBlindness = ConfigColorBlindness; ColorBlindnessFaktor = ConfigColorBlindnessFaktor; @@ -1534,6 +1537,8 @@ void cMenuSetupSoft::Store(void) VideoSetSaturation(ConfigVideoSaturation); SetupStore("Gamma", ConfigGamma = Gamma); VideoSetGamma(ConfigGamma); + SetupStore("Temperature", ConfigTemperature = Temperature); + VideoSetTemperature(ConfigTemperature); SetupStore("TargetColorSpace", ConfigTargetColorSpace = TargetColorSpace); VideoSetTargetColor(ConfigTargetColorSpace); SetupStore("Hue", ConfigVideoHue = Hue); @@ -3325,6 +3330,14 @@ bool cPluginSoftHdDevice::SetupParse(const char *name, const char *value) ConfigGamma = i > 100 ? 100 : i; VideoSetGamma(ConfigGamma); return true; + } + if (!strcasecmp(name, "Temperature")) { + int i; + + i = atoi(value); + ConfigTemperature = i > 100 ? 100 : i; + VideoSetTemperature(ConfigTemperature); + return true; } if (!strcasecmp(name, "TargetColorSpace")) { VideoSetTargetColor(ConfigTargetColorSpace = atoi(value)); diff --git a/video.c b/video.c index b3606a9..74ba78e 100644 --- a/video.c +++ b/video.c @@ -451,6 +451,7 @@ static float VideoContrast = 1.0f; static float VideoSaturation = 1.0f; static float VideoHue = 0.0f; static float VideoGamma = 1.0f; +static float VideoTemperature = 0.0f; static int VulkanTargetColorSpace = 0; static int VideoScalerTest = 0; static int VideoColorBlindness = 0; @@ -4110,6 +4111,7 @@ static void CuvidMixVideo(CuvidDecoder * decoder, __attribute__((unused)) colors.saturation = VideoSaturation; colors.hue = VideoHue; colors.gamma = VideoGamma; + colors.temperature = VideoTemperature; if (ovl) { target->overlays = ovl; @@ -6772,7 +6774,16 @@ void VideoSetGamma(int gamma) { VideoGamma = (float)gamma / 100.0f; } - +/// +/// Set Color Temperature adjustment. +/// +/// @param offset between -3500k and 3500k. +/// 100 represents no modification +/// +void VideoSetTemperature(int temp) +{ + VideoTemperature = (float)temp / 35.0f; +} /// /// Set TargetColorSpace. /// diff --git a/video.h b/video.h index d87eeb7..80b9587 100644 --- a/video.h +++ b/video.h @@ -116,6 +116,9 @@ extern void VideoSetSaturation(int); /// Set Gamma. extern void VideoSetGamma(int); +/// Set Color Temp. +extern void VideoSetTemperature(int); + /// Set ColorSpace. extern void VideoSetTargetColor(int);