/** =========================================================== * @file * * This file is a part of digiKam project * http://www.digikam.org * * @date 2006-12-09 * @brief Raw decoding settings * * @author Copyright (C) 2006-2013 by Gilles Caulier * caulier dot gilles at gmail dot com * @author Copyright (C) 2006-2013 by Marcel Wiesweg * marcel dot wiesweg at gmx dot de * @author Copyright (C) 2007-2008 by Guillaume Castagnino * casta at xwing dot info * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software Foundation; * either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * ============================================================ */ #define OPTIONFIXCOLORSHIGHLIGHTSENTRY "FixColorsHighlights" #define OPTIONDECODESIXTEENBITENTRY "SixteenBitsImage" #define OPTIONWHITEBALANCEENTRY "White Balance" #define OPTIONCUSTOMWHITEBALANCEENTRY "Custom White Balance" #define OPTIONCUSTOMWBGREENENTRY "Custom White Balance Green" #define OPTIONFOURCOLORRGBENTRY "Four Color RGB" #define OPTIONUNCLIPCOLORSENTRY "Unclip Color" // Wrong spelling, but do not fix it since it is a configuration key // krazy:cond=spelling #define OPTIONDONTSTRETCHPIXELSENTRY "Dont Stretch Pixels" // krazy:endcond=spelling #define OPTIONMEDIANFILTERPASSESENTRY "Median Filter Passes" #define OPTIONNOISEREDUCTIONTYPEENTRY "Noise Reduction Type" #define OPTIONNOISEREDUCTIONTHRESHOLDENTRY "Noise Reduction Threshold" #define OPTIONUSECACORRECTIONENTRY "EnableCACorrection" #define OPTIONCAREDMULTIPLIERENTRY "caRedMultiplier" #define OPTIONCABLUEMULTIPLIERENTRY "caBlueMultiplier" #define OPTIONAUTOBRIGHTNESSENTRY "AutoBrightness" #define OPTIONDECODINGQUALITYENTRY "Decoding Quality" #define OPTIONINPUTCOLORSPACEENTRY "Input Color Space" #define OPTIONOUTPUTCOLORSPACEENTRY "Output Color Space" #define OPTIONINPUTCOLORPROFILEENTRY "Input Color Profile" #define OPTIONOUTPUTCOLORPROFILEENTRY "Output Color Profile" #define OPTIONBRIGHTNESSMULTIPLIERENTRY "Brightness Multiplier" #define OPTIONUSEBLACKPOINTENTRY "Use Black Point" #define OPTIONBLACKPOINTENTRY "Black Point" #define OPTIONUSEWHITEPOINTENTRY "Use White Point" #define OPTIONWHITEPOINTENTRY "White Point" //-- Extended demosaicing settings ---------------------------------------------------------- #define OPTIONDCBITERATIONSENTRY "Dcb Iterations" #define OPTIONDCBENHANCEFLENTRY "Dcb Enhance Filter" #define OPTIONEECIREFINEENTRY "Eeci Refine" #define OPTIONESMEDPASSESENTRY "Es Median Filter Passes" #define OPTIONNRCHROMINANCETHRESHOLDENTRY "Noise Reduction Chrominance Threshold" #define OPTIONEXPOCORRECTIONENTRY "Expo Correction" #define OPTIONEXPOCORRECTIONSHIFTENTRY "Expo Correction Shift" #define OPTIONEXPOCORRECTIONHIGHLIGHTENTRY "Expo Correction Highlight" #include "rawdecodingsettings.h" namespace KDcrawIface { RawDecodingSettings::RawDecodingSettings() { fixColorsHighlights = false; autoBrightness = true; sixteenBitsImage = false; brightness = 1.0; RAWQuality = BILINEAR; inputColorSpace = NOINPUTCS; outputColorSpace = SRGB; RGBInterpolate4Colors = false; DontStretchPixels = false; unclipColors = 0; whiteBalance = CAMERA; customWhiteBalance = 6500; customWhiteBalanceGreen = 1.0; medianFilterPasses = 0; halfSizeColorImage = false; enableBlackPoint = false; blackPoint = 0; enableWhitePoint = false; whitePoint = 0; NRType = NONR; NRThreshold = 0; enableCACorrection = false; caMultiplier[0] = 0.0; caMultiplier[1] = 0.0; inputProfile = QString(); outputProfile = QString(); deadPixelMap = QString(); whiteBalanceArea = QRect(); //-- Extended demosaicing settings ---------------------------------------------------------- dcbIterations = -1; dcbEnhanceFl = false; eeciRefine = false; esMedPasses = 0; NRChroThreshold = 0; expoCorrection = false; expoCorrectionShift = 1.0; expoCorrectionHighlight = 0.0; } RawDecodingSettings::~RawDecodingSettings() { } RawDecodingSettings& RawDecodingSettings::operator=(const RawDecodingSettings& o) { fixColorsHighlights = o.fixColorsHighlights; autoBrightness = o.autoBrightness; sixteenBitsImage = o.sixteenBitsImage; brightness = o.brightness; RAWQuality = o.RAWQuality; inputColorSpace = o.inputColorSpace; outputColorSpace = o.outputColorSpace; RGBInterpolate4Colors = o.RGBInterpolate4Colors; DontStretchPixels = o.DontStretchPixels; unclipColors = o.unclipColors; whiteBalance = o.whiteBalance; customWhiteBalance = o.customWhiteBalance; customWhiteBalanceGreen = o.customWhiteBalanceGreen; halfSizeColorImage = o.halfSizeColorImage; enableBlackPoint = o.enableBlackPoint; blackPoint = o.blackPoint; enableWhitePoint = o.enableWhitePoint; whitePoint = o.whitePoint; NRType = o.NRType; NRThreshold = o.NRThreshold; enableCACorrection = o.enableCACorrection; caMultiplier[0] = o.caMultiplier[0]; caMultiplier[1] = o.caMultiplier[1]; medianFilterPasses = o.medianFilterPasses; inputProfile = o.inputProfile; outputProfile = o.outputProfile; deadPixelMap = o.deadPixelMap; whiteBalanceArea = o.whiteBalanceArea; //-- Extended demosaicing settings ---------------------------------------------------------- dcbIterations = o.dcbIterations; dcbEnhanceFl = o.dcbEnhanceFl; eeciRefine = o.eeciRefine; esMedPasses = o.esMedPasses; NRChroThreshold = o.NRChroThreshold; expoCorrection = o.expoCorrection; expoCorrectionShift = o.expoCorrectionShift; expoCorrectionHighlight = o.expoCorrectionHighlight; return *this; } bool RawDecodingSettings::operator==(const RawDecodingSettings& o) const { return fixColorsHighlights == o.fixColorsHighlights && autoBrightness == o.autoBrightness && sixteenBitsImage == o.sixteenBitsImage && brightness == o.brightness && RAWQuality == o.RAWQuality && inputColorSpace == o.inputColorSpace && outputColorSpace == o.outputColorSpace && RGBInterpolate4Colors == o.RGBInterpolate4Colors && DontStretchPixels == o.DontStretchPixels && unclipColors == o.unclipColors && whiteBalance == o.whiteBalance && customWhiteBalance == o.customWhiteBalance && customWhiteBalanceGreen == o.customWhiteBalanceGreen && halfSizeColorImage == o.halfSizeColorImage && enableBlackPoint == o.enableBlackPoint && blackPoint == o.blackPoint && enableWhitePoint == o.enableWhitePoint && whitePoint == o.whitePoint && NRType == o.NRType && NRThreshold == o.NRThreshold && enableCACorrection == o.enableCACorrection && caMultiplier[0] == o.caMultiplier[0] && caMultiplier[1] == o.caMultiplier[1] && medianFilterPasses == o.medianFilterPasses && inputProfile == o.inputProfile && outputProfile == o.outputProfile && deadPixelMap == o.deadPixelMap && whiteBalanceArea == o.whiteBalanceArea //-- Extended demosaicing settings ---------------------------------------------------------- && dcbIterations == o.dcbIterations && dcbEnhanceFl == o.dcbEnhanceFl && eeciRefine == o.eeciRefine && esMedPasses == o.esMedPasses && NRChroThreshold == o.NRChroThreshold && expoCorrection == o.expoCorrection && expoCorrectionShift == o.expoCorrectionShift && expoCorrectionHighlight == o.expoCorrectionHighlight ; } void RawDecodingSettings::optimizeTimeLoading() { fixColorsHighlights = false; autoBrightness = true; sixteenBitsImage = true; brightness = 1.0; RAWQuality = BILINEAR; inputColorSpace = NOINPUTCS; outputColorSpace = SRGB; RGBInterpolate4Colors = false; DontStretchPixels = false; unclipColors = 0; whiteBalance = CAMERA; customWhiteBalance = 6500; customWhiteBalanceGreen = 1.0; halfSizeColorImage = true; medianFilterPasses = 0; enableBlackPoint = false; blackPoint = 0; enableWhitePoint = false; whitePoint = 0; NRType = NONR; NRThreshold = 0; enableCACorrection = false; caMultiplier[0] = 0.0; caMultiplier[1] = 0.0; inputProfile = QString(); outputProfile = QString(); deadPixelMap = QString(); whiteBalanceArea = QRect(); //-- Extended demosaicing settings ---------------------------------------------------------- dcbIterations = -1; dcbEnhanceFl = false; eeciRefine = false; esMedPasses = 0; NRChroThreshold = 0; expoCorrection = false; expoCorrectionShift = 1.0; expoCorrectionHighlight = 0.0; } void RawDecodingSettings::readSettings(KConfigGroup& group) { RawDecodingSettings defaultPrm; fixColorsHighlights = group.readEntry(OPTIONFIXCOLORSHIGHLIGHTSENTRY, defaultPrm.fixColorsHighlights); sixteenBitsImage = group.readEntry(OPTIONDECODESIXTEENBITENTRY, defaultPrm.sixteenBitsImage); whiteBalance = (WhiteBalance) group.readEntry(OPTIONWHITEBALANCEENTRY, (int)defaultPrm.whiteBalance); customWhiteBalance = group.readEntry(OPTIONCUSTOMWHITEBALANCEENTRY, defaultPrm.customWhiteBalance); customWhiteBalanceGreen = group.readEntry(OPTIONCUSTOMWBGREENENTRY, defaultPrm.customWhiteBalanceGreen); RGBInterpolate4Colors = group.readEntry(OPTIONFOURCOLORRGBENTRY, defaultPrm.RGBInterpolate4Colors); unclipColors = group.readEntry(OPTIONUNCLIPCOLORSENTRY, defaultPrm.unclipColors); DontStretchPixels = group.readEntry(OPTIONDONTSTRETCHPIXELSENTRY, defaultPrm.DontStretchPixels); NRType = (NoiseReduction) group.readEntry(OPTIONNOISEREDUCTIONTYPEENTRY, (int)defaultPrm.NRType); brightness = group.readEntry(OPTIONBRIGHTNESSMULTIPLIERENTRY, defaultPrm.brightness); enableBlackPoint = group.readEntry(OPTIONUSEBLACKPOINTENTRY, defaultPrm.enableBlackPoint); blackPoint = group.readEntry(OPTIONBLACKPOINTENTRY, defaultPrm.blackPoint); enableWhitePoint = group.readEntry(OPTIONUSEWHITEPOINTENTRY, defaultPrm.enableWhitePoint); whitePoint = group.readEntry(OPTIONWHITEPOINTENTRY, defaultPrm.whitePoint); medianFilterPasses = group.readEntry(OPTIONMEDIANFILTERPASSESENTRY, defaultPrm.medianFilterPasses); NRThreshold = group.readEntry(OPTIONNOISEREDUCTIONTHRESHOLDENTRY, defaultPrm.NRThreshold); enableCACorrection = group.readEntry(OPTIONUSECACORRECTIONENTRY, defaultPrm.enableCACorrection); caMultiplier[0] = group.readEntry(OPTIONCAREDMULTIPLIERENTRY, defaultPrm.caMultiplier[0]); caMultiplier[1] = group.readEntry(OPTIONCABLUEMULTIPLIERENTRY, defaultPrm.caMultiplier[1]); RAWQuality = (DecodingQuality) group.readEntry(OPTIONDECODINGQUALITYENTRY, (int)defaultPrm.RAWQuality); outputColorSpace = (OutputColorSpace) group.readEntry(OPTIONOUTPUTCOLORSPACEENTRY, (int)defaultPrm.outputColorSpace); autoBrightness = group.readEntry(OPTIONAUTOBRIGHTNESSENTRY, defaultPrm.autoBrightness); //-- Extended demosaicing settings ---------------------------------------------------------- dcbIterations = group.readEntry(OPTIONDCBITERATIONSENTRY, defaultPrm.dcbIterations); dcbEnhanceFl = group.readEntry(OPTIONDCBENHANCEFLENTRY, defaultPrm.dcbEnhanceFl); eeciRefine = group.readEntry(OPTIONEECIREFINEENTRY, defaultPrm.eeciRefine); esMedPasses = group.readEntry(OPTIONESMEDPASSESENTRY, defaultPrm.esMedPasses); NRChroThreshold = group.readEntry(OPTIONNRCHROMINANCETHRESHOLDENTRY, defaultPrm.NRChroThreshold); expoCorrection = group.readEntry(OPTIONEXPOCORRECTIONENTRY, defaultPrm.expoCorrection); expoCorrectionShift = group.readEntry(OPTIONEXPOCORRECTIONSHIFTENTRY, defaultPrm.expoCorrectionShift); expoCorrectionHighlight = group.readEntry(OPTIONEXPOCORRECTIONHIGHLIGHTENTRY, defaultPrm.expoCorrectionHighlight); } void RawDecodingSettings::writeSettings(KConfigGroup& group) { group.writeEntry(OPTIONFIXCOLORSHIGHLIGHTSENTRY, fixColorsHighlights); group.writeEntry(OPTIONDECODESIXTEENBITENTRY, sixteenBitsImage); group.writeEntry(OPTIONWHITEBALANCEENTRY, (int)whiteBalance); group.writeEntry(OPTIONCUSTOMWHITEBALANCEENTRY, customWhiteBalance); group.writeEntry(OPTIONCUSTOMWBGREENENTRY, customWhiteBalanceGreen); group.writeEntry(OPTIONFOURCOLORRGBENTRY, RGBInterpolate4Colors); group.writeEntry(OPTIONUNCLIPCOLORSENTRY, unclipColors); group.writeEntry(OPTIONDONTSTRETCHPIXELSENTRY, DontStretchPixels); group.writeEntry(OPTIONNOISEREDUCTIONTYPEENTRY, (int)NRType); group.writeEntry(OPTIONBRIGHTNESSMULTIPLIERENTRY, brightness); group.writeEntry(OPTIONUSEBLACKPOINTENTRY, enableBlackPoint); group.writeEntry(OPTIONBLACKPOINTENTRY, blackPoint); group.writeEntry(OPTIONUSEWHITEPOINTENTRY, enableWhitePoint); group.writeEntry(OPTIONWHITEPOINTENTRY, whitePoint); group.writeEntry(OPTIONMEDIANFILTERPASSESENTRY, medianFilterPasses); group.writeEntry(OPTIONNOISEREDUCTIONTHRESHOLDENTRY, NRThreshold); group.writeEntry(OPTIONUSECACORRECTIONENTRY, enableCACorrection); group.writeEntry(OPTIONCAREDMULTIPLIERENTRY, caMultiplier[0]); group.writeEntry(OPTIONCABLUEMULTIPLIERENTRY, caMultiplier[1]); group.writeEntry(OPTIONDECODINGQUALITYENTRY, (int)RAWQuality); group.writeEntry(OPTIONOUTPUTCOLORSPACEENTRY, (int)outputColorSpace); group.writeEntry(OPTIONAUTOBRIGHTNESSENTRY, autoBrightness); //-- Extended demosaicing settings ---------------------------------------------------------- group.writeEntry(OPTIONDCBITERATIONSENTRY, dcbIterations); group.writeEntry(OPTIONDCBENHANCEFLENTRY, dcbEnhanceFl); group.writeEntry(OPTIONEECIREFINEENTRY, eeciRefine); group.writeEntry(OPTIONESMEDPASSESENTRY, esMedPasses); group.writeEntry(OPTIONNRCHROMINANCETHRESHOLDENTRY, NRChroThreshold); group.writeEntry(OPTIONEXPOCORRECTIONENTRY, expoCorrection); group.writeEntry(OPTIONEXPOCORRECTIONSHIFTENTRY, expoCorrectionShift); group.writeEntry(OPTIONEXPOCORRECTIONHIGHLIGHTENTRY, expoCorrectionHighlight); } QDebug operator<<(QDebug dbg, const RawDecodingSettings& s) { dbg.nospace() << endl; dbg.nospace() << "-- RAW DECODING SETTINGS --------------------------------" << endl; dbg.nospace() << "-- autoBrightness: " << s.autoBrightness << endl; dbg.nospace() << "-- sixteenBitsImage: " << s.sixteenBitsImage << endl; dbg.nospace() << "-- brightness: " << s.brightness << endl; dbg.nospace() << "-- RAWQuality: " << s.RAWQuality << endl; dbg.nospace() << "-- inputColorSpace: " << s.inputColorSpace << endl; dbg.nospace() << "-- outputColorSpace: " << s.outputColorSpace << endl; dbg.nospace() << "-- RGBInterpolate4Colors: " << s.RGBInterpolate4Colors << endl; dbg.nospace() << "-- DontStretchPixels: " << s.DontStretchPixels << endl; dbg.nospace() << "-- unclipColors: " << s.unclipColors << endl; dbg.nospace() << "-- whiteBalance: " << s.whiteBalance << endl; dbg.nospace() << "-- customWhiteBalance: " << s.customWhiteBalance << endl; dbg.nospace() << "-- customWhiteBalanceGreen: " << s.customWhiteBalanceGreen << endl; dbg.nospace() << "-- halfSizeColorImage: " << s.halfSizeColorImage << endl; dbg.nospace() << "-- enableBlackPoint: " << s.enableBlackPoint << endl; dbg.nospace() << "-- blackPoint: " << s.blackPoint << endl; dbg.nospace() << "-- enableWhitePoint: " << s.enableWhitePoint << endl; dbg.nospace() << "-- whitePoint: " << s.whitePoint << endl; dbg.nospace() << "-- NoiseReductionType: " << s.NRType << endl; dbg.nospace() << "-- NoiseReductionThreshold: " << s.NRThreshold << endl; dbg.nospace() << "-- enableCACorrection: " << s.enableCACorrection << endl; dbg.nospace() << "-- caMultiplier: " << s.caMultiplier[0] << ", " << s.caMultiplier[1] << endl; dbg.nospace() << "-- medianFilterPasses: " << s.medianFilterPasses << endl; dbg.nospace() << "-- inputProfile: " << s.inputProfile << endl; dbg.nospace() << "-- outputProfile: " << s.outputProfile << endl; dbg.nospace() << "-- deadPixelMap: " << s.deadPixelMap << endl; dbg.nospace() << "-- whiteBalanceArea: " << s.whiteBalanceArea << endl; //-- Extended demosaicing settings ---------------------------------------------------------- dbg.nospace() << "-- dcbIterations: " << s.dcbIterations << endl; dbg.nospace() << "-- dcbEnhanceFl: " << s.dcbEnhanceFl << endl; dbg.nospace() << "-- eeciRefine: " << s.eeciRefine << endl; dbg.nospace() << "-- esMedPasses: " << s.esMedPasses << endl; dbg.nospace() << "-- NRChrominanceThreshold: " << s.NRChroThreshold << endl; dbg.nospace() << "-- expoCorrection: " << s.expoCorrection << endl; dbg.nospace() << "-- expoCorrectionShift: " << s.expoCorrectionShift << endl; dbg.nospace() << "-- expoCorrectionHighlight: " << s.expoCorrectionHighlight << endl; dbg.nospace() << "---------------------------------------------------------" << endl; return dbg.space(); } } // namespace KDcrawIface