【发布时间】:2012-02-15 11:45:52
【问题描述】:
我在 JNI 中使用 OpenGL ES 来绘制从 C 源代码(MPEG2 编解码器)返回的帧(RGB 数据)。为此,我创建了一个纹理并使用 OpenGL 的 glTexSubImage2D() 函数绘制 RGB 数据。但是使用这个功能我什至没有得到 7 FPS。虽然正如我所研究的那样,使用 OpenGL 我们可以获得 22 FPS。
是否有任何其他特定功能可以通过android-ndk 显示图像,这将提供比该功能(glTexSubImage2D())更好的性能。
我已经参考了这个link 来绘制从编解码器返回的帧。
提前致谢。
【问题讨论】:
-
引用的文章指出,将像素直接绘制到位图中更快 - 您尝试过吗?您是否针对操作系统版本
-
@BitBank 感谢您的回复.. 是的,我正在使用提供给参考链接的代码绘制图像.. 操作系统版本是 3.0。正如你所说,它更快,但我的帧率越来越低......请告诉我解决方案..我希望帧率在 20fps 左右..
-
我使用了直接写入位图,然后使用canvas.drawBitmap的方法。我通常得到> 60fps。在 G1 等廉价手机上,我会获得 > 30fps。
-
@BitBank 再次感谢您的回复。我有 C 语言的 MPEG2 编解码器。早前我将帧从 C 发送到 android 并使用 canvas.drawBitmap() 绘制图像。但是这个过程太慢了,因为它需要从 JNI 回调。所以我必须切换到 OpenGL 以避免回调。
-
不知道你所说的回调是什么意思。在 Java 中创建位图,通过 JNI 将其传递给 C 代码。使用位图函数获取指向位的指针,设置位,然后在您的 Java 代码中绘制它。快速高效。
标签: android opengl-es android-ndk