summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2003-12-24 03:31:06 +0000
committerDavid Schleef <ds@schleef.org>2003-12-24 03:31:06 +0000
commitd88e52a37b8375cae2c8558f786882eb4bd12e84 (patch)
tree89ed1a1c8733ff50fc2fb4dad1450897b89c8e6f /sys
parent9de4db65400a8a1e42ef9df42c5a3104af18001f (diff)
gst/volume/gstvolume.c: Proxy getcaps.
Original commit message from CVS: * gst/volume/gstvolume.c: (volume_init): Proxy getcaps. * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_sink_fixate): Add fixate function.
Diffstat (limited to 'sys')
-rw-r--r--sys/oss/gstosssink.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/sys/oss/gstosssink.c b/sys/oss/gstosssink.c
index b1402b29..9985427c 100644
--- a/sys/oss/gstosssink.c
+++ b/sys/oss/gstosssink.c
@@ -58,6 +58,7 @@ static gboolean gst_osssink_query (GstElement *element, GstQueryType type,
static gboolean gst_osssink_sink_query (GstPad *pad, GstQueryType type,
GstFormat *format, gint64 *value);
+static GstCaps * gst_osssink_sink_fixate (GstPad *pad, const GstCaps *caps, gpointer user_data);
static GstPadLinkReturn gst_osssink_sinkconnect (GstPad *pad, const GstCaps *caps);
static void gst_osssink_set_property (GObject *object, guint prop_id, const GValue *value,
@@ -193,6 +194,7 @@ gst_osssink_init (GstOssSink *osssink)
gst_static_pad_template_get (&osssink_sink_factory), "sink");
gst_element_add_pad (GST_ELEMENT (osssink), osssink->sinkpad);
gst_pad_set_link_function (osssink->sinkpad, gst_osssink_sinkconnect);
+ gst_pad_set_fixate_function (osssink->sinkpad, gst_osssink_sink_fixate);
gst_pad_set_convert_function (osssink->sinkpad, gst_osssink_convert);
gst_pad_set_query_function (osssink->sinkpad, gst_osssink_sink_query);
gst_pad_set_query_type_function (osssink->sinkpad, gst_osssink_get_query_types);
@@ -213,6 +215,30 @@ gst_osssink_init (GstOssSink *osssink)
GST_FLAG_SET (osssink, GST_ELEMENT_EVENT_AWARE);
}
+static GstCaps *
+gst_osssink_sink_fixate (GstPad *pad, const GstCaps *caps, gpointer user_data)
+{
+ GstCaps *newcaps;
+ GstStructure *structure;
+
+ structure = gst_structure_copy(gst_caps_get_structure (caps, 0));
+ newcaps = gst_caps_new_full (structure, NULL);
+
+ if (gst_caps_structure_fixate_field_nearest_int (structure, "rate", 44100)) {
+ return newcaps;
+ }
+ if (gst_caps_structure_fixate_field_nearest_int (structure, "depth", 16)) {
+ return newcaps;
+ }
+ if (gst_caps_structure_fixate_field_nearest_int (structure, "width", 16)) {
+ return newcaps;
+ }
+ if (gst_caps_structure_fixate_field_nearest_int (structure, "channels", 2)) {
+ return newcaps;
+ }
+
+ return newcaps;
+}
static GstPadLinkReturn
gst_osssink_sinkconnect (GstPad *pad, const GstCaps *caps)