本文分析从应用程序启动到开始预览整个过程中,驱动代码的执行流程。开发环境是WinCE6.0+Android6410开发板。
二、通过CAM_IOControl接口操作各种属性,下面的步骤中也会不断调用该接口,此处不细谈。
调用PIN_Open打开对应的Pin接口,主要有Preview、Still、Capture三种接口,每次打开之后调用PIN_IOControl中的IOCTL_STREAM_INSTANTIATE完成流实例化。具体执行的函数是CPinDevice :: StreamInstantiate。
四、
设置各个
Pin
的视频流格式。
![](https://i-blog.csdnimg.cn/blog_migrate/20adf80aa0c2e8d59b14c3b8f48da85d.png)
五、初始化Sensor状态,包括Camera时钟、GPIO、复位等设置,之后设置Capture的状态为PAUSE。
![](https://i-blog.csdnimg.cn/blog_migrate/b54ae3007bb29bc26cd1eb0e855489b2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/be23128742c5b56671d55c05b771b422.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7820f32b24415f04d504568ff7a773f3.png)
六、管理Pin的Buffer,由用户层分配
![](https://i-blog.csdnimg.cn/blog_migrate/67f73a593ba2815971c2491d2558fafa.png)
七、
跟第五步执行流程类似,只是设置的
PAUSE
状态是
Still
和
Preview
。
八、
同样跟第五步类似,不同的是设置
Preview
为
RUN
的状态,从
SetSensorState
开始执行的内容就不一样了。
![](https://i-blog.csdnimg.cn/blog_migrate/b5a51fde9b4a69cb31532dee7f7256eb.png)
九、添加Buffer到驱动的队列中
![](https://i-blog.csdnimg.cn/blog_migrate/ce40347e79dc94efe65e62c284f97995.png)
十、响应中断,开始处理接收到的图像数据(以Preview为例)
![](https://i-blog.csdnimg.cn/blog_migrate/9f7f82f6f56f863ec70d2aae9d5f2da6.png)
本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/719130,如需转载请自行联系原作者