C,GTK:以<60 fps显示RGB图像流

lyn*_*nix 6 c gtk rgb stream

我正在开发一个应用程序,它将从相机设备接收图像并在GTK窗口中显示它们.

相机以不同的帧速率(1-50 fps)提供原始RGB图像(每像素3个字节,无alpha通道,固定大小).

我已经完成了所有硬件工作,现在有了一个回调函数,可以通过摄像头捕获的每个新图像调用它.

在窗口中显示这些图像的最简单但最快的方法是什么?

这是我已经尝试过的:

  • 使用gdk_draw_rgb_image()一个GTK绘图区:基本工作,但呈现缓慢,在绘制过程重叠和前几帧后的应用程序崩溃,甚至在1分fps的捕获率.

  • 为每个新帧分配一个GdkPixbuf并调用gtk_image_set_from_pixbuf()一个gtk图像小部件:只显示第一帧,然后我看到窗口没有变化.可能是我的代码中的错误,但不知道这是否足够快.

  • 使用开罗(cairo_set_source_surface(),然后cairo_paint()):看起来相当快,但图像看起来条纹,不知道图像格式是否兼容.

目前我正在考虑尝试类似gstreamer的东西并将这些图像视为视频流,但我不确定这对于我的简单机制是否有点过分.

提前感谢任何建议!

unw*_*ind 4

整个 GdkRGB API 似乎已被弃用,因此这可能不是解决此问题的推荐方法。

渲染 pixbuf 的调用也是如此。那里的文档指向开罗,因此解决方案似乎是继续调查为什么您的图像在开罗渲染时看起来不正确。