我在JNI中使用OpenGL ES来绘制从C源代码(MPEG2 Codec)返回的帧(RGB数据)。为此,我创建了一个纹理并使用OpenGL的glTexSubImage2D()
函数绘制RGB数据。但使用此功能我甚至没有得到7 FPS。虽然我已经研究过使用OpenGL,我们可以得到22 FPS。
是否有任何其他特定功能可以通过android-ndk
显示图像,这将提供比该功能(glTexSubImage2D()
)更好的性能。
我已经引用了这个link来绘制从编解码器返回的帧。
提前致谢。
答案 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;
}