android - Gstreamer 视频转 opengl 纹理

标签 android opengl-es gstreamer

我正在尝试渲染使用 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/

相关文章:

opengl-es - 如何在 GLSL 中编写片段着色器来对 9 个 float 的数组进行排序

linux - 基于 GTK 的窗口的 X 客户端请求失败

android - 如何在android 2.2上摇晃

android - 尝试访问内容提供者时权限被拒绝

Android 数据绑定(bind)点击监听器不工作(随机工作)

android - 将加速度计发送到 C/C++

android - 如何将 EGL(不是 EGAL)与 iOS(C 和 Obj-C)集成

iphone - 射线-三角形交叉点拾取不起作用

gstreamer - 什么是 gstreamer caps 语法?

python - 为什么 python gstreamer 在我的脚本顶部没有 "gobject.threads_init()"时崩溃?