Python 将直接图像数据写入Gtk.窗口,或改进图像缓冲区性能的方法

Python 将直接图像数据写入Gtk.窗口,或改进图像缓冲区性能的方法,python,graphics,x11,pygobject,Python,Graphics,X11,Pygobject,我正在以每秒60帧的速度计算实时图像数据。我想以零拷贝的方式将其导入Gtk.窗口。缓冲区数据由一个优化的C模块创建,该模块与Python挂钩。我可以使用GdkPixbuf.new()创建缓冲区,然后使用Gtk.Image来显示此图像。渲染路径很快:基准为~3ms左右 然而,这似乎调用了一个较慢的X11路径,导致我的应用程序在以1920x1080的速度渲染窗口时几乎无法达到18fps。在直接Gtk API中花费的时间似乎很少,大部分时间都花在Gtk迭代中。Python应用程序忙于使用100%的CP

我正在以每秒60帧的速度计算实时图像数据。我想以零拷贝的方式将其导入Gtk.窗口。缓冲区数据由一个优化的C模块创建,该模块与Python挂钩。我可以使用
GdkPixbuf.new()
创建缓冲区,然后使用Gtk.Image来显示此图像。渲染路径很快:基准为~3ms左右

然而,这似乎调用了一个较慢的X11路径,导致我的应用程序在以1920x1080的速度渲染窗口时几乎无法达到18fps。在直接Gtk API中花费的时间似乎很少,大部分时间都花在Gtk迭代中。Python应用程序忙于使用100%的CPU,此外,X11服务器正在使用另外45%的CPU

由于我在数据如何到达缓冲区方面有相当大的灵活性,所以我希望以零拷贝的方式来实现这一点。换句话说,获取一个指向缓冲区的指针,将计算数据直接写入缓冲区。如果这是不可能的,我想以X11最满意的格式创建缓冲区,并且很少或不需要数据转换。不幸的是,GtkPixbuf似乎只支持RGB或RGBA缓冲区,并且无法(我可以看到)推断快速缓冲区格式


我为树莓Pi(3B+)编写这个软件,所以性能是必不可少的。我正在使用Python和PyGObject 3.2。

您看到了吗@nearoo是的,很熟悉,但不幸的是它仍然不是零拷贝。