我想在android上的原生openmax组件中实现OMX_UseEGLImage,但是如何获取与eglImage指定的EGLImage关联的底层缓冲区?
客户端api将创建一个EGLImage并调用OMX_UseEGLImage来通知我的本机openmax组件使用eglimage:
eglImage = eglCreateImageKHR( m_egl_display, m_egl_context, EGL_GL_TEXTURE_2D_KHR, (EGLClientBuffer)(egl_buffer-> texture_id), &安培; ATTRIB);
OMX_UseEGLImage(hComponent,ppBufferHdr,nPortIndex,pAppPrivate,eglImage);
问题是我如何使用eglImage?无论如何得到与eglImage相关的底层缓冲区?谢谢!
答案 0 :(得分:2)
我认为调用OMX_UseEGLImage
仅适用于渲染。
例如,考虑两个组件:解码器和使用隧道通信的渲染。解码器输出端口通过隧道连接到Render输入端口。解码器输出端口是缓冲器供应商。
从OMX_StateLoaded到OMX_StateIdle的转换:
android::GraphicBuffer * buffer = new android::GraphicBuffer();
android_native_buffer_t * native_buffer = buffer->getNativeBuffer();
EGLImageKHR egl_image = eglCreateImageKHR((EGLClientBuffer)native_buffer)
OMX_UseEGLImage(&buffer_header, egl_image)
状态OMX_StateIdle:
状态OMX_StateExecuting:
OMX_EmptyThisBuffer(buffer_header)
glEGLImageTargetTexture2DOES(egl_image)
以绘制框架。从OMX_StateIdle转换到OMX_StateLoaded:
OMX_FreeBuffer(buffer_header)
eglDestroyImageKHR(egl_image)
抱歉我的英文