add descratch plugin, single frame silence insert, docs
[goodguy/history.git] / cinelerra-5.1 / cinelerra / pluginfclient.C
index bb821d344fb68a865d37082339543faddae660f8..3edc9f6777fa520df7e3455cdd6b0d0577b858ef 100644 (file)
@@ -1098,15 +1098,24 @@ int PluginFFilter::init(const char *name, PluginFClientConfig *conf)
                graph->nb_threads  = 0;
        }
        fctx = avfilter_graph_alloc_filter(graph, filter, inst_name);
-       fctx->thread_type = graph->thread_type; // bug in avfilter
        if( !fctx ) return AVERROR(ENOMEM);
+       fctx->thread_type = graph->thread_type; // bug in avfilter
        if( conf ) {
                AVDictionary *opts = 0;
                for( int i=0; i<conf->size(); ++i ) {
                        PluginFClient_Opt *op = conf->get(i);
                        const char *name = op->opt->name;
                        char val[BCTEXTLEN], *vp = op->get(val, sizeof(val));
-                       if( vp ) av_dict_set(&opts, name, vp, 0);
+                       if( !vp ) continue;
+                       uint8_t *bp = 0;
+// unspecified opts cause a special behavior in some filters (lut3d)
+// so... if opt value is the default, skip it or no special behavior
+                       if( av_opt_get(filter_config(), name, 0, &bp) >= 0 ) {
+                               int result = strcmp((const char *)bp, vp);
+                               av_freep(&bp);
+                               if( !result ) continue;
+                       }
+                       av_dict_set(&opts, name, vp, 0);
                }
                ret = avfilter_init_dict(fctx, &opts);
                av_dict_free(&opts);