TuttleOFX  1
ComponentPlugin.cpp
Go to the documentation of this file.
00001 #include "ComponentPlugin.hpp"
00002 #include "ComponentProcess.hpp"
00003 #include "ComponentDefinitions.hpp"
00004 
00005 #include <boost/gil/gil_all.hpp>
00006 
00007 namespace tuttle {
00008 namespace plugin {
00009 namespace component {
00010 
00011 
00012 ComponentPlugin::ComponentPlugin( OfxImageEffectHandle handle )
00013 : ImageEffectGilPlugin( handle )
00014 {
00015 //    _clipSrcMatte = fetchClip( kClipMatte );
00016         _paramToComponent   = fetchChoiceParam( kParamTo );
00017         _paramToGrayMethod  = fetchChoiceParam( kParamToGray );
00018         _paramPremultiplied = fetchBooleanParam( kParamPremutliplied );
00019 }
00020 
00021 void ComponentPlugin::changedParam( const OFX::InstanceChangedArgs &args, const std::string &paramName )
00022 {
00023 }
00024 
00025 //bool ComponentPlugin::getRegionOfDefinition( const OFX::RegionOfDefinitionArguments& args, OfxRectD& rod )
00026 //{
00027 //      ComponentProcessParams<Scalar> params = getProcessParams();
00028 //      OfxRectD srcRod = _clipSrc->getCanonicalRod( args.time );
00029 //
00030 //      switch( params._border )
00031 //      {
00032 //              case eParamBorderPadded:
00033 //                      rod.x1 = srcRod.x1 + 1;
00034 //                      rod.y1 = srcRod.y1 + 1;
00035 //                      rod.x2 = srcRod.x2 - 1;
00036 //                      rod.y2 = srcRod.y2 - 1;
00037 //                      return true;
00038 //              default:
00039 //                      break;
00040 //      }
00041 //      return false;
00042 //}
00043 //
00044 //void ComponentPlugin::getRegionsOfInterest( const OFX::RegionsOfInterestArguments& args, OFX::RegionOfInterestSetter& rois )
00045 //{
00046 //      ComponentProcessParams<Scalar> params = getProcessParams();
00047 //      OfxRectD srcRod = _clipSrc->getCanonicalRod( args.time );
00048 //
00049 //      OfxRectD srcRoi;
00050 //      srcRoi.x1 = srcRod.x1 - 1;
00051 //      srcRoi.y1 = srcRod.y1 - 1;
00052 //      srcRoi.x2 = srcRod.x2 + 1;
00053 //      srcRoi.y2 = srcRod.y2 + 1;
00054 //      rois.setRegionOfInterest( *_clipSrc, srcRoi );
00055 //}
00056 
00057 bool ComponentPlugin::isIdentity( const OFX::RenderArguments& args, OFX::Clip*& identityClip, double& identityTime )
00058 {
00059 //      ComponentProcessParams<Scalar> params = getProcessParams();
00060 //      if( params._in == params._out )
00061 //      {
00062 //              identityClip = _clipSrc;
00063 //              identityTime = args.time;
00064 //              return true;
00065 //      }
00066         return false;
00067 }
00068 
00069 void ComponentPlugin::getClipPreferences( OFX::ClipPreferencesSetter& clipPreferences )
00070 {
00071         switch( _paramToComponent->getValue() )
00072         {
00073                 case eConvertToGray:
00074                         clipPreferences.setClipComponents( *this->_clipDst, OFX::ePixelComponentAlpha );
00075                         break;
00076                 case eConvertToRGB:
00077                         clipPreferences.setClipComponents( *this->_clipDst, OFX::ePixelComponentRGB );
00078                         break;
00079                 case eConvertToRGBA:
00080                         clipPreferences.setClipComponents( *this->_clipDst, OFX::ePixelComponentRGBA );
00081                         break;
00082         }
00083 }
00084 /*
00085 template< typename dstComponents >
00086 void ComponentPlugin::renderWithDstComponent( const OFX::RenderArguments &args, OFX::EPixelComponent srcComponents, OFX::EBitDepth bitDepth )
00087 {
00088         using namespace boost::gil;
00089         switch( srcComponents )
00090         {
00091                 case OFX::ePixelComponentRGBA:
00092                 {
00093                         doGilRender<ComponentProcess, false, rgba_layout_t>( *this, args, bitDepth );
00094                         return;
00095                 }
00096                 case OFX::ePixelComponentRGB:
00097                 {
00098                         doGilRender<ComponentProcess, false, rgb_layout_t>( *this, args, bitDepth );
00099                         return;
00100                 }
00101                 case OFX::ePixelComponentAlpha:
00102                 {
00103                         doGilRender<ComponentProcess, false, gray_layout_t>( *this, args, bitDepth );
00104                         return;
00105                 }
00106                 case OFX::ePixelComponentCustom:
00107                 case OFX::ePixelComponentNone:
00108                 {
00109                         BOOST_THROW_EXCEPTION( exception::Unsupported()
00110                                 << exception::user() + "Pixel components (" + mapPixelComponentEnumToString(srcComponents) + ") not supported by the plugin." );
00111                 }
00112         }
00113 }*/
00114 
00115 /**
00116  * @brief The overridden render function
00117  * @param[in]   args     Rendering parameters
00118  */
00119 void ComponentPlugin::render( const OFX::RenderArguments &args )
00120 {
00121         //doGilRender<ComponentProcess>( *this, args );
00122         // instantiate the render code based on the pixel depth of the dst clip
00123         /*OFX::EBitDepth bitDepth            = _clipDst->getPixelDepth();
00124         OFX::EPixelComponent dstComponents = _clipDst->getPixelComponents();
00125         OFX::EPixelComponent srcComponents = _clipSrc->getPixelComponents();*/
00126 
00127 //      TUTTLE_LOG_INFO( _clipSrc->getPixelComponents() << " $$ " << _clipDst->getPixelComponents() );
00128         
00129         doGilRender2<ComponentProcess>( *this, args, *_clipSrc, *_clipDst );
00130         /*
00131         switch( dstComponents )
00132         {
00133                 case OFX::ePixelComponentRGBA:
00134                 {
00135                         renderWithDstComponent<rgba_layout_t>( args, srcComponents, bitDepth );
00136                         return;
00137                 }
00138                 case OFX::ePixelComponentRGB:
00139                 {
00140                         renderWithDstComponent<rgb_layout_t>( args, srcComponents, bitDepth );
00141                         return;
00142                 }
00143                 case OFX::ePixelComponentAlpha:
00144                 {
00145                         renderWithDstComponent<gray_layout_t>( args, srcComponents, bitDepth );
00146                         return;
00147                 }
00148                 case OFX::ePixelComponentCustom:
00149                 case OFX::ePixelComponentNone:
00150                 {
00151                         BOOST_THROW_EXCEPTION( exception::Unsupported()
00152                                 << exception::user() + "Pixel components (" + mapPixelComponentEnumToString(dstComponents) + ") not supported by the plugin." );
00153                 }
00154         }
00155         BOOST_THROW_EXCEPTION( exception::Unknown() );*/
00156 }
00157 
00158 
00159 }
00160 }
00161 }