我必须使用飞思卡尔iMX53处理器(OpenGL ES 2.0,EGL)上的AMD GPU将YUV420P图像转换并显示为RGB色彩空间.Linux OS,没有X11.为了实现这一点,我应该能够创建一个包含YUV420P数据的合适图像:这可以是YUV420P/YV12图像类型或3个简单的8位图像,每个组件一个(Y,U,V).
glTexImage2D被排除在外,因为它很慢,YUV420P帧是实时视频解码@ 25FPS的结果,而glTexImage2D我们无法保持所需的帧速率.
还有另一种选择:eglCreateImageKHR/glEGLImageTargetTexture2DOES.唯一的问题是这些不能处理任何适合YUV420/YV12数据的图像格式.
EGLint attribs[] = {
EGL_WIDTH, 800,
EGL_HEIGHT, 480,
EGL_IMAGE_FORMAT_FSL, EGL_FORMAT_YUV_YV12_FSL,
EGL_NONE
};
EGLint const req_attribs[] = {
EGL_RED_SIZE, 5,
EGL_GREEN_SIZE, 6,
EGL_BLUE_SIZE, 5,
EGL_ALPHA_SIZE, 0,
EGL_SAMPLES, 0,
EGL_COLOR_BUFFER_TYPE, EGL_RGB_BUFFER,
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_NONE
};
...
display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(display, NULL, NULL);
eglBindAPI(EGL_OPENGL_ES_API);
eglChooseConfig(display, req_attribs, config, ARRAY_SIZE(config), &num_configs);
ctx = eglCreateContext(display, curr_config, NULL, NULL);
surface = eglCreateWindowSurface(display, curr_config, fb_handle, NULL);
...
EGLImageKHR yuv_img = eglCreateImageKHR(display, EGL_NO_CONTEXT, EGL_NEW_IMAGE_FSL, NULL, attribs);
eglQueryImageFSL(display, yuv_img, EGL_CLIENTBUFFER_TYPE_FSL, (EGLint *)&ptr); …Run Code Online (Sandbox Code Playgroud)