花费一些时间后,问问可能会更好。感谢您的帮助,伙计们!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();
而且对比一下:
表面纹理的相机(我需要这一个MediaPlayer的或VideoView!):Using SurfaceTexture in Android
视频到GLView(通过GLSL没有质感的访问!):Playing video in a GLSurfaceView instead of SurfaceView
的Android 4.x版SDK VideoSurfaceTexture样品(不兼容3.2!):http://source-android.frandroid.com/cts/tests/src/android/media/cts/VideoSurfaceView.java
的Android的MediaPlayer(在安卓3.x中不支持setSurface()的!):http://developer.android.com/reference/android/media/MediaPlayer.html
因此,主要问题仍然是:如何使用Android 3.x访问和操作视频帧?也许是不同的解决方案我花了太多时间后错过了什么?考虑到Google TV上根本没有NDK支持,如果我们试图操纵视频数据,我们非常有限。
你见过:http://stackoverflow.com/questions/8620560/video-processing-in-android?我也很好奇你是否看过你的项目现在已弃用的Renderscript图形API。 – 2012-08-05 03:51:46