Android Camera2 dumpsys显示“源作物”中的更改,我怎么知道是什么原因造成的?

时间:2019-01-18 13:12:36

标签: android android-camera2 dumpsys

我有一个CameraPreview,它选择与视图上可用空间最接近的可用图像尺寸,并选择正确的相机预览尺寸来匹配它。您可能会想象CameraPreview看起来像这样:

private void createCameraPreviewSession() {
try {
   mSurfaceView.getHolder().setFixedSize(width, height);
   Surface surface = mSurfaceView.getHolder().getSurface();
   mPreviewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
   mPreviewRequestBuilder.addTarget(surface);
    if (mCameraDevice != null && mImageReader != null && fragmentState == CONNECTING_CAMERA) {
      mCameraDevice.createCaptureSession(Arrays.asList(surface), createStateCallback(), null);
    } 
  } catch (CameraAccessException e) {
     Log.w(TAG, "Access exception during CaptureSession initialisation: " + e.getMessage());
     Log.getStackTraceString(e);
  }

}

在当前测试设备上,宽度和高度取决于方向,分别为1280x720或720x1280。奇怪的是,当我第一次打开使用此预览的活动时,相机视图会失真。当我旋转它时,它保持扭曲,当我旋转它时,它看起来很好,并且在第一次旋转之后,比例通常(但不总是)保持不变。

经过大量的摸索,我终于发现了dumpsys SurfaceFlinger命令,它使我可以看到表面的细节,这为我提供了一些新信息。当视图不好时,它看起来像这样:

  
     

层名称

     

Z |比较类型|显示框(LTRB)|源作物(LTRB)

     
     

SurfaceView-com.myApp / com.myApp.CameraActivity#0

     

4294967294 |设备| 0 0 720 1229 | 39.0 0.0 960.0 720.0

     
     

com.myApp / com.myApp.CameraActivity#0

     

21055 |设备| 0 20 720 1280 | 0.0 20.0 720.0 1280.0

     

但是当它很好时,它看起来像这样:

  
     

层名称

     

Z |比较类型|显示框(LTRB)|源作物(LTRB)

     
     

SurfaceView-com.myApp / com.myApp.CameraActivity#0

     

4294967294 |设备| 0 0 720 1184 | 0.0 0.0 1280.0 720.0

     
     

com.myApp / com.myApp.CameraActivity#0

     

21055 |设备| 0 20 720 1280 | 0.0 20.0 720.0 1280.0

     

很明显,两种情况下的源作物设置都完全不同-但是有人可以告诉我为什么吗?源作物来自哪里,我该如何更改?如果我无法更改它,是否有办法找到针对我的表面设置的“源裁剪”?如果我知道我应该能够找到一种方法来弥补这种差距。

0 个答案:

没有答案