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; }
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); } } }
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); } } }
QGlib::Value StreamStatusMessage::streamStatusObject() const { return QGlib::Value(gst_message_get_stream_status_object(object<GstMessage>())); }