C语言 与GStreamer一起使用时,OpenGL函数会导致Segmentation Fault

fnatzsnv  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(139)

我试图创建GStreamer元素,它将在屏幕上产生三角形(例如)。但是我遇到了SegFault问题...我试着排除它的故障,并找出每个OpenGL函数的作用。在下面的代码中,我给出了my _chain()函数:

static GstFlowReturn
gst_markersrc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
  Gstmarkersrc *filter;

  filter = GST_MARKERSRC (parent);

  if (filter->silent == FALSE)
  {
    GstGLContext* context;
    GstGLFuncs *gl = context->gl_vtable;
    gl->ClearColor(1.0f,0.0f,0.0f,1.0f); // <- SegFault
  }
  
  /* just push out the incoming buffer without touching it */
  return gst_pad_push (filter->srcpad, buf);
}

字符串
正如你所看到的,它只是将从sinkpad接收到的buffer推送到srcpad,但是当我尝试添加任何OpenGL函数时,它在这里中断(这里它与ClearColor在线)。

laximzn5

laximzn51#

我现在通过包含GLFW进行上下文处理来解决这个问题。我现在有这样的东西:

glfwInit();
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
window = glfwCreateWindow(320, 240, "", NULL, NULL);
glfwMakeContextCurrent(window);
context = gst_gl_context_new_wrapped (gst_gl_display_new (), (guintptr) glfwGetProcAddress("glXGetCurrentContex"), GST_GL_PLATFORM_GLX, GST_GL_API_OPENGL);
glClearColor(0.5f ,1.0f , 0.2f, 0.1f);

字符串
并且还需要在_chain()函数中调用glfwMakeContextCurrent(window);
我想得到一个更好的解决方案的想法,所以我不会标记这个问题的答案了。

相关问题