/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void OpenImageIOWriterPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentRGB ); srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClip->setSupportsTiles( kSupportTiles ); OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); // Controls OFX::StringParamDescriptor* filename = desc.defineStringParam( kParamWriterFilename ); filename->setLabel( "Filename" ); filename->setStringType( OFX::eStringTypeFilePath ); filename->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); desc.addClipPreferencesSlaveParam( *filename ); OFX::ChoiceParamDescriptor* components = desc.defineChoiceParam( kParamOutputComponents ); components->setLabel( "Components" ); components->appendOption( kParamOutputComponentsRGBA ); components->appendOption( kParamOutputComponentsRGB ); components->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); components->setDefault( 0 ); OFX::ChoiceParamDescriptor* bitDepth = desc.defineChoiceParam( kParamWriterBitDepth ); bitDepth->setLabel( "Bit depth" ); bitDepth->appendOption( kTuttlePluginBitDepth8 ); bitDepth->appendOption( kTuttlePluginBitDepth16 ); bitDepth->appendOption( kTuttlePluginBitDepth32f ); bitDepth->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); bitDepth->setDefault( 1 ); OFX::PushButtonParamDescriptor* render = desc.definePushButtonParam( kParamWriterRender ); render->setLabels( "Render", "Render", "Render step" ); render->setHint( "Force render (writing)" ); OFX::BooleanParamDescriptor* renderAlways = desc.defineBooleanParam( kParamWriterRenderAlways ); renderAlways->setLabel( "Render always" ); renderAlways->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); renderAlways->setDefault( false ); OFX::IntParamDescriptor* forceNewRender = desc.defineIntParam( kParamWriterForceNewRender ); forceNewRender->setLabel( "Force new render" ); forceNewRender->setIsSecret( true ); forceNewRender->setIsPersistant( false ); forceNewRender->setAnimates( false ); forceNewRender->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); forceNewRender->setEvaluateOnChange( true ); forceNewRender->setDefault( 0 ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void SeExprPluginFactory::describeInContext(OFX::ImageEffectDescriptor& desc, OFX::EContext context) { describeGeneratorParamsInContext(desc, context); OFX::ChoiceParamDescriptor* chooseInput = desc.defineChoiceParam(kParamChooseInput); chooseInput->appendOption(kParamChooseInputCode); chooseInput->appendOption(kParamChooseInputFile); chooseInput->setDefault(eParamChooseInputCode); OFX::StringParamDescriptor* code = desc.defineStringParam(kParamSeExprCode); code->setLabel("SeExpr code"); code->setHint("Write your SeExpr code."); code->setStringType(OFX::eStringTypeMultiLine); code->setDefault("cfbm([10*u,10*v,.5])"); OFX::StringParamDescriptor* file = desc.defineStringParam(kTuttlePluginFilename); file->setLabel(kTuttlePluginFilenameLabel); file->setHint("SeExpr source code file."); file->setStringType(OFX::eStringTypeFilePath); OFX::Double2DParamDescriptor* textureOffset = desc.defineDouble2DParam(kParamTextureOffset); textureOffset->setLabel("Texture Offset (u, v)"); textureOffset->setHint("Set the u,v offset texture parameters."); textureOffset->setDisplayRange(-100, -100, 100, 100); textureOffset->setDefault(0.0, 0.0); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void TurboJpegReaderPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); describeReaderParamsInContext( desc, context ); OFX::ChoiceParamDescriptor* optimization = desc.defineChoiceParam( kParamOptimization ); optimization->setLabel( kParamOptimizationLabel ); optimization->setHint( kParamOptimizationHint ); optimization->appendOption( kTurboJpegOptimizationNone ); optimization->appendOption( kTurboJpegOptimizationMMX ); optimization->appendOption( kTurboJpegOptimizationSSE ); optimization->appendOption( kTurboJpegOptimizationSSE2 ); optimization->appendOption( kTurboJpegOptimizationSSE3 ); optimization->setDefault( eTurboJpegOptimizationSSE3 ); OFX::BooleanParamDescriptor* fastupsampling = desc.defineBooleanParam( kParamFastUpsampling ); fastupsampling->setLabel( kParamFastUpsamplingLabel ); fastupsampling->setHint( kParamFastUpsamplingHint ); fastupsampling->setDefault( false ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void LocalMaximaPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentRGB ); srcClip->setSupportsTiles( kSupportTiles ); OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); OFX::ChoiceParamDescriptor* border = desc.defineChoiceParam( kParamBorder ); border->setLabel( "Border" ); // border->setHint( "Border method." ); border->appendOption( kParamBorderBlack ); // border->appendOption( kParamBorderPadded ); border->setDefault( 0 ); OFX::ChoiceParamDescriptor* outputComponent = desc.defineChoiceParam( kParamOutputComponent ); outputComponent->setLabel( "Output component" ); outputComponent->appendOption( OFX::getImageEffectHostDescription()->supportsPixelComponent(OFX::ePixelComponentRGBA) ? kParamOutputComponentRGBA : "---" ); outputComponent->appendOption( OFX::getImageEffectHostDescription()->supportsPixelComponent(OFX::ePixelComponentRGB) ? kParamOutputComponentRGB : "---" ); outputComponent->appendOption( OFX::getImageEffectHostDescription()->supportsPixelComponent(OFX::ePixelComponentAlpha) ? kParamOutputComponentAlpha : "---" ); outputComponent->setIsSecret( OFX::getImageEffectHostDescription()->_supportedComponents.size() == 1 ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void ThinningPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentRGB ); srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClip->setSupportsTiles( kSupportTiles ); // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); OFX::ChoiceParamDescriptor* border = desc.defineChoiceParam( kParamBorder ); border->setLabel( "Gradient border" ); border->setHint( "Border method for gradient computation." ); border->appendOption( kParamBorderBlack ); border->appendOption( kParamBorderPadded ); // border->appendOption( kParamBorderMirror ); // border->appendOption( kParamBorderConstant ); border->setDefault( 1 ); }
void describeWriterParamsInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::StringParamDescriptor* filename = desc.defineStringParam( kTuttlePluginFilename ); filename->setLabel( kTuttlePluginFilenameLabel ); filename->setStringType( OFX::eStringTypeFilePath ); filename->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); desc.addClipPreferencesSlaveParam( *filename ); OFX::ChoiceParamDescriptor* channel = desc.defineChoiceParam( kTuttlePluginChannel ); channel->setLabel( kTuttlePluginChannelLabel ); channel->appendOption( kTuttlePluginChannelAuto ); channel->appendOption( kTuttlePluginChannelGray ); channel->appendOption( kTuttlePluginChannelRGB ); channel->appendOption( kTuttlePluginChannelRGBA ); channel->setDefault( 0 ); OFX::ChoiceParamDescriptor* bitDepth = desc.defineChoiceParam( kTuttlePluginBitDepth ); bitDepth->setLabel( kTuttlePluginBitDepthLabel ); bitDepth->appendOption( kTuttlePluginBitDepth8 ); bitDepth->appendOption( kTuttlePluginBitDepth16 ); bitDepth->setDefault( 0 ); OFX::BooleanParamDescriptor* premult = desc.defineBooleanParam( kParamPremultiplied ); premult->setLabel( kParamPremultipliedLabel ); premult->setDefault( false ); OFX::PushButtonParamDescriptor* render = desc.definePushButtonParam( kParamWriterRender ); render->setLabels( "Render", "Render", "Render step" ); render->setHint("Force render (writing)"); OFX::BooleanParamDescriptor* renderAlways = desc.defineBooleanParam( kParamWriterRenderAlways ); renderAlways->setLabel( "Render always" ); // renderAlways->setDefault( false ); renderAlways->setDefault( true ); // because tuttle is not declared as a background renderer OFX::IntParamDescriptor* forceNewRender = desc.defineIntParam( kParamWriterForceNewRender ); forceNewRender->setLabel( "Force new render" ); forceNewRender->setEnabled( false ); forceNewRender->setIsSecret( true ); forceNewRender->setIsPersistant( false ); forceNewRender->setAnimates( false ); forceNewRender->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); forceNewRender->setEvaluateOnChange( true ); forceNewRender->setDefault( 0 ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void DPXWriterPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentRGB ); srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClip->setSupportsTiles( kSupportTiles ); OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); // Controls OFX::StringParamDescriptor* filename = desc.defineStringParam( kParamWriterFilename ); filename->setLabel( "Filename" ); filename->setStringType( OFX::eStringTypeFilePath ); filename->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); desc.addClipPreferencesSlaveParam( *filename ); OFX::ChoiceParamDescriptor* componentsType = desc.defineChoiceParam( kParamComponentsType ); componentsType->setLabel( "Components type" ); componentsType->appendOption( "rgb" ); componentsType->appendOption( "rgba" ); componentsType->appendOption( "abgr" ); componentsType->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); componentsType->setDefault( 1 ); OFX::ChoiceParamDescriptor* bitDepth = desc.defineChoiceParam( kParamWriterBitDepth ); bitDepth->setLabel( "Bit depth" ); bitDepth->appendOption( kTuttlePluginBitDepth8 ); bitDepth->appendOption( kTuttlePluginBitDepth10 ); bitDepth->appendOption( kTuttlePluginBitDepth12 ); bitDepth->appendOption( kTuttlePluginBitDepth16 ); bitDepth->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); bitDepth->setDefault( 3 ); OFX::BooleanParamDescriptor* compressed = desc.defineBooleanParam( kParamCompressed ); compressed->setLabel( "Remove unused bits (bit streaming)" ); compressed->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); compressed->setDefault( false ); describeWriterParamsInContext( desc, context ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void EXRReaderPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); describeReaderParamsInContext( desc, context ); OFX::ChoiceParamDescriptor* outRedIs = desc.defineChoiceParam( kParamOutputRedIs ); outRedIs->appendOption( "0" ); outRedIs->appendOption( "1" ); outRedIs->appendOption( "2" ); outRedIs->appendOption( "3" ); outRedIs->setLabel( "Red is" ); outRedIs->setDefault( 0 ); OFX::ChoiceParamDescriptor* outGreenIs = desc.defineChoiceParam( kParamOutputGreenIs ); outGreenIs->appendOption( "0" ); outGreenIs->appendOption( "1" ); outGreenIs->appendOption( "2" ); outGreenIs->appendOption( "3" ); outGreenIs->setLabel( "Green is" ); outGreenIs->setDefault( 0 ); OFX::ChoiceParamDescriptor* outBlueIs = desc.defineChoiceParam( kParamOutputBlueIs ); outBlueIs->appendOption( "0" ); outBlueIs->appendOption( "1" ); outBlueIs->appendOption( "2" ); outBlueIs->appendOption( "3" ); outBlueIs->setLabel( "Blue is" ); outBlueIs->setDefault( 0 ); OFX::ChoiceParamDescriptor* outAlphaIs = desc.defineChoiceParam( kParamOutputAlphaIs ); outAlphaIs->appendOption( "0" ); outAlphaIs->appendOption( "1" ); outAlphaIs->appendOption( "2" ); outAlphaIs->appendOption( "3" ); outAlphaIs->setLabel( "Alpha is" ); outAlphaIs->setDefault( 0 ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void ColorBarsPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { describeGeneratorParamsInContext( desc, context ); OFX::ChoiceParamDescriptor* levels = desc.defineChoiceParam( kColorBarsLevels ); levels->setLabel( "Levels" ); levels->appendOption( kColorBarsLevels100 ); levels->appendOption( kColorBarsLevels75 ); levels->setDefault( eColorBarsLevels75 ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void Jpeg2000WriterPluginFactory::describeInContext( OFX::ImageEffectDescriptor &desc, OFX::EContext context ) { OFX::ClipDescriptor *srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentRGB ); srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClip->setSupportsTiles( kSupportTiles ); OFX::ClipDescriptor *dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); describeWriterParamsInContext( desc, context ); OFX::ChoiceParamDescriptor* bitDepth = static_cast<OFX::ChoiceParamDescriptor*>( desc.getParamDescriptor( kTuttlePluginBitDepth ) ); bitDepth->resetOptions(); bitDepth->appendOption( kTuttlePluginBitDepth8 ); bitDepth->appendOption( kTuttlePluginBitDepth12 ); bitDepth->appendOption( kTuttlePluginBitDepth16 ); #ifndef TUTTLE_PRODUCTION bitDepth->appendOption( kTuttlePluginBitDepth32 ); #endif bitDepth->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); bitDepth->setDefault( eTuttlePluginBitDepth8 ); OFX::BooleanParamDescriptor* lossless = desc.defineBooleanParam( kParamLossless ); lossless->setLabel( "lossless" ); lossless->setHint("When no cinema profile is selected, set compression to lossless."); lossless->setDefault( false ); OFX::ChoiceParamDescriptor* cineProfil = desc.defineChoiceParam( kParamCinemaProfil ); cineProfil->appendOption( kParamCinemaProfilNoDigit ); cineProfil->appendOption( kParamCinemaProfil2k24fps ); cineProfil->appendOption( kParamCinemaProfil2k48fps ); cineProfil->appendOption( kParamCinemaProfil4k24fps ); cineProfil->setDefault( 0 ); }
void describeReaderParamsInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::StringParamDescriptor* filename = desc.defineStringParam( kTuttlePluginFilename ); filename->setLabel( kTuttlePluginFilenameLabel ); filename->setStringType( OFX::eStringTypeFilePath ); filename->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); desc.addClipPreferencesSlaveParam( *filename ); OFX::ChoiceParamDescriptor* component = desc.defineChoiceParam( kTuttlePluginChannel ); component->appendOption( kTuttlePluginChannelAuto ); component->appendOption( kTuttlePluginChannelGray ); component->appendOption( kTuttlePluginChannelRGB ); component->appendOption( kTuttlePluginChannelRGBA ); component->setLabel( kTuttlePluginChannelLabel ); component->setDefault( eParamReaderChannelAuto ); OFX::ChoiceParamDescriptor* explicitConversion = desc.defineChoiceParam( kTuttlePluginBitDepth ); explicitConversion->setLabel( kTuttlePluginBitDepthLabel ); explicitConversion->appendOption( kTuttlePluginBitDepthAuto ); explicitConversion->appendOption( kTuttlePluginBitDepth8 ); explicitConversion->appendOption( kTuttlePluginBitDepth16 ); explicitConversion->appendOption( kTuttlePluginBitDepth32f ); explicitConversion->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); explicitConversion->setAnimates( false ); desc.addClipPreferencesSlaveParam( *explicitConversion ); if( OFX::getImageEffectHostDescription()->supportsMultipleClipDepths ) { explicitConversion->setDefault( 0 ); } else { explicitConversion->setIsSecret( true ); explicitConversion->setDefault( static_cast<int>( OFX::getImageEffectHostDescription()->getPixelDepth() ) ); } }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void ColorWheelPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { describeGeneratorParamsInContext( desc, context ); OFX::ChoiceParamDescriptor* mode = desc.defineChoiceParam( kColorWheelMode ); mode->setLabel( "Type" ); mode->setHint( "Select mode for the color wheel." ); mode->appendOption( kColorWheelModeWhite ); mode->appendOption( kColorWheelModeBlack ); mode->appendOption( kColorWheelModeRainbow ); mode->setDefault( 0 ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void PngWriterPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentRGB ); srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClip->setSupportsTiles( kSupportTiles ); OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); OFX::StringParamDescriptor* filename = desc.defineStringParam( kParamWriterFilename ); filename->setLabel( "Filename" ); filename->setStringType( OFX::eStringTypeFilePath ); filename->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); desc.addClipPreferencesSlaveParam( *filename ); OFX::ChoiceParamDescriptor* components = desc.defineChoiceParam( kParamOutputComponents ); components->setLabel( "Components" ); components->appendOption( kParamOutputComponentsRGBA ); components->appendOption( kParamOutputComponentsRGB ); components->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); components->setDefault( 0 ); OFX::ChoiceParamDescriptor* bitDepth = desc.defineChoiceParam( kParamWriterBitDepth ); bitDepth->setLabel( "Bit depth" ); bitDepth->appendOption( kTuttlePluginBitDepth8 ); bitDepth->appendOption( kTuttlePluginBitDepth16 ); bitDepth->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); bitDepth->setDefault( 1 ); describeWriterParamsInContext( desc, context ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void ComponentPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentRGB ); srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClip->setSupportsTiles( kSupportTiles ); // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); OFX::ChoiceParamDescriptor* outTo = desc.defineChoiceParam( kParamTo ); outTo->setLabel( kParamToLabel ); outTo->appendOption( kConvertToGray ); outTo->appendOption( kConvertToRGB ); outTo->appendOption( kConvertToRGBA ); outTo->setDefault( eConvertToRGBA ); OFX::ChoiceParamDescriptor* outGray = desc.defineChoiceParam( kParamToGray ); outGray->setLabel( kParamToGrayLabel ); outGray->appendOption( kConvertToGrayMean ); outGray->appendOption( kConvertToGrayRec601 ); outGray->appendOption( kConvertToGrayRec709 ); outGray->appendOption( kConvertToGraySelectRed ); outGray->appendOption( kConvertToGraySelectGreen ); outGray->appendOption( kConvertToGraySelectBlue ); outGray->appendOption( kConvertToGraySelectAlpha ); outGray->setDefault( 3 ); // terry::color::components::eConvertToGrayRec709 OFX::BooleanParamDescriptor* outPremult = desc.defineBooleanParam( kParamPremutliplied ); outPremult->setLabel( kParamPremutlipliedLabel ); outPremult->setDefault( false ); }
void ParamMathPluginFactory::describe(OFX::ImageEffectDescriptor& desc) { desc.setLabels("TuttleMathParam", "MathParam", "Math Param"); desc.setPluginGrouping("tuttle/param"); OFX::ChoiceParamDescriptor* op = desc.defineChoiceParam("operation"); op->appendOption("Multiply"); op->appendOption("Divide"); op->appendOption("Addition"); op->appendOption("Subtraction"); op->appendOption("Modulo"); op->setDefault(0); OFX::Descriptor<ParamType>* a = desc.define<ParamType>("a"); OFX::Descriptor<ParamType>* b = desc.define<ParamType>("b"); OFX::Descriptor<ParamType>* output = desc.define<ParamType>("Output"); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void DiffPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClipA = desc.defineClip( kDiffSourceA ); assert( srcClipA ); srcClipA->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClipA->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClipA->setSupportsTiles( kSupportTiles ); srcClipA->setOptional( false ); OFX::ClipDescriptor* srcClipB = desc.defineClip( kDiffSourceB ); assert( srcClipB ); srcClipB->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClipB->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClipB->setSupportsTiles( kSupportTiles ); srcClipB->setOptional( false ); // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); assert( dstClip ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); OFX::ChoiceParamDescriptor* diffFunction = desc.defineChoiceParam( kMeasureFunction ); assert( diffFunction ); diffFunction->setLabel( "Quality mesure function" ); diffFunction->appendOption( "PSNR (Peak Signal to Noise Ratio)" ); // diffFunction->appendOption( "MSE (Mean Square Error)" ); // diffFunction->appendOption( "SSIM (Structural SIMilarity)" ); diffFunction->setDefault( 0 ); OFX::RGBAParamDescriptor* outputQualityMesure = desc.defineRGBAParam( kOutputQualityMesure ); assert( outputQualityMesure ); outputQualityMesure->setLabel( "Quality" ); outputQualityMesure->setEvaluateOnChange( false ); // OFX::PushButtonParamDescriptor* helpButton = desc.definePushButtonParam( kHelpButton ); // assert( helpButton ); // helpButton->setLabel( "Help" ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void PushPixelPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); // no tiles on src clip, because it depends on the mask content so we can't // define the maximal bounding box needed... srcClip->setSupportsTiles( false ); OFX::ClipDescriptor* maskClip = desc.defineClip( kClipMask ); maskClip->addSupportedComponent( OFX::ePixelComponentRGBA ); maskClip->addSupportedComponent( OFX::ePixelComponentAlpha ); maskClip->setIsMask( true ); maskClip->setOptional( true ); maskClip->setSupportsTiles( true ); OFX::ChoiceParamDescriptor* output = desc.defineChoiceParam( kParamOutput ); output->setLabel( "Output" ); output->appendOption( kParamOutputMotionVectors ); output->appendOption( kParamOutputPushPixel ); output->setDefault( 1 ); OFX::DoubleParamDescriptor* size = desc.defineDoubleParam( kParamSize ); size->setLabel( "Size" ); size->setHint( "Size of the gradient window." ); size->setRange( 0.0, std::numeric_limits<double>::max() ); size->setDisplayRange( 1.0, 10.0 ); size->setDefault( 2.0 ); OFX::BooleanParamDescriptor* normalizedKernel = desc.defineBooleanParam( kParamNormalizedKernel ); normalizedKernel->setLabel( "Normalized kernel" ); normalizedKernel->setHint( "Use a normalized kernel to compute the gradient." ); normalizedKernel->setDefault( true ); //#ifndef TUTTLE_PRODUCTION normalizedKernel->setIsSecret( true ); //#endif OFX::DoubleParamDescriptor* intensity = desc.defineDoubleParam( kParamIntensity ); intensity->setLabel( "Intensity" ); intensity->setHint( "Scale motion vectors." ); intensity->setDisplayRange( 0.0, 2.0 ); intensity->setDefault( 0.75 ); OFX::DoubleParamDescriptor* angle = desc.defineDoubleParam( kParamAngle ); angle->setLabel( "Angle" ); angle->setHint( "Rotation on the gradient." ); angle->setDisplayRange(-180, 180); angle->setDoubleType( OFX::eDoubleTypeAngle ); angle->setDefault( 0.0 ); OFX::ChoiceParamDescriptor* interpolation = desc.defineChoiceParam( kParamInterpolation ); interpolation->setLabel( "Interpolation" ); interpolation->setHint( "Interpolation method." ); interpolation->appendOption( kParamInterpolationNearest ); interpolation->appendOption( kParamInterpolationBilinear ); interpolation->setDefault( 1 ); OFX::ChoiceParamDescriptor* border = desc.defineChoiceParam( kParamBorder ); border->setLabel( "Gradient border" ); border->setHint( "Border method for gradient computation." ); border->appendOption( kParamBorderMirror ); border->appendOption( kParamBorderConstant ); border->appendOption( kParamBorderBlack ); border->appendOption( kParamBorderPadded ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void DPXWriterPluginFactory::describeInContext(OFX::ImageEffectDescriptor& desc, OFX::EContext context) { OFX::ClipDescriptor* srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); srcClip->addSupportedComponent(OFX::ePixelComponentRGBA); srcClip->addSupportedComponent(OFX::ePixelComponentRGB); srcClip->addSupportedComponent(OFX::ePixelComponentAlpha); srcClip->setSupportsTiles(kSupportTiles); OFX::ClipDescriptor* dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(OFX::ePixelComponentRGBA); dstClip->addSupportedComponent(OFX::ePixelComponentRGB); dstClip->addSupportedComponent(OFX::ePixelComponentAlpha); dstClip->setSupportsTiles(kSupportTiles); // Controls describeWriterParamsInContext(desc, context); OFX::ChoiceParamDescriptor* bitDepth = static_cast<OFX::ChoiceParamDescriptor*>(desc.getParamDescriptor(kTuttlePluginBitDepth)); bitDepth->resetOptions(); bitDepth->appendOption(kTuttlePluginBitDepth8); bitDepth->appendOption(kTuttlePluginBitDepth10); bitDepth->appendOption(kTuttlePluginBitDepth12); bitDepth->appendOption(kTuttlePluginBitDepth16); bitDepth->appendOption(kTuttlePluginBitDepth32); bitDepth->appendOption(kTuttlePluginBitDepth64); bitDepth->setDefault(eTuttlePluginBitDepth10); OFX::ChoiceParamDescriptor* descriptor = static_cast<OFX::ChoiceParamDescriptor*>(desc.getParamDescriptor(kTuttlePluginChannel)); descriptor->resetOptions(); descriptor->appendOption(kParamDescriptorUserDefinedDescriptor); descriptor->appendOption(kParamDescriptorRed); descriptor->appendOption(kParamDescriptorGreen); descriptor->appendOption(kParamDescriptorBlue); descriptor->appendOption(kParamDescriptorAlpha); descriptor->appendOption(kParamDescriptorLuma); descriptor->appendOption(kParamDescriptorColorDifference); descriptor->appendOption(kParamDescriptorDepth); descriptor->appendOption(kParamDescriptorCompositeVideo); descriptor->appendOption(kParamDescriptorRGB); descriptor->appendOption(kParamDescriptorRGBA); descriptor->appendOption(kParamDescriptorABGR); descriptor->appendOption(kParamDescriptorCbYCrY); descriptor->appendOption(kParamDescriptorCbYACrYA); descriptor->appendOption(kParamDescriptorCbYCr); descriptor->appendOption(kParamDescriptorCbYCrA); descriptor->appendOption(kParamDescriptorUserDefined2Comp); descriptor->appendOption(kParamDescriptorUserDefined3Comp); descriptor->appendOption(kParamDescriptorUserDefined4Comp); descriptor->appendOption(kParamDescriptorUserDefined5Comp); descriptor->appendOption(kParamDescriptorUserDefined6Comp); descriptor->appendOption(kParamDescriptorUserDefined7Comp); descriptor->appendOption(kParamDescriptorUserDefined8Comp); descriptor->appendOption(kParamDescriptorUndefinedDescriptor); descriptor->appendOption(kParamDescriptorAuto); descriptor->setDefault(9); // rgb OFX::ChoiceParamDescriptor* transfer = desc.defineChoiceParam(kParamTransfer); transfer->setLabel(kParamTransferLabel); transfer->setHint(kParamTransferHint); transfer->appendOption(kParamCharacteristicUserDefined); transfer->appendOption(kParamCharacteristicPrintingDensity); transfer->appendOption(kParamCharacteristicLinear); transfer->appendOption(kParamCharacteristicLogarithmic); transfer->appendOption(kParamCharacteristicUnspecifiedVideo); transfer->appendOption(kParamCharacteristicSMPTE274M); transfer->appendOption(kParamCharacteristicITUR709); transfer->appendOption(kParamCharacteristicITUR601); transfer->appendOption(kParamCharacteristicITUR602); transfer->appendOption(kParamCharacteristicNTSCCompositeVideo); transfer->appendOption(kParamCharacteristicPALCompositeVideo); transfer->appendOption(kParamCharacteristicZLinear); transfer->appendOption(kParamCharacteristicZHomogeneous); transfer->appendOption(kParamCharacteristicUndefinedCharacteristic); transfer->setDefault(2); // Linear OFX::ChoiceParamDescriptor* colorimetric = desc.defineChoiceParam(kParamColorimetric); colorimetric->setLabel(kParamColorimetricLabel); colorimetric->setHint(kParamColorimetricHint); colorimetric->appendOption(kParamCharacteristicUserDefined); colorimetric->appendOption(kParamCharacteristicPrintingDensity); colorimetric->appendOption(kParamCharacteristicLinear); colorimetric->appendOption(kParamCharacteristicLogarithmic); colorimetric->appendOption(kParamCharacteristicUnspecifiedVideo); colorimetric->appendOption(kParamCharacteristicSMPTE274M); colorimetric->appendOption(kParamCharacteristicITUR709); colorimetric->appendOption(kParamCharacteristicITUR601); colorimetric->appendOption(kParamCharacteristicITUR602); colorimetric->appendOption(kParamCharacteristicNTSCCompositeVideo); colorimetric->appendOption(kParamCharacteristicPALCompositeVideo); colorimetric->appendOption(kParamCharacteristicZLinear); colorimetric->appendOption(kParamCharacteristicZHomogeneous); colorimetric->appendOption(kParamCharacteristicUndefinedCharacteristic); colorimetric->setDefault(2); // Linear OFX::ChoiceParamDescriptor* packed = desc.defineChoiceParam(kParamPacked); packed->setLabel(kParamPackedLabel); packed->setHint(kParamPackedHint); packed->appendOption(kParamPackedPacked); packed->appendOption(kParamPackedMethodA); packed->appendOption(kParamPackedMethodB); packed->setDefault(1); OFX::BooleanParamDescriptor* swapEndian = desc.defineBooleanParam(kParamSwapEndian); swapEndian->setLabel(kParamSwapEndianLabel); swapEndian->setHint(kParamSwapEndianHint); swapEndian->setDefault(true); OFX::ChoiceParamDescriptor* encoding = desc.defineChoiceParam(kParamEncoding); encoding->setLabel(kParamEncodingLabel); encoding->setHint(kParamEncodingHint); encoding->appendOption(kParamEncodingNone); encoding->appendOption(kParamEncodingRle); encoding->setDefault(0); OFX::ChoiceParamDescriptor* orientation = desc.defineChoiceParam(kParamOrientation); orientation->setLabel(kParamOrientationLabel); orientation->setHint(kParamOrientationHint); orientation->appendOption(kParamOrientationLeftToRightTopToBottom); orientation->appendOption(kParamOrientationRightToLeftTopToBottom); orientation->appendOption(kParamOrientationLeftToRightBottomToTop); orientation->appendOption(kParamOrientationRightToLeftBottomToTop); orientation->appendOption(kParamOrientationTopToBottomLeftToRight); orientation->appendOption(kParamOrientationTopToBottomRightToLeft); orientation->appendOption(kParamOrientationBottomToTopLeftToRight); orientation->appendOption(kParamOrientationBottomToTopRightToLeft); orientation->appendOption(kParamOrientationUndefinedOrientation); orientation->setDefault(0); OFX::StringParamDescriptor* project = desc.defineStringParam(kParamProject); project->setDefault(""); OFX::StringParamDescriptor* copyright = desc.defineStringParam(kParamCopyright); copyright->setDefault(""); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void CropPluginFactory::describeInContext(OFX::ImageEffectDescriptor& desc, OFX::EContext context) { OFX::ClipDescriptor* srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); srcClip->addSupportedComponent(OFX::ePixelComponentRGBA); srcClip->addSupportedComponent(OFX::ePixelComponentRGB); srcClip->addSupportedComponent(OFX::ePixelComponentAlpha); srcClip->setSupportsTiles(kSupportTiles); OFX::ClipDescriptor* dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(OFX::ePixelComponentRGBA); dstClip->addSupportedComponent(OFX::ePixelComponentRGB); dstClip->addSupportedComponent(OFX::ePixelComponentAlpha); dstClip->setSupportsTiles(kSupportTiles); OFX::ChoiceParamDescriptor* mode = desc.defineChoiceParam(kParamMode); mode->setLabel("Mode"); mode->appendOption(kParamModeCrop); mode->appendOption(kParamModeFillColor); // mode->appendOption( kParamModeResize ); // good idea or not? mode->setDefault(eParamModeCrop); OFX::RGBAParamDescriptor* fillColor = desc.defineRGBAParam(kParamFillColor); fillColor->setLabel("Color"); fillColor->setHint("Color to fill bands"); fillColor->setDefault(0.0, 0.0, 0.0, 1.0); OFX::ChoiceParamDescriptor* axis = desc.defineChoiceParam(kParamAxis); axis->setLabel("Axis"); axis->appendOption(kParamAxisXY); axis->appendOption(kParamAxisX); axis->appendOption(kParamAxisY); axis->setDefault(eParamAxisY); axis->setEvaluateOnChange(false); OFX::ChoiceParamDescriptor* symmetric = desc.defineChoiceParam(kParamSymmetric); symmetric->setLabel("Symmetric"); symmetric->appendOption(kParamSymmetricNone); symmetric->appendOption(kParamSymmetricXY); symmetric->appendOption(kParamSymmetricX); symmetric->appendOption(kParamSymmetricY); symmetric->setHint("Is the crop region symmetric around image center?"); symmetric->setDefault(true); symmetric->setEvaluateOnChange(false); OFX::BooleanParamDescriptor* fixedRatio = desc.defineBooleanParam(kParamFixedRatio); fixedRatio->setLabel("Fixed ratio"); fixedRatio->setHint("Constrain the cropped region to this ratio."); fixedRatio->setDefault(true); fixedRatio->setEvaluateOnChange(false); OFX::ChoiceParamDescriptor* preset = desc.defineChoiceParam(kParamPreset); preset->setLabel("Preset"); preset->appendOption(kParamPreset_custom); preset->appendOption(kParamPreset_1_33); preset->appendOption(kParamPreset_1_77); preset->appendOption(kParamPreset_1_85); preset->appendOption(kParamPreset_2_35); preset->appendOption(kParamPreset_2_40); preset->setDefault(0); preset->setEvaluateOnChange(false); OFX::DoubleParamDescriptor* ratio = desc.defineDoubleParam(kParamRatio); ratio->setLabel("Ratio"); ratio->setRange(0, std::numeric_limits<double>::max()); ratio->setDisplayRange(0, 3); ratio->setDefault(2.0); ratio->setHint("Ratio X/Y of the cropped region."); OFX::BooleanParamDescriptor* overlay = desc.defineBooleanParam(kParamOverlay); overlay->setLabel("Overlay"); overlay->setHint("Display overlay rectangle"); overlay->setDefault(false); overlay->setEvaluateOnChange(false); OFX::GroupParamDescriptor* cropRegion = desc.defineGroupParam(kParamGroupCropRegion); OFX::IntParamDescriptor* xMin = desc.defineIntParam(kParamXMin); xMin->setLabel("X min"); // xMin->setRange( 0, std::numeric_limits<int>::max() ); xMin->setDisplayRange(0, 3000); xMin->setDefault(0); xMin->setParent(*cropRegion); OFX::IntParamDescriptor* yMin = desc.defineIntParam(kParamYMin); yMin->setLabel("Y min"); // yMin->setRange( 0, std::numeric_limits<int>::max() ); yMin->setDisplayRange(0, 3000); yMin->setDefault(0); yMin->setParent(*cropRegion); OFX::IntParamDescriptor* xMax = desc.defineIntParam(kParamXMax); xMax->setLabel("X max"); // xMax->setRange( 0, std::numeric_limits<int>::max() ); xMax->setDisplayRange(0, 3000); xMax->setDefault(0); xMax->setParent(*cropRegion); OFX::IntParamDescriptor* yMax = desc.defineIntParam(kParamYMax); yMax->setLabel("Y max"); // yMax->setRange( 0, std::numeric_limits<int>::max() ); yMax->setDisplayRange(0, 3000); yMax->setDefault(0); yMax->setParent(*cropRegion); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void CropPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentRGB ); srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClip->setSupportsTiles( kSupportTiles ); // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); OFX::BooleanParamDescriptor* bop = desc.defineBooleanParam( kParamFillMode ); bop->setLabels( kParamFillModeLabel, kParamFillModeLabel, kParamFillModeLabel ); bop->setScriptName( "BandsOperations" ); bop->setHint( "Fill bands with black color or repeat last pixel and reset Rod." ); bop->setDefault( true ); OFX::ChoiceParamDescriptor* format = desc.defineChoiceParam( kParamPresets ); format->setLabels( kParamPresetsLabel, kParamPresetsLabel, kParamPresetsLabel ); format->setScriptName( "formats" ); format->appendOption( "1.33 (4/3) bands" ); format->appendOption( "1.77 (16/9e) bands" ); format->appendOption( "1.85 bands" ); format->appendOption( "2.35 (Cinemascope) bands" ); format->appendOption( "2.40 bands" ); format->setDefault( 0 ); OFX::BooleanParamDescriptor* shape = desc.defineBooleanParam( kParamDisplayRect ); shape->setLabels( kParamDisplayRectLabel, kParamDisplayRectLabel, kParamDisplayRectLabel ); shape->setDefault( false ); OFX::BooleanParamDescriptor* anamorphic = desc.defineBooleanParam( kParamAnamorphic ); anamorphic->setLabels( kParamAnamorphicLabel, kParamAnamorphicLabel, "Anamorphic (stretch)" ); anamorphic->setDefault( false ); anamorphic->setIsSecret( true ); OFX::GroupParamDescriptor* bandsGroup = desc.defineGroupParam( "Bands sizes" ); OFX::IntParamDescriptor* upBand = desc.defineIntParam( kParamUp ); upBand->setLabels( kParamUpLabel, kParamUpLabel, kParamUpLabel ); upBand->setParent( *bandsGroup ); OFX::IntParamDescriptor* downBand = desc.defineIntParam( kParamDown ); downBand->setLabels( kParamDownLabel, kParamDownLabel, kParamDownLabel ); downBand->setParent( *bandsGroup ); OFX::IntParamDescriptor* leftBand = desc.defineIntParam( kParamLeft ); leftBand->setLabels( kParamLeftLabel, kParamLeftLabel, kParamLeftLabel ); leftBand->setParent( *bandsGroup ); OFX::IntParamDescriptor* rightBand = desc.defineIntParam( kParamRight ); rightBand->setLabels( kParamRightLabel, kParamRightLabel, kParamRightLabel ); rightBand->setParent( *bandsGroup ); OFX::PushButtonParamDescriptor* helpButton = desc.definePushButtonParam( kCropHelpButton ); helpButton->setScriptName( "&Help" ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void SobelPluginFactory::describeInContext(OFX::ImageEffectDescriptor& desc, OFX::EContext context) { OFX::ClipDescriptor* srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); srcClip->addSupportedComponent(OFX::ePixelComponentRGBA); srcClip->addSupportedComponent(OFX::ePixelComponentRGB); srcClip->addSupportedComponent(OFX::ePixelComponentAlpha); srcClip->setSupportsTiles(kSupportTiles); OFX::ClipDescriptor* dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(OFX::ePixelComponentRGBA); dstClip->addSupportedComponent(OFX::ePixelComponentRGB); dstClip->setSupportsTiles(kSupportTiles); OFX::Double2DParamDescriptor* size = desc.defineDouble2DParam(kParamSize); size->setLabel("Size"); size->setDefault(1.0, 1.0); size->setRange(0.0, 0.0, std::numeric_limits<double>::max(), std::numeric_limits<double>::max()); size->setDisplayRange(0, 0, 10, 10); size->setDoubleType(OFX::eDoubleTypeScale); OFX::GroupParamDescriptor* advanced = desc.defineGroupParam(kParamGroupAdvanced); advanced->setLabel("Advanced"); OFX::BooleanParamDescriptor* unidimensional = desc.defineBooleanParam(kParamUnidimensional); unidimensional->setLabel("Unidimensional"); unidimensional->setHint("Instead of using a square convolution matrix, use 1D kernels."); unidimensional->setDefault(false); unidimensional->setParent(advanced); OFX::BooleanParamDescriptor* reverseKernel = desc.defineBooleanParam(kParamReverseKernel); reverseKernel->setLabel("Reverse"); reverseKernel->setHint("Reverse the kernel (convolution or correlation)."); reverseKernel->setDefault(false); reverseKernel->setParent(advanced); OFX::BooleanParamDescriptor* normalizedKernel = desc.defineBooleanParam(kParamNormalizedKernel); normalizedKernel->setLabel("Normalized kernel"); normalizedKernel->setHint("Use a normalized kernel to compute the gradient."); normalizedKernel->setDefault(true); normalizedKernel->setParent(advanced); OFX::DoubleParamDescriptor* kernelEpsilon = desc.defineDoubleParam(kParamKernelEpsilon); kernelEpsilon->setLabel("Kernel espilon value"); kernelEpsilon->setHint("Threshold at which we no longer consider the values of the function."); kernelEpsilon->setDefault(0.01); kernelEpsilon->setRange(std::numeric_limits<double>::epsilon(), 1); kernelEpsilon->setDisplayRange(0, 0.01); kernelEpsilon->setParent(advanced); OFX::ChoiceParamDescriptor* pass = desc.defineChoiceParam(kParamPass); pass->setLabel("Pass"); pass->setHint("The sobel filter is computed using a 2D separable filter. So it consists in 2 passes.\n" "By default we compute the 2 passes, but with this option you can separate each pass."); pass->appendOption(kParamPassFull); pass->appendOption(kParamPass1); pass->appendOption(kParamPass2); pass->setDefault(0); pass->setParent(advanced); OFX::ChoiceParamDescriptor* border = desc.defineChoiceParam(kParamBorder); border->setLabel("Gradient border"); border->setHint("Border method for gradient computation."); border->appendOption(kParamBorderMirror); border->appendOption(kParamBorderConstant); border->appendOption(kParamBorderBlack); border->appendOption(kParamBorderPadded); OFX::BooleanParamDescriptor* computeNorm = desc.defineBooleanParam(kParamComputeGradientNorm); computeNorm->setLabel("Compute norm"); computeNorm->setHint("To disable the norm computation, if you don't need it."); computeNorm->setDefault(true); OFX::BooleanParamDescriptor* normManhattan = desc.defineBooleanParam(kParamGradientNormManhattan); normManhattan->setLabel("Use the manhattan norm"); normManhattan->setHint("Use manhattan norm instead of standard one."); normManhattan->setDefault(false); OFX::BooleanParamDescriptor* computeGradientDirection = desc.defineBooleanParam(kParamComputeGradientDirection); computeGradientDirection->setLabel("Gradient direction"); computeGradientDirection->setHint("To disable the gradient direction computation, if you don't need it."); computeGradientDirection->setDefault(false); OFX::BooleanParamDescriptor* gradientDirectionAbs = desc.defineBooleanParam(kParamGradientDirectionAbs); gradientDirectionAbs->setLabel("Angle between 0 and PI"); gradientDirectionAbs->setHint("Limit gradient direction between 0 and PI."); gradientDirectionAbs->setDefault(true); OFX::PushButtonParamDescriptor* infosButton = desc.definePushButtonParam(kParamInfos); infosButton->setLabel("Infos"); OFX::ChoiceParamDescriptor* outputComponent = desc.defineChoiceParam(kParamOutputComponent); outputComponent->setLabel("Output component"); outputComponent->appendOption(OFX::getImageEffectHostDescription()->supportsPixelComponent(OFX::ePixelComponentRGB) ? kParamOutputComponentRGB : "---"); outputComponent->appendOption(OFX::getImageEffectHostDescription()->supportsPixelComponent(OFX::ePixelComponentRGBA) ? kParamOutputComponentRGBA : "---"); outputComponent->setDefault(0); outputComponent->setIsSecret(OFX::getImageEffectHostDescription()->_supportedComponents.size() == 1); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void EXRReaderPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); describeReaderParamsInContext( desc, context ); OFX::ChoiceParamDescriptor* outRedIs = desc.defineChoiceParam( kParamOutputRedIs ); outRedIs->appendOption( "0" ); outRedIs->appendOption( "1" ); outRedIs->appendOption( "2" ); outRedIs->appendOption( "3" ); outRedIs->setLabel( "Red is" ); outRedIs->setDefault( 0 ); outRedIs->setHint( "Read-only information to get index of red component in the file."); OFX::ChoiceParamDescriptor* outGreenIs = desc.defineChoiceParam( kParamOutputGreenIs ); outGreenIs->appendOption( "0" ); outGreenIs->appendOption( "1" ); outGreenIs->appendOption( "2" ); outGreenIs->appendOption( "3" ); outGreenIs->setLabel( "Green is" ); outGreenIs->setDefault( 0 ); outGreenIs->setHint( "Read-only information to get index of green component in the file."); OFX::ChoiceParamDescriptor* outBlueIs = desc.defineChoiceParam( kParamOutputBlueIs ); outBlueIs->appendOption( "0" ); outBlueIs->appendOption( "1" ); outBlueIs->appendOption( "2" ); outBlueIs->appendOption( "3" ); outBlueIs->setLabel( "Blue is" ); outBlueIs->setDefault( 0 ); outBlueIs->setHint( "Read-only information to get index of blue component in the file."); OFX::ChoiceParamDescriptor* outAlphaIs = desc.defineChoiceParam( kParamOutputAlphaIs ); outAlphaIs->appendOption( "0" ); outAlphaIs->appendOption( "1" ); outAlphaIs->appendOption( "2" ); outAlphaIs->appendOption( "3" ); outAlphaIs->setLabel( "Alpha is" ); outAlphaIs->setDefault( 0 ); outAlphaIs->setHint( "Read-only information to get index of alpha component in the file."); OFX::ChoiceParamDescriptor* outputData = desc.defineChoiceParam( kParamOutputData ); outputData->appendOption( "display" ); outputData->appendOption( "data" ); outputData->setLabel( "Output Data" ); outputData->setDefault( 0 ); OFX::ChoiceParamDescriptor* fileBitDepth = desc.defineChoiceParam( kParamFileBitDepth ); fileBitDepth->setLabel( "File Bit Depth" ); fileBitDepth->appendOption( kTuttlePluginBitDepth16f ); fileBitDepth->appendOption( kTuttlePluginBitDepth32 ); fileBitDepth->appendOption( kTuttlePluginBitDepth32f ); fileBitDepth->appendOption( kTuttlePluginBitDepthNone ); fileBitDepth->setDefault( eTuttlePluginFileBitDepthNone ); fileBitDepth->setHint( "Read-only information about the image bit depth stored in the file.\n" "Data type is per channel in EXR. So we read the type of the first channel."); OFX::ChoiceParamDescriptor* compression = desc.defineChoiceParam( kParamCompression ); compression->setLabel( "Compression" ); compression->appendOption( kParamCompressionNone, kParamCompressionHintNone ); compression->appendOption( kParamCompressionRLE, kParamCompressionHintRLE ); compression->appendOption( kParamCompressionZIPS, kParamCompressionHintZIPS ); compression->appendOption( kParamCompressionZIP, kParamCompressionHintZIP ); compression->appendOption( kParamCompressionPIZ, kParamCompressionHintPIZ ); compression->appendOption( kParamCompressionPXR24, kParamCompressionHintPXR24 ); compression->appendOption( kParamCompressionB44, kParamCompressionHintB44 ); compression->appendOption( kParamCompressionB44A, kParamCompressionHintB44A ); compression->setDefault( eParamCompression_None ); compression->setHint( "Read-only information about the image compression stored in the file."); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void TurboJpegWriterPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentRGB ); srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClip->setSupportsTiles( kSupportTiles ); // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); // Controls describeWriterParamsInContext( desc, context ); OFX::ChoiceParamDescriptor* channel = static_cast<OFX::ChoiceParamDescriptor*>( desc.getParamDescriptor( kTuttlePluginChannel ) ); channel->resetOptions(); channel->appendOption( kTuttlePluginChannelRGB ); channel->setDefault( 0 ); channel->setEnabled( false ); OFX::ChoiceParamDescriptor* bitDepth = static_cast<OFX::ChoiceParamDescriptor*>( desc.getParamDescriptor( kTuttlePluginBitDepth ) ); bitDepth->resetOptions(); bitDepth->appendOption( kTuttlePluginBitDepth8 ); bitDepth->setDefault( eTuttlePluginBitDepth8 ); bitDepth->setEnabled( false ); OFX::BooleanParamDescriptor* premult = static_cast<OFX::BooleanParamDescriptor*>( desc.getParamDescriptor( kParamPremultiplied ) ); premult->setDefault( true ); OFX::IntParamDescriptor* quality = desc.defineIntParam( kParamQuality ); quality->setLabel( "Quality" ); quality->setRange( 0, 100 ); quality->setDisplayRange( 0, 100 ); quality->setDefault( 80 ); OFX::ChoiceParamDescriptor* subsampling = desc.defineChoiceParam( kParamSubsampling ); subsampling->setLabel( kParamSubsamplingLabel ); subsampling->setHint( kParamSubsamplingHint ); subsampling->appendOption( kTurboJpegSubsampling444 ); subsampling->appendOption( kTurboJpegSubsampling422 ); subsampling->appendOption( kTurboJpegSubsampling420 ); subsampling->appendOption( kTurboJpegSubsamplingGray ); subsampling->appendOption( kTurboJpegSubsampling440 ); subsampling->setDefault( eTurboJpegSubsampling420 ); OFX::ChoiceParamDescriptor* optimization = desc.defineChoiceParam( kParamOptimization ); optimization->setLabel( kParamOptimizationLabel ); optimization->setHint( kParamOptimizationHint ); optimization->appendOption( kTurboJpegOptimizationNone ); optimization->appendOption( kTurboJpegOptimizationMMX ); optimization->appendOption( kTurboJpegOptimizationSSE ); optimization->appendOption( kTurboJpegOptimizationSSE2 ); optimization->appendOption( kTurboJpegOptimizationSSE3 ); optimization->setDefault( eTurboJpegOptimizationSSE3 ); }
void describeWriterParamsInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::StringParamDescriptor* filename = desc.defineStringParam( kTuttlePluginFilename ); filename->setLabel( kTuttlePluginFilenameLabel ); filename->setStringType( OFX::eStringTypeFilePath ); filename->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); // the file doesn't need to exist, the writer will create it! filename->setFilePathExists(false); desc.addClipPreferencesSlaveParam( *filename ); OFX::ChoiceParamDescriptor* channel = desc.defineChoiceParam( kTuttlePluginChannel ); channel->setLabel( kTuttlePluginChannelLabel ); channel->appendOption( kTuttlePluginChannelAuto ); channel->appendOption( kTuttlePluginChannelGray ); channel->appendOption( kTuttlePluginChannelRGB ); channel->appendOption( kTuttlePluginChannelRGBA ); channel->setDefault( 0 ); OFX::ChoiceParamDescriptor* bitDepth = desc.defineChoiceParam( kTuttlePluginBitDepth ); bitDepth->setLabel( kTuttlePluginBitDepthLabel ); bitDepth->appendOption( kTuttlePluginBitDepth8 ); bitDepth->appendOption( kTuttlePluginBitDepth16 ); bitDepth->setDefault( 0 ); OFX::BooleanParamDescriptor* premult = desc.defineBooleanParam( kParamPremultiplied ); premult->setLabel( "Premultiplied" ); premult->setDefault( false ); OFX::ChoiceParamDescriptor* existingFile = desc.defineChoiceParam( kParamWriterExistingFile ); existingFile->setLabel( "Existing File" ); existingFile->appendOption( kParamWriterExistingFile_overwrite ); existingFile->appendOption( kParamWriterExistingFile_error ); if( OFX::getImageEffectHostDescription()->hostName == "TuttleOfx" ) { // Only Tuttle is able to do that, because we disable the computation // using the IsIdentity Action. This is not in the OpenFX standard. existingFile->appendOption( kParamWriterExistingFile_skip ); } //existingFile->appendOption( kParamWriterExistingFile_reader ); // TODO: not implemented yet. existingFile->setDefault( eParamWriterExistingFile_overwrite ); OFX::BooleanParamDescriptor* copyToOutput = desc.defineBooleanParam( kParamWriterCopyToOutput ); copyToOutput->setLabel( "Copy buffer to output" ); copyToOutput->setHint( "This is only useful if you connect nodes to the output clip of the writer." ); copyToOutput->setDefault( false ); OFX::PushButtonParamDescriptor* render = desc.definePushButtonParam( kParamWriterRender ); render->setLabels( "Render", "Render", "Render step" ); render->setHint("Force render (writing)"); OFX::BooleanParamDescriptor* renderAlways = desc.defineBooleanParam( kParamWriterRenderAlways ); renderAlways->setLabel( "Render always" ); renderAlways->setHint( "This is only useful as a workaround for GUI applications." ); renderAlways->setDefault( true ); // because tuttle is not declared as a background renderer OFX::IntParamDescriptor* forceNewRender = desc.defineIntParam( kParamWriterForceNewRender ); forceNewRender->setLabel( "Force new render" ); forceNewRender->setHint( "This is only useful as a workaround for GUI applications." ); forceNewRender->setEnabled( false ); forceNewRender->setIsSecret( true ); forceNewRender->setIsPersistant( false ); forceNewRender->setAnimates( false ); forceNewRender->setCacheInvalidation( OFX::eCacheInvalidateValueAll ); forceNewRender->setEvaluateOnChange( true ); forceNewRender->setDefault( 0 ); }
/** * @brief Override this to describe in context the writer. * You should call the base-class version at the end like this: * GenericWriterPluginFactory<YOUR_FACTORY>::describeInContext(desc,context); **/ PageParamDescriptor* GenericWriterDescribeInContextBegin(OFX::ImageEffectDescriptor &desc, OFX::ContextEnum context, bool isVideoStreamPlugin, bool supportsRGBA, bool supportsRGB, bool supportsAlpha, const char* inputSpaceNameDefault, const char* outputSpaceNameDefault) { // create the mandated source clip ClipDescriptor *srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); if (supportsRGBA) { srcClip->addSupportedComponent(ePixelComponentRGBA); } if (supportsRGB) { srcClip->addSupportedComponent(ePixelComponentRGB); } if (supportsAlpha) { srcClip->addSupportedComponent(ePixelComponentAlpha); } srcClip->setSupportsTiles(false); // create the mandated output clip ClipDescriptor *dstClip = desc.defineClip(kOfxImageEffectOutputClipName); if (supportsRGBA) { dstClip->addSupportedComponent(ePixelComponentRGBA); } if (supportsRGB) { dstClip->addSupportedComponent(ePixelComponentRGB); } if (supportsAlpha) { dstClip->addSupportedComponent(ePixelComponentAlpha); } dstClip->setSupportsTiles(false);//< we don't support tiles in output! // make some pages and to things in PageParamDescriptor *page = desc.definePageParam("Controls"); //////////Output file OFX::StringParamDescriptor* fileParam = desc.defineStringParam(kWriterFileParamName); fileParam->setLabels(kWriterFileParamLabel, kWriterFileParamLabel, kWriterFileParamLabel); fileParam->setStringType(OFX::eStringTypeFilePath); fileParam->setFilePathExists(false); fileParam->setHint(kWriterFileParamHint); // in the Writer context, the script name should be "filename", for consistency with the reader nodes @see kOfxImageEffectContextReader fileParam->setScriptName(kWriterFileParamName); fileParam->setAnimates(!isVideoStreamPlugin); desc.addClipPreferencesSlaveParam(*fileParam); page->addChild(*fileParam); // insert OCIO parameters GenericOCIO::describeInContext(desc, context, page, inputSpaceNameDefault, outputSpaceNameDefault); ///////////Frame range choosal OFX::ChoiceParamDescriptor* frameRangeChoiceParam = desc.defineChoiceParam(kWriterFrameRangeChoiceParamName); frameRangeChoiceParam->setLabels(kWriterFrameRangeChoiceParamLabel, kWriterFrameRangeChoiceParamLabel, kWriterFrameRangeChoiceParamLabel); frameRangeChoiceParam->setHint(kWriterFrameRangeChoiceParamHint); frameRangeChoiceParam->appendOption(kWriterFrameRangeChoiceParamOptionUnion, kWriterFrameRangeChoiceParamOptionUnionHint); frameRangeChoiceParam->appendOption(kWriterFrameRangeChoiceParamOptionBounds, kWriterFrameRangeChoiceParamOptionBoundsHint); frameRangeChoiceParam->appendOption(kWriterFrameRangeChoiceParamOptionManual, kWriterFrameRangeChoiceParamOptionManualHint); frameRangeChoiceParam->setAnimates(true); frameRangeChoiceParam->setDefault(0); page->addChild(*frameRangeChoiceParam); /////////////First frame OFX::IntParamDescriptor* firstFrameParam = desc.defineIntParam(kWriterFirstFrameParamName); firstFrameParam->setLabels(kWriterFirstFrameParamLabel, kWriterFirstFrameParamLabel, kWriterFirstFrameParamLabel); firstFrameParam->setIsSecret(true); firstFrameParam->setAnimates(true); page->addChild(*firstFrameParam); ////////////Last frame OFX::IntParamDescriptor* lastFrameParam = desc.defineIntParam(kWriterLastFrameParamName); lastFrameParam->setLabels(kWriterLastFrameParamLabel, kWriterLastFrameParamLabel, kWriterLastFrameParamLabel); lastFrameParam->setIsSecret(true); lastFrameParam->setAnimates(true); page->addChild(*lastFrameParam); return page; }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void PinningPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClip->setSupportsTiles( kSupportTiles ); // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); //////////////////// Options //////////////////// OFX::ChoiceParamDescriptor* method = desc.defineChoiceParam( kParamMethod ); method->setLabel( "Method" ); method->appendOption( kParamMethodAffine ); method->appendOption( kParamMethodPerspective ); method->appendOption( kParamMethodBilinear ); method->setDefault( 1 ); method->setHint( "Interpolation method" ); OFX::ChoiceParamDescriptor* interpolation = desc.defineChoiceParam( kParamInterpolation ); interpolation->setLabel( "Interpolation" ); interpolation->appendOption( kParamInterpolationNearest ); interpolation->appendOption( kParamInterpolationBilinear ); interpolation->setDefault( 1 ); interpolation->setHint( "Interpolation method" ); OFX::PushButtonParamDescriptor* setToCornersIn = desc.definePushButtonParam( kParamSetToCornersIn); setToCornersIn->setLabel( "Set In" ); setToCornersIn->setHint("Set to corners in points"); OFX::PushButtonParamDescriptor* setToCornersOut = desc.definePushButtonParam( kParamSetToCornersOut); setToCornersOut->setLabel( "Set Out" ); setToCornersOut->setHint("Set to corners out points"); OFX::BooleanParamDescriptor* overlay = desc.defineBooleanParam( kParamOverlay ); overlay->setLabel( "Overlay" ); overlay->setDefault( true ); OFX::BooleanParamDescriptor* inverse = desc.defineBooleanParam( kParamInverse ); inverse->setLabel( "Inverse" ); inverse->setDefault( false ); /* //TODO-vince/////////// //////////////////// Transform Centre Point //////////////////// OFX::GroupParamDescriptor* groupCentre = desc.defineGroupParam( kParamGroupCentre ); groupCentre->setLabel( "Centre point" ); groupCentre->setOpen(false); OFX::ChoiceParamDescriptor* manipulatorMode = desc.defineChoiceParam( kParamManipulatorMode ); manipulatorMode->appendOption( kParamManipulatorModeTranslate ); manipulatorMode->appendOption( kParamManipulatorModeRotate ); manipulatorMode->appendOption( kParamManipulatorModeScale ); OFX::Double2DParamDescriptor* pCentre = desc.defineDouble2DParam( kParamPointCentre); pCentre->setLabel( "Centre point" ); pCentre->setHint( "Transform Centre point" ); pCentre->setDefault( 0.0, 0.0 ); pCentre->setParent( groupCentre ); OFX::BooleanParamDescriptor* overlayCentre = desc.defineBooleanParam( kParamOverlayCentre ); overlayCentre->setLabel( "Overlay" ); overlayCentre->setDefault( true ); overlayCentre->setParent( groupCentre ); OFX::RGBParamDescriptor* ouverlayCentreColor = desc.defineRGBParam( kParamOverlayCentreColor ); ouverlayCentreColor->setLabel( "Color" ); ouverlayCentreColor->setHint( "Centre point overlay color" ); ouverlayCentreColor->setDefault( 0.0, 1.0, 0.0 ); ouverlayCentreColor->setParent( groupCentre ); */ //////////////////// IN Points //////////////////// OFX::GroupParamDescriptor* groupIn = desc.defineGroupParam( kParamGroupIn ); groupIn->setLabel( "Input points" ); groupIn->setOpen(false); OFX::Double2DParamDescriptor* pIn0 = desc.defineDouble2DParam( kParamPointIn + "0" ); pIn0->setLabel( "In 0" ); pIn0->setHint( "Input point 0" ); pIn0->setDefault( -0.5, -0.5 ); pIn0->setParent( groupIn ); OFX::Double2DParamDescriptor* pIn1 = desc.defineDouble2DParam( kParamPointIn + "1" ); pIn1->setLabel( "In 1" ); pIn1->setHint( "Input point 1" ); pIn1->setDefault( 0.5, -0.5 ); pIn1->setParent( groupIn ); OFX::Double2DParamDescriptor* pIn2 = desc.defineDouble2DParam( kParamPointIn + "2" ); pIn2->setLabel( "In 2" ); pIn2->setHint( "Input point 2" ); pIn2->setDefault( -0.5, 0.5 ); pIn2->setParent( groupIn ); OFX::Double2DParamDescriptor* pIn3 = desc.defineDouble2DParam( kParamPointIn + "3" ); pIn3->setLabel( "In 3" ); pIn3->setHint( "Input point 3" ); pIn3->setDefault( 0.5, 0.5 ); pIn3->setParent( groupIn ); OFX::BooleanParamDescriptor* overlayIn = desc.defineBooleanParam( kParamOverlayIn ); overlayIn->setLabel( "Overlay" ); overlayIn->setDefault( true ); overlayIn->setParent( groupIn ); OFX::RGBParamDescriptor* ouverlayInColor = desc.defineRGBParam( kParamOverlayInColor ); ouverlayInColor->setLabel( "Color" ); ouverlayInColor->setHint( "Input point overlay color" ); ouverlayInColor->setDefault( 1.0, 0.0, 0.0 ); ouverlayInColor->setParent( groupIn ); //////////////////// OUT Points //////////////////// OFX::GroupParamDescriptor* groupOut = desc.defineGroupParam( kParamGroupOut ); groupOut->setLabel( "Output points" ); groupOut->setOpen(false); OFX::Double2DParamDescriptor* pOut0 = desc.defineDouble2DParam( kParamPointOut + "0" ); pOut0->setLabel( "Out 0" ); pOut0->setHint( "Output point 0" ); pOut0->setDefault( -0.5, -0.5 ); pOut0->setParent( groupOut ); OFX::Double2DParamDescriptor* pOut1 = desc.defineDouble2DParam( kParamPointOut + "1" ); pOut1->setLabel( "Out 1" ); pOut1->setHint( "Output point 1" ); pOut1->setDefault( 0.5, -0.5 ); pOut1->setParent( groupOut ); OFX::Double2DParamDescriptor* pOut2 = desc.defineDouble2DParam( kParamPointOut + "2" ); pOut2->setLabel( "Out 2" ); pOut2->setHint( "Output point 2" ); pOut2->setDefault( -0.5, 0.5 ); pOut2->setParent( groupOut ); OFX::Double2DParamDescriptor* pOut3 = desc.defineDouble2DParam( kParamPointOut + "3" ); pOut3->setLabel( "Out 3" ); pOut3->setHint( "Output point 3" ); pOut3->setDefault( 0.5, 0.5 ); pOut3->setParent( groupOut ); OFX::BooleanParamDescriptor* overlayOut = desc.defineBooleanParam( kParamOverlayOut ); overlayOut->setLabel( "Overlay" ); overlayOut->setDefault( true ); overlayOut->setParent( groupOut ); OFX::RGBParamDescriptor* ouverlayOutColor = desc.defineRGBParam( kParamOverlayOutColor ); ouverlayOutColor->setLabel( "Color" ); ouverlayOutColor->setHint( "Output point overlay color" ); ouverlayOutColor->setDefault( 0.0, 0.0, 1.0 ); ouverlayOutColor->setParent( groupOut ); //////////////////// Persp Matrix //////////////////// OFX::GroupParamDescriptor* groupPerspMatrix = desc.defineGroupParam( kParamGroupPerspMatrix ); groupPerspMatrix->setLabel( "Perspective matrix" ); groupPerspMatrix->setHint( "Transformation matrix" ); OFX::Double3DParamDescriptor* perspMatrixRow0 = desc.defineDouble3DParam( kParamPerspMatrixRow + "0" ); perspMatrixRow0->setLabel( "row 0" ); perspMatrixRow0->setDefault( 1.0, 0.0, 0.0 ); perspMatrixRow0->setParent( groupPerspMatrix ); OFX::Double3DParamDescriptor* perspMatrixRow1 = desc.defineDouble3DParam( kParamPerspMatrixRow + "1" ); perspMatrixRow1->setLabel( "row 1" ); perspMatrixRow1->setDefault( 0.0, 1.0, 0.0 ); perspMatrixRow1->setParent( groupPerspMatrix ); OFX::Double3DParamDescriptor* perspMatrixRow2 = desc.defineDouble3DParam( kParamPerspMatrixRow + "2" ); perspMatrixRow2->setLabel( "row 2" ); perspMatrixRow2->setDefault( 0.0, 0.0, 1.0 ); perspMatrixRow2->setParent( groupPerspMatrix ); ////////////////// Bilinear Matrix //////////////////// OFX::GroupParamDescriptor* groupBilMatrix = desc.defineGroupParam( kParamGroupBilinearMatrix ); groupBilMatrix->setLabel( "Bilinear matrix" ); groupBilMatrix->setHint( "Billinear transformation matrix" ); OFX::Double2DParamDescriptor* bilMatrixRow0 = desc.defineDouble2DParam( kParamBilinearMatrixRow + "0" ); bilMatrixRow0->setLabel( "row 0" ); bilMatrixRow0->setDefault( 1.0, 0.0 ); bilMatrixRow0->setParent( groupBilMatrix ); OFX::Double2DParamDescriptor* bilMatrixRow1 = desc.defineDouble2DParam( kParamBilinearMatrixRow + "1" ); bilMatrixRow1->setLabel( "row 1" ); bilMatrixRow1->setDefault( 0.0, 1.0 ); bilMatrixRow1->setParent( groupBilMatrix ); OFX::Double2DParamDescriptor* bilMatrixRow2 = desc.defineDouble2DParam( kParamBilinearMatrixRow + "2" ); bilMatrixRow2->setLabel( "row 2" ); bilMatrixRow2->setDefault( 0.0, 0.0 ); bilMatrixRow2->setParent( groupBilMatrix ); OFX::Double2DParamDescriptor* bilMatrixRow3 = desc.defineDouble2DParam( kParamBilinearMatrixRow + "3" ); bilMatrixRow3->setLabel( "row 3" ); bilMatrixRow3->setDefault( 0.0, 0.0 ); bilMatrixRow3->setParent( groupBilMatrix ); }
void LensCalibrationPluginFactory::describeInContext(OFX::ImageEffectDescriptor& desc, OFX::ContextEnum context) { //Input Clip OFX::ClipDescriptor *srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); srcClip->addSupportedComponent(OFX::ePixelComponentRGBA); srcClip->setTemporalClipAccess(false); srcClip->setSupportsTiles(false); srcClip->setIsMask(false); srcClip->setOptional(false); //Output clip OFX::ClipDescriptor *dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(OFX::ePixelComponentRGBA); dstClip->setSupportsTiles(false); //Calibration Group { OFX::GroupParamDescriptor *groupCalibration = desc.defineGroupParam(kParamGroupCalibration); groupCalibration->setLabel("Calibration"); groupCalibration->setAsTab(); { OFX::Int2DParamDescriptor *param = desc.defineInt2DParam(kParamImageSize); param->setLabel("Image Size"); param->setHint("Input image size used to calibrate the optics. Obviously, all images should have the same size."); param->setDefault(0, 0); param->setDisplayRange(0, 0, 10000, 10000); param->setAnimates(false); param->setParent(*groupCalibration); param->setEnabled(false); // should not be edited by the user } { OFX::BooleanParamDescriptor *param = desc.defineBooleanParam(kParamInputImageIsGray); param->setLabel("Input image is gray"); param->setHint("Input image is gray"); param->setParent(*groupCalibration); } { OFX::ChoiceParamDescriptor *param = desc.defineChoiceParam(kParamPatternType); param->setLabel("Pattern Type"); param->setHint("Type of pattern to detect"); param->appendOptions(kStringParamPatternType); param->setDefault(eParamPatternTypeChessboard); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::Int2DParamDescriptor *param = desc.defineInt2DParam(kParamPatternSize); param->setLabel("Pattern Size"); param->setHint("Number of inner corners per one of board dimension Width Height"); param->setDefault(10, 7); param->setRange(2, 2, kOfxFlagInfiniteMax, kOfxFlagInfiniteMax); param->setDisplayRange(2, 2, 15, 15); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamSquareSize); param->setLabel("Square Size"); param->setHint("Define the size of the grid's square cells (mm)"); param->setDisplayRange(0, 100); param->setDefault(1); param->setAnimates(false); param->setParent(*groupCalibration); param->setLayoutHint(OFX::eLayoutHintDivider); } { OFX::IntParamDescriptor *param = desc.defineIntParam(kParamNbRadialCoef); param->setLabel("Nb Radial Coef"); param->setHint("Number of radial coefficient."); param->setRange(0, 6); param->setDisplayRange(0, 6); param->setDefault(3); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::IntParamDescriptor *param = desc.defineIntParam(kParamMaxFrames); param->setLabel("Max Frames"); param->setHint("Maximal number of frames to extract from the video file."); param->setRange(0, kOfxFlagInfiniteMax); param->setDisplayRange(0, 1000); param->setDefault(0); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::IntParamDescriptor *param = desc.defineIntParam(kParamMaxCalibFrames); param->setLabel("Max Calibration Frames"); param->setHint("Maximal number of frames to use to calibrate from the selected frames."); param->setRange(0, kOfxFlagInfiniteMax); param->setDisplayRange(0, 1000); param->setDefault(100); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::IntParamDescriptor *param = desc.defineIntParam(kParamCalibGridSize); param->setLabel("Max Calibration Grid Size"); param->setHint("Define the number of cells per edge."); param->setRange(0, kOfxFlagInfiniteMax); param->setDisplayRange(0, 100); param->setDefault(10); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::IntParamDescriptor *param = desc.defineIntParam(kParamMinInputFrames); param->setLabel("Min Input Frames"); param->setHint("Minimal number of frames to limit the calibration refinement loop."); param->setRange(0, kOfxFlagInfiniteMax); param->setDisplayRange(0, 1000); param->setDefault(10); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamMaxTotalAvgErr); param->setLabel("Max Total Average Error"); param->setHint("Maximal limit of the total average error"); param->setRange(0, 1); param->setDisplayRange(0, 1); param->setDefault(0.1); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::PushButtonParamDescriptor *param = desc.definePushButtonParam(kParamCalibrate); param->setLabel("Calibrate"); param->setHint("calibrate"); param->setParent(*groupCalibration); } } //Output Group { OFX::GroupParamDescriptor *groupOutput = desc.defineGroupParam(kParamGroupOutput); groupOutput->setLabel("Output"); groupOutput->setAsTab(); { OFX::BooleanParamDescriptor *param = desc.defineBooleanParam(kParamOutputIsCalibrated); param->setLabel("Is calibrated"); param->setHint("Is calibrated"); param->setParent(*groupOutput); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputAvgReprojErr); param->setLabel("Average Reprojection Error"); param->setDisplayRange(0, 10); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(true); param->setParent(*groupOutput); param->setLayoutHint(OFX::eLayoutHintDivider); } { OFX::GroupParamDescriptor *groupCamera = desc.defineGroupParam(kParamOutputCameraGroup); groupCamera->setLabel("Intrinsics Camera Parameters"); groupCamera->setParent(*groupOutput); groupCamera->setOpen(true); { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputFocalLenght); param->setLabel("Focal Length"); param->setDisplayRange(1, 100); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupCamera); } { OFX::Double2DParamDescriptor *param = desc.defineDouble2DParam(kParamOutputPrincipalPointOffset); param->setLabel("Principal Point"); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupCamera); } } { OFX::GroupParamDescriptor *groupLensDistortion = desc.defineGroupParam(kParamOutputLensDistortionGroup); groupLensDistortion->setLabel("Lens Distortion Coefficients"); groupLensDistortion->setParent(*groupOutput); groupLensDistortion->setOpen(true); { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputRadialCoef1); param->setLabel("Radial Coef1"); param->setDisplayRange(0, 10); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupLensDistortion); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputRadialCoef2); param->setLabel("Radial Coef2"); param->setDisplayRange(0, 10); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupLensDistortion); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputRadialCoef3); param->setLabel("Radial Coef3"); param->setDisplayRange(0, 10); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupLensDistortion); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputTangentialCoef1); param->setLabel("Tangential Coef1"); param->setDisplayRange(0, 10); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupLensDistortion); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputTangentialCoef2); param->setLabel("Tangential Coef2"); param->setDisplayRange(0, 10); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupLensDistortion); param->setLayoutHint(OFX::eLayoutHintDivider); } } { OFX::PushButtonParamDescriptor *param = desc.definePushButtonParam(kParamOutputClear); param->setLabel("Clear"); param->setHint("clear"); param->setEnabled(false); param->setParent(*groupOutput); } } //Debug Group { OFX::GroupParamDescriptor *groupDebug = desc.defineGroupParam(kParamGroupDebug); groupDebug->setLabel("Debug"); groupDebug->setAsTab(); { OFX::BooleanParamDescriptor *param = desc.defineBooleanParam(kParamDebugEnable); param->setLabel("Enable Debug"); param->setHint("Would you want to export undistorted images?"); param->setParent(*groupDebug); } { OFX::StringParamDescriptor *param = desc.defineStringParam(kParamDebugRejectedImgFolder); param->setLabel("Rejected Frames"); param->setHint("Folder to export delete images during the calibration refinement loop."); param->setStringType(OFX::eStringTypeDirectoryPath); param->setFilePathExists(true); param->setParent(*groupDebug); } { OFX::StringParamDescriptor *param = desc.defineStringParam(kParamDebugSelectedImgFolder); param->setLabel("Selected Frames"); param->setHint("Folder to export debug images."); param->setStringType(OFX::eStringTypeDirectoryPath); param->setFilePathExists(true); param->setParent(*groupDebug); } } }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void TextPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentRGB ); srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClip->setSupportsTiles( kSupportTiles ); srcClip->setOptional(true); // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( kSupportTiles ); OFX::StringParamDescriptor* text = desc.defineStringParam( kParamText ); text->setLabel( "Text" ); text->setStringType( OFX::eStringTypeMultiLine ); OFX::BooleanParamDescriptor* isExpression = desc.defineBooleanParam( kParamIsExpression ); isExpression->setLabel( "Expression" ); isExpression->setHint( "If you check this parameter the text must be a python code.\n" "The final result must be in a variable with the name of the parameter.\n" "Example:\n" "from math import *\n" //+ kParamText + "text = 'At frame '+str(time)+', value is ' + str( sin(time) )\n" ); isExpression->setDefault( false ); OFX::StringParamDescriptor* font = desc.defineStringParam( kParamFont ); font->setLabel( "Font file" ); font->setStringType( OFX::eStringTypeFilePath ); font->setDefault( "/usr/share/fonts/truetype/msttcorefonts/arial.ttf" ); OFX::IntParamDescriptor* size = desc.defineIntParam( kParamSize ); size->setLabel( "Size" ); size->setDefault( 18 ); size->setRange( 0, std::numeric_limits<int>::max() ); size->setDisplayRange( 0, 60 ); OFX::DoubleParamDescriptor* ratio = desc.defineDoubleParam( kParamRatio ); ratio->setLabel( "Ratio" ); ratio->setRange( 0.0, std::numeric_limits<double>::max() ); ratio->setDisplayRange( 0.0, 2.0 ); ratio->setDefault( 1.0 ); OFX::RGBAParamDescriptor* color = desc.defineRGBAParam( kParamColor ); color->setLabel( "Color" ); color->setDefault( 1.0, 1.0, 1.0, 1.0 ); OFX::Double2DParamDescriptor* position = desc.defineDouble2DParam( kParamPosition ); position->setLabel( "Position" ); position->setDefault( 0.0, 0.0 ); OFX::DoubleParamDescriptor* letterSpacing = desc.defineDoubleParam( kParamLetterSpacing ); letterSpacing->setLabel( "Letter spacing" ); letterSpacing->setDisplayRange( -10.0, 10.0 ); letterSpacing->setDefault( 0.0 ); OFX::ChoiceParamDescriptor* vAlign = desc.defineChoiceParam( kParamVAlign ); vAlign->setLabel( "Vertically align" ); vAlign->appendOption( kParamVAlignTop ); vAlign->appendOption( kParamVAlignCenter ); vAlign->appendOption( kParamVAlignBottom ); vAlign->setDefault( eParamVAlignCenter ); OFX::ChoiceParamDescriptor* hAlign = desc.defineChoiceParam( kParamHAlign ); hAlign->setLabel( "Horizontally align" ); hAlign->appendOption( kParamHAlignLeft ); hAlign->appendOption( kParamHAlignCenter ); hAlign->appendOption( kParamHAlignRight ); hAlign->setDefault( eParamHAlignCenter ); OFX::BooleanParamDescriptor* verticalFlip = desc.defineBooleanParam( kParamVerticalFlip ); verticalFlip->setLabel( "Vertical flip" ); verticalFlip->setDefault( false ); verticalFlip->setAnimates( false ); verticalFlip->setHint( "Some hosts use inverted images, so you can correct this problem using this flag." ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void ColorTransferPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { OFX::ClipDescriptor* srcClip = desc.defineClip( kOfxImageEffectSimpleSourceClipName ); srcClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcClip->addSupportedComponent( OFX::ePixelComponentRGB ); // srcClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcClip->setSupportsTiles( true ); // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); // dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstClip->setSupportsTiles( true ); OFX::ClipDescriptor* srcRefClip = desc.defineClip( kClipSrcRef ); srcRefClip->addSupportedComponent( OFX::ePixelComponentRGBA ); srcRefClip->addSupportedComponent( OFX::ePixelComponentRGB ); // srcRefClip->addSupportedComponent( OFX::ePixelComponentAlpha ); srcRefClip->setSupportsTiles( false ); srcRefClip->setOptional( true ); OFX::ClipDescriptor* dstRefClip = desc.defineClip( kClipDstRef ); dstRefClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstRefClip->addSupportedComponent( OFX::ePixelComponentRGB ); // dstRefClip->addSupportedComponent( OFX::ePixelComponentAlpha ); dstRefClip->setSupportsTiles( false ); OFX::ChoiceParamDescriptor* colorspace = desc.defineChoiceParam( kParamColorspace ); colorspace->setLabel( "Transformation colorspace" ); colorspace->setHint( "Select colorspace in which to apply the transformation" ); colorspace->appendOption( kParamColorspaceNone, "without colorspace transformation" ); colorspace->appendOption( kParamColorspaceLMS, "apply correction in LMS colorspace" ); colorspace->appendOption( kParamColorspaceLab, "apply correction in L(alpha)(beta) colorspace" ); colorspace->setDefault( eColorspaceLab ); OFX::DoubleParamDescriptor* averageCoef = desc.defineDoubleParam( kParamAverageCoef ); averageCoef->setLabel( "Average color coef" ); averageCoef->setDisplayRange( 0.0, 1.0 ); averageCoef->setDefault( 0.8 ); averageCoef->setHint( "Percentage of correction of the average color.\n" "It is often advantageous to reduce this ratio, " "especially if the two images are very different. " "Typical values are between 0.5 and 0.8." ); OFX::DoubleParamDescriptor* dynamicCoef = desc.defineDoubleParam( kParamDynamicCoef ); dynamicCoef->setLabel( "Dynamic coef" ); dynamicCoef->setDisplayRange( 0.0, 1.0 ); dynamicCoef->setDefault( 1.0 ); dynamicCoef->setHint( "Percentage of correction of the standard deviation." ); // // output region // OFX::Double2DParamDescriptor* regionA = desc.defineDouble2DParam( kParamRegionA ); // regionA->setLabel( "Region" ); // regionA->setDefault( -0.5, -0.5 ); // regionA->setIsSecret( true ); ///< @todo // OFX::Double2DParamDescriptor* regionB = desc.defineDouble2DParam( kParamRegionB ); // regionB->setLabel( "" ); // regionB->setDefault( 0.5, 0.5 ); // regionB->setIsSecret( true ); ///< @todo // // // same region // OFX::BooleanParamDescriptor* sameRegion = desc.defineBooleanParam( kParamSameRegion ); // sameRegion->setDefault( true ); // sameRegion->setIsSecret( true ); ///< @todo // // // input region // OFX::Double2DParamDescriptor* inputRegionA = desc.defineDouble2DParam( kParamInputRegionA ); // inputRegionA->setLabel( "Input region" ); // inputRegionA->setDefault( -0.5, -0.5 ); // inputRegionA->setIsSecret( true ); ///< @todo // OFX::Double2DParamDescriptor* inputRegionB = desc.defineDouble2DParam( kParamInputRegionB ); // inputRegionB->setLabel( "" ); // inputRegionB->setDefault( 0.5, 0.5 ); // inputRegionB->setIsSecret( true ); ///< @todo }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void ResizePluginFactory::describeInContext(OFX::ImageEffectDescriptor& desc, OFX::EContext context) { OFX::ClipDescriptor* srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); srcClip->addSupportedComponent(OFX::ePixelComponentRGBA); srcClip->addSupportedComponent(OFX::ePixelComponentRGB); srcClip->addSupportedComponent(OFX::ePixelComponentAlpha); srcClip->setSupportsTiles(kSupportTiles); // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(OFX::ePixelComponentRGBA); dstClip->addSupportedComponent(OFX::ePixelComponentRGB); dstClip->addSupportedComponent(OFX::ePixelComponentAlpha); dstClip->setSupportsTiles(kSupportTiles); OFX::ChoiceParamDescriptor* method = desc.defineChoiceParam(kParamMode); method->setLabel("Mode"); method->appendOption(kParamModeFormat); method->appendOption(kParamModeSize); method->appendOption(kParamModeScale); method->setDefault(eParamModeFormat); OFX::ChoiceParamDescriptor* format = desc.defineChoiceParam(kParamFormat); format->setLabel("Format"); format->appendOption(kParamFormatPCVideo, kParamFormatPCVideoLabel); format->appendOption(kParamFormatNTSC, kParamFormatNTSCLabel); format->appendOption(kParamFormatPAL, kParamFormatPALLabel); format->appendOption(kParamFormatHD, kParamFormatHDLabel); format->appendOption(kParamFormatNTSC169, kParamFormatNTSC169Label); format->appendOption(kParamFormatPAL169, kParamFormatPAL169Label); format->appendOption(kParamFormat1kSuper35, kParamFormat1kSuper35Label); format->appendOption(kParamFormat1kCinemascope, kParamFormat1kCinemascopeLabel); format->appendOption(kParamFormat2kSuper35, kParamFormat2kSuper35Label); format->appendOption(kParamFormat2kCinemascope, kParamFormat2kCinemascopeLabel); format->appendOption(kParamFormat4kSuper35, kParamFormat4kSuper35Label); format->appendOption(kParamFormat4kCinemascope, kParamFormat4kCinemascopeLabel); format->appendOption(kParamFormatSquare256, kParamFormatSquare256Label); format->appendOption(kParamFormatSquare512, kParamFormatSquare512Label); format->appendOption(kParamFormatSquare1k, kParamFormatSquare1kLabel); format->appendOption(kParamFormatSquare2k, kParamFormatSquare2kLabel); format->setDefault(eParamFormat2kCinemascope); OFX::Double2DParamDescriptor* scale = desc.defineDouble2DParam(kParamScale); scale->setLabel("Scale"); scale->setDefault(1.0, 1.0); scale->setRange(0.01, 0.01, std::numeric_limits<double>::max(), std::numeric_limits<double>::max()); scale->setDisplayRange(0.1, 0.1, 2.5, 2.5); scale->setHint("Scale the input image [0, 0, width*scale, height*scale]."); OFX::BooleanParamDescriptor* keepRatio = desc.defineBooleanParam(kParamSizeKeepRatio); keepRatio->setLabel("Keep ratio"); keepRatio->setDefault(false); keepRatio->setHint("Keep input image ratio."); OFX::Int2DParamDescriptor* size = desc.defineInt2DParam(kParamSize); size->setLabel("Size"); size->setDefault(200, 200); size->setRange(1, 1, std::numeric_limits<int>::max(), std::numeric_limits<int>::max()); size->setHint("Set the output size (width, height)."); OFX::ChoiceParamDescriptor* direction = desc.defineChoiceParam(kParamSizeOrientation); direction->setLabel("Orientation"); direction->appendOption(kParamSizeOrientationX); direction->appendOption(kParamSizeOrientationY); direction->setDefault(eParamSizeOrientationX); OFX::IntParamDescriptor* width = desc.defineIntParam(kParamSizeWidth); width->setLabel("Width"); width->setDefault(200); width->setRange(1, std::numeric_limits<int>::max()); width->setDisplayRange(0, 3000); width->setHint("Set the width in pixels and keep the input image ratio."); OFX::IntParamDescriptor* height = desc.defineIntParam(kParamSizeHeight); height->setLabel("Height"); height->setDefault(200); height->setRange(1, std::numeric_limits<int>::max()); height->setDisplayRange(0, 3000); height->setHint("Set the height in pixels and keep the input image ratio."); #if(TUTTLE_EXPERIMENTAL) OFX::BooleanParamDescriptor* center = desc.defineBooleanParam(kParamCenter); center->setLabel("Center resizing"); center->setDefault(false); center->setHint("Resize around the center point."); OFX::Double2DParamDescriptor* centerPoint = desc.defineDouble2DParam(kParamCenterPoint); centerPoint->setDefault(100, 100); centerPoint->setLabel("Center point at"); centerPoint->setHint("Position of the center point."); #endif // sampler parameters // describeSamplerParamsInContext(desc, context); }