// overridden is identity bool SwitchPlugin::isIdentity(const OFX::RenderArguments &args, OFX::Clip * &identityClip, double &identityTime) { int input; which_->getValueAtTime(args.time, input); identityClip = srcClip_[input]; return true; }
// overridden getTransform bool SwitchPlugin::getTransform(const OFX::TransformArguments &args, OFX::Clip * &transformClip, double transformMatrix[9]) { int input; which_->getValueAtTime(args.time, input); transformClip = srcClip_[input]; transformMatrix[0] = 1.; transformMatrix[1] = 0.; transformMatrix[2] = 0.; transformMatrix[3] = 0.; transformMatrix[4] = 1.; transformMatrix[5] = 0.; transformMatrix[6] = 0.; transformMatrix[7] = 0.; transformMatrix[8] = 1.; return true; }
/* set up and run a processor */ void AnaglyphPlugin::setupAndProcess(AnaglyphBase &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); } if (dst->getRenderScale().x != args.renderScale.x || dst->getRenderScale().y != args.renderScale.y || dst->getField() != args.fieldToRender) { setPersistentMessage(OFX::Message::eMessageError, "", "OFX Host gave image with wrong scale or field properties"); OFX::throwSuiteStatusException(kOfxStatFailed); } OFX::BitDepthEnum dstBitDepth = dst->getPixelDepth(); OFX::PixelComponentEnum dstComponents = dst->getPixelComponents(); // fetch main input image std::auto_ptr<OFX::Image> srcLeft(srcClip_->fetchStereoscopicImage(args.time,0)); if (srcLeft.get()) { if (srcLeft->getRenderScale().x != args.renderScale.x || srcLeft->getRenderScale().y != args.renderScale.y || srcLeft->getField() != args.fieldToRender) { setPersistentMessage(OFX::Message::eMessageError, "", "OFX Host gave image with wrong scale or field properties"); OFX::throwSuiteStatusException(kOfxStatFailed); } } std::auto_ptr<OFX::Image> srcRight(srcClip_->fetchStereoscopicImage(args.time,1)); if (srcRight.get()) { if (srcRight->getRenderScale().x != args.renderScale.x || srcRight->getRenderScale().y != args.renderScale.y || srcRight->getField() != args.fieldToRender) { setPersistentMessage(OFX::Message::eMessageError, "", "OFX Host gave image with wrong scale or field properties"); OFX::throwSuiteStatusException(kOfxStatFailed); } } // make sure bit depths are sane if (srcLeft.get()) { OFX::BitDepthEnum srcBitDepth = srcLeft->getPixelDepth(); OFX::PixelComponentEnum srcComponents = srcLeft->getPixelComponents(); // see if they have the same depths and bytes and all if (srcBitDepth != dstBitDepth || srcComponents != dstComponents) OFX::throwSuiteStatusException(kOfxStatErrImageFormat); } if (srcRight.get()) { OFX::BitDepthEnum srcBitDepth = srcRight->getPixelDepth(); OFX::PixelComponentEnum srcComponents = srcRight->getPixelComponents(); // see if they have the same depths and bytes and all if (srcBitDepth != dstBitDepth || srcComponents != dstComponents) OFX::throwSuiteStatusException(kOfxStatErrImageFormat); } double amtcolour = amtcolour_->getValueAtTime(args.time); bool swap = swap_->getValueAtTime(args.time); int offset = offset_->getValueAtTime(args.time); // set the images processor.setDstImg(dst.get()); processor.setSrcLeftImg(srcLeft.get()); processor.setSrcRightImg(srcRight.get()); // set the render window processor.setRenderWindow(args.renderWindow); // set the parameters processor.setAmtColour(amtcolour); processor.setSwap(swap); processor.setOffset(offset); // Call the base class process member, this will call the derived templated process code processor.process(); }