0

我正在运行MediaDump项目,该项目试图使用 GLSurfaceView 将每个视频帧转储到单个图像文件中。但我发现setEGLConfigChooser中的 RGBA 大小设置对 glReadPixels 的速度起着重要作用。

我总是在 glReadPixels 中设置 RGBA 和 UNSIGNED_BYTE 对,一些设备使用 读取速度更快setEGLConfigChooser(8, 8, 8, 8, x, x),而其他 RGBA 大小设置会使像素读取速度极慢;虽然某些设备使用 读取速度更快setEGLConfigChooser(5, 6, 5, 0, x, x),但其他 RGBA 尺寸设置会使像素读取速度极慢。也许还有更多的案例。

那么这是怎么发生的呢?有没有办法知道正确的 RGBA 尺寸设置,这将使使用 glReadPixels 的像素读取速度最快?

谢谢。

4

2 回答 2

0

不确定使用eglGetConfigAttrib可以获得最快的默认值。

如果EGL_COLOR_BUFFER_TYPE == EGL_RGB_BUFFER, 则检查EGL_RED_SIZE, EGL_GREEN_SIZE,EGL_BLUE_SIZEEGL_ALPHA_SIZE, 总等于EGL_BUFFER_SIZE

如果我分别得到 (5, 6, 5, 0, 16) ,则在glReadPixelssetEGLConfigChooser(5, 6, 5, 0, x, x)中使用和GL_RGB/GL_UNSIGNED_SHORT_5_6_5配对;如果得到 (8, 8, 8, 8, 32),则使用 ,但颜色格式可能是 RGBA 或 BGRA,在使用glGetIntegerv检查后,使用该格式并作为glReadPixels中的一对。setEGLConfigChooser(8, 8, 8, 8, x, x)GL_IMPLEMENTATION_COLOR_READ_FORMATGL_UNSIGNED_BYTE

我使用上述方法,可以获得最快的像素读取环境。不确定这是正确的方法。

ps eglGetConfigAttrib的基本用法可以通过getDetectedVersion()来判断设备是否支持OpenGL ES 2.0。

于 2013-06-16T00:00:39.007 回答
0

我猜想没有一种安全的方法来确定这一点。这在很大程度上取决于设备的图形硬件,这对于 android 可能会有很大差异。但是,您可以尝试始终使用本机像素格式,理论上这对设备来说应该更快。

您可以使用检查本机格式(在设置之前)

显示显示 = activity.getWindowManager().getDefaultDisplay(); int displayPixelFormat = display.getPixelFormat();

displayPixelFormat 为 PixelFormat.RGB_888,PixelFormat.RGBA_8888 或 5 (BGRA_8888) 表示 8 8 8 8 或任何其他表示 5 6 5。请注意,使用 565 以外的任何值可能会很棘手。根据设备和配置选择器代码,您可以轻松获得未找到配置错误或其他配置错误。

于 2013-06-16T04:02:57.043 回答