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);
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");
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 */
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 */
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));
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,
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++]);
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);
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
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
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));
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");
return props;
}
+gfloat* _gst_props_floatpointer (gfloat f)
+{
+ return &f;
+}
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,
#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)
#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)
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);
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");
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 */
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 */
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));