Android 摄像机2:设置光学稳定不起任何作用(OIS)

Android 摄像机2:设置光学稳定不起任何作用(OIS),android,android-camera,android-camera2,Android,Android Camera,Android Camera2,我有三星S10,它有视频稳定功能。 使用系统默认摄像头应用程序,我可以看到启用和未启用时的区别:首先,如果启用,则会出现一些缩放预览,其次,在设备移动过程中,它会很明显 我尝试在我自己的应用程序中使用Camera2 API、FullHD和后置摄像头(与默认系统应用程序相同)实现稳定 我测试了characteristics.get(CameraCharacteristics.CONTROL\u AVAILABLE\u VIDEO\u STABILIZATION\u MODES)仅返回CONTRO

我有三星S10,它有视频稳定功能。 使用系统默认摄像头应用程序,我可以看到启用和未启用时的区别:首先,如果启用,则会出现一些缩放预览,其次,在设备移动过程中,它会很明显

我尝试在我自己的应用程序中使用Camera2 API、FullHD和后置摄像头(与默认系统应用程序相同)实现稳定

我测试了
characteristics.get(CameraCharacteristics.CONTROL\u AVAILABLE\u VIDEO\u STABILIZATION\u MODES)
仅返回
CONTROL\u VIDEO\u STABILIZATION\u MODE\u OFF
,因此不支持此操作

但是
characteristics.get(摄像机特性.镜头信息\u可用\u光学稳定)
摄像机数据。镜头\光学\稳定\模式\开启

因此,据我所知,这正是启用视频稳定(光学)的选项,应该与默认系统应用程序中的选项相同

但是,当我执行下一个摄像头捕获会话配置时,它不会改变任何内容,没有缩放预览(与默认系统摄像头应用程序一样),也不会在移动过程中发生任何更改,因此,我的应用程序中的视频与禁用视频稳定的默认摄像头应用程序中的视频相同

captureRequestBuilder.set(
    CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE,
    CameraMetadata.LENS_OPTICAL_STABILIZATION_MODE_ON
)
所以设置这个参数不会改变任何事情


为什么视频稳定在默认系统摄像头应用程序中工作,而在使用Camera2 API的我自己的应用程序中不工作?

Android上的摄像头设备可以支持两种类型的稳定

  • 视频稳定(电子图像稳定/EIS):这是在图像捕获后的一个后处理步骤,通过分析帧之间的摄像机运动,并通过稍微移动图像进行补偿。这就是为什么会有放大效果,为偏移/扭曲提供一些空间。这会随时间稳定视频,使连续图像帧稳定。正如您所发现的,可通过设置访问此控件
  • 光学图像稳定(OIS):这是一组围绕相机镜头的高速陀螺仪和磁铁,当相机移动以稳定图像时,会快速移动镜头(有时是传感器)。运动量是有限的,但速度非常快,因此它可以在一次曝光期间稳定图像,而不是跨多个帧。所以它通常只对快照有用,而不是视频。这是通过访问
不幸的是,许多安卓制造商没有将其EIS实现提供给默认摄像头应用程序之外的应用程序。这是因为制作一个好的EIS实现是复杂的,制造商希望将其限制为只使用自己的应用程序的录制模式(这是一个需要修复的单一目标)。例如,用于录制视频的EIS通常应用1秒延迟,以便除了过去的帧外,还可以调整未来帧的图像变换,这对于实时应用程序来说是很难做到的。一些制造商让更简单的算法可见,或者设法让EIS为每个人工作,但对于其他制造商,即使内置应用程序使用EIS,设备也不会列出对EIS的支持


打开OIS可能效果很好——你只会在长时间曝光的图像上看到效果,当OIS关闭时,它们会因为握手而变得模糊,但当OIS打开时会变得清晰。由于它是一个独立的硬件单元,制造商很容易让每个人都能使用on开关。

我认为OIS比EIS更适合视频。好了,现在更清楚了。所以它应该是EIS,但制造商并没有将其用于CameraAPI,只用于他们的Camera应用程序。现在我必须改变逻辑,如果我的视频录制应用程序选择了比默认EIS更支持的两种稳定,否则如果EIS不可用,则选择OIS。非常感谢您如此详细的回答!