Xamarin Android Camera2- OpenGL纹理预览

时间:2016-06-23 15:52:02

标签: android opengl-es android-ndk xamarin.android camera2

我正在尝试将“新相机框架”Camera2的相机流转换为OpenGL纹理,但图像保持黑色。

我正在使用Xamarin(但Java应该非常相似),我正在使用NDK进行本机渲染。所以我得到了一个创建OpenGL-ES上下文的GLSurfaceView,我可以从中渲染来自C ++。

没有签出以下示例:https://github.com/googlesamples/android-Camera2Basic,我想继续。

我没有将TextureView的SurfaceTexture作为目标添加到CaptureRequestBuilder,而是使用新的纹理句柄创建了一个新的SurfaceTexture。

// C++
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &m_TextureHandle);       
glBindTexture(GL_TEXTURE_EXTERNAL_OES, m_TextureHandle);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);

// C# (or Java)
_SurfaceTexture = new SurfaceTexture(m_TextureHandle);
_SurfaceTexture.FrameAvailable += SurfaceTextureOnFrameAvailable;

最后一行注册传入帧。 在这里,我只是调度到我的渲染线程并调用:

_SurfaceTexture.UpdateTexImage();

我错过了重要的一步吗?我也尝试使用弃用的相机api,结果相同。

由于   启

2 个答案:

答案 0 :(得分:0)

您是否还将新的SurfaceTexture包含在目标Surfaces的camera2捕获会话创建列表中,而不是TextureView的Surface?

答案 1 :(得分:0)

发现问题..这是由无效的OpenGL参数引起的:/ 在搜索问题时,我创建了一个小样本。我上传以防有人感兴趣:SampleCode (OneDrive)