FsTransmitter * fs_transmitter_new (const gchar *type, guint components, guint tos, GError **error) { FsTransmitter *self = NULL; g_return_val_if_fail (type != NULL, NULL); g_return_val_if_fail (tos <= 255, NULL); self = FS_TRANSMITTER (fs_plugin_create (type, "transmitter", error, "components", components, "tos", tos, NULL)); if (!self) return NULL; if (self->construction_error) { g_propagate_error(error, self->construction_error); g_object_unref (self); self = NULL; } return self; }
static void _stream_state_changed (FsStreamTransmitter *st, guint component, FsStreamState state, gpointer user_data) { FsTransmitter *trans = FS_TRANSMITTER (user_data); GEnumClass *enumclass = NULL; GEnumValue *enumvalue = NULL; gchar *prop = NULL; FsStreamState oldstate = 0; enumclass = g_type_class_ref (FS_TYPE_STREAM_STATE); enumvalue = g_enum_get_value (enumclass, state); GST_DEBUG ("%p: Stream state for component %u is now %s (%u)", st, component, enumvalue->value_nick, state); ts_fail_if (state == FS_STREAM_STATE_FAILED, "Failed to establish a connection"); if (component == 1) prop = "last-state-1"; else if (component == 2) prop = "last-state-2"; else ts_fail ("Invalid component %u, component"); oldstate = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (st), prop)); ts_fail_if (state < FS_STREAM_STATE_CONNECTED && state < oldstate, "State went in wrong direction %d -> %d for component %u", oldstate, state, component); g_object_set_data (G_OBJECT (st), prop, GINT_TO_POINTER (state)); if (state < FS_STREAM_STATE_READY) return; if (component == 1) prop = "src_setup_1"; else if (component == 2) prop = "src_setup_2"; if (g_object_get_data (G_OBJECT (trans), prop) == NULL) { GstElement *pipeline = GST_ELEMENT ( g_object_get_data (G_OBJECT (trans), "pipeline")); GST_DEBUG ("%p: Setting up fakesrc for component %u", st, component); setup_fakesrc (trans, pipeline, component); g_object_set_data (G_OBJECT (trans), prop, ""); } else GST_DEBUG ("FAKESRC ALREADY SETUP for component %u", component); }