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

时间:2012-01-13 10:31:03

标签: c stream gtk rgb

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

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

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

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

这是我已经尝试过的:

  • 在gtk绘图区域使用 gdk_draw_rgb_image() :基本上工作,但渲染速度太快,以至于绘制过程重叠,应用程序在前几帧后崩溃,即使在1 fps捕获率。

  • 为每个新框架分配 GdkPixbuf 并在gtk图片小部件上调用 gtk_image_set_from_pixbuf() :仅显示第一帧,然后我看不到改变窗口。可能是我的代码中的错误,但不知道这是否足够快。

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

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

提前感谢任何建议!

2 个答案:

答案 0 :(得分:4)

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

render a pixbuf的呼叫也是如此。那里的文件指向开罗,所以解决方案似乎是继续调查你的图像在开罗渲染时看起来不正确的原因。

答案 1 :(得分:1)

展开是正确的,如果你想要一些适用于GTK2和GTK3的东西,那么cairo就是你的选择。由于您的样本是不带alpha的RGB,因此您应该使用CAIRO_FORMAT_RGB24格式。确保您绘制的表面采用该格式。如果输入图像保持相同的大小,还要确保不要经常分配/销毁表面缓冲区。