diff --git a/configure.in b/configure.in index ce26c5a701..827e1e0c7a 100644 --- a/configure.in +++ b/configure.in @@ -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 diff --git a/docs/libs/.gitignore b/docs/libs/.gitignore index fce934253f..b5548ac928 100644 --- a/docs/libs/.gitignore +++ b/docs/libs/.gitignore @@ -1,6 +1,5 @@ Makefile Makefile.in -tmpl html sgml gstreamer-libs-unused.txt diff --git a/examples/helloworld/helloworld.c b/examples/helloworld/helloworld.c index 6dc732e9fb..0ad2daa38d 100644 --- a/examples/helloworld/helloworld.c +++ b/examples/helloworld/helloworld.c @@ -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)); diff --git a/gst/gstprops.c b/gst/gstprops.c index d70801013e..001d199832 100644 --- a/gst/gstprops.c +++ b/gst/gstprops.c @@ -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; +} diff --git a/gst/gstprops.h b/gst/gstprops.h index c647dcae40..93ee078d91 100644 --- a/gst/gstprops.h +++ b/gst/gstprops.h @@ -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) diff --git a/gst/gstpropsprivate.h b/gst/gstpropsprivate.h index 4f8eec219c..8a1f0e3ac7 100644 --- a/gst/gstpropsprivate.h +++ b/gst/gstpropsprivate.h @@ -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; }; diff --git a/tests/old/examples/helloworld/helloworld.c b/tests/old/examples/helloworld/helloworld.c index 6dc732e9fb..0ad2daa38d 100644 --- a/tests/old/examples/helloworld/helloworld.c +++ b/tests/old/examples/helloworld/helloworld.c @@ -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));