美文网首页
Andriod Camera2使用过程中的问题

Andriod Camera2使用过程中的问题

作者: jasonleening | 来源:发表于2020-07-25 17:21 被阅读0次

1.变焦的时候是根据 rect来设定的,但是rectzoom大小要注意,超出maxZoom大小会导致预览卡死,cameraError;

public int setZoom(int curZoom) {

        if(curZoom < maxZoom){

curZoom = (int) (curZoom / 2f);//矩形 缩短的是前后两端的定点,刚好是2倍,我们这里提前除以2

            if (mRecordSession == null)//还未开启预览

                return 0;

            int minW = (int) (rectInit.width() / maxZoom);

            int minH = (int) (rectInit.height() / maxZoom);

            int difW = rectInit.width() - minW;

            int difH = rectInit.height() - minH;

            int cropW = (int) (difW * (curZoom / maxZoom));

            int cropH = (int) (difH * (curZoom / maxZoom));

            cropW -= cropW & 3;

            cropH -= cropH & 3;

            zoomRect = new Rect(cropW, cropH, rectInit.width() - cropW, rectInit.height() - cropH);

            mPreviewRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoomRect);

            CaptureRequest previewRequest = mPreviewRequestBuilder.build();

            try {

                mRecordSession.setRepeatingRequest(previewRequest, null, mBackgroundHandler);

            } catch (CameraAccessException e) {

                e.printStackTrace();

            }

        }

        return (int) (curZoom*2f/stepZoom +1);

    }

rectInit获取 

    //原始 预览rect大小

        rectInit = mCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);

2.camera2坐标系  与camera1有别,设置对焦,测光,白平衡Rect一定要注意区别

camera1坐标系rect(-1000,-1000,1000,1000)

camera2坐标系rect(0,0,previewWidth,previewHeight)

3.camera2 yuv数据需要单独请求才会返回,yuv宽高可以跟预览宽高不一致(测试发现个别手机不支持预览、yuv分辨率不一致,所以建议使用一致的),但比例应当一致capture请求如下:

1).设定imageReader

//返回指定宽高的yuv 数据

            mYuvImageReader = ImageReader.newInstance(mCameraParamters.previewWidth, mCameraParamters.previewHeight,

                    ImageFormat.YUV_420_888, /*maxImages*/2);

            mYuvImageReader.setOnImageAvailableListener(

                    mOnImageAvailableListener, mBackgroundHandler);

2).加入到repeating请求中

mPreviewRequestBuilder.addTarget(mYuvImageReader.getSurface());//yuv surface

//            mPreviewRequestBuilder.addTarget(mYuvImageReader.getSurface());// 设置yuv回调surface ,如果需要yuv,需要打开注释

            mCameraDevice.createCaptureSession(Arrays.asList(mSurface, mImageReader.getSurface(),mYuvImageReader.getSurface()),

                    recordSessionStateCallback, null

            );

相关文章

网友评论

      本文标题:Andriod Camera2使用过程中的问题

      本文链接:https://www.haomeiwen.com/subject/amqmlktx.html