added to -launch syntax: if an arg is prefixed with a '@' it will be treated as a...
authorSteve Baker <steve@stevebaker.org>
Wed, 12 Sep 2001 11:28:09 +0000 (11:28 +0000)
committerSteve Baker <steve@stevebaker.org>
Wed, 12 Sep 2001 11:28:09 +0000 (11:28 +0000)
Original commit message from CVS:
added to -launch syntax: if an arg is prefixed with a '@' it will be treated as a dparam.  eg sinesrc @volume=1.0 @freq=440.0

gst/gstparse.c

index 336818c..a4cbd80 100644 (file)
@@ -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] == '[') {