ImageFilterProcessor(OFX::ImageEffect& effect, const EImageOrientation imageOrientation) : ImageProcessor(effect, imageOrientation) { _clipSrc = effect.fetchClip(kOfxImageEffectSimpleSourceClipName); if(!_clipSrc->isConnected()) BOOST_THROW_EXCEPTION(exception::ImageNotConnected()); }
/* set up and run a processor */ void InvertPlugin::setupAndProcess(InvertBase &processor, const OFX::RenderArguments &args) { // get a dst image std::auto_ptr<OFX::Image> dst(dstClip_->fetchImage(args.time)); if (!dst.get()) { OFX::throwSuiteStatusException(kOfxStatFailed); } OFX::BitDepthEnum dstBitDepth = dst->getPixelDepth(); OFX::PixelComponentEnum dstComponents = dst->getPixelComponents(); // fetch main input image std::auto_ptr<OFX::Image> src(srcClip_->fetchImage(args.time)); // make sure bit depths are sane if (src.get()) { OFX::BitDepthEnum srcBitDepth = src->getPixelDepth(); OFX::PixelComponentEnum srcComponents = src->getPixelComponents(); // see if they have the same depths and bytes and all if (srcBitDepth != dstBitDepth || srcComponents != dstComponents) { OFX::throwSuiteStatusException(kOfxStatErrImageFormat); } } // auto ptr for the mask. std::auto_ptr<OFX::Image> mask((getContext() != OFX::eContextFilter) ? maskClip_->fetchImage(args.time) : 0); // do we do masking if (getContext() != OFX::eContextFilter && maskClip_->isConnected()) { // say we are masking processor.doMasking(true); // Set it in the processor processor.setMaskImg(mask.get()); } bool red, green, blue, alpha; _paramProcessR->getValueAtTime(args.time, red); _paramProcessG->getValueAtTime(args.time, green); _paramProcessB->getValueAtTime(args.time, blue); _paramProcessA->getValueAtTime(args.time, alpha); double mix; _mix->getValueAtTime(args.time, mix); bool maskInvert; _maskInvert->getValueAtTime(args.time, maskInvert); processor.setValues(red, green, blue, alpha, mix, maskInvert); // set the images processor.setDstImg(dst.get()); processor.setSrcImg(src.get()); // set the render window processor.setRenderWindow(args.renderWindow); // Call the base class process member, this will call the derived templated process code processor.process(); }