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