美文网首页
2019-03-06

2019-03-06

作者: qinxing | 来源:发表于2019-03-06 19:18 被阅读0次

    围,一起努力吧~

    工作

    BUG:手动增益不能连续增大

    现象:从web端将增益快门改成手动,会发现随着增益的增大,图片亮度先递增,到了54时,图片瞬间变暗,再继续递增。
    思路:从增益从上到下传递的地方推断出可能会改变的地方:
    业务--ispctrl层--hal层--camera层的aec输出(aec.biz)--camera层的sensor模块的(设置)--写入寄存器
    过程:经过排查发现随着web界面上增益的增大,aec的输出是逐步增大的,对sensor模块进行打印,发现寄存器写入的值也是正确的。怀疑是寄存器初始化有问题,和8056平台的IMX385进行比较,没有找到异常。查看手册,发现相比于290,增益寄存器是两个字节组成的,而web界面上的53对应的是0xff,54对应的是0x100,猜测可能是寄存器只写了低八位。

    image.png
    查看代码:
        reg_setting->reg_setting[reg_count].reg_addr =
        sensor_lib_ptr.exp_gain_info.global_gain_addr;
        reg_setting->reg_setting[reg_count].reg_data = gain & 0xFF;
        reg_setting->reg_setting[reg_count].delay = 0;
        reg_count = reg_count + 1;
    

    发现代码真的仅仅对地址0x3014h进行了赋值,没有将高八位赋值。
    增加代码:

        reg_setting->reg_setting[reg_count].reg_addr =
        sensor_lib_ptr.exp_gain_info.global_gain_addr+1;
        reg_setting->reg_setting[reg_count].reg_data = (gain & 0x100) >> 8;
        reg_setting->reg_setting[reg_count].delay = 0;
        reg_count = reg_count + 1;
    

    解决问题。但是需要注意代码中reg_setting[reg_count]reg_count是否进行初始化,是否会出现数组溢出的问题?此处没有细查。
    小结
    对增益从web端的传递到寄存器的过程加深了理解。

    帮助对日夜切换代码修改

    1. 将结构体从HAL层的qcameraparameter传递到qcameraHWI。实现了按值传递和按地址传递,最终选择按地址传递。
    2. 定位日夜切换代码会对ISP传递过来的参数造成影响的BUG
      小结:由于高通将每个模块的变量都分离开来,不能随意获取,同样每个模块的函数也不能随意使用,可能会将这个模块中定义的实例又刷新一遍

    学习

    参考博客制作在线相册,希望实现目标:

    1. 由于使用的七牛网图片,希望实现在线加载所有图片(不用每每次上传图片都对网站有所更改)
    2. 实现瀑布流相册效果(不会对图片进行裁切)
    3. 预览是缩略图,点开是原图(加快网页加载速度)

    图片列表获取

    我这里先用Python获取到七牛云上相应的bucket的列表。可以很容易的获得到所有的文件名列表。
    但希望同时获得图片大小,这样可以用JavaScript对图片进行相应比例的缩放。但发现直接获取的图片数据要么不全,要么太大,导致加载速度太慢。
    因此考虑在上传的时候将图片重命名,或者加上exif信息,这样在线获取图片大小就快多了。

    # -*- coding: utf-8 -*-
    # flake8: noqa
    from qiniu import Auth
    from qiniu import BucketManager
    from qiniu import build_batch_stat
    import requests
    import ast
    import time
    access_key = 'ymnOv5ZzF9x5oPDWKqCZiTWB2QERX-GB6DnyaWaL'
    secret_key = 'NIDcseYMO-u-4WZv0VFqJhPkn_wHwsDTeCXHq9r8'
    q = Auth(access_key, secret_key)
    bucket = BucketManager(q)
    bucket_name = 'album'
    #参数设置
    # 前缀
    prefix = None
    # 列举条目-None代表所有
    limit = None
    # 列举出除'/'的所有文件以及以'/'为分隔的所有前缀
    delimiter = None
    # 标记
    marker = None
    now_time = time.time()
    ret, eof, info = bucket.list(bucket_name, prefix, marker, limit, delimiter)
    
    print('getBuckFile\n')
    # print(info)
    assert len(ret.get('items')) is not None
    # info中的text_body才是我们想要的内容,但是是字符串 字符串转dict比较麻烦,
    # 需要通过ast.literal_eval转成dict类型
    # 我们发现ret是dict类型,里面的items的值是一个list
    # 每个list代表了每个文件,每个文件又是是dict类型
    # VScode debug时可以将鼠标悬停,查看变量属性;用spyder更加方便一点
    filelist = []
    for filename in ret.get('items'):
        filelist.append(filename.get('key'))
    now_time = time.time() - now_time
    print('get bucket time:'+str(now_time))
    
    ops = build_batch_stat(bucket_name, filelist)
    ret, info = bucket.batch(ops)
    now_time = time.time() - now_time
    print('get bucket info time:'+str(now_time))
    
    ret, info = bucket.stat(bucket_name, filelist[0])
    now_time = time.time() - now_time
    print('get file exif time:'+str(now_time))
    # print(ret)
    bucket_address = 'http://pnbj1h9rr.bkt.clouddn.com/'
    exif = '?exif'
    # for...in..循环不能修改list的值;用list下标查找就可以修改list的值
    """
    for count in range(len(filelist)):
        r = requests.get(bucket_address+filelist[count]+exif)
        p = ast.literal_eval(r.text)
        if 'PixelXDimension' in p:
            filelist[count] += ' '+str(p.get('PixelXDimension').get('val'))+ \
                ' '+ str(p.get('PixelYDimension').get('val'))
    print(filelist)
    """
    imageinfo='?imageinfo'
    r=requests.get(bucket_address+filelist[20]+imageinfo)
    now_time = time.time() - now_time
    print('get imageinfo time:'+str(now_time))
    
    print(r.content)
    now_time = time.time() - now_time
    print('print text time:'+str(now_time))
    

    小结

    1. VScode debug时可以将鼠标悬停,查看变量属性;用spyder更加方便一点
    2. for...in..循环不能修改list的值;用list下标查找就可以修改list的值
    3. 可以通过ast.literal_eval将字符串转成dict类型

    相关文章

      网友评论

          本文标题:2019-03-06

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