static void remove_sink_func (const gchar * key, KmsSinkPadData * data, KmsRecorderEndpoint * self) { kms_element_remove_sink_by_type_full (KMS_ELEMENT (self), data->type, data->description); }
static gboolean kms_dummy_sink_release_requested_sink_pad (KmsElement * obj, GstPad * pad) { KmsDummySink *self = KMS_DUMMY_SINK (obj); KmsDummySinkElement *dummy; gchar *padname; padname = gst_pad_get_name (pad); KMS_ELEMENT_LOCK (KMS_ELEMENT (self)); dummy = g_hash_table_lookup (self->priv->sinks, padname); if (dummy == NULL) { KMS_ELEMENT_UNLOCK (KMS_ELEMENT (self)); return FALSE; } kms_element_remove_sink_by_type_full (obj, dummy->type, dummy->description); g_hash_table_remove (self->priv->sinks, padname); g_free (padname); return TRUE; }
static gboolean kms_recorder_endpoint_release_requested_sink_pad (KmsElement * obj, GstPad * pad) { KmsRecorderEndpoint *self = KMS_RECORDER_ENDPOINT (obj); gchar *padname = NULL; KmsSinkPadData *data; gboolean ret = FALSE; KMS_ELEMENT_LOCK (KMS_ELEMENT (self)); ret = self->priv->profile == KMS_RECORDING_PROFILE_KSR; if (!ret) { goto end; } padname = gst_pad_get_name (pad); data = g_hash_table_lookup (self->priv->sink_pad_data, padname); if (data == NULL) { GST_ERROR_OBJECT (self, "Can not release requested pad %s", padname); goto end; } if (!data->requested) { GST_ERROR_OBJECT (self, "Can not release not requested pad %" GST_PTR_FORMAT, pad); goto end; } kms_element_remove_sink_by_type_full (KMS_ELEMENT (self), data->type, data->description); g_hash_table_remove (self->priv->sink_pad_data, padname); end: KMS_ELEMENT_UNLOCK (KMS_ELEMENT (self)); g_free (padname); return ret; }