预览加载中,请您耐心等待几秒...
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