示例#1
0
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);
  }
}
示例#2
0
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;
}
示例#3
0
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);
}
示例#4
0
/**
 * 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);
}
示例#5
0
/**
 * 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);
}
示例#6
0
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);
  }
}
示例#7
0
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;
     }
   */
}
示例#8
0
/**
 * @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);
}