[rhythmbox] encoder: add prepare-sink signal, similar to prepare-source
- From: Jonathan Matthew <jmatthew src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [rhythmbox] encoder: add prepare-sink signal, similar to prepare-source
- Date: Sat, 10 Oct 2009 05:23:18 +0000 (UTC)
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]