我正在尝试使用Gstreamer渲染AV帧并将其从MPEG4视频转换为Android(2.2)-opengl纹理。我已经筋疲力尽了谷歌,但没有找到答案。
基本上,我使用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")
答案 0 :(得分:0)
我遇到了同样的问题;您可以获取位图并使用矩阵类来调整位图大小。