Merged the float property patch from Steve Baker. This patch doesn't really work...
authorWim Taymans <wim.taymans@gmail.com>
Mon, 2 Apr 2001 19:56:34 +0000 (19:56 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Mon, 2 Apr 2001 19:56:34 +0000 (19:56 +0000)
Original commit message from CVS:
Merged the float property patch from Steve Baker. This patch doesn't
really work yet...

configure.in
docs/libs/.gitignore
examples/helloworld/helloworld.c
gst/gstprops.c
gst/gstprops.h
gst/gstpropsprivate.h
tests/old/examples/helloworld/helloworld.c

index ce26c5a..827e1e0 100644 (file)
@@ -815,6 +815,7 @@ plugins/filters/smooth/Makefile
 plugins/filters/median/Makefile
 plugins/filters/ladspa/Makefile
 plugins/filters/stereo2mono/Makefile
+plugins/filters/colorspace/Makefile
 plugins/icecast/Makefile
 plugins/icecast/icecastsend/Makefile
 plugins/effects/Makefile
index fce9342..b5548ac 100644 (file)
@@ -1,6 +1,5 @@
 Makefile
 Makefile.in
-tmpl
 html
 sgml
 gstreamer-libs-unused.txt
index 6dc732e..0ad2daa 100644 (file)
@@ -13,7 +13,7 @@ void eos(GstElement *element)
 
 int main(int argc,char *argv[]) 
 {
-  GstElement *bin, *disksrc, *parse, *decoder, *downmix, *osssink;
+  GstElement *bin, *disksrc, *parse, *decoder, *downmix, *mulaw, *osssink;
 
   gst_init(&argc,&argv);
 
@@ -35,6 +35,7 @@ int main(int argc,char *argv[])
   parse = gst_elementfactory_make("mp3parse","parse");
   decoder = gst_elementfactory_make("mpg123","decoder");
   downmix = gst_elementfactory_make("stereo2mono","stereo2mono");
+  mulaw = gst_elementfactory_make("mulawencode","mulaw");
   /* and an audio sink */
   osssink = gst_elementfactory_make("osssink", "play_audio");
 
@@ -43,6 +44,7 @@ int main(int argc,char *argv[])
   gst_bin_add(GST_BIN(bin), parse);
   gst_bin_add(GST_BIN(bin), decoder);
   gst_bin_add(GST_BIN(bin), downmix);
+  gst_bin_add(GST_BIN(bin), mulaw);
   gst_bin_add(GST_BIN(bin), osssink);
 
   /* connect src to sink */
@@ -53,6 +55,8 @@ int main(int argc,char *argv[])
   gst_pad_connect(gst_element_get_pad(decoder,"src"),
                   gst_element_get_pad(downmix,"sink"));
   gst_pad_connect(gst_element_get_pad(downmix,"src"),
+                  gst_element_get_pad(mulaw,"sink"));
+  gst_pad_connect(gst_element_get_pad(mulaw,"src"),
                   gst_element_get_pad(osssink,"sink"));
 
   /* start playing */
@@ -71,6 +75,7 @@ int main(int argc,char *argv[])
   gst_object_destroy(GST_OBJECT(parse));
   gst_object_destroy(GST_OBJECT(decoder));
   gst_object_destroy(GST_OBJECT(downmix));
+  gst_object_destroy(GST_OBJECT(mulaw));
   gst_object_destroy(GST_OBJECT(disksrc));
   gst_object_destroy(GST_OBJECT(bin));
 
index d708010..001d199 100644 (file)
@@ -39,6 +39,8 @@ static guint _arg_len[] = {
   0,  // GST_PROPS_LIST_ID_NUM,
   1,  // GST_PROPS_INT_ID_NUM,
   2,  // GST_PROPS_INT_RANGE_ID_NUM,
+  1,  // GST_PROPS_FLOAT_ID_NUM,
+  2,  // GST_PROPS_FLOAT_RANGE_ID_NUM,
   1,  // GST_PROPS_FOURCC_ID_NUM,
   1,  // GST_PROPS_BOOL_ID_NUM,
   1,  // GST_PROPS_STRING_ID_NUM,
@@ -105,6 +107,15 @@ gst_props_create_entry (GstPropsFactory factory, gint *skipped)
       entry->data.int_range_data.min = GPOINTER_TO_INT (factory[i++]);
       entry->data.int_range_data.max = GPOINTER_TO_INT (factory[i++]);
       break;
+    case GST_PROPS_FLOAT_ID_NUM:
+      entry->propstype = GST_PROPS_FLOAT_ID_NUM;
+      entry->data.float_data = *(gfloat*)factory[i++];
+      break;
+    case GST_PROPS_FLOAT_RANGE_ID_NUM:
+      entry->propstype = GST_PROPS_FLOAT_RANGE_ID_NUM;
+      entry->data.float_range_data.min = *(gfloat*)factory[i++];
+      entry->data.float_range_data.max = *(gfloat*)factory[i++];
+      break;
     case GST_PROPS_FOURCC_ID_NUM:
       entry->propstype = GST_PROPS_FOURCC_ID_NUM;
       entry->data.fourcc_data = GPOINTER_TO_INT (factory[i++]);
@@ -374,7 +385,12 @@ gst_props_set (GstProps *props, const gchar *name, GstPropsFactoryEntry entry, .
         thisentry->propstype = GST_PROPS_INT_ID_NUM;
         value = va_arg (var_args, GstPropsFactoryEntry);
         thisentry->data.int_data = GPOINTER_TO_INT (value);
-       break;
+        break;
+      case GST_PROPS_FLOAT_ID:
+        thisentry->propstype = GST_PROPS_FLOAT_ID_NUM;
+        value = va_arg (var_args, GstPropsFactoryEntry);
+        thisentry->data.float_data = *(gfloat*)value;
+        break;
       case GST_PROPS_FOURCC_ID_NUM:
         thisentry->propstype = GST_PROPS_FOURCC_ID_NUM;
         value = va_arg (var_args, GstPropsFactoryEntry);
@@ -735,6 +751,18 @@ gst_props_entry_check_compatibility (GstPropsEntry *entry1, GstPropsEntry *entry
           return FALSE;
       }
       break;
+    case GST_PROPS_FLOAT_RANGE_ID_NUM:
+      switch (entry2->propstype) {
+       // a - b   <--->   a - c
+        case GST_PROPS_FLOAT_RANGE_ID_NUM:
+         return (entry2->data.float_range_data.min <= entry1->data.float_range_data.min &&
+                 entry2->data.float_range_data.max >= entry1->data.float_range_data.max);
+        case GST_PROPS_LIST_ID_NUM:
+         return gst_props_entry_check_list_compatibility (entry1, entry2);
+        default:
+          return FALSE;
+      }
+      break;
     case GST_PROPS_FOURCC_ID_NUM:
       switch (entry2->propstype) {
        // b   <--->   a
@@ -763,6 +791,22 @@ gst_props_entry_check_compatibility (GstPropsEntry *entry1, GstPropsEntry *entry
           return FALSE;
       }
       break;
+    case GST_PROPS_FLOAT_ID_NUM:
+      switch (entry2->propstype) {
+       // b   <--->   a - d
+        case GST_PROPS_FLOAT_RANGE_ID_NUM:
+         return (entry2->data.float_range_data.min <= entry1->data.float_data &&
+                 entry2->data.float_range_data.max >= entry1->data.float_data);
+       // b   <--->   a
+        case GST_PROPS_FLOAT_ID_NUM:
+         return (entry2->data.float_data == entry1->data.float_data);
+       // b   <--->   a,b,c
+        case GST_PROPS_LIST_ID_NUM:
+         return gst_props_entry_check_list_compatibility (entry1, entry2);
+        default:
+          return FALSE;
+      }
+      break;
     case GST_PROPS_BOOL_ID_NUM:
       switch (entry2->propstype) {
        // t   <--->   t
@@ -886,6 +930,23 @@ gst_props_save_thyself_func (GstPropsEntry *entry, xmlNodePtr parent)
       xmlNewProp (subtree, "max", str);
       g_free(str);
       break;
+    case GST_PROPS_FLOAT_ID_NUM: 
+      subtree = xmlNewChild (parent, NULL, "float", NULL);
+      xmlNewProp (subtree, "name", g_quark_to_string (entry->propid));
+      str = g_strdup_printf ("%f", entry->data.float_data);
+      xmlNewProp (subtree, "value", str);
+      g_free(str);
+      break;
+    case GST_PROPS_FLOAT_RANGE_ID_NUM: 
+      subtree = xmlNewChild (parent, NULL, "floatrange", NULL);
+      xmlNewProp (subtree, "name", g_quark_to_string (entry->propid));
+      str = g_strdup_printf ("%f", entry->data.float_range_data.min);
+      xmlNewProp (subtree, "min", str);
+      g_free(str);
+      str = g_strdup_printf ("%f", entry->data.float_range_data.max);
+      xmlNewProp (subtree, "max", str);
+      g_free(str);
+      break;
     case GST_PROPS_FOURCC_ID_NUM: 
       str = g_strdup_printf ("%4.4s", (gchar *)&entry->data.fourcc_data);
       xmlAddChild (parent, xmlNewComment (str));
@@ -981,6 +1042,27 @@ gst_props_load_thyself_func (xmlNodePtr field)
     sscanf (prop, "%d", &entry->data.int_range_data.max);
     g_free (prop);
   }
+  else if (!strcmp(field->name, "float")) {
+    entry->propstype = GST_PROPS_FLOAT_ID_NUM;
+    prop = xmlGetProp(field, "name");
+    entry->propid = g_quark_from_string (prop);
+    g_free (prop);
+    prop = xmlGetProp(field, "value");
+    sscanf (prop, "%f", &entry->data.float_data);
+    g_free (prop);
+  }
+  else if (!strcmp(field->name, "floatrange")) {
+    entry->propstype = GST_PROPS_FLOAT_RANGE_ID_NUM;
+    prop = xmlGetProp(field, "name");
+    entry->propid = g_quark_from_string (prop);
+    g_free (prop);
+    prop = xmlGetProp (field, "min");
+    sscanf (prop, "%f", &entry->data.float_range_data.min);
+    g_free (prop);
+    prop = xmlGetProp (field, "max");
+    sscanf (prop, "%f", &entry->data.float_range_data.max);
+    g_free (prop);
+  }
   else if (!strcmp(field->name, "boolean")) {
     entry->propstype = GST_PROPS_BOOL_ID_NUM;
     prop = xmlGetProp(field, "name");
@@ -1079,3 +1161,7 @@ gst_props_load_thyself (xmlNodePtr parent)
   return props;
 }
 
+gfloat* _gst_props_floatpointer (gfloat f)
+{
+  return &f;
+}
index c647dca..93ee078 100644 (file)
@@ -45,6 +45,8 @@ typedef enum {
    GST_PROPS_LIST_ID_NUM,
    GST_PROPS_INT_ID_NUM,
    GST_PROPS_INT_RANGE_ID_NUM,
+   GST_PROPS_FLOAT_ID_NUM,
+   GST_PROPS_FLOAT_RANGE_ID_NUM,
    GST_PROPS_FOURCC_ID_NUM,
    GST_PROPS_BOOL_ID_NUM,
    GST_PROPS_STRING_ID_NUM,
@@ -55,6 +57,8 @@ typedef enum {
 #define GST_PROPS_LIST_ID      GINT_TO_POINTER(GST_PROPS_LIST_ID_NUM)
 #define GST_PROPS_INT_ID       GINT_TO_POINTER(GST_PROPS_INT_ID_NUM)
 #define GST_PROPS_INT_RANGE_ID         GINT_TO_POINTER(GST_PROPS_INT_RANGE_ID_NUM)
+#define GST_PROPS_FLOAT_ID     GINT_TO_POINTER(GST_PROPS_FLOAT_ID_NUM)
+#define GST_PROPS_FLOAT_RANGE_ID       GINT_TO_POINTER(GST_PROPS_FLOAT_RANGE_ID_NUM)
 #define GST_PROPS_FOURCC_ID    GINT_TO_POINTER(GST_PROPS_FOURCC_ID_NUM)
 #define GST_PROPS_BOOL_ID      GINT_TO_POINTER(GST_PROPS_BOOL_ID_NUM)
 #define GST_PROPS_STRING_ID    GINT_TO_POINTER(GST_PROPS_STRING_ID_NUM)
@@ -65,6 +69,10 @@ typedef enum {
 #define GST_PROPS_LIST(a...)           GST_PROPS_LIST_ID,##a,NULL
 #define GST_PROPS_INT(a)               GST_PROPS_INT_ID,(GINT_TO_POINTER(a))
 #define GST_PROPS_INT_RANGE(a,b)       GST_PROPS_INT_RANGE_ID,(GINT_TO_POINTER(a)),(GINT_TO_POINTER(b))
+#define GST_PROPS_FLOAT_STRING(a)      GST_PROPS_FLOAT_ID,(a)
+#define GST_PROPS_FLOAT_RANGE_STRING(a,b)      GST_PROPS_FLOAT_RANGE_ID,(a),(b)
+#define GST_PROPS_FLOAT(a)                     GST_PROPS_FLOAT_ID,(&(a))
+#define GST_PROPS_FLOAT_RANGE(a,b)     GST_PROPS_FLOAT_RANGE_ID,(&(a)),(&(b))
 #define GST_PROPS_FOURCC(a)            GST_PROPS_FOURCC_ID,(GINT_TO_POINTER(a))
 #define GST_PROPS_BOOLEAN(a)           GST_PROPS_BOOL_ID,(GINT_TO_POINTER(a))
 #define GST_PROPS_STRING(a)            GST_PROPS_STRING_ID,(a)
index 4f8eec2..8a1f0e3 100644 (file)
@@ -37,6 +37,7 @@ struct _GstPropsEntry {
     gboolean bool_data;
     guint32  fourcc_data;
     gint     int_data;
+    gfloat   float_data;
 
     /* structured values */
     struct {
@@ -49,6 +50,10 @@ struct _GstPropsEntry {
       gint min;
       gint max;
     } int_range_data;
+    struct {
+      gfloat min;
+      gfloat max;
+    } float_range_data;
   } data;
 };
 
index 6dc732e..0ad2daa 100644 (file)
@@ -13,7 +13,7 @@ void eos(GstElement *element)
 
 int main(int argc,char *argv[]) 
 {
-  GstElement *bin, *disksrc, *parse, *decoder, *downmix, *osssink;
+  GstElement *bin, *disksrc, *parse, *decoder, *downmix, *mulaw, *osssink;
 
   gst_init(&argc,&argv);
 
@@ -35,6 +35,7 @@ int main(int argc,char *argv[])
   parse = gst_elementfactory_make("mp3parse","parse");
   decoder = gst_elementfactory_make("mpg123","decoder");
   downmix = gst_elementfactory_make("stereo2mono","stereo2mono");
+  mulaw = gst_elementfactory_make("mulawencode","mulaw");
   /* and an audio sink */
   osssink = gst_elementfactory_make("osssink", "play_audio");
 
@@ -43,6 +44,7 @@ int main(int argc,char *argv[])
   gst_bin_add(GST_BIN(bin), parse);
   gst_bin_add(GST_BIN(bin), decoder);
   gst_bin_add(GST_BIN(bin), downmix);
+  gst_bin_add(GST_BIN(bin), mulaw);
   gst_bin_add(GST_BIN(bin), osssink);
 
   /* connect src to sink */
@@ -53,6 +55,8 @@ int main(int argc,char *argv[])
   gst_pad_connect(gst_element_get_pad(decoder,"src"),
                   gst_element_get_pad(downmix,"sink"));
   gst_pad_connect(gst_element_get_pad(downmix,"src"),
+                  gst_element_get_pad(mulaw,"sink"));
+  gst_pad_connect(gst_element_get_pad(mulaw,"src"),
                   gst_element_get_pad(osssink,"sink"));
 
   /* start playing */
@@ -71,6 +75,7 @@ int main(int argc,char *argv[])
   gst_object_destroy(GST_OBJECT(parse));
   gst_object_destroy(GST_OBJECT(decoder));
   gst_object_destroy(GST_OBJECT(downmix));
+  gst_object_destroy(GST_OBJECT(mulaw));
   gst_object_destroy(GST_OBJECT(disksrc));
   gst_object_destroy(GST_OBJECT(bin));