一種Linux下視頻處理方法
【技術領域】
[0001 ] 本發(fā)明涉及視頻處理方法,特別是一種Linux下視頻處理方法。
【背景技術】
[0002]參照圖1所示,當前l(fā)inux下整體視頻處理方法主要包括視頻采集、視頻處理、視頻顯示三大步驟,視頻采集和顯示主要是在Linux內(nèi)核中進行,使用物理內(nèi)存地址,視頻處理則在Linux應用層中進行,使用虛擬內(nèi)存地址。
[0003]V4L2是Linux環(huán)境下開發(fā)視頻采集設備驅(qū)動程序的一套規(guī)范(API),目前在Linux下進行視頻采集基本都是使用V4L2接口,其主要流程如下:
第一步,打開視頻設備文件,進行視頻采集的參數(shù)初始化;
第二步,申請若干視頻采集的幀緩沖區(qū),并將這些幀緩沖區(qū)以MMAP方式從內(nèi)核空間映射到用戶空間,便于應用程序讀取/處理視頻數(shù)據(jù);
第二步,將申請到的幀緩沖區(qū)在視頻米集輸入隊列排隊,并啟動視頻米集;
第四步,驅(qū)動開始視頻數(shù)據(jù)的采集,應用程序從視頻采集輸出隊列取出幀緩沖區(qū),處理完后,將幀緩沖區(qū)重新放入視頻采集輸入隊列,循環(huán)往復采集連續(xù)的視頻數(shù)據(jù);
第五,停止視頻米集。
[0004]采用現(xiàn)有的視頻處理方法,在視頻采集流程的第二步申請幀緩沖區(qū)的時候,一般申請3-5個緩沖區(qū),每個緩沖區(qū)的大小為要采集的幀大小,該緩沖區(qū)是在內(nèi)核中申請的,是物理地址,通過內(nèi)存映射方法(_ap)將申請到的內(nèi)核空間幀緩沖區(qū)的地址映射到用戶空間地址(虛擬地址),這樣就可以在應用層的用戶地址空間直接處理幀緩沖區(qū)的數(shù)據(jù)(包括增刪、查改),但是由于V4L2框架中的分配的物理內(nèi)存只有一幀圖像大小,因此映射后應用層所能使用的也就只能是一幀圖像大小的內(nèi)存,應用層要想處理圖像數(shù)據(jù),必須另外開辟一份內(nèi)存(即幀處理區(qū)),并把數(shù)據(jù)拷貝到新內(nèi)存中,處理完后再拷貝回去,假設每幀圖像的大小為500kb,所以在視頻采集中開辟的幀緩沖區(qū)也為500kb,經(jīng)過mmap映射到用戶地址空間的大小也為500kb,但是這兩者是同步的,更新其中的任何一方內(nèi)容,另一方也會跟著更改,為了對幀進行處理,必須開辟一個新的緩沖區(qū)內(nèi)存,即幀處理內(nèi)存,把幀緩沖區(qū)地址中的內(nèi)容拷貝到幀處理內(nèi)存中(拷貝1)進行處理后,再將幀處理區(qū)中的內(nèi)容拷貝回幀緩沖區(qū)地址(拷貝2),這里就有了兩次拷貝,假設視頻處理中每秒25幀,同時接4個攝像頭,每秒鐘就有了2*25*4=200次的拷貝,拷貝次數(shù)太多,大大增加了CPU的消耗,在嵌入式系統(tǒng)有限的CPU資源中,由于CPU處理能力不夠,導致視頻來不及處理,使得視頻的整體處理性能下降。
[0005]有鑒于此,本發(fā)明人提出一種Linux下能夠降低幀處理中的CPU消耗和提高視頻處理性能的方法。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的在于提供了一種Linux下視頻處理方法,其能夠降低幀處理中的CPU消耗,提高視頻處理性能。
[0007]為實現(xiàn)上述目的,本發(fā)明采用的技術方案為:
一種Linux下視頻處理方法,其特征在于,包括以下步驟:
51.打開視頻設備文件,進行視頻采集的參數(shù)初始化;
52.在內(nèi)核空間的物理內(nèi)存中申請若干視頻采集的幀緩沖區(qū),內(nèi)核空間的每個幀緩沖區(qū)分配兩幀圖像大小的內(nèi)存,然后將這些幀緩沖區(qū)以MMAP方式從內(nèi)核空間映射到用戶空間;
53.在用戶空間的虛擬內(nèi)存中申請幀緩沖區(qū),該用戶空間的幀緩沖區(qū)同樣為兩幀圖像大小的內(nèi)存,工作時將該用戶空間幀緩沖區(qū)的剩余一幀圖像大小的內(nèi)存作為幀處理區(qū);
54.將申請到的內(nèi)核空間的幀緩沖區(qū)在視頻采集的輸入隊列排隊,并啟動視頻采集;
55.驅(qū)動開始視頻數(shù)據(jù)的采集,應用程序從視頻采集輸出隊列取出內(nèi)核空間幀緩沖區(qū)的地址,將該幀緩沖區(qū)的地址映射到用戶空間的虛擬地址中進行視頻數(shù)據(jù)處理,處理完后,將該幀緩沖區(qū)重新放入視頻采集輸入隊列,循環(huán)往復采集連續(xù)的視頻數(shù)據(jù);
視頻采集的輸入隊列和輸出隊列是由Linux內(nèi)核管理的一個循環(huán)隊列,與輸入隊列排隊的幀緩沖區(qū)可從輸出隊列取出。
[0008]S6.應用程序?qū)⒉襟ES5中取出的幀緩沖地址發(fā)送至顯示驅(qū)動進行視頻顯示。
[0009]所述步驟S2中,內(nèi)核空間的每個幀緩沖區(qū)的內(nèi)存為lOOOkb。
[0010]本發(fā)明的有益效果是:
本發(fā)明通過對內(nèi)核中的V4L2框架進行修改,在內(nèi)核中幀緩沖區(qū)分配的物理內(nèi)存為兩幀圖像大小,即為原來的兩倍內(nèi)存,從而使映射到用戶空間的虛擬內(nèi)存的存儲空間也變?yōu)閮杀秷D像大小,而一幀圖只需一幀內(nèi)存,在虛擬空間中便可以分出一個幀緩沖區(qū)和一個幀處理區(qū)的地址空間,在用戶空間進行圖形處理時,就只需要把幀緩沖區(qū)的幀數(shù)據(jù)拷貝到幀處理區(qū)的空間進行處理,而不需要再從幀處理區(qū)拷貝到幀緩沖區(qū),從而減少了CPU的消耗,節(jié)省CPU的資源,提高了視頻處理能力。
【附圖說明】
[0011]此處所說明的附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本發(fā)明的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當限定。在附圖中:
圖1為本現(xiàn)有一種Linux下視頻處理方法的流程簡圖;
圖2為本發(fā)明一種Linux下視頻處理方法的流程簡圖。
【具體實施方式】
[0012]為了使本發(fā)明所要解決的技術問題、技術方案及有益效果更加清楚、明白,以下結(jié)合附圖及實施例對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0013]如圖2示,本發(fā)明揭示的一種Linux下視頻處理方法,其包括以下步驟:
51.打開視頻設備文件,進行視頻采集的參數(shù)初始化;
52.在內(nèi)核空間的物理內(nèi)存中申請若干視頻采集的幀緩沖區(qū),內(nèi)核空間的每個幀緩沖區(qū)分配兩幀圖像大小的內(nèi)存,然后將這些幀緩沖區(qū)以MMAP方式從內(nèi)核空間映射到用戶空間; 53.在用戶空間的虛擬內(nèi)存中申請幀緩沖區(qū),該用戶空間的幀緩沖區(qū)同樣為兩幀圖像大小的內(nèi)存,工作時將該用戶空間幀緩沖區(qū)的剩余一幀圖像大小的內(nèi)存作為幀處理區(qū);
54.將申請到的內(nèi)核空間的幀緩沖區(qū)在視頻采集的輸入隊列排隊,并啟動視頻采集;
55.驅(qū)動開始視頻數(shù)據(jù)的采集,應用程序從視頻采集輸出隊列取出內(nèi)核空間幀緩沖區(qū)的地址,將該幀緩沖區(qū)的地址映射到用戶空間的虛擬地址中進行視頻數(shù)據(jù)處理,處理完后,將該幀緩沖區(qū)重新放入視頻采集輸入隊列,循環(huán)往復采集連續(xù)的視頻數(shù)據(jù);
56.應用程序?qū)⒉襟ES5中取出的幀緩沖地址發(fā)送至顯示驅(qū)動進行視頻顯示。
[0014]本實施例中,假定每幀圖像均為500kb大小,則內(nèi)核空間的每個幀緩沖區(qū)的內(nèi)存為1 OOOkb,而用戶空間虛擬內(nèi)存中的幀緩沖區(qū)和幀處理區(qū)內(nèi)存為500kb,由于每幀圖像的實際大小還是原來的500kb,因此在視頻采集的時候,其有效的幀只會占用內(nèi)核空間幀緩沖區(qū)的前500kb大小,還剩下另外的500kb,這里把這剩下的500kb的空間作為幀處理內(nèi)存來使用,同樣針對用戶空間中的虛擬地址空間也是只占用前500kb的空間(及用戶空間幀緩沖區(qū)),剩余500kb的空閑的空間(及用戶空間幀處理區(qū)),也是作為幀處理使用。
[0015]本發(fā)明通過對內(nèi)核中的V4L2框架進行修改,在內(nèi)核空間中幀緩沖區(qū)分配的物理內(nèi)存為兩幀圖像大小,即為原來的兩倍內(nèi)存,從而使映射到用戶空間的虛擬內(nèi)存的存儲空間也變?yōu)閮杀秷D像大小,而一幀圖只需一幀內(nèi)存,在虛擬空間中便可以分出一個幀緩沖區(qū)和一個幀處理區(qū)的地址空間,在用戶空間進行圖形處理時,就只需要把幀緩沖區(qū)的幀數(shù)據(jù)拷貝到幀處理區(qū)的空間進行處理,而不需要再從幀處理區(qū)拷貝到幀緩沖區(qū),從而減少了CPU的消耗,節(jié)省CPU的資源,提高了視頻處理能力。
[0016]上述說明示出并描述了本發(fā)明的優(yōu)選實施例,應當理解本發(fā)明并非局限于本文所披露的形式,不應看作是對其他實施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文發(fā)明構(gòu)想范圍內(nèi),通過上述教導或相關領域的技術或知識進行改動。而本領域人員所進行的改動和變化不脫離本發(fā)明的精神和范圍,則都應在本發(fā)明所附權利要求的保護范圍內(nèi)。
【主權項】
1.一種Linux下視頻處理方法,其特征在于,包括以下步驟: 51.打開視頻設備文件,進行視頻采集的參數(shù)初始化; 52.在內(nèi)核空間的物理內(nèi)存中申請若干視頻采集的幀緩沖區(qū),內(nèi)核空間的每個幀緩沖區(qū)分配兩幀圖像大小的內(nèi)存,然后將這些幀緩沖區(qū)以MMAP方式從內(nèi)核空間映射到用戶空間; 53.在用戶空間的虛擬內(nèi)存中申請幀緩沖區(qū),該用戶空間的幀緩沖區(qū)同樣為兩幀圖像大小的內(nèi)存,工作時將該用戶空間幀緩沖區(qū)的剩余一幀圖像大小的內(nèi)存作為幀處理區(qū); 54.將申請到的內(nèi)核空間的幀緩沖區(qū)在視頻采集的輸入隊列排隊,并啟動視頻采集; 55.驅(qū)動開始視頻數(shù)據(jù)的采集,應用程序從視頻采集輸出隊列取出內(nèi)核空間幀緩沖區(qū)的地址,將該幀緩沖區(qū)的地址映射到用戶空間的虛擬地址中進行視頻數(shù)據(jù)處理,處理完后,將該幀緩沖區(qū)重新放入視頻采集輸入隊列,循環(huán)往復采集連續(xù)的視頻數(shù)據(jù); 56.應用程序?qū)⒉襟ES5中取出的幀緩沖地址發(fā)送至顯示驅(qū)動進行視頻顯示。2.根據(jù)權利要求1所述的一種Linux下視頻處理方法,其特征在于:所述步驟S2中,內(nèi)核空間的每個幀緩沖區(qū)的內(nèi)存為1 OOOkb。
【專利摘要】本發(fā)明公開的一種Linux下視頻處理方法,本發(fā)明通過對內(nèi)核中的V4L2框架進行修改,在內(nèi)核中幀緩沖區(qū)分配的物理內(nèi)存為兩幀圖像大小,即為原來的兩倍內(nèi)存,從而使映射到用戶空間的虛擬內(nèi)存的存儲空間也變?yōu)閮杀秷D像大小,而一幀圖只需一幀內(nèi)存,在虛擬空間中便可以分出一個幀緩沖區(qū)和一個幀處理區(qū)的地址空間,在用戶空間進行圖形處理時,就只需要把幀緩沖區(qū)的幀數(shù)據(jù)拷貝到幀處理區(qū)的空間進行處理,而不需要再從幀處理區(qū)拷貝到幀緩沖區(qū),從而減少了CPU的消耗,節(jié)省CPU的資源,提高了視頻處理能力。
【IPC分類】H04N5/14, H04N7/18
【公開號】CN105450986
【申請?zhí)枴緾N201510769092
【發(fā)明人】陳華云, 任賦, 陳從華, 林曉龍, 鄭福弟
【申請人】廈門雅迅網(wǎng)絡股份有限公司
【公開日】2016年3月30日
【申請日】2015年11月12日