Android上使用Opengles3.0的表面纹理

时间:2016-06-01 08:28:08

标签: android opengl-es opengl-es-3.0

我使用OpenGLES3.0进行视频处理。 我发现通过使用Android MediaExtractorMediaCodec API以及Surface纹理,可以从视频中获取帧,如下所示。

glGenTextures( 1, &textureId );
glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureId);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);

但GLES3.0中没有这样的API。

我的问题是:OpenGLES3.0中是否有相关的API来生成和使用表面纹理?或者Android中是否有其他API可以从视频中获取所有帧?

我在getFrameAtTime()MediaMetadataRetriever中尝试FFmpegMediaMetadataRetriever,但我只能获得关键帧而不是所有帧,即使使用MediaMetadataRetriever.OPTION_CLOSEST也是如此。

1 个答案:

答案 0 :(得分:0)

似乎在3.0中仍然可以使用1.1或2.0扩展。因此,要使用GL_TEXTURE_EXTERNAL_OES,您只需要包含gl2ext.h