diff --git a/gst/gstparse.c b/gst/gstparse.c index 336818c2a3..a4cbd80ed1 100644 --- a/gst/gstparse.c +++ b/gst/gstparse.c @@ -233,10 +233,35 @@ gst_parse_launch_cmdline(int argc,char *argv[],GstBin *parent,gst_parse_priv *pr argname = arg; pos[0] = '\0'; argval = pos+1; - GST_DEBUG(0,"attempting to set argument '%s' to '%s' on element '%s'\n", - argname,argval,GST_ELEMENT_NAME(previous)); - gst_util_set_object_arg (G_OBJECT(previous), argname, argval); - g_free(argname); + + // parse dparams values + if (strstr(arg, "@") == arg){ + GstDParamManager *dpman; + GstDParam *dparam; + GType dparam_type; + + argname++; + GST_DEBUG(0,"attempting to set dynamic param '%s' to '%s' on element '%s'\n", + argname,argval,GST_ELEMENT_NAME(previous)); + + dpman = GST_ELEMENT_DPARAM_MANAGER(previous); + dparam_type = gst_dpman_get_dparam_type(dpman, argname); + if (dparam_type > 0){ + gst_dpman_set_mode(dpman, "synchronous"); + dparam = gst_dparam_new(dparam_type); + gst_dpman_attach_dparam (dpman, argname, dparam); + GST_DPARAM_LOCK(dparam); + gst_dparam_set_value_from_string(GST_DPARAM_GET_POINT(dparam, 0LL)[0], argval); + GST_DPARAM_READY_FOR_UPDATE(dparam) = TRUE; + GST_DPARAM_UNLOCK(dparam); + } + + } else { + GST_DEBUG(0,"attempting to set argument '%s' to '%s' on element '%s'\n", + argname,argval,GST_ELEMENT_NAME(previous)); + gst_util_set_object_arg (G_OBJECT(previous), argname, argval); + g_free(argname); + } // element or argument, or beginning of bin or thread } else if (arg[0] == '[') {