TuttleOFX
1
|
00001 00002 #include "ColorSpacePlugin.hpp" 00003 #include "ColorSpaceProcess.hpp" 00004 #include "ColorSpaceDefinitions.hpp" 00005 00006 #include <boost/gil/gil_all.hpp> 00007 00008 namespace tuttle { 00009 namespace plugin { 00010 namespace colorspace { 00011 00012 using namespace boost::gil; 00013 00014 ColorSpacePlugin::ColorSpacePlugin( OfxImageEffectHandle handle ) 00015 : ImageEffectGilPlugin( handle ) 00016 { 00017 _paramInGradationLaw = fetchChoiceParam( kColorSpaceGradationLawIn ); 00018 _paramOutGradationLaw = fetchChoiceParam( kColorSpaceGradationLawOut ); 00019 _paramInGamma = fetchDoubleParam( kColorSpaceInGammaValue ); 00020 _paramOutGamma = fetchDoubleParam( kColorSpaceOutGammaValue ); 00021 _paramInBlackPoint = fetchDoubleParam( kColorSpaceInBlackPoint ); 00022 _paramOutBlackPoint = fetchDoubleParam( kColorSpaceOutBlackPoint ); 00023 _paramInWhitePoint = fetchDoubleParam( kColorSpaceInWhitePoint ); 00024 _paramOutWhitePoint = fetchDoubleParam( kColorSpaceOutWhitePoint ); 00025 _paramInGammaSensito = fetchDoubleParam( kColorSpaceInGammaSensito ); 00026 _paramOutGammaSensito = fetchDoubleParam( kColorSpaceOutGammaSensito ); 00027 00028 _paramInLayout = fetchChoiceParam( kColorSpaceLayoutIn ); 00029 _paramOutLayout = fetchChoiceParam( kColorSpaceLayoutOut ); 00030 _paramInColorTemp = fetchChoiceParam( kColorSpaceTempColorIn ); 00031 _paramOutColorTemp = fetchChoiceParam( kColorSpaceTempColorOut ); 00032 00033 updateInParams( ); 00034 updateOutParams( ); 00035 } 00036 00037 void ColorSpacePlugin::updateInParams( ) 00038 { 00039 _paramInGamma -> setIsSecretAndDisabled( true ); 00040 _paramInBlackPoint -> setIsSecretAndDisabled( true ); 00041 _paramInWhitePoint -> setIsSecretAndDisabled( true ); 00042 _paramInGammaSensito -> setIsSecretAndDisabled( true ); 00043 00044 switch( _paramInGradationLaw->getValue( ) ) 00045 { 00046 case ttlc::eParamGamma: 00047 _paramInGamma -> setIsSecretAndDisabled( false ); 00048 break; 00049 case ttlc::eParamCineon: 00050 _paramInBlackPoint -> setIsSecretAndDisabled( false ); 00051 _paramInWhitePoint -> setIsSecretAndDisabled( false ); 00052 _paramInGammaSensito -> setIsSecretAndDisabled( false ); 00053 break; 00054 default: 00055 break; 00056 } 00057 } 00058 00059 void ColorSpacePlugin::updateOutParams( ) 00060 { 00061 _paramOutGamma->setIsSecretAndDisabled( true ); 00062 _paramOutBlackPoint->setIsSecretAndDisabled( true ); 00063 _paramOutWhitePoint->setIsSecretAndDisabled( true ); 00064 _paramOutGammaSensito->setIsSecretAndDisabled( true ); 00065 00066 switch( _paramOutGradationLaw -> getValue( ) ) 00067 { 00068 case ttlc::eParamGamma: 00069 _paramOutGamma->setIsSecretAndDisabled( false ); 00070 break; 00071 case ttlc::eParamCineon: 00072 _paramOutBlackPoint->setIsSecretAndDisabled( false ); 00073 _paramOutWhitePoint->setIsSecretAndDisabled( false ); 00074 _paramOutGammaSensito->setIsSecretAndDisabled( false ); 00075 break; 00076 default: 00077 break; 00078 } 00079 } 00080 00081 ColorSpaceProcessParams ColorSpacePlugin::getProcessParams( ) const 00082 { 00083 using namespace tuttle::plugin::color; 00084 ColorSpaceProcessParams params; 00085 00086 params._gradationIn = static_cast < EParamGradationLaw > ( _paramInGradationLaw->getValue( ) ); 00087 00088 if( params._gradationIn == ttlc::eParamGamma ) 00089 { 00090 params._sGammaIn.value = _paramInGamma -> getValue( ); 00091 } 00092 00093 if( params._gradationIn == ttlc::eParamCineon ) 00094 { 00095 params._sCineonIn.blackPoint = _paramInBlackPoint -> getValue( ); 00096 params._sCineonIn.whitePoint = _paramInWhitePoint -> getValue( ); 00097 params._sCineonIn.gammaSensito = _paramInGammaSensito -> getValue( ); 00098 } 00099 00100 params._gradationOut = static_cast < EParamGradationLaw > ( _paramOutGradationLaw->getValue( ) ); 00101 00102 if( params._gradationOut == ttlc::eParamGamma ) 00103 { 00104 params._sGammaOut.value = _paramOutGamma -> getValue( ); 00105 } 00106 00107 if( params._gradationOut == ttlc::eParamCineon ) 00108 { 00109 params._sCineonOut.blackPoint = _paramOutBlackPoint -> getValue( ); 00110 params._sCineonOut.whitePoint = _paramOutWhitePoint -> getValue( ); 00111 params._sCineonOut.gammaSensito = _paramOutGammaSensito -> getValue( ); 00112 } 00113 00114 params._layoutIn = static_cast<EParamLayout>( _paramInLayout->getValue( ) ); 00115 params._layoutOut = static_cast<EParamLayout>( _paramOutLayout->getValue( ) ); 00116 00117 params._tempColorIn = static_cast<EColorTemperature>( _paramInColorTemp->getValue( ) ); 00118 params._tempColorOut = static_cast<EColorTemperature>( _paramOutColorTemp->getValue( ) ); 00119 00120 return params; 00121 } 00122 00123 bool ColorSpacePlugin::isIdentity( const OFX::RenderArguments& args, OFX::Clip*& identityClip, double& identityTime ) 00124 { 00125 /* 00126 ColorSpaceProcessParams params = getProcessParams(); 00127 if( 00128 params._BlackPointIn == params._BlackPointOut && 00129 params._GammaSensitoIn == params._GammaSensitoOut && 00130 params._GammaValueIn == params._GammaValueOut && 00131 params._WhitePointIn == params._WhitePointOut && 00132 params._gradationIn == params._gradationOut && 00133 params._layoutIn == params._layoutOut && 00134 params._tempColorIn == params._tempColorOut 00135 ) 00136 { 00137 identityClip = _clipSrc; 00138 identityTime = args.time; 00139 return true; 00140 }*/ 00141 return false; 00142 } 00143 00144 /** 00145 * @brief The overridden render function 00146 * @param[in] args Rendering parameters 00147 */ 00148 void ColorSpacePlugin::render( const OFX::RenderArguments& args ) 00149 { 00150 doGilRender<ColorSpaceProcess > ( *this, args ); 00151 } 00152 00153 void ColorSpacePlugin::changedParam( const OFX::InstanceChangedArgs& args, const std::string& paramName ) 00154 { 00155 if( paramName == kColorSpaceGradationLawIn ) 00156 { 00157 updateInParams( ); 00158 } 00159 else if( paramName == kColorSpaceGradationLawOut ) 00160 { 00161 updateOutParams( ); 00162 } 00163 } 00164 00165 } 00166 } 00167 }