本章我们来分析一下之前我们提过的相机采集的数据究竟是如何绘制到屏幕上的,这里需要几个必要的知识点:OpenGL、Android的SurfaceTexture、TextureView。网上可以搜到比较全面的有关于这些知识的文章,因此本文将不会花大篇幅介绍这些知识。
既然要将相机的采集,那么我们还是得从开启预览说起,之前文章(https://www.jianshu.com/p/225734c143ba
)有详细分析过startPreview的具体细节,但是对startPreview这个方法的参数没有做太多的分析,这里我们将从底层倒过来分析这个startPreview参数的来龙去脉。我们先看com.serenegiant.usb.UVCCamera的代码片段:
/**
* set preview surface with SurfaceHolder
* you can use SurfaceHolder came from SurfaceView/GLSurfaceView
* @param holder
*/
public synchronized void setPreviewDisplay(final SurfaceHolder holder) {
nativeSetPreviewDisplay(mNativePtr, holder.getSurface());
}
/**
* set preview surface with SurfaceTexture.
* this method require API >= 14
* @param texture
*/
public synchronized void setPreviewTexture(final SurfaceTexture texture) { // API >= 11
final Surface surface = new Surface(texture); // XXX API >= 14
nativeSetPreviewDisplay(mNativePtr, surface);
}
/**
* set preview surface with Surface
* @param surface
*/
public synchronized void setPreviewDisplay(final Surface