TuttleOFX
1
|
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 ¶mName ) 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 }