ffmpeg과 OpenGL을 이용한 비디오 플레이어를 개발 중 입니다.
기존에는 JAVA단에서 GLSurfaceView를 이용하여 Native단에서 올려준 데이터를 뿌려 주었습니다.
헌데 속도 문제가 있어서 GLSurfaceView를 Native 단으로 내려서 바로 갱신하려 합니다.
GLSurfaceView를 바로 내릴수는 없고,
SurfaceHolder.getSurface()를 이용하여 얻어낸 Surface 객체를 Native로 내리고
전달받은 Surface 객체를 ANativeWindow 으로 캐스팅 하는건 성공 하였습니다.
제가 어떤 샘플코드에서 보기에 ANativeWindow 객체를 eglCreateWindowSurface() 메소드를 이용하여
EGLSurface로 변환이 가능한걸 본적 있습니다.
그래서 시도를 해보고 있는데 오류때문에 더이상 진행이 되지 않고 있습니다.
위에 제가 설명한 방법이 제대로 된 방법인지 궁금하고 아니라면 어떤 방법이 있는지 궁금합니다.
아래 Native 단 소스 입니다. eglCreateWindowSurface 메소드에서 오류가 나고 있습니다.
// set the surface
void Java_com_example_eglsurfacenativetest_MainActivity_setSurface(JNIEnv *env, jclass clazz, jobject surface)
{
// obtain a native window from a Java surface
theNativeWindow = (ANativeWindow*)ANativeWindow_fromSurface(env, surface);
const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_NONE
};
EGLint w, h, dummy, format;
EGLint numConfigs;
EGLConfig config;
EGLSurface eglSurface;
EGLContext context;
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
if (!eglInitialize(display, 0, 0))
{
LOGV("eglInitialize error");
}
eglChooseConfig(display, attribs, &config, 1, &numConfigs);
eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);
eglSurface = eglCreateWindowSurface(display, NULL, theNativeWindow, NULL);
context = eglCreateContext(display, config, NULL, NULL);
}
감사합니다.