From e95c9901b4c30af25a6dbb38ff7b5486a1a77d19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Sun, 4 Mar 2007 21:36:50 +0000 Subject: ext/nas/nassink.c: Some more cleanups/changes; use boilerplate macro. Original commit message from CVS: * ext/nas/nassink.c: (gst_nas_sink_class_init), (gst_nas_sink_init), (gst_nas_sink_getcaps), (gst_nas_sink_unprepare): Some more cleanups/changes; use boilerplate macro. --- ext/nas/nassink.c | 90 +++++++++++++++++++++++-------------------------------- 1 file changed, 38 insertions(+), 52 deletions(-) (limited to 'ext/nas') diff --git a/ext/nas/nassink.c b/ext/nas/nassink.c index e2f44549..d15f9846 100644 --- a/ext/nas/nassink.c +++ b/ext/nas/nassink.c @@ -63,9 +63,6 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", "rate = (int) [ 1000, 96000 ], " "channels = (int) [ 1, 2 ]") ); -static void gst_nas_sink_base_init (gpointer g_class); -static void gst_nas_sink_class_init (GstNasSinkClass * klass); -static void gst_nas_sink_init (GstNasSink * nassink); static void gst_nas_sink_finalize (GObject * object); static gboolean gst_nas_sink_open (GstAudioSink * sink); @@ -91,8 +88,6 @@ static AuBool NAS_EventHandler (AuServer * aud, AuEvent * ev, static AuDeviceID NAS_getDevice (AuServer * aud, int numTracks); static int NAS_createFlow (GstNasSink * sink, GstRingBufferSpec * spec); -static GstElementClass *parent_class = NULL; - static const GstElementDetails nas_sink_details = GST_ELEMENT_DETAILS ("NAS audio sink", "Sink/Audio", @@ -100,31 +95,7 @@ GST_ELEMENT_DETAILS ("NAS audio sink", "Laurent Vivier , " "Arwed v. Merkatz "); -GType -gst_nas_sink_get_type (void) -{ - static GType nas_sink_type = 0; - - if (!nas_sink_type) { - static const GTypeInfo nas_sink_info = { - sizeof (GstNasSinkClass), - gst_nas_sink_base_init, - NULL, - (GClassInitFunc) gst_nas_sink_class_init, - NULL, - NULL, - sizeof (GstNasSink), - 0, - (GInstanceInitFunc) gst_nas_sink_init, - }; - - nas_sink_type = - g_type_register_static (GST_TYPE_AUDIO_SINK, "GstNasSink", - &nas_sink_info, 0); - } - - return nas_sink_type; -} +GST_BOILERPLATE (GstNasSink, gst_nas_sink, GstAudioSink, GST_TYPE_AUDIO_SINK); static void gst_nas_sink_base_init (gpointer g_class) @@ -147,10 +118,8 @@ gst_nas_sink_class_init (GstNasSinkClass * klass) gstbasesink_class = (GstBaseSinkClass *) klass; gstaudiosink_class = (GstAudioSinkClass *) klass; - parent_class = g_type_class_peek_parent (klass); - - gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_nas_sink_set_property); - gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_nas_sink_get_property); + gobject_class->set_property = gst_nas_sink_set_property; + gobject_class->get_property = gst_nas_sink_get_property; gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_nas_sink_finalize); g_object_class_install_property (gobject_class, ARG_MUTE, @@ -174,7 +143,7 @@ gst_nas_sink_class_init (GstNasSinkClass * klass) } static void -gst_nas_sink_init (GstNasSink * nassink) +gst_nas_sink_init (GstNasSink * nassink, GstNasSinkClass * klass) { /* properties will automatically be set to their default values */ nassink->audio = NULL; @@ -195,29 +164,47 @@ static GstCaps * gst_nas_sink_getcaps (GstBaseSink * bsink) { GstNasSink *nassink = GST_NAS_SINK (bsink); - GstCaps *templatecaps = - gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD (bsink))); - GstCaps *caps; - int i; + const GstCaps *templatecaps; AuServer *server; + GstCaps *fixated, *caps; + int i; - server = AuOpenServer (nassink->host, 0, NULL, 0, NULL, NULL); - if (!server) - return templatecaps; + server = nassink->audio; - for (i = 0; i < gst_caps_get_size (templatecaps); i++) { - GstStructure *structure = gst_caps_get_structure (templatecaps, i); + if (server == NULL) { + /* FIXME: is it really a good idea to do a potentially long blocking call + * like this here? (tpm) */ + server = AuOpenServer (nassink->host, 0, NULL, 0, NULL, NULL); + } - gst_structure_set (structure, "rate", GST_TYPE_INT_RANGE, - AuServerMinSampleRate (server), AuServerMaxSampleRate (server), NULL); + templatecaps = gst_static_pad_template_get_caps (&sink_factory); + + if (server == NULL) + return gst_caps_copy (templatecaps); + + fixated = gst_caps_copy (templatecaps); + for (i = 0; i < gst_caps_get_size (fixated); i++) { + GstStructure *structure; + gint min, max; + + min = AuServerMinSampleRate (server); + max = AuServerMaxSampleRate (server); + + structure = gst_caps_get_structure (fixated, i); + + if (min == max) + gst_structure_set (structure, "rate", G_TYPE_INT, max, NULL); + else + gst_structure_set (structure, "rate", GST_TYPE_INT_RANGE, min, max, NULL); } - caps = - gst_caps_intersect (templatecaps, - gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD (bsink))); - gst_caps_unref (templatecaps); - return caps; + caps = gst_caps_intersect (fixated, templatecaps); + gst_caps_unref (fixated); + if (nassink->audio == NULL) + AuCloseServer (server); + + return caps; } static gboolean @@ -247,7 +234,6 @@ gst_nas_sink_prepare (GstAudioSink * asink, GstRingBufferSpec * spec) static gboolean gst_nas_sink_unprepare (GstAudioSink * asink) { - //GstNasSink *sink = GST_NAS_SINK (asink); return TRUE; } -- cgit v1.2.1