【发布时间】:2012-11-26 17:37:51
【问题描述】:
我想在运行 XBMC 以更改电视环境光的颜色时获取屏幕内容的平均颜色。 XBMC 运行在带有 OpenGL ES 2.0 硬件 (Raspberry Pi) 的小型 HTPC 上,该硬件运行 Debian 派生的发行版。我想我必须从 XBMC 使用 OpenGL 绘制的屏幕 帧缓冲区 中读取。 (至少,我认为并希望 XBMC 使用 OpenGL 渲染所有内容。)
是否可以读取代表整个屏幕输出的 OpenGL 帧缓冲区?我需要什么才能访问它?我是否还需要一个自己的渲染上下文来访问屏幕的帧缓冲区? (我自己不会在屏幕上渲染任何东西,我只想阅读)。
高效计算平均颜色是下一个任务。我正在考虑每行/列每 8 或 16 个像素读取一次(就足够了,我们谈论的是 1080p 高清电影),然后计算 CPU 上的平均值。欢迎任何关于更好解决方案的想法。
【问题讨论】:
-
帧缓冲区,而不是屏幕缓冲区,因为你问过。两者都是正确的。
-
@Linuxios 谢谢。我想过说“帧缓冲区”,但是,读者可能会认为我想读回我之前渲染过的东西。这不是这里的情况。我只是强调它是整个屏幕。
-
我们谈论的是由内核和显卡驱动程序内部保存的帧缓冲区,它通常在 X11 的控制下,它为窗口管理器管理较小的帧缓冲区和应用程序。
-
您是否考虑过使用 libavfilter 代替? (xbmc 在后台使用 ffmpeg 进行解码 - 在这种情况下 libva 加速)
-
嗨@leemes,你有没有机会解决这个问题?我自己也遇到了同样的挑战,目前正在研究从 OpenGl 捕获屏幕内容的方法。有一些工具,比如 glc 和 SimpleScreenRecorder 可以实现我们所追求的功能,但我还没有尝试过。
标签: linux opengl-es framebuffer screen-capture