安卓相机2敲击对焦

6

尝试使用camera2api实现触摸对焦。

    CaptureRequest.Builder afBuilder = mPreviewBuilder;

    Rect newRect=new Rect(0,0,200,200);
    MeteringRectangle meteringRectangle=new MeteringRectangle(newRect,METERING_WEIGHT_DONT_CARE);

    MeteringRectangle[] areas = afBuilder.get(CaptureRequest.CONTROL_AF_REGIONS);

    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_REGIONS,areas);
    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_AUTO);
    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
    mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), mCaptureCallback, mBackgroundHandler);

在我的回调中,我一直卡在ACTIVE_SCAN状态中,偶尔会进入FOCUS_NOT_LOCKED状态。我似乎永远无法进入FOCUS_LOCKED状态,预览看起来也不清晰。使用三星Galaxy Note 3手机。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Kishore Jethava
可能值得在这个问题上开始一个新的提问。你有关于这个问题的更多信息、代码示例等吗? - YRfree Developers
1
使用 SENSOR_INFO_ACTIVE_ARRAY_SIZE 解决了问题。我将旧的相机代码与新的Camera2 MeteringRectangle混合在一起。 - Kishore Jethava
1个回答

2
首先,你实际上并没有设置一个AF区域 - 你只是重复使用了mPreviewBuilder的默认区域。
其次,即使你将区域设置为[(0,0,200,200), METERING_WEIGHT_DONT_CARE],那也只是图像的左上角,可能不是你想要的吧?
第三,最重要的是,你将AF触发器设置为重复。这意味着在每一帧上,你都在要求相机重新开始对焦。因此它永远不会完成,因为你从未让它完成。
你需要仅将AF_TRIGGER设置为START以进行单个捕获;你仍然需要在重复请求中设置AF_REGION和AF_MODE以确保整个AF扫描始终保持一致。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - YRfree Developers
非常感谢,这是重复触发器问题! - YRfree Developers
@YRfreeDevelopers,你可否请更新一下原帖并附上修复代码? - DevonRyder
@Eddy Talvala,所以我不能使用坐标手动设置区域吗? - Iqbal hossain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接