3.5 cam_data结构体详解

[cpp]  view plain  copy
  1. typedef struct _cam_data {   
  2.     struct video_device *video_dev;   
  3.     int device_type;   
  4.   
  5.     /* semaphore guard against SMP multithreading */   
  6.     struct semaphore busy_lock;    //针对SMP的信号量  
  7.   
  8.     int open_count;  //open函数的引用计数,调用一次open函数,这个引用计数加1  
  9.   
  10.     /* params lock for this camera */   
  11.     struct semaphore param_lock;  //针对camera的信号量  
  12.   
  13.     /* Encoder */   
  14.     struct list_head ready_q; //三个工作队列之一,这个是应用程序 VIDIOC_QBUF调用后,buffer所处的队列  
  15.     struct list_head done_q; //三个工作队列之一,这个是应用程序调用mxc_streamon函数后,buffer所处的队列  
  16.     struct list_head working_q; //三个工作队列之一,这个是应用程序VIDIOC_DQBUF调用时,buffer所处的队列  
  17.     int ping_pong_csi; //这个值一般取0或者1,在CPMEM中buffer地址的更新过程中使用  
  18.     spinlock_t queue_int_lock;   
  19.     spinlock_t dqueue_int_lock;   
  20.     struct mxc_v4l_frame frame[FRAME_NUM]; /* 这个数组是buffer的核心,应用程序申请的frame的信息都                              * 保存在这个数组中*/  
  21.     struct mxc_v4l_frame dummy_frame; //虚假的frame,在CPMEM初始化时用这个frame的地址来填充  
  22.     wait_queue_head_t enc_queue;  //译码buffer队列,一般在camera_callback函数中唤醒,在VIDIOC_DQBUF中进行等待,与下面的enc_counter一起使用  
  23.     int enc_counter;  //执行完译码任务的buffer计数,译码队列的唤醒条件  
  24.     dma_addr_t rot_enc_bufs[2];  //rot中需要使用两个buffer,其中buffer的物理地址存放在这个数组中  
  25.     void *rot_enc_bufs_vaddr[2];  //虚拟地址存放在这个数组中   
  26.     int rot_enc_buf_size[2];  //这两个buffer的大小分别存放在这个数组中  
  27.     enum v4l2_buf_type type; //buffer的类型  
  28.   
  29.     /* still image capture */  /* 静态图片的一些信息 */  
  30.     wait_queue_head_t still_queue;  //静态图片任务队列  
  31.     int still_counter;  //静态图片任务计数  
  32.     dma_addr_t still_buf[2];   //静态图片任务需要使用的两个buffer的地址存放在这个数组中  
  33.     void *still_buf_vaddr;   
  34.   
  35.     /* overlay */  /* overlay的一些信息 */  
  36.     struct v4l2_window win;   
  37.     struct v4l2_framebuffer v4l2_fb;   
  38.     dma_addr_t vf_bufs[2];   
  39.     void *vf_bufs_vaddr[2];   
  40.     int vf_bufs_size[2];   
  41.     dma_addr_t rot_vf_bufs[2];   
  42.     void *rot_vf_bufs_vaddr[2];   
  43.     int rot_vf_buf_size[2];   
  44.     bool overlay_active;   
  45.     int output;   
  46.     struct fb_info *overlay_fb;   
  47.     int fb_origin_std;   
  48.     struct work_struct csi_work_struct;   
  49.   
  50.     /* v4l2 format */  /* v4l2的一些格式信息 */  
  51.     struct v4l2_format v2f;  //这个结构体保存的是v4l2的格式信息,这些信息都应用程序中通过VIDIOC_S_FMT宏最后设置好保存在里面的,包括width,height,bytesperline,sizeimage等参数。  
  52.     struct v4l2_format input_fmt;   /* camera in */  /* 摄像头输入的格式 */  
  53.     bool bswapenable;   
  54.     int rotation;   /* for IPUv1 and IPUv3, this means encoder rotation */   
  55.     int vf_rotation; /* viewfinder rotation only for IPUv1 and IPUv3 */   
  56.     struct v4l2_mxc_offset offset;   
  57.   
  58.     /* V4l2 control bit */  /* 一些控制信息 */  
  59.     int bright;  //亮度  
  60.     int hue;   
  61.     int contrast;  //对比度  
  62.     int saturation;   
  63.     int red;   
  64.     int green;   
  65.     int blue;   
  66.     int ae_mode;   
  67.   
  68.     /* standard */   
  69.     struct v4l2_streamparm streamparm;   
  70.     struct v4l2_standard standard;   
  71.     bool standard_autodetect;   
  72.    
  73.     /* crop */  /* crop的一些信息 */  
  74.     struct v4l2_rect crop_bounds;  //crop边界信息  
  75.     struct v4l2_rect crop_defrect;  //crop默认矩形的信息  
  76.     struct v4l2_rect crop_current;  //当前crop的信息  
  77.   
  78.     /* 以下这几个函数指针分为三种 */  
  79.     /* encoding相关的函数指针 */  
  80.     int (*enc_update_eba) (void *private, dma_addr_t eba);   //更新cpmem中buffer地址的函数指针  
  81.     int (*enc_enable) (void *private);   //使能enc函数指针  
  82.     int (*enc_disable) (void *private);  //关闭enc函数指针  
  83.     int (*enc_enable_csi) (void *private);   //使能csi设备函数指针  
  84.     int (*enc_disable_csi) (void *private);  //关闭csi设备函数指针  
  85.     void (*enc_callback) (u32 mask, void *dev);  //中断处理函数指针  
  86.     /* viewfinder相关的函数指针,这几个函数都在mxc_v4l2_capture.c中的start_preview函数指定 */  
  87.     int (*vf_start_adc) (void *private);   
  88.     int (*vf_stop_adc) (void *private);   
  89.     int (*vf_start_sdc) (void *private);   
  90.     int (*vf_stop_sdc) (void *private);   
  91.     int (*vf_enable_csi) (void *private);   
  92.     int (*vf_disable_csi) (void *private);   
  93.     /* csi相关的函数指针 */  
  94.     int (*csi_start) (void *private);   
  95.     int (*csi_stop) (void *private);   
  96.   
  97.     /* misc status flag */  /* 一些标记位 */  
  98.     bool overlay_on;  //是否打开overlay的标记位  
  99.     bool capture_on;  //是否打开capture的标记位,在streamon函数中置位  
  100.     int overlay_pid;   
  101.     int capture_pid;   
  102.     bool low_power;   //用于标记这个设备是否处于低电平状态,在 resume函数中设置为false,在suspend函数中设置为true,这个标记位与cam->power_queue队列一起使用。  
  103.     wait_queue_head_t power_queue;  //在resume函数中根据low_power 标志位来唤醒  
  104.     unsigned int ipu_id;   //ipu ID  
  105.     unsigned int csi;  //每个ipu可以拥有两个csi设备,用于区别哪一个csi设备,0或者1  
  106.     u8 mclk_source;   
  107.     bool mclk_on[2];    /* two mclk sources at most now */   
  108.     int current_input; //当前输入,在mxc_v4l2_capture.c中有一个mxc_capture_inputs []数组,驱动程序会根据这个 current_input这个数字作为下标从这个数组中索引。  
  109.   
  110.     int local_buf_num;   
  111.   
  112.     /* camera sensor interface */  /* CSI相关的信息 */  
  113.     struct camera_sensor *cam_sensor;   /* old version */   
  114.     struct v4l2_int_device *all_sensors[MXC_SENSOR_NUM];   
  115.     struct v4l2_int_device *sensor;  //有关摄像头的信息都保存在这个结构体中,它为一个slave子设备  
  116.     struct v4l2_int_device *self;  //将cam->self结构体作为一个master主设备,cam->self->priv指向这个cam_data结构体  
  117.     int sensor_index;   
  118.     void *ipu;   
  119.     void *csi_soc;   
  120.     enum imx_v4l2_devtype devtype;   
  121.   
  122.     /* v4l2 buf elements related to PxP DMA */   
  123.     struct completion pxp_tx_cmpl;   
  124.     struct pxp_channel *pxp_chan;   
  125.     struct pxp_config_data pxp_conf;   
  126.     struct dma_async_tx_descriptor *txd;   
  127.     dma_cookie_t cookie;   
  128.     struct scatterlist sg[2];   
  129. } cam_data  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值