1、在Activity界面代码中:
private var mCamera: Camera? = null
private val mWidth = GwApplication.DEFAULT_REMOTE_WIDTH_EXT
private val mHeight = GwApplication.DEFAULT_REMOTE_HEIGHT_EXT
private var imgData: ImageData = ImageData(mWidth, mHeight)
/**
* Camera初始化
**/
private fun initCameara() {
//log("====initCameara()")
try {
mCamera = Camera.open(GwApplication.DEFAULT_CR_CAMERA)
val params = mCamera!!.getParameters()
params.previewFormat = ImageFormat.NV21
params.setPreviewSize(mWidth, mHeight)
//params.pictureFormat = ImageFormat.NV21
params.setPictureSize(mWidth, mHeight)
//params.zoom = 0
//params.setRotation(0)
params.setPreviewFpsRange(10, 15)
mCamera!!.setParameters(params)
} catch (ex: RuntimeException) {
ex.printStackTrace()
}
}
/**
* 开始监听回调,设置预览
**/
private fun setCallback() {
//log("====setCallback()")
try {
// 主要是surfaceTexture获取预览数据,但不显示
val surfaceTexture = SurfaceTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES)
mCamera!!.setPreviewTexture(surfaceTexture)
} catch (e: IOException) {
e.printStackTrace()
}
// 设置 mCamera.addCallbackBuffer(mPreviewData) 后才会回调,旨在每处理完一帧数据回调一次
mCamera!!.setPreviewCallbackWithBuffer(mPreviewCallback)
mCamera!!.addCallbackBuffer(imgData.data)
mCamera!!.startPreview()
}
/**
* 帧数据监听实现
**/
private val mPreviewCallback =
android.hardware.Camera.PreviewCallback { data, camera -> // 在此处处理当前帧数据,并设置下一帧回调
//log("====PreviewCallback()")
imgData.setTempData(data)
mCamera!!.addCallbackBuffer(imgData.data)
// if (isShow) {
// showPic(imgData.previewData)
// }
}
/**
* 关闭相机
**/
private fun closeCamera() {
mCamera!!.stopPreview()
mCamera!!.setPreviewCallbackWithBuffer(n