TuttleOFX  1
ColorGradationPlugin.cpp
Go to the documentation of this file.
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 }