Exemplo n.º 1
0
static void
on_stream_status (GstBus     *bus,
                  GstMessage *message,
                  gpointer    user_data)
{
  GstStreamStatusType type;
  GstElement *owner;
  const GValue *val;
  GstTask *task = NULL;

  gst_message_parse_stream_status (message, &type, &owner);

  val = gst_message_get_stream_status_object (message);

  /* see if we know how to deal with this object */
  if (G_VALUE_TYPE (val) == GST_TYPE_TASK) {
    task = g_value_get_object (val);
  }

  switch (type) {
    case GST_STREAM_STATUS_TYPE_CREATE:
      if (task) {
        GstTaskPool *pool;

        pool = test_rt_pool_new();

        gst_task_set_pool (task, pool);
      }
      break;
    default:
      break;
  }
}
static GstBusSyncReply
sync_bus_handler (GstBus * bus, GstMessage * message, GstElement * bin)
{
    switch (GST_MESSAGE_TYPE (message)) {
    case GST_MESSAGE_STREAM_STATUS:
    {
        GstStreamStatusType type;
        GstElement *owner;
        const GValue *val;
        gchar *path;
        GstTask *task = NULL;

        g_message ("received STREAM_STATUS");
        gst_message_parse_stream_status (message, &type, &owner);

        val = gst_message_get_stream_status_object (message);

        g_message ("type:   %d", type);
        path = gst_object_get_path_string (GST_MESSAGE_SRC (message));
        g_message ("source: %s", path);
        g_free (path);
        path = gst_object_get_path_string (GST_OBJECT (owner));
        g_message ("owner:  %s", path);
        g_free (path);
        g_message ("object: type %s, value %p", G_VALUE_TYPE_NAME (val),
                   g_value_get_object (val));

        /* see if we know how to deal with this object */
        if (G_VALUE_TYPE (val) == GST_TYPE_TASK) {
            task = g_value_get_object (val);
        }

        switch (type) {
        case GST_STREAM_STATUS_TYPE_CREATE:
            g_message ("created task %p", task);
            break;
        case GST_STREAM_STATUS_TYPE_ENTER:
            /* g_message ("raising task priority"); */
            /* setpriority (PRIO_PROCESS, 0, -10); */
            break;
        case GST_STREAM_STATUS_TYPE_LEAVE:
            break;
        default:
            break;
        }
        break;
    }
    default:
        break;
    }
    /* pass all messages on the async queue */
    return GST_BUS_PASS;
}
Exemplo n.º 3
0
void GstEnginePipeline::StreamStatusMessageReceived(GstMessage* msg) {
  GstStreamStatusType type;
  GstElement* owner;
  gst_message_parse_stream_status(msg, &type, &owner);

  if (type == GST_STREAM_STATUS_TYPE_CREATE) {
    const GValue* val = gst_message_get_stream_status_object(msg);
    if (G_VALUE_TYPE(val) == GST_TYPE_TASK) {
      GstTask* task = static_cast<GstTask*>(g_value_get_object(val));
      gst_task_set_enter_callback(task, &TaskEnterCallback, this, NULL);
    }
  }
}
Exemplo n.º 4
0
void GstEnginePipeline::StreamStatusMessageReceived(GstMessage* msg) {
  GstStreamStatusType type;
  GstElement* owner;
  gst_message_parse_stream_status(msg, &type, &owner);

  if (type == GST_STREAM_STATUS_TYPE_CREATE) {
    const GValue* val = gst_message_get_stream_status_object(msg);
    if (G_VALUE_TYPE(val) == GST_TYPE_TASK) {
      GstTask* task = static_cast<GstTask*>(g_value_get_object(val));

      GstTaskThreadCallbacks callbacks;
      memset(&callbacks, 0, sizeof(callbacks));
      callbacks.enter_thread = TaskEnterCallback;

      gst_task_set_thread_callbacks(task, &callbacks, this, nullptr);
    }
  }
}
Exemplo n.º 5
0
QGlib::Value StreamStatusMessage::streamStatusObject() const
{
    return QGlib::Value(gst_message_get_stream_status_object(object<GstMessage>()));
}