static KmsSelectableMixerPortData * kms_selectable_mixer_port_data_create (KmsSelectableMixer * self, gint id) { KmsSelectableMixerPortData *data = g_slice_new0 (KmsSelectableMixerPortData); data->mixer = self; data->audiomixer = gst_element_factory_make ("audiomixerbin", NULL); data->audio_agnostic = gst_element_factory_make ("agnosticbin", NULL); data->video_agnostic = gst_element_factory_make ("agnosticbin", NULL); data->id = id; gst_bin_add_many (GST_BIN (self), g_object_ref (data->audio_agnostic), g_object_ref (data->video_agnostic), data->audiomixer, NULL); gst_element_sync_state_with_parent (data->audio_agnostic); gst_element_sync_state_with_parent (data->video_agnostic); gst_element_sync_state_with_parent (data->audiomixer); kms_base_hub_link_video_sink (KMS_BASE_HUB (self), id, data->video_agnostic, "sink", FALSE); kms_base_hub_link_audio_sink (KMS_BASE_HUB (self), id, data->audio_agnostic, "sink", FALSE); kms_base_hub_link_audio_src (KMS_BASE_HUB (self), id, data->audiomixer, "src", FALSE); return data; }
static void pad_added_cb (GstElement * element, GstPad * pad, gpointer data) { gint id; KmsAlphaBlending *self = KMS_ALPHA_BLENDING (data); if (gst_pad_get_direction (pad) != GST_PAD_SRC) return; id = get_stream_id_from_padname (GST_OBJECT_NAME (pad)); if (id < 0) { GST_ERROR_OBJECT (self, "Invalid HubPort for %" GST_PTR_FORMAT, pad); return; } kms_base_hub_link_audio_src (KMS_BASE_HUB (self), id, self->priv->audiomixer, GST_OBJECT_NAME (pad), TRUE); }
static gboolean kms_dispatcher_connect (KmsDispatcher * self, guint source, guint sink) { KmsDispatcherPortData *source_port, *sink_port; gboolean connected = FALSE; KMS_DISPATCHER_LOCK (self); source_port = g_hash_table_lookup (self->priv->ports, &source); if (source_port == NULL) { GST_ERROR_OBJECT (self, "No source port %u found", source); goto end; } sink_port = g_hash_table_lookup (self->priv->ports, &sink); if (sink_port == NULL) { GST_ERROR_OBJECT (self, "No sink port %u found", source); goto end; } if (!kms_base_hub_link_audio_src (KMS_BASE_HUB (self), sink_port->id, source_port->audio_agnostic, "src_%u", TRUE)) { GST_ERROR_OBJECT (self, "Can not connect audio port"); goto end; } if (!kms_base_hub_link_video_src (KMS_BASE_HUB (self), sink_port->id, source_port->video_agnostic, "src_%u", TRUE)) { GST_ERROR_OBJECT (self, "Can not connect video port"); kms_base_hub_unlink_audio_src (KMS_BASE_HUB (self), sink_port->id); goto end; } connected = TRUE; end: KMS_DISPATCHER_UNLOCK (self); return connected; }