本發(fā)明涉及一種攝像頭驅(qū)動(dòng)方法,具體涉及一種基于全志H3 ARM處理器在Linux操作系統(tǒng)下驅(qū)動(dòng)OV5640攝像頭的方法。
背景技術(shù):
全志H3ARM芯片是一種被廣泛應(yīng)用于各種嵌入式平臺(tái)(比如車載電子設(shè)備,現(xiàn)場(chǎng)監(jiān)控設(shè)備,自動(dòng)販賣機(jī),廣告機(jī),人機(jī)交互系統(tǒng)等等)的核心部件。這些平臺(tái)要正常工作時(shí)必須運(yùn)行操作系統(tǒng)(比如Linux,Android等)。操作系統(tǒng)就是H3芯片和系統(tǒng)各硬件設(shè)備(比如攝像頭,顯示器等)之間溝通的橋梁,而操作系統(tǒng)中起到溝通橋梁作用的就是硬件設(shè)備的軟件驅(qū)動(dòng)模塊。沒(méi)有合適硬件設(shè)備的軟件驅(qū)動(dòng)模塊,硬件設(shè)備無(wú)法正常工作。目前H3芯片所運(yùn)行的Linux操作系統(tǒng)中尚無(wú)支持OV5640這種攝像頭的軟件驅(qū)動(dòng)模塊。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明旨在提供一種基于H3在Linux下驅(qū)動(dòng)OV5640攝像頭的方法,填補(bǔ)H3芯片所運(yùn)行的Linux操作系統(tǒng)中在支持OV5640這種攝像頭的軟件驅(qū)動(dòng)模塊方面的空白。
為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
基于H3在Linux下驅(qū)動(dòng)OV5640攝像頭的方法,包括如下步驟:
S1打開(kāi)OV5640攝像頭所對(duì)應(yīng)的設(shè)備文件/dev/videoX;
S2為OV5640攝像頭驅(qū)動(dòng)添加讀寫(xiě)寄存器sys文件系統(tǒng)接口;
S3初始化OV5640攝像頭,添加自動(dòng)對(duì)焦功能;
S4讀取OV5640攝像頭的能力值;
S5設(shè)置視頻輸入源:設(shè)置VFE驅(qū)動(dòng)默認(rèn)輸入源的初始值為0;
S6設(shè)置數(shù)據(jù)流類型和格式:設(shè)置VFE支持的視頻格式為OV5640攝像頭的格式;
S7初始化內(nèi)存映射分配緩沖區(qū);
S8查詢緩沖區(qū)大??;
S9映射設(shè)備緩沖區(qū)到應(yīng)用空間mmap;
S10添加緩沖區(qū)到輸入隊(duì)列;
S11啟動(dòng)視頻流,開(kāi)始采集數(shù)據(jù),直至采集數(shù)據(jù)停止,停止視頻流,停止采集數(shù)據(jù);
S12釋放內(nèi)存映射;
S13關(guān)閉設(shè)備文件/dev/videoX。
進(jìn)一步地,步驟S6中,VFE支持的視頻格式的視頻格式包括:
V4L2_MBUS_FMT_YUYV8_2X8;
V4L2_MBUS_FMT_YVYU8_2X8;
V4L2_MBUS_FMT_UYVY8_2X8;
V4L2_MBUS_FMT_VYUY8_2X8。
本發(fā)明的有益效果在于:本發(fā)明填補(bǔ)了H3芯片所運(yùn)行的Linux操作系統(tǒng)中在支持OV5640這種攝像頭的軟件驅(qū)動(dòng)模塊方面的空白。
附圖說(shuō)明
圖1為本發(fā)明的實(shí)施流程圖。
具體實(shí)施方式
以下將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的描述,需要說(shuō)明的是,本實(shí)施例以本技術(shù)方案為前提,給出了詳細(xì)的實(shí)施方式和具體的操作過(guò)程,但本發(fā)明的保護(hù)范圍并不限于本實(shí)施例。
如圖1所示,基于H3在Linux下驅(qū)動(dòng)OV5640攝像頭的方法,包括如下步驟:
S1打開(kāi)OV5640攝像頭所對(duì)應(yīng)的設(shè)備文件/dev/videoX。
S2為OV5640攝像頭驅(qū)動(dòng)添加讀寫(xiě)寄存器sys文件系統(tǒng)接口。步驟S2的設(shè)置為調(diào)試本驅(qū)動(dòng)模塊提供了一個(gè)便捷的接口。
S3初始化OV5640攝像頭,添加自動(dòng)對(duì)焦功能。通過(guò)步驟S3的設(shè)置增加了操作系統(tǒng)能控制攝像頭的功能。
S4讀取OV5640攝像頭的能力值VIDIOC_QUERYCAP。
S5執(zhí)行設(shè)置視頻輸入源VIDIOC_S_INPUT,并設(shè)置VFE驅(qū)動(dòng)默認(rèn)輸入源的初始值為0。通過(guò)本步驟,可以避免由于邏輯錯(cuò)誤導(dǎo)致系統(tǒng)內(nèi)核崩潰,進(jìn)而影響整個(gè)平臺(tái)的正常工作。
S6執(zhí)行設(shè)置數(shù)據(jù)流類型和格式VIDIOC_S_FMT,并設(shè)置VFE支持的視頻格式為OV5640攝像頭的格式;
S7初始化內(nèi)存映射分配緩沖區(qū)VIDIOC_REQBUFS;
S8查詢緩沖區(qū)大小VIDIOC_QUERYBUF;
S9映射設(shè)備緩沖區(qū)到應(yīng)用空間mmap;
S10添加緩沖區(qū)到輸入隊(duì)列VIDIOC_QBUF;
S11啟動(dòng)視頻流,開(kāi)始采集數(shù)據(jù)VIDIOC_STREAMON;持續(xù)采集數(shù)據(jù)直至采集數(shù)據(jù)停止,停止視頻流,停止采集數(shù)據(jù)VIDIOC_STREAMOFF;
S12釋放內(nèi)存映射munmap;
S13關(guān)閉設(shè)備文件/dev/videoX。
進(jìn)一步地,步驟S6中,VFE支持的視頻格式的視頻格式包括:
V4L2_MBUS_FMT_YUYV8_2X8;
V4L2_MBUS_FMT_YVYU8_2X8;
V4L2_MBUS_FMT_UYVY8_2X8;
V4L2_MBUS_FMT_VYUY8_2X8。
對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),可以根據(jù)以上的技術(shù)方案和構(gòu)思,作出各種相應(yīng)的改變和變形,而所有的這些改變和變形都應(yīng)該包括在本發(fā)明權(quán)利要求的保護(hù)范圍之內(nèi)。