[rhythmbox] encoder: add prepare-sink signal, similar to prepare-source



commit f7793daa779521f23313f37e28c55c8d07d295da
Author: Jonathan Matthew <jonathan d14n org>
Date:   Sat Oct 10 14:07:33 2009 +1000

    encoder: add prepare-sink signal, similar to prepare-source

 backends/gstreamer/rb-encoder-gst.c |    3 +++
 backends/rb-encoder.c               |   27 +++++++++++++++++++++++++++
 backends/rb-encoder.h               |    2 ++
 3 files changed, 32 insertions(+), 0 deletions(-)
---
diff --git a/backends/gstreamer/rb-encoder-gst.c b/backends/gstreamer/rb-encoder-gst.c
index 8dd5630..0c520e2 100644
--- a/backends/gstreamer/rb-encoder-gst.c
+++ b/backends/gstreamer/rb-encoder-gst.c
@@ -666,6 +666,9 @@ attach_output_pipeline (RBEncoderGst *encoder,
 		}
 	}
 
+	/* provide a hook for setting sink properties */
+	_rb_encoder_emit_prepare_sink (RB_ENCODER (encoder), dest, G_OBJECT (sink));
+
 	gst_bin_add (GST_BIN (encoder->priv->pipeline), sink);
 	gst_element_link (end, sink);
 
diff --git a/backends/rb-encoder.c b/backends/rb-encoder.c
index 39fd4e3..60d483b 100644
--- a/backends/rb-encoder.c
+++ b/backends/rb-encoder.c
@@ -55,6 +55,7 @@ enum {
 	COMPLETED,
 	ERROR,
 	PREPARE_SOURCE,		/* this is on RBEncoderFactory */
+	PREPARE_SINK,		/* this is on RBEncoderFactory */
 	LAST_SIGNAL
 };
 
@@ -95,6 +96,26 @@ rb_encoder_factory_class_init (RBEncoderFactoryClass *klass)
 			      rb_marshal_VOID__STRING_OBJECT,
 			      G_TYPE_NONE,
 			      2, G_TYPE_STRING, G_TYPE_OBJECT);
+	/**
+	 * RBEncoderFactory::prepare-sink:
+	 * @factory: the #RBEncoderFactory instance
+	 * @uri: the URI for the sink
+	 * @sink: the sink object (a GstElement in fact)
+	 *
+	 * Emitted when creating a sink to write to the specified URI.
+	 * Plugins can use this when just creating a GStreamer element from the URI
+	 * isn't enough.  Typically this happens when there's no way to pass device
+	 * information through the URI format.
+	 */
+	signals[PREPARE_SINK] =
+		g_signal_new ("prepare-sink",
+			      G_OBJECT_CLASS_TYPE (object_class),
+			      G_SIGNAL_RUN_LAST,
+			      G_STRUCT_OFFSET (RBEncoderFactoryClass, prepare_sink),
+			      NULL, NULL,
+			      rb_marshal_VOID__STRING_OBJECT,
+			      G_TYPE_NONE,
+			      2, G_TYPE_STRING, G_TYPE_OBJECT);
 }
 
 static void
@@ -295,6 +316,12 @@ _rb_encoder_emit_prepare_source (RBEncoder *encoder, const char *uri, GObject *s
 	g_signal_emit (rb_encoder_factory_get (), signals[PREPARE_SOURCE], 0, uri, source);
 }
 
+void
+_rb_encoder_emit_prepare_sink (RBEncoder *encoder, const char *uri, GObject *sink)
+{
+	g_signal_emit (rb_encoder_factory_get (), signals[PREPARE_SINK], 0, uri, sink);
+}
+
 GQuark
 rb_encoder_error_quark (void)
 {
diff --git a/backends/rb-encoder.h b/backends/rb-encoder.h
index 961c070..e7048c9 100644
--- a/backends/rb-encoder.h
+++ b/backends/rb-encoder.h
@@ -92,6 +92,7 @@ struct _RBEncoderFactoryClass
 
 	/* signals */
 	void (*prepare_source) (RBEncoderFactory *factory, const char *uri, GObject *source);
+	void (*prepare_sink) (RBEncoderFactory *factory, const char *uri, GObject *sink);
 };
 
 struct _RBEncoderFactory
@@ -123,6 +124,7 @@ void	_rb_encoder_emit_completed (RBEncoder *encoder, guint64 dest_size);
 void	_rb_encoder_emit_error (RBEncoder *encoder, GError *error);
 
 void	_rb_encoder_emit_prepare_source (RBEncoder *encoder, const char *uri, GObject *source);
+void	_rb_encoder_emit_prepare_sink (RBEncoder *encoder, const char *uri, GObject *sink);
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]