/** * @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 ConstantPluginFactory::describeInContext( OFX::ImageEffectDescriptor& desc, OFX::EContext context ) { describeGeneratorParamsInContext( desc, context ); OFX::RGBAParamDescriptor* color1 = desc.defineRGBAParam( kConstantColor ); color1->setDefault( 0, 0, 0, 1 ); color1->setLabel( "Color" ); }
/** * @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 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 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 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 ); }
/** * @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 The describe in context function, passed a plugin descriptor and a context */ void PropTesterPluginFactory::describeInContext(OFX::ImageEffectDescriptor &desc, ContextEnum context) { // Source clip only in the filter context if(context == eContextGeneral) { // create the mandated source clip ClipDescriptor *srcClip = desc.defineClip("Extra"); srcClip->addSupportedComponent(ePixelComponentRGBA); srcClip->setTemporalClipAccess(false); srcClip->setOptional(false); srcClip->setSupportsTiles(true); srcClip->setIsMask(false); } // Source clip only in the filter context if(context == eContextFilter || context == eContextGeneral) { // create the mandated source clip ClipDescriptor *srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); srcClip->addSupportedComponent(ePixelComponentRGBA); srcClip->setTemporalClipAccess(false); //srcClip->setOptional(false); srcClip->setSupportsTiles(true); srcClip->setIsMask(false); } // create the mandated output clip ClipDescriptor *dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(ePixelComponentRGBA); dstClip->setTemporalClipAccess(false); //dstClip->setOptional(false); dstClip->setSupportsTiles(true); dstClip->setIsMask(false); // make some pages and to things in PageParamDescriptor *page1 = desc.definePageParam("page1"); PageParamDescriptor *page2 = desc.definePageParam("page2"); PageParamDescriptor *page3 = desc.definePageParam("page3"); // make an int param IntParamDescriptor *iParam = desc.defineIntParam("Int"); iParam->setLabels("Int", "Int", "Int"); iParam->setScriptName("int"); iParam->setHint("An integer parameter"); iParam->setDefault(0); iParam->setRange(-100, 100); iParam->setDisplayRange(-100, 100); page1->addChild(*iParam); // make a 2D int param Int2DParamDescriptor *i2DParam = desc.defineInt2DParam("Int2D"); i2DParam->setLabels("Int2D", "Int2D", "Int2D"); i2DParam->setScriptName("int2D"); i2DParam->setHint("A 2D integer parameter"); i2DParam->setDefault(0, 0); i2DParam->setRange(-100, -100, 100, 100); i2DParam->setDisplayRange(-100, -100, 100, 100); page1->addChild(*i2DParam); // make a 3D int param Int3DParamDescriptor *i3DParam = desc.defineInt3DParam("Int3D"); i3DParam->setLabels("Int3D", "Int3D", "Int2D"); i3DParam->setScriptName("int3D"); i3DParam->setHint("A 3D integer parameter"); i3DParam->setDefault(0, 0, 0); i3DParam->setRange(-100, -100, -100, 100, 100, 100); i3DParam->setDisplayRange(-100, -100, -100, 100, 100, 100); page1->addChild(*i3DParam); page1->addChild(PageParamDescriptor::gSkipColumn); // boolean BooleanParamDescriptor *boolean = desc.defineBooleanParam("bool"); boolean->setLabels("bool", "bool", "bool"); boolean->setDefault(false); page1->addChild(*boolean); // choice ChoiceParamDescriptor *choice = desc.defineChoiceParam("choice"); choice->setLabels("choice", "choice", "choice"); choice->appendOption("This", "This"); choice->appendOption("That", "That"); choice->appendOption("The Other", "The Other"); choice->resetOptions(); choice->appendOption("Tom", "Tom"); choice->appendOption("Dick", "Dick"); choice->appendOption("Harry", "Harry"); choice->setDefault(0); page1->addChild(*choice); page1->addChild(PageParamDescriptor::gSkipColumn); // push button PushButtonParamDescriptor *push = desc.definePushButtonParam("push"); push->setLabels("push me", "push me", "push me Big Nose"); page1->addChild(*push); // make a custom param CustomParamDescriptor *custom = desc.defineCustomParam("custom"); custom->setLabels("custom", "custom", "custom"); custom->setDefault("wibble"); // rgba colours RGBAParamDescriptor *rgba = desc.defineRGBAParam("rgba"); rgba->setLabels("rgba", "rgba", "rgba"); rgba->setDefault(0, 0, 0, 1); page1->addChild(*rgba); RGBParamDescriptor *rgba2 = desc.defineRGBParam("rgbaCustom"); rgba2->setLabels("RGB Custom", "RGB Custom", "RGB Custom"); rgba2->setDefault(0, 1, 1); rgba2->setInteractDescriptor(new ColourInteractDescriptor<0>); page1->addChild(*rgba2); RGBParamDescriptor *rgba3 = desc.defineRGBParam("rgbaCustom2"); rgba3->setLabels("RGB Custom 2", "RGB Custom 2", "RGB Custom 2"); rgba3->setDefault(1, 0, 1); rgba3->setInteractDescriptor(new ColourInteractDescriptor<1>); page1->addChild(*rgba3); page1->addChild(PageParamDescriptor::gSkipRow); // rgb colour RGBParamDescriptor *rgb = desc.defineRGBParam("rgb"); rgb->setLabels("rgb", "rgb", "rgb"); rgb->setDefault(0, 0, 0); page1->addChild(*rgb); // make a 1D double parameter of each type describeDoubleParam(desc, "double", eDoubleTypePlain, -100, 100, page2); describeDoubleParam(desc, "angle", eDoubleTypeAngle, -100, 100, page2); describeDoubleParam(desc, "scale", eDoubleTypeScale, -1, 1, page2); describeDoubleParam(desc, "time", eDoubleTypeTime, -100, 100, page2); describeDoubleParam(desc, "absoluteTime", eDoubleTypeAbsoluteTime, 0, 1000, page2); describeDoubleParam(desc, "X_Value", eDoubleTypeNormalisedX, -1, 1, page2); describeDoubleParam(desc, "Y_Value", eDoubleTypeNormalisedY, -1, 1, page2); describeDoubleParam(desc, "X_Position", eDoubleTypeNormalisedXAbsolute, -1, 1, page2); describeDoubleParam(desc, "Y_Position", eDoubleTypeNormalisedYAbsolute, -1, 1, page2); page2->addChild(PageParamDescriptor::gSkipColumn); // make a 2D double parameter of each type describe2DDoubleParam(desc, "double2D", eDoubleTypePlain, -100, 100, page2); describe2DDoubleParam(desc, "angle2D", eDoubleTypeAngle, -100, 100, page2); describe2DDoubleParam(desc, "scale2D", eDoubleTypeScale, -1, 1, page2); describe2DDoubleParam(desc, "XY_Value", eDoubleTypeNormalisedXY, -1, 1, page2); describe2DDoubleParam(desc, "XY_Position", eDoubleTypeNormalisedXYAbsolute, -1, 1, page2); page2->addChild(PageParamDescriptor::gSkipColumn); // make a 3D double parameter of each type describe3DDoubleParam(desc, "double3D", eDoubleTypePlain, -100, 100, page2); describe3DDoubleParam(desc, "angle3D", eDoubleTypeAngle, -100, 100, page2); describe3DDoubleParam(desc, "scale3D", eDoubleTypeScale, -1, 1, page2); // make a string param param of each type describeStringParam(desc, "singleLine", eStringTypeSingleLine, page3); describeStringParam(desc, "multiLine", eStringTypeMultiLine, page3); describeStringParam(desc, "filePath", eStringTypeFilePath, page3); describeStringParam(desc, "dirPath", eStringTypeDirectoryPath, page3); describeStringParam(desc, "label", eStringTypeLabel, page3); }
/** * @brief Function called to describe the plugin controls and features. * @param[in, out] desc Effect descriptor * @param[in] context Application context */ void ColorTransformPluginFactory::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::DoubleParamDescriptor* paramHueShift = desc.defineDoubleParam( kParamHueShift ); paramHueShift->setLabel( "Hue Shift" ); paramHueShift->setDefault( 0.0 ); paramHueShift->setDisplayRange( 0.0, 1.0 ); OFX::DoubleParamDescriptor* paramSaturation = desc.defineDoubleParam( kParamSaturation ); paramSaturation->setLabel( "Saturation" ); paramSaturation->setDefault( 0.0 ); paramSaturation->setDisplayRange( 0.0, 1.0 ); OFX::DoubleParamDescriptor* paramBrightnessRGB = desc.defineDoubleParam( kParamBrightnessRGB ); paramBrightnessRGB->setLabel( "Global Brightness RGB" ); paramBrightnessRGB->setHint( "Global manipulation of RGB brightness." ); paramBrightnessRGB->setDefault( 1.0 ); paramBrightnessRGB->setDisplayRange( 0.0, 1.0 ); OFX::RGBAParamDescriptor* paramBrightness = desc.defineRGBAParam( kParamBrightness ); paramBrightness->setLabel( "Brightness" ); paramBrightness->setDefault( 1.0, 1.0, 1.0, 1.0 ); OFX::DoubleParamDescriptor* paramPivotRGB = desc.defineDoubleParam( kParamPivotRGB ); paramPivotRGB->setLabel( "Global Pivot RGB" ); paramPivotRGB->setHint( "Global manipulation of RGB pivot." ); paramPivotRGB->setDefault( 0.0 ); paramPivotRGB->setDisplayRange( 0.0, 1.0 ); OFX::RGBAParamDescriptor* paramPivot = desc.defineRGBAParam( kParamPivot ); paramPivot->setLabel( "Pivot" ); paramPivot->setDefault( 0.0, 0.0, 0.0, 0.0 ); OFX::DoubleParamDescriptor* paramContrastRGB = desc.defineDoubleParam( kParamContrastRGB ); paramContrastRGB->setLabel( "Global Contrast RGB" ); paramContrastRGB->setHint( "Global manipulation of RGB contrast." ); paramContrastRGB->setDefault( 1.0 ); paramContrastRGB->setDisplayRange( 0.0, 1.0 ); OFX::RGBAParamDescriptor* paramContrast = desc.defineRGBAParam( kParamContrast ); paramContrast->setLabel( "Contrast" ); paramContrast->setDefault( 1.0, 1.0, 1.0, 1.0 ); OFX::DoubleParamDescriptor* paramOffsetRGB = desc.defineDoubleParam( kParamOffsetRGB ); paramOffsetRGB->setLabel( "Global Offset RGB" ); paramOffsetRGB->setHint( "Global manipulation of RGB offset." ); paramOffsetRGB->setDefault( 0.0 ); paramOffsetRGB->setDisplayRange( 0.0, 1.0 ); OFX::RGBAParamDescriptor* paramOffset = desc.defineRGBAParam( kParamOffset ); paramOffset->setLabel( "Offset" ); paramOffset->setDefault( 0.0, 0.0, 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 ImageStatisticsPluginFactory::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 ); OFX::ChoiceParamDescriptor* coordSystem = desc.defineChoiceParam( kParamCoordinateSystem ); coordSystem->setLabel( "Coordinate system" ); coordSystem->appendOption( kParamCoordinateSystemNormalized ); coordSystem->appendOption( kParamCoordinateSystemCanonical ); coordSystem->setDefault( 0 ); OFX::Double2DParamDescriptor* rectCenter = desc.defineDouble2DParam( kParamRectCenter ); rectCenter->setLabel( "Center" ); rectCenter->setDoubleType( OFX::eDoubleTypePlain ); // rectCenter->setDoubleType( OFX::eDoubleTypeNormalisedXYAbsolute ); rectCenter->setDefault( 0.5, 0.5 ); OFX::Double2DParamDescriptor* rectSize = desc.defineDouble2DParam( kParamRectSize ); rectSize->setLabel( "Size" ); rectSize->setDoubleType( OFX::eDoubleTypePlain ); // rectSize->setDoubleType( OFX::eDoubleTypeNormalisedXYAbsolute ); rectSize->setDefault( 0.5, 0.5 ); OFX::ChoiceParamDescriptor* chooseOutput = desc.defineChoiceParam( kParamChooseOutput ); chooseOutput->setLabel( "Choose output" ); chooseOutput->appendOption( kParamChooseOutputSource ); chooseOutput->appendOption( kParamChooseOutputAverage ); chooseOutput->appendOption( kParamChooseOutputChannelMin ); chooseOutput->appendOption( kParamChooseOutputChannelMax ); chooseOutput->appendOption( kParamChooseOutputLuminosityMin ); chooseOutput->appendOption( kParamChooseOutputLuminosityMax ); chooseOutput->setDefault( 0 ); OFX::GroupParamDescriptor* outputGroup = desc.defineGroupParam( kParamOutputGroup ); outputGroup->setLabel( "Output" ); // ----------------------------------------------------------------------------- OFX::GroupParamDescriptor* rgbaGroup = desc.defineGroupParam( kParamOutputGroupRGBA ); rgbaGroup->setLabel( "RGBA" ); rgbaGroup->setParent( outputGroup ); OFX::RGBAParamDescriptor* outputAverage = desc.defineRGBAParam( kParamOutputAverage ); outputAverage->setLabel( "Average" ); outputAverage->setParent( rgbaGroup ); outputAverage->setEvaluateOnChange( false ); OFX::RGBAParamDescriptor* outputChannelMin = desc.defineRGBAParam( kParamOutputChannelMin ); outputChannelMin->setLabel( "Channels' min" ); outputChannelMin->setHint( "Minimum value per channel" ); outputChannelMin->setParent( rgbaGroup ); outputChannelMin->setEvaluateOnChange( false ); OFX::RGBAParamDescriptor* outputChannelMax = desc.defineRGBAParam( kParamOutputChannelMax ); outputChannelMax->setLabel( "Channels' max" ); outputChannelMax->setParent( rgbaGroup ); outputChannelMax->setEvaluateOnChange( false ); OFX::RGBAParamDescriptor* outputLuminosityMin = desc.defineRGBAParam( kParamOutputLuminosityMin ); outputLuminosityMin->setLabel( "Luminosity min" ); outputLuminosityMin->setParent( rgbaGroup ); outputLuminosityMin->setEvaluateOnChange( false ); OFX::RGBAParamDescriptor* outputLuminosityMax = desc.defineRGBAParam( kParamOutputLuminosityMax ); outputLuminosityMax->setLabel( "Luminosity max" ); outputLuminosityMax->setParent( rgbaGroup ); outputLuminosityMax->setEvaluateOnChange( false ); OFX::RGBAParamDescriptor* outputKurtosis = desc.defineRGBAParam( kParamOutputKurtosis ); outputKurtosis->setLabel( "Kurtosis" ); outputKurtosis->setParent( rgbaGroup ); outputKurtosis->setEvaluateOnChange( false ); OFX::RGBAParamDescriptor* outputSkewness = desc.defineRGBAParam( kParamOutputSkewness ); outputSkewness->setLabel( "Skewness" ); outputSkewness->setParent( rgbaGroup ); outputSkewness->setEvaluateOnChange( false ); // ----------------------------------------------------------------------------- OFX::GroupParamDescriptor* hslGroup = desc.defineGroupParam( kParamOutputGroupHSL ); hslGroup->setLabel( "HSL" ); hslGroup->setParent( outputGroup ); OFX::Double3DParamDescriptor* outputAverageHSL = desc.defineDouble3DParam( kParamOutputAverageHSL ); outputAverageHSL->setLabel( "Average" ); outputAverageHSL->setDoubleType( OFX::eDoubleTypePlain ); outputAverageHSL->setDimensionLabels( "h", "s", "l" ); outputAverageHSL->setParent( hslGroup ); outputAverageHSL->setEvaluateOnChange( false ); OFX::Double3DParamDescriptor* outputChannelMinHSL = desc.defineDouble3DParam( kParamOutputChannelMinHSL ); outputChannelMinHSL->setLabel( "Channels' min" ); outputChannelMinHSL->setHint( "Minimum value per channel" ); outputChannelMinHSL->setDoubleType( OFX::eDoubleTypePlain ); outputChannelMinHSL->setDimensionLabels( "h", "s", "l" ); outputChannelMinHSL->setParent( hslGroup ); outputChannelMinHSL->setEvaluateOnChange( false ); OFX::Double3DParamDescriptor* outputChannelMaxHSL = desc.defineDouble3DParam( kParamOutputChannelMaxHSL ); outputChannelMaxHSL->setLabel( "Channels' max" ); outputChannelMaxHSL->setDoubleType( OFX::eDoubleTypePlain ); outputChannelMaxHSL->setDimensionLabels( "h", "s", "l" ); outputChannelMaxHSL->setParent( hslGroup ); outputChannelMaxHSL->setEvaluateOnChange( false ); OFX::Double3DParamDescriptor* outputLuminosityMinHSL = desc.defineDouble3DParam( kParamOutputLuminosityMinHSL ); outputLuminosityMinHSL->setLabel( "Luminosity min" ); outputLuminosityMinHSL->setDoubleType( OFX::eDoubleTypePlain ); outputLuminosityMinHSL->setDimensionLabels( "h", "s", "l" ); outputLuminosityMinHSL->setParent( hslGroup ); outputLuminosityMinHSL->setEvaluateOnChange( false ); OFX::Double3DParamDescriptor* outputLuminosityMaxHSL = desc.defineDouble3DParam( kParamOutputLuminosityMaxHSL ); outputLuminosityMaxHSL->setLabel( "Luminosity max" ); outputLuminosityMaxHSL->setDoubleType( OFX::eDoubleTypePlain ); outputLuminosityMaxHSL->setDimensionLabels( "h", "s", "l" ); outputLuminosityMaxHSL->setParent( hslGroup ); outputLuminosityMaxHSL->setEvaluateOnChange( false ); OFX::Double3DParamDescriptor* outputKurtosisHSL = desc.defineDouble3DParam( kParamOutputKurtosisHSL ); outputKurtosisHSL->setLabel( "Kurtosis" ); outputKurtosisHSL->setDoubleType( OFX::eDoubleTypePlain ); outputKurtosisHSL->setDimensionLabels( "h", "s", "l" ); outputKurtosisHSL->setParent( hslGroup ); outputKurtosisHSL->setEvaluateOnChange( false ); OFX::Double3DParamDescriptor* outputSkewnessHSL = desc.defineDouble3DParam( kParamOutputSkewnessHSL ); outputSkewnessHSL->setLabel( "Skewness" ); outputSkewnessHSL->setDoubleType( OFX::eDoubleTypePlain ); outputSkewnessHSL->setDimensionLabels( "h", "s", "l" ); outputSkewnessHSL->setParent( hslGroup ); outputSkewnessHSL->setEvaluateOnChange( false ); }