在android ndk中使用OPENGL显示帧(RGB数据)时帧速率太慢

时间:2012-02-15 11:45:53

标签: android opengl-es android-ndk

我在JNI中使用OpenGL ES来绘制从C源代码(MPEG2 Codec)返回的帧(RGB数据)。为此,我创建了一个纹理并使用OpenGL的glTexSubImage2D()函数绘制RGB数据。但使用此功能我甚至没有得到7 FPS。虽然我已经研究过使用OpenGL,我们可以得到22 FPS。

是否有任何其他特定功能可以通过android-ndk显示图像,这将提供比该功能(glTexSubImage2D())更好的性能。 我已经引用了这个link来绘制从编解码器返回的帧。

提前致谢。

1 个答案:

答案 0 :(得分:2)

Android 2.2中添加了一组原生位图功能,允许您直接访问位图的位而无需复制它。在您的C代码中,您将使用:

#include <android/bitmap.h>

JNIEXPORT jint JNICALL Java_com_somecompany_someapp_someclass_drawonbitmap(JNIEnv *env, jobject obj, jobject bitmap)
{
int iReturn;
AndroidBitmapInfo info;
void *pixels;

   iReturn = AndroidBitmap_getInfo(env, bitmap, &info);
   if (iReturn < 0)
   {
       return <some error>;
   }
   iReturn = AndroidBitmap_lockPixels(env, bitmap, &pixels);
   if (iReturn < 0)
   {
       return <some error>;
   }

   // Draw directly into the bitmap here
   //
   // use the structure members:
   // info.stride
   // info.width
   // info.height
   // info.format (e.g. ANDROID_BITMAP_FORMAT_RGB_565)

   if (pixels != NULL) // we previously locked the pixels
   {
       AndroidBitmap_unlockPixels(env, bitmap);
   }
   return 0;
}