WebRTC - Android 设置手机焦距

客户提出在后台进行放大缩小,可以实时传输到手机上,进行放大以及缩小.
此时就需要设置焦距值来达到客户需求

Camera1Session

  //设置摄像头焦距问题
  public static void settingVideoZomm(int zoom){
    if(zoom>getCamearMaxZoom()){
      return;
    }
    if(zoomcamera == null){
      return;
    }
    final Camera.Parameters parameters = zoomcamera.getParameters();
    parameters.setZoom(zoom);
    zoomcamera.setParameters(parameters);
  }


  //获取摄像头最大焦距
  public static int getCamearMaxZoom(){
    final Camera.Parameters parameters = zoomcamera.getParameters();
    return parameters.getMaxZoom();
  }

Camera2Session

/*
   isZoomIn 是否放大
   mZoom 放大大小
   */
  public static void settingZoom(int mZoom){
    cameraThreadHandler.post(new Runnable() {
      @Override
      public void run() {
        Rect rect = handleZoom(mZoom);
        try {
          final CaptureRequest.Builder captureRequestBuilder =
                  cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
          captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, rect);
          captureRequestBuilder.addTarget(surface);
          if (mediaRecorderSurface != null) {
            Logging.d(TAG, "Add MediaRecorder surface to CaptureRequest.Builder");
            captureRequestBuilder.addTarget(mediaRecorderSurface);
          }
          captureSession.setRepeatingRequest(captureRequestBuilder.build(), new CameraCaptureCallback(), cameraThreadHandler);
        } catch (CameraAccessException e) {
          e.printStackTrace();
        }
      }
    });
  }


  public static Rect handleZoom(int mZoom) {
    int maxZoom = cameraCharacteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM).intValue()
            * 10;
    Rect rect = cameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);

    int minW = rect.width() / maxZoom;
    int minH = rect.height() / maxZoom;
    int difW = rect.width() - minW;
    int difH = rect.height() - minH;
    int cropW = difW * mZoom / 100;
    int cropH = difH * mZoom / 100;
    cropW -= cropW & 3;
    cropH -= cropH & 3;
    Rect zoomRect = new Rect(cropW, cropH, rect.width() - cropW, rect.height() - cropH);
    return zoomRect;
  }

首先获取最大焦距值,然后传入zoom,保证zoom小于最大焦距值即可!(测试机 华为p30)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值