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);
}
Beispiel #2
0
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;
}