Частота кадров слишком низкая при отображении кадра (данных RGB) с помощью OPENGL в Android ndk - PullRequest
0 голосов
/ 15 февраля 2012

Я использую OpenGL ES в JNI для рисования фрейма (данные RGB), возвращенного из исходного кода C (кодек MPEG2).Для этого я создал одну текстуру и нарисовал RGB-данные, используя glTexSubImage2D() функцию OpenGL.Но используя эту функцию, я не получаю даже 7 FPS.Хотя, как я уже изучал, используя OpenGL, мы можем получить 22 FPS.

Есть ли какая-либо другая специальная функция для отображения изображения через android-ndk, которая даст лучшую производительность, чем эта функция (glTexSubImage2D()).Я сослался на эту ссылку , чтобы нарисовать кадр, возвращенный кодеком.

Заранее спасибо.

1 Ответ

2 голосов
/ 16 февраля 2012

В 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;
}
...