static void kms_recorder_endpoint_stopped (KmsUriEndpoint * obj) { KmsRecorderEndpoint *self = KMS_RECORDER_ENDPOINT (obj); kms_recorder_endpoint_change_state (self); if (kms_base_media_muxer_get_state (self->priv->mux) >= GST_STATE_PAUSED) { kms_recorder_endpoint_send_eos_to_appsrcs (self); self->priv->stopping = TRUE; } kms_recorder_endpoint_remove_pads (self); // Reset base time data BASE_TIME_LOCK (self); g_object_set_data_full (G_OBJECT (self), BASE_TIME_DATA, NULL, NULL); self->priv->paused_time = G_GUINT64_CONSTANT (0); self->priv->paused_start = GST_CLOCK_TIME_NONE; BASE_TIME_UNLOCK (self); if (kms_base_media_muxer_get_state (self->priv->mux) < GST_STATE_PAUSED && !self->priv->stopping) { kms_base_media_muxer_set_state (self->priv->mux, GST_STATE_NULL); kms_recorder_endpoint_state_changed (self, KMS_URI_ENDPOINT_STATE_STOP); } }
static void kms_recorder_endpoint_stopped (KmsUriEndpoint * obj) { KmsRecorderEndpoint *self = KMS_RECORDER_ENDPOINT (obj); GstElement *audio_src, *video_src; kms_recorder_endpoint_change_state (self); /* Close valves */ kms_recorder_endpoint_close_valves (self); // Reset base time data audio_src = gst_bin_get_by_name (GST_BIN (self->priv->pipeline), AUDIO_APPSRC); video_src = gst_bin_get_by_name (GST_BIN (self->priv->pipeline), VIDEO_APPSRC); KMS_ELEMENT_LOCK (self); if (audio_src != NULL) { g_object_set_data_full (G_OBJECT (audio_src), BASE_TIME_DATA, NULL, NULL); g_object_unref (audio_src); } if (video_src != NULL) { g_object_set_data_full (G_OBJECT (video_src), BASE_TIME_DATA, NULL, NULL); g_object_unref (video_src); } self->priv->paused_time = G_GUINT64_CONSTANT (0); self->priv->paused_start = GST_CLOCK_TIME_NONE; KMS_ELEMENT_UNLOCK (self); if (GST_STATE (self->priv->pipeline) >= GST_STATE_PAUSED) { kms_recorder_endpoint_send_eos_to_appsrcs (self); } else { gst_element_set_state (self->priv->pipeline, GST_STATE_NULL); kms_recorder_endpoint_state_changed (self, KMS_URI_ENDPOINT_STATE_STOP); } }