2012-08-04 73 views
5

花费一些时间后,问问可能会更好。感谢您的帮助,伙计们!Android 3.x/Google TV/SDK上的视频处理:将视频处理为SurfaceTexture/OpenGL/GLSL

问题

  • 如何呈现来自MediaPlayer的或VideoView到表面纹理视频帧或一个纹理的OpenGL中,为了经由GLSL改变纹理/彩色片段? (我们需要它看中GLES/GLSL视频处理程序。)

语境

一)谷歌电视(LG G2 2012设备)是一款Android 3.2设备仅SDK支持(无NDK)

b)从相机渲染到SurfaceTexture很容易,但是如何在Android 3.x渲染视频到SurfaceTexture?相机解决方案,请参阅下文。

c)我已经将视频帧渲染到GLView/GLRenderer,但我没有抓取一帧来通过GLSL进行更改。它似乎不工作。但我需要accessable GLES/GLSL纹理与视频数据进行视频处理:

MainActivity类别:

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类:

public GLSimpleView(Context context) { 
    super(context); 

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

GLTextureRender类:

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(); 

而且对比一下:

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

+0

你见过:http://stackoverflow.com/questions/8620560/video-processing-in-android?我也很好奇你是否看过你的项目现在已弃用的Renderscript图形API。 – 2012-08-05 03:51:46

回答

0

Megha非常友善地为我着想。我们不支持在Google TV for ARM上使用此功能。用我们目前的SOC(片上系统)是不可能的。

+0

非常感谢,它有帮助 – btxsqdr 2012-08-16 07:15:51