This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Linux版本用的是TI的2.6.32,Android也是TI的,版本2.2.我们知道无论是Linux还是Android摄像头都是通过V4L2来工作的。在TI的Linux源码中具体为
drivers/media/video,这里有很多摄像头的驱动程序,比如omap34xxcam.c,ov3640.c。ov3640.c我理解,就是摄像头的驱动。但是omap34xxcam.c是干嘛用的?它与
V4L2层是如何联系的?因为ov3640.c里有ioctl的函数描述,omap34xxcam.c也有ioctl的函数描述。这不冲突吗?
还有Android源码中在camerahardware.cpp,v4l2camera.cpp中也有ioctl的函数描述,我的疑问就是V4L2既然在linux驱动层理有了为什么在Android层面还有呢?Android
层面里的东西是如何对驱动层施加影响的呢?
具体例子在camerahardware.cpp中有pixwidth和pixhight的宏定义,修改他们的值可以直接导致ov3640.c中是选择XGA配置还是QXGA配置。
着篇文章里没有提到过Omap34xxcam这个“层”的作用(我觉得貌似是一个层)以及和v4l2的关系,但是却解释了V4L2层的很多函数的意义。同样遗憾的是我也没有能从看到从配置参数,比如文章中所说的图像格式、大小等是如何从Android层传到linux的驱动层的。这些还得麻烦您讲讲或给点资料。
谢谢Tuff Li ,我表述下您的意思,您看看对不对。omap34xxcam相当于linux上的应用程序,所以会包含V4L2的ioctl,而capture驱动里是本来就有ioctl操作的。我这样理解对吗?
如果我理解的对的话,那么omap34xxcam中得ioctl和capture中得ioctl应该互相对应,请问他们是如何对应的呢?是名字一样的所以对应吗?
还有linux层面中得v4l2操作的ioctl和android层面的v4l2中得ioctl操作又是怎么碰上的呢?
不完全对,“omap34xxcam相当于linux上的应用程序”,这个理解不对
omap34xxcam是kernel driver,不是应该程序
Android是在v4l2上封了一层camera HAL的,Android上的应用程序是通过camera HAL来调用v4l2的
omap34xxcam有一个ops和v4l2关联的,Linux应用在调用v4l2的时候,会调用相关的omap34xxcam的ops
前提是omap34xxcam要注册到系统里才有
你仔细看看代码就明白了
通常情况下,如果需要修改和硬件相关的东西,比如sensor接口,sensor初始化,对焦等,才需要修改driver的东西(omap34xxcam),这个时候才需要调试v4l2
建议你找一个完全调试好的带camera的机器看看代码就明白了
谢谢Yaoming Qin 上面给的V4L2各种函数介绍的那份资料,同样也谢谢Tuff Li这几天的耐心讲解。两位辛苦了。这个问题就到这里吧,我追究的太细也没啥意思,关键是现在用ov3640可以实现拍照、录像和预览了,只是仍需改进。
再次对二位表示衷心的感谢。
HAL层相当于Linux下的camera测试程序,通过IO操作从HAL层向下传递命令来触发操作。
omap34xxcam.c分拣操作。如果camera具有soc且开启的话,很多的功能会丢给camera自己处理。若不具有soc,那么需要isp来做(前提是isp也配置好了)。omap34xxcam.c就是为了分拣这个而存在的。
总之就是HAL-----io操作-----omap34xxcam.c----驱动级别。