美文网首页
[Camera效果] 高通 429 AF 概述

[Camera效果] 高通 429 AF 概述

作者: c枫_撸码的日子 | 来源:发表于2020-07-16 11:19 被阅读0次

    本文来自于我的前同事-小卢,一个很有个性,能力又不错的年轻小伙子!
    (文章已经得他本人同意分享)

    429 AF 与 8909 有很大的区别,这种差别体现在算法的提升与架构的改善,下面简要介绍 429 CAF 的基本概念

    Contrast Auto Focus

    顾名思义,基于场景反差值进行马达位置搜索,找到一个反差值最大的位置,那这个位置就是当前距离最终的位置。因此,对于 CAF 而言,有两个概念是必须要清楚的:

    1. 搜索范围
    2. 合焦条件

    1. 搜索范围

    搜索范围最大是 0~1023,但不可能会设置这么大,因为马达可以活动的范围也有限,且这么大的搜索范围会非常限制对焦速度。

    高通的搜索范围一般是从无穷远(5m左右)到 7cm (有时只有 10cm)

    typedef enum _single_index_t
    2372{
    2373    SINGLE_NEAR_LIMIT_IDX    = 0,
    2374    SINGLE_7CM_IDX           = 1,
    2375    SINGLE_10CM_IDX          = 2,
    2376    SINGLE_14CM_IDX          = 3,
    2377    SINGLE_20CM_IDX          = 4,
    2378    SINGLE_30CM_IDX          = 5,
    2379    SINGLE_40CM_IDX          = 6,
    2380    SINGLE_50CM_IDX          = 7,
    2381    SINGLE_60CM_IDX          = 8,
    2382    SINGLE_120CM_IDX         = 9,
    2383    SINGLE_HYP_F_IDX         = 10,
    2384    SINGLE_INF_LIMIT_IDX     = 11,
    2385    SINGLE_MAX_IDX           = 12,
    2386} single_index_t;
    

    以下是 ov13b10 dw9714 的案例

    /* Index */
    {
        350, 385, 425, 474, 541, 569, 585, 605, 617, 629, //0~9
        645, 677 
    },
    

    这是至关重要的一步,可以说,如果这一步的数据不准确,那将会严重影响 AF 准确性

    2. 合焦条件

    搜索什么时候结束,这是由合焦条件来确定的,但这个条件每个平台都可能不一样,而且开放的调试接口也可能有差异,例如以下 log

    可以发现,i1 ~ i5 已经出现了极大值点——549,但是 AF 却没有停下来,反而转换了一次方向继续搜索,最终也证明,final pos = 547,其实和 i1 ~ i5 找到的 549 非常接近,那么是什么原因使 AF 没有在 i5 就停下呢?

    这个要参考高通提供的 3A 部分逻辑

    algo logic:
    case HJ_SCAN_DECREASE:
    {
        AF_MSG_LOW("HJ_SCAN_DECREASE");
        if (is_flat_curve)
        {
            AF_MSG_LOW("flat curve detected, moving to hyperfocal %d",hyp_pos);
            saf->final_pos = hyp_pos;
            af_single_hj_end_search(p_caf_instance, HJ_AF_SINGLE_FAILED);
            return;
        } else if (saf->reverse_scan_cnt == 0)
        {
            /*Scan to Reverse direction*/
            /*We don't use multi kernal. So don't need to check if sw stats or
            hw stats*/
            target_start_pos = saf->af_index[fv_info->max_index];
            af_single_hj_start_srch_reverse(p_caf_instance, target_start_pos);
        } else
        {
            /* Decrease and Reverse != 0*/
            /*feature eable for flat_curve_detection_by_fratio & spot light         detection*/
            AF_MSG_LOW("Decrease in Reversed direction!");
        }
    
    2. Entering af_single_hj_start_srch_reverse function:
    void af_single_hj_start_srch_reverse(
    af_caf_search_internal_t *p_caf_instance, int target_pos)
    {
        af_single_hj_lib_info_t *saf = &p_caf_instance->af_single->af_hj_lib_info;
        af_tuning_algo_adapter_t *af_tuning = &p_caf_instance->af_tuning->af_algo;
        boolean ignore_first_invalid_frame =
        (boolean)af_tuning->algo_extended.en_ignore_first_invalid_frame;
    
        /* set the starting position */
        saf->dest_pos =
        af_single_hj_set_start_pos_reverse(p_caf_instance, target_pos);
    
        /* House Keeping */
        saf->reverse_scan_cnt++;
        saf->saf_scan_state = AF_PRE_SCAN;
    }
    
    3.reverse_scan_cnt++,Enter another logic.
    print log:
    AF_MSG_LOW("Decrease in Reversed direction!");
    

    基于以上分析,可以肯定的是,在正常情况下,AF 必定要进行两次搜索,一次正向,另一次反向,依次来提高 final pos 的可信度,这种做法明显的好处是提高了对焦准确率,但明显的坏处就是降低了对焦速度。而且,从高通提供的代码来看,这种做法是默认做法,也不提供调试接口。

    相关文章

      网友评论

          本文标题:[Camera效果] 高通 429 AF 概述

          本文链接:https://www.haomeiwen.com/subject/jucphktx.html