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); } }
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); }
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); }
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); }
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); }