首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android 3.x/Google /SDK上的视频处理:面向表面的视频帧/OpenGL/GLSL

Android 3.x/Google /SDK上的视频处理:面向表面的视频帧/OpenGL/GLSL
EN

Stack Overflow用户
提问于 2012-08-04 21:16:03
回答 1查看 2.5K关注 0票数 5

在花了一些时间之后,也许最好去问一下。谢谢帮忙,伙计们!

问题

  • 如何将视频帧从MediaPlayer或VideoView渲染到SurfaceTexture或OpenGL纹理,从而通过GLSL改变纹理/片段颜色?(我们需要它作为花哨的GLES/GLSL视频处理例程。)

上下文

a) Google (LG G2 2012设备)是一款仅支持SDK的Android3.2设备(不支持SDK)。

( b)从摄像头渲染到SurfaceTexture很容易,但是在Android3.x中如何将视频呈现给SurfaceTexture呢?有关相机解决方案,请参见下面。

( c)我已经在将视频帧呈现给GLView/GLRenderer,但我并不是为了通过GLSL来改变它而抓取一个帧。这似乎不管用。但是我需要可访问的带有视频数据的GLES/GLSL纹理,用于视频处理:

MainActivity类:

代码语言:javascript
复制
public void onCreate(Bundle state) {
    super.onCreate(state);

    m_View = new GLSimpleView(this);
    setContentView(m_View);

    m_Holder = m_View.getHolder();
    m_Holder.addCallback(this);
    m_Holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

GLSimpleView类:

代码语言:javascript
复制
public GLSimpleView(Context context) {
    super(context);

    m_Renderer = new GLTextureRenderer(context); 
    this.setRenderer(m_Renderer);
}

GLTextureRender类:

代码语言:javascript
复制
int[] textures = new int[1];
GLES20.glGenTextures(1, textures, 0);

m_SurfaceTexture = textures[0];
GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureID);

GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);

GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);

m_Surface = new SurfaceTexture(m_SurfaceTexture);
m_Surface.setOnFrameAvailableListener(this);

// THIS ONE DOESN'T WORK WITH ANDROID 3.x!
// HOW TO BIND m_Surface TO m_MediaPlayer?

//Surface surface = new Surface(m_Surface);
//m_MediaPlayer.setSurface(surface);
//surface.release();

还比较一下:

  • 相机用的SurfaceTexture (我需要MediaPlayer或VideoView!):Using SurfaceTexture in Android
  • 视频到GLView (不通过GLSL访问纹理):Playing video in a GLSurfaceView instead of SurfaceView
  • Android4.xSDK VideoSurfaceTexture示例(不兼容!):http://source-android.frandroid.com/cts/tests/src/android/media/cts/VideoSurfaceView.java
  • Android MediaPlayer (在Android3.x中不支持setSurface()!):http://developer.android.com/reference/android/media/MediaPlayer.html

因此,主要的问题仍然是:如何使用Android3.x访问和操作视频帧?也许是另一种解决方案?在花了太多时间之后,我是不是错过了什么?考虑到谷歌电视上根本没有NDK支持,如果我们试图操纵视频数据,我们是非常有限的。

EN

回答 1

Stack Overflow用户

发布于 2012-08-16 06:09:56

梅加为我调查了这件事。我们不支持这一点在谷歌电视为ARM。用我们目前的SOC(片上系统)是不可能的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11812066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档