Exemplo n.º 1
0
static void
kms_hub_port_internal_src_pad_linked (GstPad * pad, GstPad * peer,
    gpointer data)
{
  GstPad *target, *new_pad;
  GstElement *capsfilter;
  KmsElement *self;
  KmsElementPadType type;

  capsfilter = g_object_get_qdata (G_OBJECT (pad), key_elem_data_quark ());
  g_return_if_fail (capsfilter);
  self = KMS_ELEMENT (gst_object_get_parent (GST_OBJECT (capsfilter)));
  g_return_if_fail (self);

  target = gst_element_get_static_pad (capsfilter, "sink");
  if (!target) {
    GST_WARNING_OBJECT (pad, "No sink in capsfilter");
    goto end;
  }

  type =
      GPOINTER_TO_INT (g_object_get_qdata (G_OBJECT (pad),
          key_type_data_quark ()));
  new_pad = kms_element_connect_sink_target (self, target, type);
  g_object_unref (target);
  g_object_set_qdata_full (G_OBJECT (pad), key_pad_data_quark (),
      g_object_ref (new_pad), g_object_unref);

end:
  g_object_unref (self);
}
static void
kms_show_data_connect_audio (KmsShowData * self, GstElement * agnosticbin)
{
  GstPad *target = gst_element_get_static_pad (agnosticbin, "sink");

  kms_element_connect_sink_target (KMS_ELEMENT (self), target, KMS_ELEMENT_PAD_TYPE_AUDIO);
  g_object_unref (target);
}
static void
kms_recorder_generate_pads (KmsRecorderEndpoint * self)
{
  KmsElement *elem = KMS_ELEMENT (self);

  if (kms_recording_profile_supports_type (self->priv->profile,
          KMS_ELEMENT_PAD_TYPE_AUDIO)) {
    kms_element_connect_sink_target (elem, self->priv->audio_target,
        KMS_ELEMENT_PAD_TYPE_AUDIO);
  }

  if (kms_recording_profile_supports_type (self->priv->profile,
          KMS_ELEMENT_PAD_TYPE_VIDEO)) {
    kms_element_connect_sink_target (elem, self->priv->video_target,
        KMS_ELEMENT_PAD_TYPE_VIDEO);
  }
}
Exemplo n.º 4
0
static void
kms_filter_element_connect_passthrough (KmsFilterElement * self,
    KmsElementPadType type, GstElement * element)
{
  GstPad *target = gst_element_get_static_pad (element, "sink");

  kms_element_connect_sink_target (KMS_ELEMENT (self), target, type);
  g_object_unref (target);
}
Exemplo n.º 5
0
static void
kms_send_data_connect_video (KmsSendData * self, GstElement * agnosticbin)
{
  GstPad *zbar_sink = gst_element_get_static_pad (self->priv->zbar, "sink");

  kms_element_connect_sink_target (KMS_ELEMENT (self), zbar_sink,
      KMS_ELEMENT_PAD_TYPE_VIDEO);
  gst_element_link (self->priv->zbar, agnosticbin);

  g_object_unref (zbar_sink);
}
static void
kms_show_data_connect_video (KmsShowData * self, GstElement * agnosticbin)
{
  GstPad *text_overlay_sink = gst_element_get_static_pad (self->priv->text_overlay, "video_sink");
  GstElement *videoconvert = gst_element_factory_make ("videoconvert", NULL);

  gst_bin_add (GST_BIN (self), videoconvert);

  kms_element_connect_sink_target (KMS_ELEMENT (self), text_overlay_sink, KMS_ELEMENT_PAD_TYPE_VIDEO);
  gst_element_link (self->priv->text_overlay, videoconvert);
  gst_element_link (videoconvert, agnosticbin);

  g_object_unref (text_overlay_sink);
}
Exemplo n.º 7
0
static void
kms_filter_element_connect_filter (KmsFilterElement * self,
    KmsElementPadType type, GstElement * filter, GstPad * target,
    GstElement * agnosticbin)
{
  gst_bin_add (GST_BIN (self), filter);

  self->priv->filter = filter;

  gst_element_link (filter, agnosticbin);
  gst_element_sync_state_with_parent (filter);

  kms_element_connect_sink_target (KMS_ELEMENT (self), target, type);
}
static void
kms_show_data_connect_data (KmsShowData * self, GstElement * tee)
{
  GstElement *identity =  gst_element_factory_make ("identity", NULL);
  GstPad *identity_sink = gst_element_get_static_pad (identity, "sink");;

  gst_bin_add (GST_BIN (self), identity);

  kms_element_connect_sink_target (KMS_ELEMENT (self), identity_sink, KMS_ELEMENT_PAD_TYPE_DATA);
  gst_element_link (identity, tee);

  g_signal_connect (identity, "handoff", G_CALLBACK (new_data), self);

  g_object_unref (identity_sink);
}
Exemplo n.º 9
0
static void
kms_dummy_sink_add_sinkpad (KmsDummySink * self, KmsElementPadType type)
{
  GstElement **appsink;
  GstPad *sinkpad;
  gchar *name;

  switch (type) {
    case KMS_ELEMENT_PAD_TYPE_DATA:
      appsink = &self->priv->dataappsink;
      name = APPDATASINK;
      break;
    case KMS_ELEMENT_PAD_TYPE_AUDIO:
      appsink = &self->priv->audioappsink;
      name = APPAUDIOSINK;
      break;
    case KMS_ELEMENT_PAD_TYPE_VIDEO:
      appsink = &self->priv->videoappsink;
      name = APPVIDEOSINK;
      break;
    default:
      GST_ERROR_OBJECT (self, "Invalid pad type provided");
      return;
  }

  if (*appsink == NULL) {
    /* First time that appsink is created */
    *appsink = gst_element_factory_make ("fakesink", name);
    g_object_set (*appsink, "async", FALSE, "sync", FALSE, NULL);
    gst_bin_add (GST_BIN (self), *appsink);
    gst_element_sync_state_with_parent (*appsink);
  }

  sinkpad = gst_element_get_static_pad (*appsink, "sink");

  kms_element_connect_sink_target (KMS_ELEMENT (self), sinkpad, type);

  g_object_unref (sinkpad);
}