| :
* Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit. * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. * Vestibulum commodo. Ut rhoncus gravida arcu. */ package com.akingyin.media.camerax.manager import android.graphics.ImageFormat import android.hardware.camera2.CameraCaptureSession import android.hardware.camera2.CameraDevice import android.hardware.camera2.CaptureRequest import android.media.ImageReader import android.util.Size import android.view.Surface import androidx.annotation.NonNull import com.akingyin.media.camerax.CameraXConfig import com.akingyin.media.camerax.ext.logE import com.akingyin.media.camerax.listener.OnCameraCaptureListener import java.util.* /** * @ Description: * @author king * @ Date 2020/7/13 16:25 * @version V1.0 */ class CameraXCaptureManager(val cameraXConfig: CameraXConfig) { private var cameraDevice: CameraDevice? = null private var captureRequestBuilder: CaptureRequest.Builder? = null private var cameraCaptureSession: CameraCaptureSession? = null private var imageReader: ImageReader? = null private var surfaceList: MutableList? = null private var onCameraCaptureListener: OnCameraCaptureListener? = null fun setOnCameraCaptureListener(onCameraCaptureListener: OnCameraCaptureListener){ this.onCameraCaptureListener = onCameraCaptureListener } /** * Ԥ */ fun startPreview(@NonNull cameraDevice: CameraDevice) { this.cameraDevice = cameraDevice // ԤҪCaptureRequest.Builder captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW) // imageReadersurfaceΪCaptureRequest.BuilderĿ captureRequestBuilder?.addTarget(imageReader?.surface!!) // CameraCaptureSessionöԤ cameraDevice.createCaptureSession(surfaceList, object : CameraCaptureSession.StateCallback() { override fun onConfigured(@NonNull cameraCaptureSession: CameraCaptureSession) { if (null == cameraDevice) { return } // ͷѾʱʼʾԤ this@CameraXCaptureManager.cameraCaptureSession = cameraCaptureSession try { // ԶԽ captureRequestBuilder?.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE) // captureRequestBuilder?.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH) // ʾԤ val captureRequest = captureRequestBuilder?.build() cameraCaptureSession.setRepeatingRequest(captureRequest, null, null) } catch (e: Exception) { logE("CameraXCaptureManager", "startPreview Exception ${e.message}") } } override fun onConfigureFailed(@NonNull cameraCaptureSession: CameraCaptureSession) { } }, null) } /** * رԤ */ fun stopPreview() { if (null != cameraCaptureSession) { cameraCaptureSession?.close() cameraCaptureSession = null } if (null != cameraDevice) { cameraDevice?.close() cameraDevice = null } if (null != imageReader) { imageReader?.close() imageReader = null } } /** * ʼImageReader */ fun initImageReader() { // ʼImageReader imageReader = ImageReader.newInstance(cameraXConfig.previewSize.width, cameraXConfig.previewSize.height, ImageFormat.JPEG, 1) imageReader?.setOnImageAvailableListener({ onCameraCaptureListener?.onImageCapture(it.acquireNextImage()) }, null) surfaceList = ArrayList() // SurfaceΪԤݵʾ surfaceList?.add(cameraXConfig.surface) // ImageReaderSurfaceĻûлص surfaceList?.add(imageReader?.surface!!) } /** * */ fun takePicture() { if (null == cameraDevice) { return } // ҪCaptureRequest.Builder val captureRequestBuilder = cameraDevice?.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE) // imageReadersurfaceΪCaptureRequest.BuilderĿ captureRequestBuilder?.addTarget(imageReader?.surface!!) // ԶԽ captureRequestBuilder?.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE) // Զع captureRequestBuilder?.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH) // ȡֻ val rotation = cameraXConfig.activity?.windowManager?.defaultDisplay?.rotation // 豸Ƭķ captureRequestBuilder?.set(CaptureRequest.JPEG_ORIENTATION, ORIENTATIONS.get(rotation!!)) // val captureRequest = captureRequestBuilder?.build() //ȡս cameraCaptureSession?.capture(captureRequest, null, null) } companion object { private val ORIENTATIONS = SparseIntArray() init { ORIENTATIONS.append(Surface.ROTATION_0, 90) ORIENTATIONS.append(Surface.ROTATION_90, 0) ORIENTATIONS.append(Surface.ROTATION_180, 270) ORIENTATIONS.append(Surface.ROTATION_270, 180) } } }
ǸҳܰȨ۳ʱ踶ѹ
˴
ɨ븶Ѽɸ
七号信令网 | HDSS | 信令 | SBFD | EVPN | MFBI | PSHO | C-DRX | PUSCH标称功率 | PRACH初始功率 | GYTB | GY |