• android 慢动作触发区域对焦


    一、普通模式区域对焦

    Android Camera2 实现触摸对焦功能(Touch to Focus) - 简书

    关键代码

    1. public void startControlAFRequest(MeteringRectangle rect,
    2. CameraCaptureSession.CaptureCallback captureCallback) {
    3. MeteringRectangle[] rectangle = new MeteringRectangle[]{rect};
    4. // 对焦模式必须设置为AUTO
    5. mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_AUTO);
    6. //AE
    7. mPreviewBuilder.set(CaptureRequest.CONTROL_AE_REGIONS,rectangle);
    8. //AF 此处AF和AE用的同一个rect, 实际AE矩形面积比AF稍大, 这样测光效果更好
    9. mPreviewBuilder.set(CaptureRequest.CONTROL_AF_REGIONS,rectangle);
    10. try {
    11. // AE/AF区域设置通过setRepeatingRequest不断发请求
    12. mSession.setRepeatingRequest(mPreviewBuilder.build(), null, mHandler);
    13. } catch (CameraAccessException e) {
    14. e.printStackTrace();
    15. }
    16. //触发对焦
    17. mPreviewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,CaptureRequest.CONTROL_AF_TRIGGER_START);
    18. try {
    19. //触发对焦通过capture发送请求, 因为用户点击屏幕后只需触发一次对焦
    20. mSession.capture(mPreviewBuilder.build(), captureCallback, mHandler);
    21. } catch (CameraAccessException e) {
    22. e.printStackTrace();
    23. }
    24. }

    //触发对焦通过capture发送请求, 因为用户点击屏幕后只需触发一次对焦
    mSession.capture(mPreviewBuilder.build(), captureCallback, mHandler);

    二、慢动作模式区域对焦

    慢动作模式使用上述mSession.capture是无法完成对焦的,需要使用mSession.captureBurst来完成。

    2.1 创建List

    1. public List createHighSpeedRequestList(
    2. CameraDevice cameraDevice, CameraConstrainedHighSpeedCaptureSession session,
    3. int templateType, Surface... surfaces) {
    4. CaptureRequest.Builder reqBuilder;
    5. List list;
    6. try {
    7. reqBuilder = cameraDevice.createCaptureRequest(templateType);
    8. for (CaptureRequest.Key key : mCaptureRequests.keySet()) {
    9. setRequest(reqBuilder, key);
    10. }
    11. addRequestParameter(reqBuilder);
    12. for (Surface surface : surfaces) {
    13. reqBuilder.addTarget(surface);
    14. }
    15. list = session.createHighSpeedRequestList(reqBuilder.build());
    16. } catch (CameraAccessException err) {
    17. err.printStackTrace();
    18. return null;
    19. }
    20. return list;
    21. }

    2.2 进行一次对焦动作

    1. List requestList = createHighSpeedRequestList(...);
    2. mSession.captureBurst(requestList, captureCallback, mHandler);

    项目经验,仅供参考

  • 相关阅读:
    Intellij IDEA--根据maven依赖名查找它是哪个pom.xml引入的
    python面试题——抽象基类和接口
    【Linux】服务器被work32病毒入侵CPU占用99%
    OpenCV之ellipse函数
    状态管理库-vuex
    Typecho框架漏洞
    JDK17新特性
    Elasticsearch入门(二)基本操作(索引、文档、映射)
    【JVM技术专题】精心准备了一套JVM分析工具的锦囊「JConsole补充篇」
    分布式应用之zookeeper集群+消息队列Kafka
  • 原文地址:https://blog.csdn.net/dzning123/article/details/134267766