预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共13页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Camerapreviwe流程和capture流程处理
previwe流程
第一个很简单了,要open在/dev/video0这个设备节点。
然后给dcam_fh这个结构体赋值
659file->private_data=fh;
2660fh->dev=dev;//structdcam_dev
2661
2662fh->type=V4L2_BUF_TYPE_VIDEO_CAPTURE;
2663fh->fmt=&formats[0];
2664fh->width=640;
2665fh->height=480;
其中formats[0]是一个全局数组的第一项
453{
454.name="4:2:2,packed,YUYV",
455.fourcc=V4L2_PIX_FMT_YUYV,
456.depth=16,
457},
其中depth还不知道是什么意思
然后就是给dcam_dev赋值了
2668dev->h=0;小时
2669dev->m=0;分钟
2670dev->s=0;秒
2671dev->ms=0;毫秒
2672dev->mv_count=0;
2673dev->jiffies=jiffies;
2677videoBuf_queue_vmalloc_init(&fh->vB_vidq,&dcam_video_qops,
2678NULL,&dev->slock,fh->type,
V4L2_FIELD_INTERLACED,
2679sizeof(structdcam_Buffer),fh);
这个函数比较重要了,我们的摄头都会有一个videoBuf_queue,他会有dcam_video_qops来
操作我们具体对videoBuf_queue的操作,
2454staticstructvideoBuf_queue_opsdcam_video_qops={
2455.buf_setup=buffer_setup,//计算每一帧画面要分配的内存大小
2456.buf_prepare=buffer_prepare,//传递参数给dcam_buffer,长高和标志位
2457.buf_queue=buffer_queue,//更改Buf的标志位为queued,然后把这个
Buf加入到videodma_queue的active队列的最后,不同于上面的viedoBuf_queue
2458.buf_release=buffer_release,//释放掉Buf
2459};
然后就是g_dcam_info这个全局结构体,根据代码里面的解释是/storethedcamandsensor
configinfo。确实他保存了很多参数。
2683g_dcam_info.wB_param=INVALID_VALUE;
2684g_dcam_info.brightness_param=INVALID_VALUE;
2685g_dcam_info.contrast_param=INVALID_VALUE;
2686g_dcam_info.saturation_param=INVALID_VALUE;
2687g_dcam_info.imageeffect_param=INVALID_VALUE;
2688g_dcam_info.hflip_param=INVALID_VALUE;
2689g_dcam_info.vflip_param=INVALID_VALUE;
2690g_dcam_info.previewmode_param=INVALID_VALUE;
2691g_dcam_info.ev_param=INVALID_VALUE;
2692g_dcam_info.focus_param=0;
2693g_dcam_info.power_freq=INVALID_VALUE;
2694g_dcam_info.flash_mode=FLASH_CLOSE;
2695g_dcam_info.recording_start=0;
2696g_dcam_info.sensor_work_mode=DCAM_PREVIEW_MODE;
然后重点来了if(0!=dcam_open())
722intdcam_open(void)
723{
724DCAM_TRACE("DCAM:dcam_openbegin.\n");
725g_dcam_clk=clk_get(NULL,"clk_dcam");//从系统获取时钟
726
727if(IS_ERR(g_dcam_clk))
728{
729DCAM_TRACE_ERR("DCAM:dcam_open,getclkfail!.\n");
730return1;
731}
732
7