static void test_worker_end (GstWorker * worker, gpointer data) { gboolean worker_reset_ok; //INFO ("%s: %s, %d", worker->name, __FUNCTION__, transition); g_return_if_fail (GST_IS_WORKER (worker)); if (transition) { g_mutex_lock (&trans_lock); if (transition) { worker_reset_ok = test_worker_reset (worker); g_assert (worker_reset_ok); INFO ("%s: %s", worker->name, __FUNCTION__); /* worker_reset_ok = test_worker_reset (worker1); g_assert (worker_reset_ok); worker_reset_ok = test_worker_reset (worker2); g_assert (worker_reset_ok); */ gst_element_set_state (worker->pipeline, GST_STATE_READY); /* gst_element_set_state (worker1->pipeline, GST_STATE_READY); gst_element_set_state (worker2->pipeline, GST_STATE_READY); */ } g_mutex_unlock (&trans_lock); } }
static gpointer test_worker_pulse (GstWorker * worker) { //sleep (1); while (GST_IS_WORKER (worker)) { usleep (1000 * 1); if (!transition) { g_mutex_lock (&trans_lock); if (!transition) { GstState state; GstStateChangeReturn ret; INFO ("stop: %s %p", worker->name, worker); transition = gst_worker_stop_force (worker, TRUE); g_assert (transition); ret = gst_element_get_state (worker->pipeline, &state, NULL, GST_CLOCK_TIME_NONE); g_assert (ret == GST_STATE_CHANGE_SUCCESS); g_assert (state == GST_STATE_NULL); INFO ("stopped: %s %p", worker->name, worker); } g_mutex_unlock (&trans_lock); } if (transition) usleep (1000 * 10); //INFO ("tick: %d", transition); } INFO ("end pulse"); return NULL; }
static void gst_switch_server_start_output (GstWorker *worker, GstSwitchServer * srv) { g_return_if_fail (GST_IS_WORKER (worker)); GST_SWITCH_SERVER_LOCK_CONTROLLER (srv); if (srv->controller) { gst_switch_controller_tell_compose_port (srv->controller, srv->composite->sink_port); } GST_SWITCH_SERVER_UNLOCK_CONTROLLER (srv); }
/** * gst_switch_server_end_transition: * * The composite worker has finished a transition of modes. */ static void gst_switch_server_end_transition (GstWorker * worker, GstSwitchServer * srv) { g_return_if_fail (GST_IS_WORKER (worker)); GST_SWITCH_SERVER_LOCK_CONTROLLER (srv); if (srv->controller) { gint mode = srv->composite->mode; gst_switch_controller_tell_new_mode_onlne (srv->controller, mode); } GST_SWITCH_SERVER_UNLOCK_CONTROLLER (srv); }
/** * gst_switch_server_worker_null: * * Invoked when a worker is trunning into NULL. */ static void gst_switch_server_worker_null (GstWorker * worker, GstSwitchServer * srv) { GstClockTime t = GST_CLOCK_TIME_NONE; g_return_if_fail (GST_IS_WORKER (worker)); GST_SWITCH_SERVER_LOCK_CLOCK (srv); t = gst_clock_get_time (srv->clock); GST_SWITCH_SERVER_UNLOCK_CLOCK (srv); g_print ("offline: %s @%lld\n", worker->name, (long long int) t); }
static void test_worker_start (GstWorker * worker, gpointer data) { g_return_if_fail (GST_IS_WORKER (worker)); INFO ("%s: %s", worker->name, __FUNCTION__); if (transition) { g_mutex_lock (&trans_lock); if (transition) { /* gst_worker_start (worker1); gst_worker_start (worker2); */ g_timeout_add (10, (GSourceFunc) test_worker_close_transition, worker); } g_mutex_unlock (&trans_lock); } }
static void test_worker_prepare (GstWorker * worker, gpointer data) { g_return_if_fail (GST_IS_WORKER (worker)); INFO ("%s: %s", worker->name, __FUNCTION__); /* if (worker1 == NULL) { worker1 = GST_WORKER (g_object_new (GST_TYPE_WORKER, "name", "test-worker-1", NULL)); worker1->pipeline_func = test_worker_pipeline; } if (worker2 == NULL) { worker2 = GST_WORKER (g_object_new (GST_TYPE_WORKER, "name", "test-worker-2", NULL)); worker2->pipeline_func = test_worker_pipeline; } */ }
/** * @brief * @param ui The GstSwitchUI instance. * @param worker * @param name * @memberof GstSwitchUI */ static void gst_switch_ui_remove_preview (GstSwitchUI * ui, GstWorker * worker, const gchar * name) { GList *v = NULL; GST_SWITCH_UI_LOCK_SELECT (ui); v = gtk_container_get_children (GTK_CONTAINER (ui->preview_box)); for (; v; v = g_list_next (v)) { GtkWidget *frame = GTK_WIDGET (v->data); gpointer data = g_object_get_data (G_OBJECT (frame), name); if (data && GST_IS_WORKER (data) && GST_WORKER (data) == worker) { if (ui->selected == frame) { GList *nxt = g_list_next (v); if (nxt == NULL) nxt = g_list_previous (v); ui->selected = nxt ? GTK_WIDGET (nxt->data) : NULL; } gtk_widget_destroy (frame); g_object_unref (worker); } } GST_SWITCH_UI_UNLOCK_SELECT (ui); }