void CrossFadeExamplePluginFactory::describeInContext(OFX::ImageEffectDescriptor &desc, ContextEnum /*context*/) { // we are a transition, so define the sourceFrom input clip ClipDescriptor *fromClip = desc.defineClip(kOfxImageEffectTransitionSourceFromClipName); fromClip->addSupportedComponent(ePixelComponentRGBA); fromClip->addSupportedComponent(ePixelComponentAlpha); fromClip->setTemporalClipAccess(false); fromClip->setSupportsTiles(true); // we are a transition, so define the sourceTo input clip ClipDescriptor *toClip = desc.defineClip(kOfxImageEffectTransitionSourceToClipName); toClip->addSupportedComponent(ePixelComponentRGBA); toClip->addSupportedComponent(ePixelComponentAlpha); toClip->setTemporalClipAccess(false); toClip->setSupportsTiles(true); // create the mandated output clip ClipDescriptor *dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(ePixelComponentRGBA); dstClip->addSupportedComponent(ePixelComponentAlpha); dstClip->setSupportsTiles(true); // Define the mandated "Transition" param, note that we don't do anything with this other than. // describe it. It is not a true param but how the host indicates to the plug-in how far through // the transition it is. It appears on no plug-in side UI, it is purely the hosts to manage. DoubleParamDescriptor *param = desc.defineDoubleParam("Transition"); (void)param; }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void TimeShiftPluginFactory::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 ); // Create the mandated output clip OFX::ClipDescriptor* dstClip = desc.defineClip( kOfxImageEffectOutputClipName ); dstClip->addSupportedComponent( OFX::ePixelComponentRGBA ); dstClip->addSupportedComponent( OFX::ePixelComponentRGB ); dstClip->addSupportedComponent( OFX::ePixelComponentAlpha ); switch( context ) { case OFX::eContextRetimer: { OFX::DoubleParamDescriptor* retimerParam = desc.defineDoubleParam( kOfxImageEffectRetimerParamName ); retimerParam->setLabel( "Source Time" ); retimerParam->setDefault( 0.0 ); break; } default: { OFX::DoubleParamDescriptor* offset = desc.defineDoubleParam( kParamOffset ); offset->setLabel( "Offset" ); offset->setDefault( 0.0 ); offset->setDisplayRange( -10, 10 ); break; } } }
/** * @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 CheckerboardPluginFactory::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::Int2DParamDescriptor* boxes = desc.defineInt2DParam( kCheckerboardBoxes ); boxes->setDefault( 10, 10 ); boxes->setLabel( "boxes number" ); boxes->setHint( "Number of boxes of the checkerboard." ); OFX::RGBAParamDescriptor* color1 = desc.defineRGBAParam( kCheckerboardColor1 ); color1->setDefault( 0, 0, 0, 1 ); color1->setLabel( "color1" ); OFX::RGBAParamDescriptor* color2 = desc.defineRGBAParam( kCheckerboardColor2 ); color2->setDefault( 1, 1, 1, 1 ); color2->setLabel( "color2" ); }
/** * @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 ); }
/** * @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 ); // 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( kText ); text->setLabel( "Text" ); text->setStringType( OFX::eStringTypeMultiLine ); OFX::StringParamDescriptor* font = desc.defineStringParam( kFont ); font->setLabel( "Font file" ); font->setStringType( OFX::eStringTypeFilePath ); font->setDefault( "/usr/share/fonts/truetype/msttcorefonts/arial.ttf" ); OFX::IntParamDescriptor* size = desc.defineIntParam( kSize ); size->setLabel( "Size" ); size->setDefault( 18 ); size->setRange( 0, std::numeric_limits<int>::max() ); size->setDisplayRange( 0, 60 ); OFX::DoubleParamDescriptor* ratio = desc.defineDoubleParam( kRatio ); 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( kColor ); color->setLabel( "Color" ); color->setDefault( 1.0, 1.0, 1.0, 1.0 ); OFX::Double2DParamDescriptor* position = desc.defineDouble2DParam( kPosition ); position->setLabel( "Position" ); position->setDefault( 0.0, 0.0 ); OFX::DoubleParamDescriptor* letterSpacing = desc.defineDoubleParam( kLetterSpacing ); letterSpacing->setLabel( "Letter spacing" ); letterSpacing->setDisplayRange( -10.0, 10.0 ); letterSpacing->setDefault( 0.0 ); OFX::BooleanParamDescriptor* verticalFlip = desc.defineBooleanParam( kVerticalFlip ); 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 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 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 ViewerPluginFactory::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 ); }
/** * @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 ); }
void SwitchPluginFactory::describeInContext(OFX::ImageEffectDescriptor &desc, OFX::ContextEnum context) { // Source clip only in the filter context // create the mandated source clip for (int i = 0; i < kSwitchPluginSourceClipCount; ++i) { std::stringstream s; s << i; ClipDescriptor *srcClip = desc.defineClip(s.str()); srcClip->addSupportedComponent(ePixelComponentRGB); srcClip->addSupportedComponent(ePixelComponentRGBA); srcClip->addSupportedComponent(ePixelComponentAlpha); srcClip->setTemporalClipAccess(false); srcClip->setSupportsTiles(true); srcClip->setIsMask(false); if (i >= 2) { srcClip->setOptional(true); } } // create the mandated output clip ClipDescriptor *dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(ePixelComponentRGB); dstClip->addSupportedComponent(ePixelComponentRGBA); dstClip->addSupportedComponent(ePixelComponentAlpha); dstClip->setSupportsTiles(true); // make some pages and to things in PageParamDescriptor *page = desc.definePageParam("Controls"); IntParamDescriptor *which = desc.defineIntParam(kSwitchPluginParamWhich); which->setLabels(kSwitchPluginParamWhichLabel, kSwitchPluginParamWhichLabel, kSwitchPluginParamWhichLabel); which->setHint(kSwitchPluginParamWhichHint); which->setDefault(0); which->setRange(0, kSwitchPluginSourceClipCount); which->setDisplayRange(0, 1); which->setAnimates(true); page->addChild(*which); #ifdef OFX_EXTENSIONS_NUKE // Enable transform by the host. // It is only possible for transforms which can be represented as a 3x3 matrix. desc.setCanTransform(true); #endif }
void InvertExamplePluginFactory::describeInContext(OFX::ImageEffectDescriptor &desc, OFX::ContextEnum /*context*/) { // Source clip only in the filter context // create the mandated source clip ClipDescriptor *srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); srcClip->addSupportedComponent(ePixelComponentRGBA); srcClip->addSupportedComponent(ePixelComponentAlpha); srcClip->setTemporalClipAccess(false); srcClip->setSupportsTiles(true); srcClip->setIsMask(false); // create the mandated output clip ClipDescriptor *dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(ePixelComponentRGBA); dstClip->addSupportedComponent(ePixelComponentAlpha); dstClip->setSupportsTiles(true); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void OpenImageIOReaderPluginFactory::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); }
/** * @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 HistogramKeyerPluginFactory::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 ); if( OFX::getImageEffectHostDescription()->supportsParametricParameter ) { // TUTTLE_COUT_INFOS; OFX::ParametricParamDescriptor* curves = desc.defineParametricParam( kParamColorSelection ); // TUTTLE_COUT_VAR( curves ); // TUTTLE_COUT_INFOS; curves->setRange( 0.0, 1.0 ); curves->setDimension( nbCurves ); curves->setIdentity(); curves->setDimensionLabel( kParamColorSelectionRed, 0 ); curves->setDimensionLabel( kParamColorSelectionGreen, 1 ); curves->setDimensionLabel( kParamColorSelectionBlue, 2 ); curves->setDimensionLabel( kParamColorSelectionHue, 3 ); curves->setDimensionLabel( kParamColorSelectionSaturation, 4 ); curves->setDimensionLabel( kParamColorSelectionLightness, 5 ); curves->setHint( "Color selection" ); curves->setUIColour( 0, {1,0,0} ); curves->setUIColour( 1, {0,1,0} ); curves->setUIColour( 2, {0,0,1} ); curves->setUIColour( 3, {1,1,1} ); curves->setUIColour( 4, {1,1,1} ); curves->setUIColour( 5, {1,1,1} ); curves->setInteractDescriptor( new OFX::DefaultParamInteractWrap<HistogramKeyerParamOverlayDescriptor>() ); } // TUTTLE_COUT_INFOS; }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void LutPluginFactory::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( kTuttlePluginFilename ); filename->setDefault( "" ); filename->setLabels( kTuttlePluginFilenameLabel, kTuttlePluginFilenameLabel, kTuttlePluginFilenameLabel ); filename->setStringType( OFX::eStringTypeFilePath ); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void ConvolutionPluginFactory::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::Int2DParamDescriptor* size = desc.defineInt2DParam( kParamSize ); size->setLabel( "Size" ); size->setDefault( 3, 3 ); // size->setIncrement( 2, 2 ); size->setRange( 3, 3, kParamSizeMax, kParamSizeMax ); OFX::ChoiceParamDescriptor* border = desc.defineChoiceParam( kParamBorder ); border->setLabel( "Border" ); border->appendOption( kParamBorderMirror ); border->appendOption( kParamBorderConstant ); border->appendOption( kParamBorderBlack ); border->appendOption( kParamBorderPadded ); for( unsigned int y = 0; y < kParamSizeMax; ++y ) { for( unsigned int x = 0; x < kParamSizeMax; ++x ) { const std::string name( getCoefName( y, x ) ); OFX::DoubleParamDescriptor* coef = desc.defineDoubleParam( name ); coef->setLabel( name ); coef->setDisplayRange( -10.0, 10.0 ); coef->setDefault( 0.0 ); } } }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void Move2DPluginFactory::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::Double2DParamDescriptor* translation = desc.defineDouble2DParam( kParamTranslation ); translation->setLabel( "Translation" ); translation->setDefault( 0, 0 ); }
/** * @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 ); }
/** * @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 ); }
/** * @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 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 ); }
void NoiseExamplePluginFactory::describeInContext(OFX::ImageEffectDescriptor &desc, ContextEnum context) { ClipDescriptor *dstClip = desc.defineClip("Output"); dstClip->addSupportedComponent(ePixelComponentRGBA); dstClip->addSupportedComponent(ePixelComponentAlpha); dstClip->setSupportsTiles(true); dstClip->setFieldExtraction(eFieldExtractSingle); DoubleParamDescriptor *param = desc.defineDoubleParam("Noise"); param->setLabels("noise", "noise", "noise"); param->setScriptName("noise"); param->setHint("How much noise to make."); param->setDefault(0.2); param->setRange(0, 10); param->setIncrement(0.1); param->setDisplayRange(0, 1); param->setAnimates(true); // can animate param->setDoubleType(eDoubleTypeScale); PageParamDescriptor *page = desc.definePageParam("Controls"); page->addChild(*param); }
/** * @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 NormalizePluginFactory::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* mode = desc.defineChoiceParam( kParamMode ); mode->setLabel( "Input" ); mode->appendOption( kParamModeAnalyse ); mode->appendOption( kParamModeCustom ); OFX::ChoiceParamDescriptor* analyse = desc.defineChoiceParam( kParamAnalyseMode ); analyse->setLabel( "Analyse" ); analyse->appendOption( kParamAnalysePerChannel ); analyse->appendOption( kParamAnalyseLuminosity ); analyse->appendOption( kParamAnalyseR ); analyse->appendOption( kParamAnalyseG ); analyse->appendOption( kParamAnalyseB ); analyse->appendOption( kParamAnalyseA ); OFX::PushButtonParamDescriptor* analyseNow = desc.definePushButtonParam( kParamAnalyseNow ); analyseNow->setLabel( "Analyse" ); OFX::GroupParamDescriptor* srcGroup = desc.defineGroupParam( kParamSrcGroup ); srcGroup->setLabel( "Source" ); OFX::RGBAParamDescriptor* srcMinColor = desc.defineRGBAParam( kParamSrcCustomColorMin ); srcMinColor->setLabel( "Min" ); srcMinColor->setDefault( 0.0, 0.0, 0.0, 0.0 ); srcMinColor->setParent( srcGroup ); OFX::RGBAParamDescriptor* srcMaxColor = desc.defineRGBAParam( kParamSrcCustomColorMax ); srcMaxColor->setLabel( "Max" ); srcMaxColor->setDefault( 1.0, 1.0, 1.0, 1.0 ); srcMaxColor->setParent( srcGroup ); OFX::GroupParamDescriptor* dstGroup = desc.defineGroupParam( kParamDstGroup ); dstGroup->setLabel( "Destination" ); OFX::RGBAParamDescriptor* dstMinColor = desc.defineRGBAParam( kParamDstCustomColorMin ); dstMinColor->setLabel( "Min" ); dstMinColor->setDefault( 0.0, 0.0, 0.0, 0.0 ); dstMinColor->setParent( dstGroup ); OFX::RGBAParamDescriptor* dstMaxColor = desc.defineRGBAParam( kParamDstCustomColorMax ); dstMaxColor->setLabel( "Max" ); dstMaxColor->setDefault( 1.0, 1.0, 1.0, 1.0 ); dstMaxColor->setParent( dstGroup ); OFX::GroupParamDescriptor* processGroup = desc.defineGroupParam( kParamProcessGroup ); processGroup->setLabel( "Process" ); OFX::BooleanParamDescriptor* processR = desc.defineBooleanParam( kParamProcessR ); processR->setLabel( "R" ); processR->setDefault( true ); processR->setParent( processGroup ); OFX::BooleanParamDescriptor* processG = desc.defineBooleanParam( kParamProcessG ); processG->setLabel( "G" ); processG->setDefault( true ); processG->setParent( processGroup ); OFX::BooleanParamDescriptor* processB = desc.defineBooleanParam( kParamProcessB ); processB->setLabel( "B" ); processB->setDefault( true ); processB->setParent( processGroup ); OFX::BooleanParamDescriptor* processA = desc.defineBooleanParam( kParamProcessA ); processA->setLabel( "A" ); processA->setDefault( true ); processA->setParent( processGroup ); }
void BasicExamplePluginFactory::describeInContext(OFX::ImageEffectDescriptor& desc, OFX::ContextEnum context) { // Source clip only in the filter context // create the mandated source clip ClipDescriptor *srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); srcClip->addSupportedComponent(ePixelComponentRGBA); srcClip->addSupportedComponent(ePixelComponentAlpha); srcClip->setTemporalClipAccess(false); srcClip->setSupportsTiles(true); srcClip->setIsMask(false); // if general or paint context, define the mask clip if(context == eContextGeneral || context == eContextPaint) { // if paint context, it is a mandated input called 'brush' ClipDescriptor *maskClip = context == eContextGeneral ? desc.defineClip("Mask") : desc.defineClip("Brush"); maskClip->addSupportedComponent(ePixelComponentAlpha); maskClip->setTemporalClipAccess(false); if(context == eContextGeneral) maskClip->setOptional(true); maskClip->setSupportsTiles(true); maskClip->setIsMask(true); // we are a mask input } // create the mandated output clip ClipDescriptor *dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(ePixelComponentRGBA); dstClip->addSupportedComponent(ePixelComponentAlpha); dstClip->setSupportsTiles(true); // make some pages and to things in PageParamDescriptor *page = desc.definePageParam("Controls"); // group param to group the scales GroupParamDescriptor *componentScalesGroup = desc.defineGroupParam("componentScales"); componentScalesGroup->setHint("Scales on the individual component"); componentScalesGroup->setLabels("Components", "Components", "Components"); // make overall scale params DoubleParamDescriptor *param = defineScaleParam(desc, "scale", "scale", "Scales all component in the image", 0); page->addChild(*param); // add a boolean to enable the component scale BooleanParamDescriptor *boolP = desc.defineBooleanParam("scaleComponents"); boolP->setDefault(true); boolP->setHint("Enables scales on individual components"); boolP->setLabels("Scale Components", "Scale Components", "Scale Components"); boolP->setParent(*componentScalesGroup); page->addChild(*boolP); // make the four component scale params param = defineScaleParam(desc, "scaleR", "red", "Scales the red component of the image", componentScalesGroup); page->addChild(*param); param = defineScaleParam(desc, "scaleG", "green", "Scales the green component of the image", componentScalesGroup); page->addChild(*param); param = defineScaleParam(desc, "scaleB", "blue", "Scales the blue component of the image", componentScalesGroup); page->addChild(*param); param = defineScaleParam(desc, "scaleA", "alpha", "Scales the alpha component of the image", componentScalesGroup); page->addChild(*param); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void AVReaderPluginFactory::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); // Groups OFX::GroupParamDescriptor* formatGroup = desc.defineGroupParam(kParamFormatGroup); OFX::GroupParamDescriptor* videoGroup = desc.defineGroupParam(kParamVideoGroup); OFX::GroupParamDescriptor* metaGroup = desc.defineGroupParam(kParamMetaGroup); formatGroup->setLabel("Format"); videoGroup->setLabel("Video"); metaGroup->setLabel("Metadata"); formatGroup->setAsTab(); videoGroup->setAsTab(); metaGroup->setAsTab(); /// FORMAT PARAMETERS avtranscoder::FormatContext formatContext(AV_OPT_FLAG_DECODING_PARAM); avtranscoder::OptionArray formatOptions = formatContext.getOptions(); common::addOptionsToGroup(desc, formatGroup, formatOptions, common::kPrefixFormat); OFX::GroupParamDescriptor* formatDetailedGroup = desc.defineGroupParam(kParamFormatDetailedGroup); formatDetailedGroup->setLabel("Detailed"); formatDetailedGroup->setAsTab(); formatDetailedGroup->setParent(formatGroup); avtranscoder::OptionArrayMap formatDetailedGroupOptions = avtranscoder::getAvailableOptionsPerOutputFormat(); common::addOptionsToGroup(desc, formatDetailedGroup, formatDetailedGroupOptions, common::kPrefixFormat); /// VIDEO PARAMETERS AVCodecContext* videoContext = avcodec_alloc_context3(NULL); avtranscoder::OptionArray videoOptions; avtranscoder::loadOptions(videoOptions, videoContext, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM); common::addOptionsToGroup(desc, videoGroup, videoOptions, common::kPrefixVideo); av_free(videoContext); OFX::BooleanParamDescriptor* useCustomSAR = desc.defineBooleanParam(kParamUseCustomSAR); useCustomSAR->setLabel("Override SAR"); useCustomSAR->setDefault(false); useCustomSAR->setHint("Override the file SAR (Storage Aspect Ratio) with a custom SAR value."); useCustomSAR->setParent(videoGroup); OFX::DoubleParamDescriptor* customSAR = desc.defineDoubleParam(kParamCustomSAR); customSAR->setLabel("Custom SAR"); customSAR->setDefault(1.0); customSAR->setDisplayRange(0., 3.); customSAR->setRange(0., 10.); customSAR->setHint("Choose a custom value to override the file SAR (Storage Aspect Ratio). Maximum value: 10."); customSAR->setParent(videoGroup); OFX::IntParamDescriptor* streamIndex = desc.defineIntParam(kParamVideoStreamIndex); streamIndex->setLabel(kParamVideoStreamIndexLabel); streamIndex->setDefault(0); streamIndex->setDisplayRange(0., 16.); streamIndex->setRange(0., 100.); streamIndex->setHint("Choose a custom value to decode the video stream you want. Maximum value: 100."); streamIndex->setParent(videoGroup); OFX::GroupParamDescriptor* videoDetailedGroup = desc.defineGroupParam(kParamVideoDetailedGroup); videoDetailedGroup->setLabel("Detailed"); videoDetailedGroup->setAsTab(); videoDetailedGroup->setParent(videoGroup); avtranscoder::OptionArrayMap videoDetailedGroupOptions = avtranscoder::getAvailableOptionsPerVideoCodec(); common::addOptionsToGroup(desc, videoDetailedGroup, videoDetailedGroupOptions, common::kPrefixVideo); /// METADATA PARAMETERS AVCodecContext* metaDataContext = avcodec_alloc_context3(NULL); avtranscoder::OptionArray metaDataOptions; avtranscoder::loadOptions(metaDataOptions, metaDataContext, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_METADATA); common::addOptionsToGroup(desc, metaGroup, metaDataOptions, common::kPrefixMetaData); av_free(metaDataContext); OFX::StringParamDescriptor* metaDataWrapper = desc.defineStringParam(kParamMetaDataWrapper); metaDataWrapper->setLabel(kParamMetaDataWrapperLabel); metaDataWrapper->setEnabled(false); metaDataWrapper->setStringType(OFX::eStringTypeMultiLine); metaDataWrapper->setParent(metaGroup); OFX::StringParamDescriptor* metaDataVideo = desc.defineStringParam(kParamMetaDataVideo); metaDataVideo->setLabel(kParamMetaDataVideoLabel); metaDataVideo->setEnabled(false); metaDataVideo->setStringType(OFX::eStringTypeMultiLine); metaDataVideo->setParent(metaGroup); OFX::StringParamDescriptor* metaDataAudio = desc.defineStringParam(kParamMetaDataAudio); metaDataAudio->setLabel(kParamMetaDataAudioLabel); metaDataAudio->setEnabled(false); metaDataAudio->setStringType(OFX::eStringTypeMultiLine); metaDataAudio->setParent(metaGroup); OFX::StringParamDescriptor* metaDataData = desc.defineStringParam(kParamMetaDataData); metaDataData->setLabel(kParamMetaDataDataLabel); metaDataData->setEnabled(false); metaDataData->setStringType(OFX::eStringTypeMultiLine); metaDataData->setParent(metaGroup); OFX::StringParamDescriptor* metaDataSubtitle = desc.defineStringParam(kParamMetaDataSubtitle); metaDataSubtitle->setLabel(kParamMetaDataSubtitleLabel); metaDataSubtitle->setEnabled(false); metaDataSubtitle->setStringType(OFX::eStringTypeMultiLine); metaDataSubtitle->setParent(metaGroup); OFX::StringParamDescriptor* metaDataAttachement = desc.defineStringParam(kParamMetaDataAttachement); metaDataAttachement->setLabel(kParamMetaDataAttachementLabel); metaDataAttachement->setEnabled(false); metaDataAttachement->setStringType(OFX::eStringTypeMultiLine); metaDataAttachement->setParent(metaGroup); OFX::StringParamDescriptor* metaDataUnknown = desc.defineStringParam(kParamMetaDataUnknown); metaDataUnknown->setLabel(kParamMetaDataUnknownLabel); metaDataUnknown->setEnabled(false); metaDataUnknown->setStringType(OFX::eStringTypeMultiLine); metaDataUnknown->setParent(metaGroup); /// VERBOSE OFX::BooleanParamDescriptor* useVerbose = desc.defineBooleanParam(kParamVerbose); useVerbose->setLabel("Set to verbose"); useVerbose->setDefault(false); useVerbose->setHint("Set plugin to verbose to get debug informations."); }
/** * @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."); }