diff options
author | Olivier CrĂȘte <olivier.crete@collabora.com> | 2011-07-14 22:15:19 -0400 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.com> | 2011-09-15 14:08:13 -0400 |
commit | 2e0b1a5c46aa222a71f300ed8f12c1e78cbdb13b (patch) | |
tree | 27212f9255b01efa4c9aa2a6ad094db93382f5c3 /transmitters | |
parent | 0f65cfc532bf4a225b50d092b7d1b9357f6087d8 (diff) | |
download | farstream-2e0b1a5c46aa222a71f300ed8f12c1e78cbdb13b.tar.gz |
shmstreamtrans: Transform bus errors into state changes
Diffstat (limited to 'transmitters')
-rw-r--r-- | transmitters/shm/fs-shm-stream-transmitter.c | 13 | ||||
-rw-r--r-- | transmitters/shm/fs-shm-transmitter.c | 24 | ||||
-rw-r--r-- | transmitters/shm/fs-shm-transmitter.h | 5 |
3 files changed, 36 insertions, 6 deletions
diff --git a/transmitters/shm/fs-shm-stream-transmitter.c b/transmitters/shm/fs-shm-stream-transmitter.c index 8e79d6be..384331ba 100644 --- a/transmitters/shm/fs-shm-stream-transmitter.c +++ b/transmitters/shm/fs-shm-stream-transmitter.c @@ -426,6 +426,16 @@ fs_shm_stream_transmitter_add_sink (FsShmStreamTransmitter *self, return TRUE; } + +static void +disconnected_cb (guint component, gint id, gpointer data) +{ + FsShmStreamTransmitter *self = data; + + g_signal_emit_by_name (self, "state-changed", component, + FS_STREAM_STATE_FAILED); +} + static gboolean fs_shm_stream_transmitter_add_remote_candidate ( FsShmStreamTransmitter *self, FsCandidate *candidate, @@ -452,7 +462,8 @@ fs_shm_stream_transmitter_add_remote_candidate ( self->priv->shm_src[candidate->component_id] = fs_shm_transmitter_get_shm_src (self->priv->transmitter, - candidate->component_id, path, got_buffer_func, self, error); + candidate->component_id, path, got_buffer_func, disconnected_cb, + self, error); if (self->priv->shm_src[candidate->component_id] == NULL) return FALSE; diff --git a/transmitters/shm/fs-shm-transmitter.c b/transmitters/shm/fs-shm-transmitter.c index 6000c2e4..3298dc05 100644 --- a/transmitters/shm/fs-shm-transmitter.c +++ b/transmitters/shm/fs-shm-transmitter.c @@ -306,7 +306,7 @@ fs_shm_transmitter_constructed (GObject *object) /* First we need the src elemnet */ - self->priv->gst_src = gst_bin_new (NULL); + self->priv->gst_src = fs_shm_bin_new (); if (!self->priv->gst_src) { trans->construction_error = g_error_new (FS_ERROR, @@ -552,6 +552,7 @@ struct _ShmSrc { GstPad *funnelpad; got_buffer got_buffer_func; + connection disconnected_func; gpointer cb_data; gulong buffer_probe; }; @@ -565,11 +566,23 @@ src_buffer_probe_cb (GstPad *pad, GstBuffer *buffer, ShmSrc *shm) return TRUE; } + +static void +disconnected_cb (GstBin *bin, GstElement *elem, ShmSrc *shm) +{ + if (elem != shm->src) + return; + + shm->disconnected_func (shm->component, 0, shm->cb_data); +} + + ShmSrc * fs_shm_transmitter_get_shm_src (FsShmTransmitter *self, guint component, const gchar *path, got_buffer got_buffer_func, + connection disconnected_func, gpointer cb_data, GError **error) { @@ -579,6 +592,7 @@ fs_shm_transmitter_get_shm_src (FsShmTransmitter *self, shm->component = component; shm->got_buffer_func = got_buffer_func; + shm->disconnected_func = disconnected_func; shm->cb_data = cb_data; shm->path = g_strdup (path); @@ -597,6 +611,10 @@ fs_shm_transmitter_get_shm_src (FsShmTransmitter *self, "is-live", TRUE, NULL); + if (shm->disconnected_func) + g_signal_connect (self->priv->gst_src, "disconnected", + G_CALLBACK (disconnected_cb), shm); + if (!gst_bin_add (GST_BIN (self->priv->gst_src), elem)) { g_set_error (error, FS_ERROR, FS_ERROR_CONSTRUCTION, @@ -685,7 +703,7 @@ struct _ShmSink { GstPad *teepad; ready ready_func; - connected connected_func; + connection connected_func; gpointer cb_data; }; @@ -715,7 +733,7 @@ fs_shm_transmitter_get_shm_sink (FsShmTransmitter *self, guint component, const gchar *path, ready ready_func, - connected connected_func, + connection connected_func, gpointer cb_data, GError **error) { diff --git a/transmitters/shm/fs-shm-transmitter.h b/transmitters/shm/fs-shm-transmitter.h index 41a738d8..26753ac6 100644 --- a/transmitters/shm/fs-shm-transmitter.h +++ b/transmitters/shm/fs-shm-transmitter.h @@ -89,12 +89,13 @@ typedef struct _ShmSink ShmSink; typedef void (*got_buffer) (GstBuffer *buffer, guint component, gpointer data); typedef void (*ready) (guint component, gchar *path, gpointer data); -typedef void (*connected) (guint component, gint id, gpointer data); +typedef void (*connection) (guint component, gint id, gpointer data); ShmSrc *fs_shm_transmitter_get_shm_src (FsShmTransmitter *self, guint component, const gchar *path, got_buffer got_buffer_func, + connection disconnected_func, gpointer cb_data, GError **error); @@ -106,7 +107,7 @@ ShmSink *fs_shm_transmitter_get_shm_sink (FsShmTransmitter *self, guint component, const gchar *path, ready ready_func, - connected connected_func, + connection connected_fubnc, gpointer cb_data, GError **error); |