Gstreamer视频到opengl纹理

时间:2011-09-29 08:31:59

标签: android opengl-es gstreamer

我正在尝试使用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")

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题;您可以获取位图并使用矩阵类来调整位图大小。