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);
}
Example #3
0
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;
}