我正在尝试渲染使用 Gstreamer 从 MPEG4 视频抓取并转换为 Android (2.2)-opengl 纹理的 AV 帧。我几乎用尽了谷歌,没有找到答案。
基本上,我使用 Gstreamer uridecodebin 解码帧,然后将帧转换为 RGB,然后 glTexSubImage2D()
从中创建一个 openGL 纹理,但似乎无法获取任何工作。当我从 Gstreamer 获得解码数据 (RGB) 时,纹理正在变色。
我得到的视频大小为 320 * 256
,我的纹理大小为 512 * 256
& 我正在使用 glDrawTexiOES(0,0,videowidth, videoheight)
,我没有收到任何与 opengl 相关的错误,但纹理是空白的(不同颜色的帧),尽管音频工作正常。
这是我的代码:Native OnDraw:
if (theGStPixelBuffer != 0) {
glBindTexture (GL_TEXTURE_2D, s_texture);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glPixelStorei( GL_UNPACK_ALIGNMENT, 2);
glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, theTexWidth,
theTexHeight, GL_RGB, GL_UNSIGNED_BYTE,
GST_BUFFER_DATA(theGStPixelBuffer));
check_gl_error("glTexSubImage2D");
theGStPixelBuffer = 0;
}
glDrawTexiOES(0, 0, 0, theTexWidth, theTexHeight);
check_gl_error("glDrawTexiOES")
最佳答案
我遇到了同样的问题;您可以获取位图并使用矩阵类来调整位图的大小。
关于android - Gstreamer 视频转 opengl 纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7594516/