void GenericOCIO::describeInContextContext(OFX::ImageEffectDescriptor &desc, OFX::ContextEnum /*context*/, OFX::PageParamDescriptor *page) { #ifdef OFX_IO_USING_OCIO OFX::GroupParamDescriptor* group = desc.defineGroupParam(kOCIOParamContext); group->setHint(kOCIOParamContextHint); group->setOpen(false); { OFX::StringParamDescriptor* param = desc.defineStringParam(kOCIOParamContextKey1); param->setHint(kOCIOParamContextHint); param->setAnimates(true); param->setParent(*group); param->setLayoutHint(OFX::eLayoutHintNoNewLine); page->addChild(*param); } { OFX::StringParamDescriptor* param = desc.defineStringParam(kOCIOParamContextValue1); param->setHint(kOCIOParamContextHint); param->setAnimates(true); param->setParent(*group); page->addChild(*param); } { OFX::StringParamDescriptor* param = desc.defineStringParam(kOCIOParamContextKey2); param->setHint(kOCIOParamContextHint); param->setAnimates(true); param->setParent(*group); param->setLayoutHint(OFX::eLayoutHintNoNewLine); page->addChild(*param); } { OFX::StringParamDescriptor* param = desc.defineStringParam(kOCIOParamContextValue2); param->setHint(kOCIOParamContextHint); param->setAnimates(true); param->setParent(*group); page->addChild(*param); } { OFX::StringParamDescriptor* param = desc.defineStringParam(kOCIOParamContextKey3); param->setHint(kOCIOParamContextHint); param->setAnimates(true); param->setParent(*group); param->setLayoutHint(OFX::eLayoutHintNoNewLine); page->addChild(*param); } { OFX::StringParamDescriptor* param = desc.defineStringParam(kOCIOParamContextValue3); param->setHint(kOCIOParamContextHint); param->setAnimates(true); param->setParent(*group); page->addChild(*param); } { OFX::StringParamDescriptor* param = desc.defineStringParam(kOCIOParamContextKey4); param->setHint(kOCIOParamContextHint); param->setAnimates(true); param->setParent(*group); param->setLayoutHint(OFX::eLayoutHintNoNewLine); page->addChild(*param); } { OFX::StringParamDescriptor* param = desc.defineStringParam(kOCIOParamContextValue4); param->setHint(kOCIOParamContextHint); param->setAnimates(true); param->setParent(*group); page->addChild(*param); } page->addChild(*group); #endif }
/** * @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."); }
void LensCalibrationPluginFactory::describeInContext(OFX::ImageEffectDescriptor& desc, OFX::ContextEnum context) { //Input Clip OFX::ClipDescriptor *srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); srcClip->addSupportedComponent(OFX::ePixelComponentRGBA); srcClip->setTemporalClipAccess(false); srcClip->setSupportsTiles(false); srcClip->setIsMask(false); srcClip->setOptional(false); //Output clip OFX::ClipDescriptor *dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(OFX::ePixelComponentRGBA); dstClip->setSupportsTiles(false); //Calibration Group { OFX::GroupParamDescriptor *groupCalibration = desc.defineGroupParam(kParamGroupCalibration); groupCalibration->setLabel("Calibration"); groupCalibration->setAsTab(); { OFX::Int2DParamDescriptor *param = desc.defineInt2DParam(kParamImageSize); param->setLabel("Image Size"); param->setHint("Input image size used to calibrate the optics. Obviously, all images should have the same size."); param->setDefault(0, 0); param->setDisplayRange(0, 0, 10000, 10000); param->setAnimates(false); param->setParent(*groupCalibration); param->setEnabled(false); // should not be edited by the user } { OFX::BooleanParamDescriptor *param = desc.defineBooleanParam(kParamInputImageIsGray); param->setLabel("Input image is gray"); param->setHint("Input image is gray"); param->setParent(*groupCalibration); } { OFX::ChoiceParamDescriptor *param = desc.defineChoiceParam(kParamPatternType); param->setLabel("Pattern Type"); param->setHint("Type of pattern to detect"); param->appendOptions(kStringParamPatternType); param->setDefault(eParamPatternTypeChessboard); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::Int2DParamDescriptor *param = desc.defineInt2DParam(kParamPatternSize); param->setLabel("Pattern Size"); param->setHint("Number of inner corners per one of board dimension Width Height"); param->setDefault(10, 7); param->setRange(2, 2, kOfxFlagInfiniteMax, kOfxFlagInfiniteMax); param->setDisplayRange(2, 2, 15, 15); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamSquareSize); param->setLabel("Square Size"); param->setHint("Define the size of the grid's square cells (mm)"); param->setDisplayRange(0, 100); param->setDefault(1); param->setAnimates(false); param->setParent(*groupCalibration); param->setLayoutHint(OFX::eLayoutHintDivider); } { OFX::IntParamDescriptor *param = desc.defineIntParam(kParamNbRadialCoef); param->setLabel("Nb Radial Coef"); param->setHint("Number of radial coefficient."); param->setRange(0, 6); param->setDisplayRange(0, 6); param->setDefault(3); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::IntParamDescriptor *param = desc.defineIntParam(kParamMaxFrames); param->setLabel("Max Frames"); param->setHint("Maximal number of frames to extract from the video file."); param->setRange(0, kOfxFlagInfiniteMax); param->setDisplayRange(0, 1000); param->setDefault(0); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::IntParamDescriptor *param = desc.defineIntParam(kParamMaxCalibFrames); param->setLabel("Max Calibration Frames"); param->setHint("Maximal number of frames to use to calibrate from the selected frames."); param->setRange(0, kOfxFlagInfiniteMax); param->setDisplayRange(0, 1000); param->setDefault(100); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::IntParamDescriptor *param = desc.defineIntParam(kParamCalibGridSize); param->setLabel("Max Calibration Grid Size"); param->setHint("Define the number of cells per edge."); param->setRange(0, kOfxFlagInfiniteMax); param->setDisplayRange(0, 100); param->setDefault(10); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::IntParamDescriptor *param = desc.defineIntParam(kParamMinInputFrames); param->setLabel("Min Input Frames"); param->setHint("Minimal number of frames to limit the calibration refinement loop."); param->setRange(0, kOfxFlagInfiniteMax); param->setDisplayRange(0, 1000); param->setDefault(10); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamMaxTotalAvgErr); param->setLabel("Max Total Average Error"); param->setHint("Maximal limit of the total average error"); param->setRange(0, 1); param->setDisplayRange(0, 1); param->setDefault(0.1); param->setAnimates(false); param->setParent(*groupCalibration); } { OFX::PushButtonParamDescriptor *param = desc.definePushButtonParam(kParamCalibrate); param->setLabel("Calibrate"); param->setHint("calibrate"); param->setParent(*groupCalibration); } } //Output Group { OFX::GroupParamDescriptor *groupOutput = desc.defineGroupParam(kParamGroupOutput); groupOutput->setLabel("Output"); groupOutput->setAsTab(); { OFX::BooleanParamDescriptor *param = desc.defineBooleanParam(kParamOutputIsCalibrated); param->setLabel("Is calibrated"); param->setHint("Is calibrated"); param->setParent(*groupOutput); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputAvgReprojErr); param->setLabel("Average Reprojection Error"); param->setDisplayRange(0, 10); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(true); param->setParent(*groupOutput); param->setLayoutHint(OFX::eLayoutHintDivider); } { OFX::GroupParamDescriptor *groupCamera = desc.defineGroupParam(kParamOutputCameraGroup); groupCamera->setLabel("Intrinsics Camera Parameters"); groupCamera->setParent(*groupOutput); groupCamera->setOpen(true); { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputFocalLenght); param->setLabel("Focal Length"); param->setDisplayRange(1, 100); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupCamera); } { OFX::Double2DParamDescriptor *param = desc.defineDouble2DParam(kParamOutputPrincipalPointOffset); param->setLabel("Principal Point"); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupCamera); } } { OFX::GroupParamDescriptor *groupLensDistortion = desc.defineGroupParam(kParamOutputLensDistortionGroup); groupLensDistortion->setLabel("Lens Distortion Coefficients"); groupLensDistortion->setParent(*groupOutput); groupLensDistortion->setOpen(true); { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputRadialCoef1); param->setLabel("Radial Coef1"); param->setDisplayRange(0, 10); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupLensDistortion); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputRadialCoef2); param->setLabel("Radial Coef2"); param->setDisplayRange(0, 10); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupLensDistortion); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputRadialCoef3); param->setLabel("Radial Coef3"); param->setDisplayRange(0, 10); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupLensDistortion); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputTangentialCoef1); param->setLabel("Tangential Coef1"); param->setDisplayRange(0, 10); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupLensDistortion); } { OFX::DoubleParamDescriptor *param = desc.defineDoubleParam(kParamOutputTangentialCoef2); param->setLabel("Tangential Coef2"); param->setDisplayRange(0, 10); param->setAnimates(true); param->setEvaluateOnChange(false); param->setEnabled(false); param->setAnimates(false); param->setParent(*groupLensDistortion); param->setLayoutHint(OFX::eLayoutHintDivider); } } { OFX::PushButtonParamDescriptor *param = desc.definePushButtonParam(kParamOutputClear); param->setLabel("Clear"); param->setHint("clear"); param->setEnabled(false); param->setParent(*groupOutput); } } //Debug Group { OFX::GroupParamDescriptor *groupDebug = desc.defineGroupParam(kParamGroupDebug); groupDebug->setLabel("Debug"); groupDebug->setAsTab(); { OFX::BooleanParamDescriptor *param = desc.defineBooleanParam(kParamDebugEnable); param->setLabel("Enable Debug"); param->setHint("Would you want to export undistorted images?"); param->setParent(*groupDebug); } { OFX::StringParamDescriptor *param = desc.defineStringParam(kParamDebugRejectedImgFolder); param->setLabel("Rejected Frames"); param->setHint("Folder to export delete images during the calibration refinement loop."); param->setStringType(OFX::eStringTypeDirectoryPath); param->setFilePathExists(true); param->setParent(*groupDebug); } { OFX::StringParamDescriptor *param = desc.defineStringParam(kParamDebugSelectedImgFolder); param->setLabel("Selected Frames"); param->setHint("Folder to export debug images."); param->setStringType(OFX::eStringTypeDirectoryPath); param->setFilePathExists(true); param->setParent(*groupDebug); } } }