static gboolean shutdown_media_source(GHashTable *args) { OwrMediaSource *media_source; GstElement *source_pipeline, *source_tee; GHashTable *event_data; GValue *value; event_data = _owr_value_table_new(); value = _owr_value_table_add(event_data, "start_time", G_TYPE_INT64); g_value_set_int64(value, g_get_monotonic_time()); media_source = g_hash_table_lookup(args, "media_source"); g_assert(media_source); source_pipeline = _owr_media_source_get_source_bin(media_source); if (!source_pipeline) { g_object_unref(media_source); g_hash_table_unref(args); return FALSE; } source_tee = _owr_media_source_get_source_tee(media_source); if (!source_tee) { gst_object_unref(source_pipeline); g_object_unref(media_source); g_hash_table_unref(args); return FALSE; } if (source_tee->numsrcpads) { gst_object_unref(source_pipeline); gst_object_unref(source_tee); g_object_unref(media_source); g_hash_table_unref(args); return FALSE; } _owr_media_source_set_source_bin(media_source, NULL); _owr_media_source_set_source_tee(media_source, NULL); gst_element_set_state(source_pipeline, GST_STATE_NULL); gst_object_unref(source_pipeline); gst_object_unref(source_tee); value = _owr_value_table_add(event_data, "end_time", G_TYPE_INT64); g_value_set_int64(value, g_get_monotonic_time()); OWR_POST_EVENT(media_source, LOCAL_SOURCE_STOPPED, event_data); g_object_unref(media_source); g_hash_table_unref(args); return FALSE; }
static gboolean shutdown_media_source(GHashTable *args) { OwrMediaSource *media_source; GstElement *source_pipeline, *source_tee; media_source = g_hash_table_lookup(args, "media_source"); g_assert(media_source); source_pipeline = _owr_media_source_get_source_bin(media_source); if (!source_pipeline) { g_object_unref(media_source); g_hash_table_unref(args); return FALSE; } source_tee = _owr_media_source_get_source_tee(media_source); if (!source_tee) { gst_object_unref(source_pipeline); g_object_unref(media_source); g_hash_table_unref(args); return FALSE; } if (source_tee->numsrcpads != 1) { gst_object_unref(source_pipeline); gst_object_unref(source_tee); g_object_unref(media_source); g_hash_table_unref(args); return FALSE; } _owr_media_source_set_source_bin(media_source, NULL); _owr_media_source_set_source_tee(media_source, NULL); gst_element_set_state(source_pipeline, GST_STATE_NULL); gst_object_unref(source_pipeline); gst_object_unref(source_tee); g_object_unref(media_source); g_hash_table_unref(args); return FALSE; }