如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Camerapreviwe流程和capture流程处理previwe流程第一个很简单了,要open在/dev/video0这个设备节点。然后给dcam_fh这个结构体赋值659file->private_data=fh;2660fh->dev=dev;//structdcam_dev26612662fh->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_queue2458.buf_release=buffer_release,//释放掉Buf2459};然后就是g_dcam_info这个全局结构体,根据代码里面的解释是/storethedcamandsensorconfiginfo。确实他保存了很多参数。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");//从系统获取时钟726727if(IS_ERR(g_dcam_clk))728{729DCAM_TRACE_ERR("DCAM:dcam_open,getclkfail!.\n");730return1;731}7327