【问题标题】:Problems getting SurfaceTexture work with Android Videoplayer on MALI 400在 MALI 400 上使用 Android Videoplayer 获取 SurfaceTexture 时出现问题
【发布时间】:2013-03-21 05:30:03
【问题描述】:

我编写了一个应用程序,它基本上使用此处许多帖子中的代码将视频渲染为纹理。我猜原件来自一些 nVidia 示例(VideoSurfaceView),在这里找到:Using SurfaceTexture in Android

此示例在移动设备和平板电脑上都可以正常工作 - 两者都基于 Tegra。然后我在基于 MALI 400 的 android 系统(Minix Neo5)上尝试了相同的代码,我可以看到视频播放,但主要是黑屏,上面有一些垃圾(只有 3 或 4 行)

我尝试使用 OpenGL ES 跟踪器检查从 SurfaceTexture 复制回纹理本身的内容,但看起来跟踪器无法正确显示它(无论是在 tegra 系统上还是在 tegra 设备上。请注意我没有收到任何 OpenGL 错误,也没有任何警告。看起来一切正常。

如果有任何东西被复制到 TEXTURE_EXTERNAL ,有没有其他工具可以告诉我怎么办?所有 TEXTURE_2D 都可以在跟踪器上使用。

我在 MALI 系统上注意到的一件奇怪的事情是它根本无法播放高清视频。我的视频 1280x720 在调试器上报告他们正在使用 SoftwareRenderer。也许这就是为什么帧没有正确复制到将用作纹理的 OGL_IMAGE 的原因。

我想我需要更好地了解幕后发生的事情,但我预计会出现一个错误,告诉系统无法执行此操作,或者它应该可以正常工作,即使性能很差。也许这是一个修改版本的 android 并且媒体播放器代码刚刚被破坏......

【问题讨论】:

  • 我现在已经在第二个基于 Mali-400 MP GPU 的 android (giadatech Q11) 上进行了测试,结果只是黑屏。我认为所有功能都必须在 Android 设备上实现!?

标签: android opengl-es android-video-player mali


【解决方案1】:

感谢您的帖子!这正是我在另外两台 Android 设备(都是 Mali-400 MP)上观察到的,我不知道为什么会发生这种情况。好像视频是在后台播放的。 我在 GLSurfaceView 类的构造函数中添加了以下几行:

setEGLConfigChooser(8,8,8,8,0,0);
getHolder().setFormat(PixelFormat.RGBA_8888);

然后视频在我的 OpenGL 场景“后面”可见。这两款设备都声称支持“GL_OES_EGL_image_external”扩展。

【讨论】:

  • 您是如何在后台显示视频的?我尝试设置出血功能:'GLES20.glClearColor(0.0f, 1.0f, 0.0f, 0.5f);' 'GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT |GLES20.GL_COLOR_BUFFER_BIT);' 'GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);' 'GLES20.glEnable(GLES20.GL_BLEND);' 'GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);' 'GLES20.glDisable(GLES20.GL_BLEND);'
  • 在我的情况下不需要混合。只需添加上面发布的两行即可为我完成工作。您可以使用 ´getHolder().setFormat(PixelFormat.TRANSLUCENT); 作为透明背景
  • 如果你使用setEGLConfigChooser(8,8,8,8,0,0);,你要求的是一个没有深度缓冲区的配置......所以OpenGL绘图将完全基于绘图顺序进行合成。这可能不是您想要的。
猜你喜欢
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多