TuttleOFX
1
|
00001 #include "ColorGradationPlugin.hpp" 00002 #include "ColorGradationProcess.hpp" 00003 #include "ColorGradationDefinitions.hpp" 00004 00005 #include <boost/gil/gil_all.hpp> 00006 00007 namespace tuttle { 00008 namespace plugin { 00009 namespace colorGradation { 00010 00011 ColorGradationPlugin::ColorGradationPlugin( OfxImageEffectHandle handle ) 00012 : ImageEffectGilPlugin( handle ) 00013 { 00014 _paramIn = fetchChoiceParam( kParamIn ); 00015 _paramOut = fetchChoiceParam( kParamOut ); 00016 00017 _paramInGamma = fetchDoubleParam( kColorSpaceInGammaValue ); 00018 _paramOutGamma = fetchDoubleParam( kColorSpaceOutGammaValue ); 00019 _paramInBlackPoint = fetchDoubleParam( kColorSpaceInBlackPoint ); 00020 _paramOutBlackPoint = fetchDoubleParam( kColorSpaceOutBlackPoint ); 00021 _paramInWhitePoint = fetchDoubleParam( kColorSpaceInWhitePoint ); 00022 _paramOutWhitePoint = fetchDoubleParam( kColorSpaceOutWhitePoint ); 00023 _paramInGammaSensito = fetchDoubleParam( kColorSpaceInGammaSensito ); 00024 _paramOutGammaSensito = fetchDoubleParam( kColorSpaceOutGammaSensito ); 00025 00026 _paramProcessAlpha = fetchBooleanParam( kParamProcessAlpha ); 00027 updateParameters(); 00028 } 00029 00030 ColorGradationProcessParams<ColorGradationPlugin::Scalar> ColorGradationPlugin::getProcessParams( const OfxPointD& renderScale ) const 00031 { 00032 ColorGradationProcessParams<Scalar> params; 00033 params._in = static_cast<EParamGradation>( _paramIn->getValue() ); 00034 params._out = static_cast<EParamGradation>( _paramOut->getValue() ); 00035 00036 params._GammaValueIn = _paramInGamma ->getValue(); 00037 params._BlackPointIn = _paramInBlackPoint ->getValue(); 00038 params._WhitePointIn = _paramInWhitePoint ->getValue(); 00039 params._GammaSensitoIn = _paramInGammaSensito ->getValue(); 00040 00041 params._GammaValueOut = _paramOutGamma ->getValue(); 00042 params._BlackPointOut = _paramOutBlackPoint ->getValue(); 00043 params._WhitePointOut = _paramOutWhitePoint ->getValue(); 00044 params._GammaSensitoOut = _paramOutGammaSensito ->getValue(); 00045 00046 params._processAlpha = _paramProcessAlpha ->getValue(); 00047 return params; 00048 } 00049 00050 void ColorGradationPlugin::updateParameters() 00051 { 00052 _paramInGamma ->setIsSecretAndDisabled( true ); 00053 _paramInBlackPoint ->setIsSecretAndDisabled( true ); 00054 _paramInWhitePoint ->setIsSecretAndDisabled( true ); 00055 _paramInGammaSensito ->setIsSecretAndDisabled( true ); 00056 _paramOutGamma ->setIsSecretAndDisabled( true ); 00057 _paramOutBlackPoint ->setIsSecretAndDisabled( true ); 00058 _paramOutWhitePoint ->setIsSecretAndDisabled( true ); 00059 _paramOutGammaSensito->setIsSecretAndDisabled( true ); 00060 switch( (EParamGradation)_paramIn->getValue( ) ) 00061 { 00062 case eParamGradation_gamma: // gamma 00063 _paramInGamma->setIsSecretAndDisabled( false ); 00064 break; 00065 case eParamGradation_cineon: // cineon 00066 _paramInBlackPoint->setIsSecretAndDisabled ( false ); 00067 _paramInWhitePoint->setIsSecretAndDisabled ( false ); 00068 _paramInGammaSensito->setIsSecretAndDisabled( false ); 00069 break; 00070 default: 00071 break; 00072 } 00073 switch( (EParamGradation)_paramOut->getValue( ) ) 00074 { 00075 case eParamGradation_gamma: // gamma 00076 _paramOutGamma->setIsSecretAndDisabled( false ); 00077 break; 00078 case eParamGradation_cineon: // cineon 00079 _paramOutBlackPoint->setIsSecretAndDisabled ( false ); 00080 _paramOutWhitePoint->setIsSecretAndDisabled ( false ); 00081 _paramOutGammaSensito->setIsSecretAndDisabled( false ); 00082 break; 00083 default: 00084 break; 00085 } 00086 } 00087 00088 void ColorGradationPlugin::changedParam( const OFX::InstanceChangedArgs& args, const std::string& paramName ) 00089 { 00090 if( paramName == kParamInvert ) 00091 { 00092 int in = _paramIn->getValue(); 00093 _paramIn->setValue ( _paramOut->getValue() ); 00094 _paramOut->setValue( in ); 00095 } 00096 updateParameters(); 00097 } 00098 00099 bool ColorGradationPlugin::isIdentity( const OFX::RenderArguments& args, OFX::Clip*& identityClip, double& identityTime ) 00100 { 00101 /* 00102 ColorGradationProcessParams<Scalar> params = getProcessParams(); 00103 if( params._in == params._out ) 00104 { 00105 if( ( params._in == 2 ) && 00106 ( params._GammaValueIn != params._GammaValueOut ) ) 00107 return false; 00108 if( ( params._in == 3 ) && 00109 ( params._BlackPointIn != params._BlackPointOut ) && 00110 ( params._WhitePointIn != params._WhitePointOut ) && 00111 ( params._GammaSensitoIn != params._GammaSensitoOut ) ) 00112 return false; 00113 identityClip = _clipSrc; 00114 identityTime = args.time; 00115 return true; 00116 } 00117 */ 00118 return false; // by default, we are not an identity operation 00119 } 00120 00121 /** 00122 * @brief The overridden render function 00123 * @param[in] args Rendering parameters 00124 */ 00125 void ColorGradationPlugin::render( const OFX::RenderArguments& args ) 00126 { 00127 doGilRender<ColorGradationProcess>( *this, args ); 00128 } 00129 00130 } 00131 } 00132 }