마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Native Surface를 EGLSurface로 변환 실패 질문

0 추천

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);
}

감사합니다.

작전동 (5,890 포인트) 님이 2013년 3월 13일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...