Android 摄像头(已弃用)录制时预览会调整大小

Android camera (deprecated) preview resizes when recording

问题出现在我的 Nexus 6P 设备上。在完成所有动作以检测最佳预览、宽高比、视频大小等之后,我得到以下结果:

SurfaceView 尺寸 2392x1440(全屏)
使用相机预览分辨率的纵横比重新测量后,根据计算方法,它会变为 2560x1440 或 2392x1351。

相机预览尺寸: 1920x1080

这是使用 setPreviewSize() 在相机参数上设置的: params.setPreviewSize(mOptimalPreviewSizes.width, mOptimalPreviewSizes.height);

媒体录像机视频大小:1920x1080(由设置强制)

这是在媒体记录器上设置的:
mMediaRecorder.setVideoSize(mOptimalVideoSize.width, mOptimalVideoSize.height);

当我点击录制按钮时,相机预览 'zooms in',即调整为视频大小。如果我将视频大小设置更改为 3840x2160,则预览效果很好,无需调整大小。

我的印象是可以将视频大小与预览大小分开设置,所以我有点困惑为什么会看到这个以及我该如何解决这个问题。

编辑:

例如,OpenCamera 似乎能够将预览表面分辨率与视频分辨率分开。 https://sourceforge.net/p/opencamera/code/ci/master/tree/src/net/sourceforge/opencamera/

为了确保,我在 video_recorder.prepare(); 之前添加了一行以设置自定义视频大小 (video_recorder.setVideoSize(640,480);)。预览表面仍接近全屏,分辨率为 2392x1351,相机预览仍设置为 1920x1080。我还仔细检查了生成的视频,它是预期的 640x480。不幸的是,我在他们的代码中看不到任何可以表明这是如何实现的内容。

编辑 2:

我还注意到这个 'zooming' 动作总是发生在特定的 resolution/value 上。无论我是以 1920x1080 还是 320x200 进行录制,预览都会被放大并丢失大约 1 厘米的可用图片,该图片在录制开始前可用。最终视频具有与分辨率相关的预期裁剪。

问题似乎与视频稳定有关。我想这实际上是有道理的,因为稳定防抖通常需要裁剪,并且当预览分辨率已经明显低于表面尺寸时,它会导致图片 'jump' 或 'zoom' 。删除视频稳定修复了问题。