linux摄像头驱动的拍照流程分析(针对展讯8810(ARM架构),android平台)

 

首先,我们根据 展讯 SC8810的datasheet的摄像原理相关章节,找到了摄像相关寄存器的名字(CAP_FRM_SIZE、CAP_IMG_DECI),通过在驱动目录(kernel/drivers/media/),对这些名字的搜索,很幸运的可以找到相关源文件。

$ find kernel/drivers/media/ | xargs grep "CAP_FRM_SIZE"
kernel/drivers/media/video/sprd_dcam/sc8810/sc8810_reg_isp.h:   union _CAP_FRM_SIZE_TAG
kernel/drivers/media/video/sprd_dcam/sc8810/sc8810_reg_isp.h:           struct _CAP_FRM_SIZE_MAP
kernel/drivers/media/video/sprd_dcam/sc8810/sc8810_reg_isp.h:   union _CAP_FRM_SIZE_TAG
kernel/drivers/media/video/sprd_dcam/sc8810/sc8810_reg_isp.h:           struct _CAP_FRM_SIZE_MAP

$ find kernel/drivers/media/ | xargs grep "CAP_IMG_DECI" kernel/drivers/media/video/sprd_dcam/sc8810/sc8810_reg_isp.h:   union _CAP_IMG_DECI_TAG
kernel/drivers/media/video/sprd_dcam/sc8810/sc8810_reg_isp.h:           struct _CAP_IMG_DECI_MAP
kernel/drivers/media/video/sprd_dcam/sc8810/sc8810_reg_isp.h:   union _CAP_IMG_DECI_TAG
kernel/drivers/media/video/sprd_dcam/sc8810/sc8810_reg_isp.h:           struct _CAP_IMG_DECI_MAP

 

$ vim kernel/drivers/media/video/sprd_dcam/sc8810/sc8810_reg_isp.h  (这个文件里定义了摄像头相关的寄存器)

$ find kernel/drivers/media/ | xargs grep "sc8810_reg_isp.h"
kernel/drivers/media/video/sprd_dcam/sc8810/sc8810_reg_isp.h:* drivers/media/video/sprd_dcam/sc8810_reg_isp.h  (这个是源文件的头注释,实际上路径写错了。)
kernel//drivers/media/video/sprd_dcam/sc8810/dcam_drv_sc8810.h:#include "sc8810_reg_isp.h"
kernel/drivers/media/video/sprd_scale/scale_drv_sc8810.h:#include "../sprd_dcam/sc8810/sc8810_reg_isp.h"

我们看到 ,有 “dcam_drv_sc8810.h”和   “scale_drv_sc8810.h” 两个头文件又引用了 “sc8810_reg_isp.h”。

 

我们继续向下追踪:

$ find kernel/drivers/media/ | xargs grep "dcam_drv_sc8810.h"
kernel/drivers/media/video/sprd_dcam/sc8810/dcam_drv_sc8810.c:#include "dcam_drv_sc8810.h"
kernel/drivers/media/video/sprd_dcam/sc8810/dcam_service_sc8810.h:#include "dcam_drv_sc8810.h"
kernel/drivers/media/video/sprd_dcam/sc8810/dcam_drv_sc8810.h:* drivers/media/video/sprd_dcam/sc8810/dcam_drv_sc8810.h(这个是源文件的头注释。)

最后, “dcam_drv_sc8810.c”引用了  “dcam_drv_sc8810.h” ,所以,我们猜想 “dcam_drv_sc8810.c” 肯定是使用了这些寄存器进行编程的。

 

 

另外, “dcam_service_sc8810.h” 除了包含了 “dcam_drv_sc8810.h” 之外,自己还定义了一些枚举类型、结构体和宏,例如:

typedef struct dcam_init_param
{
    DCAM_MODE_TYPE_E mode;
    DCAM_DATA_FORMAT_E format;
    DCAM_YUV_PATTERN_E yuv_pattern;
    RGB_TYPE_E display_rgb_type;
    DCAM_SIZE_T0 input_size;
    DCAM_POLARITY_T polarity;
    DCAM_RECT_T0 input_rect;
    DCAM_RECT_T0 display_rect;
    DCAM_RECT_T0 encoder_rect;
    DCAM_ROTATION_E rotation;
    int skip_frame;
    uint32_t first_buf_addr;
    uint32_t first_u_buf_addr;
    uint32_t zoom_level;
    uint32_t zoom_multiple;
    uint32_t skip_flag;
    uint32_t is_Y_UV;

}DCAM_INIT_PARAM_T;


顺便追踪下,dcam_service的路径:

$ find kernel/drivers/media/ | xargs grep "dcam_service_sc8810.h"
kernel/drivers/media/video/sprd_dcam/sc8810/dcam_service_sc8810.c:#include &#

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值