一種基于android終端提高USB2.0攝像頭高分辨率高幀率的方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及通訊技術(shù)領(lǐng)域,尤其涉及一種基于android終端提高USB2.0攝像頭高分辨率高幀率的方法。
【背景技術(shù)】
[0002]多媒體終端基于android平臺(tái),在會(huì)議應(yīng)用等場(chǎng)景中,需要使用外置的USB攝像頭,以提高清晰程度,但市面上較多的都是支持USB2.0攝像頭,采集的格式一般支持YUV/MJPEG格式,目前多媒體終端抽象層采用的是YUV格式,如果分辨率超過(guò)720P/1080P的時(shí)候,由于受USB帶寬限制,通常幀率達(dá)不到15以上,這就在運(yùn)動(dòng)比較頻繁的場(chǎng)景中,多媒體終端使得用戶體驗(yàn)不夠好。
【發(fā)明內(nèi)容】
[0003]本發(fā)明要解決的技術(shù)問(wèn)題,在于提供一種基于android終端提高USB2.0攝像頭高分辨率高幀率的方法,使得USB2.0攝像頭不會(huì)在運(yùn)動(dòng)頻率比較大的情況下,采集的視頻出現(xiàn)模糊情況。
[0004]本發(fā)明是這樣實(shí)現(xiàn)的:一種基于android終端提高USB2.0攝像頭高分辨率高幀率的方法,
[0005]所述USB2.0攝像頭支持UVC驅(qū)動(dòng),通過(guò)V4L2接口設(shè)置采樣視頻的格式;
[0006]在采集的視頻分辨率是720P/1080P時(shí),攝像頭抽象層采用MJPEG格式,從攝像頭抽象層收到MJPEG流后,將MJPEG流實(shí)時(shí)轉(zhuǎn)成NV21格式,使andro i d終端的應(yīng)用層在高分辨率情況下使用高幀率。
[0007]進(jìn)一步的,所述方法進(jìn)一步具體為:
[0008]打開攝像頭抽象層時(shí),通過(guò)1ctl函數(shù)向UVC驅(qū)動(dòng)申請(qǐng)緩存buffer,并通過(guò)mmap函數(shù)將緩存buffer映射進(jìn)用戶空間;
[0009]USB2.0攝像頭適配層里面的StartPrivew函數(shù)會(huì)設(shè)置視頻格式的長(zhǎng)和寬,在設(shè)置NV21格式時(shí),則判斷視頻分辨率是否是720P/1080P,如果是720P/1080P,則視頻格式轉(zhuǎn)化成V4L2_PIX_FMT_MJPEG,否,則不進(jìn)行操作;
[0010]線程類PreviewThread獲取到一幀數(shù)據(jù)frame后,將視頻的MJPEG格式數(shù)據(jù)存儲(chǔ)在frame虛擬地址上;如果幀格式是V4L2_PIX_FMT_MJPEG,則進(jìn)行MJPEG轉(zhuǎn)化成NVl 2數(shù)據(jù);
[0011]把轉(zhuǎn)換解碼出得的NV21數(shù)據(jù)拷貝到frame虛擬地址,并重新設(shè)置幀數(shù)據(jù)frame的格式為 V4L2_PIX_FMT_NV21。
[0012]進(jìn)一步的,所述MJPEG轉(zhuǎn)化成NV12數(shù)據(jù)能采用硬件加速進(jìn)行轉(zhuǎn)換解碼,硬件加速流程如下:
[0013]首先USB2.0攝像頭動(dòng)態(tài)加載硬件加速庫(kù)Iibrk_vpuap1.so ;
[0014]通過(guò)dlsym 函數(shù),獲取 MJPEG 解碼函數(shù) get_class_RkJpegDecoder;
[0015]根據(jù)獲取到得解碼函數(shù),進(jìn)行MJPEG轉(zhuǎn)換解碼成NV21格式;
[0016]如果不支持硬件加速時(shí),則進(jìn)行軟件解碼MJPEG。
[0017]本發(fā)明具有如下優(yōu)點(diǎn):本發(fā)明在采集的視頻分辨率是720P/1080P時(shí),攝像頭抽象層采用MJPEG格式,從攝像頭抽象層收到MJPEG流后,將MJPEG流實(shí)時(shí)轉(zhuǎn)成NV21格式,使android終端的應(yīng)用層在高分辨率情況下使用高幀率;本發(fā)明能在USB2.0攝像頭分辨率高的情況下,提高了幀率,提高用戶的體驗(yàn),USB2.0攝像頭不會(huì)在運(yùn)動(dòng)頻率比較大的情況下,采集的視頻出現(xiàn)模糊情況。
【附圖說(shuō)明】
[0018]圖1為本發(fā)明方法流程示意圖。
【具體實(shí)施方式】
[0019]請(qǐng)參閱圖1所示,本發(fā)明的一種基于android終端提高USB2.0攝像頭高分辨率高幀率的方法,
[0020]所述USB2.0攝像頭支持UVC驅(qū)動(dòng),通過(guò)V4L2接口設(shè)置采樣視頻的格式;其中,USB2.0通常支持MJPEG壓縮格式,通過(guò)MJPEG格式,MJPEG是一種視頻壓縮格式,每一幀圖像分辨使用JPEG編碼,占用帶寬比原始的YUV格式小很多,所以即使720P (長(zhǎng)1280,寬720) /1080P分辨率下,也是可以支持20/30幀;該USB2.0攝像頭即插即用免驅(qū)動(dòng);
[0021]在采集的視頻分辨率是720P/1080P時(shí),攝像頭抽象層采用MJPEG格式,從攝像頭抽象層收到MJPEG流后,將MJPEG流實(shí)時(shí)轉(zhuǎn)成NV21格式,使android終端的應(yīng)用層(APP應(yīng)用程序)在高分辨率情況下使用高幀率。
[0022]其中,所述方法進(jìn)一步具體為:
[0023]打開攝像頭抽象層時(shí),通過(guò)1ctl函數(shù)向UVC驅(qū)動(dòng)申請(qǐng)緩存buffer,并通過(guò)mmap函數(shù)將緩存buffer映射進(jìn)用戶空間;
[0024]USB2.0攝像頭適配層里面的StartPrivew函數(shù)會(huì)設(shè)置視頻格式的長(zhǎng)和寬,在設(shè)置NV21格式時(shí),則判斷視頻分辨率是否是720P/1080P,如果是720P/1080P,則視頻格式轉(zhuǎn)化成V4L2_PIX_FMT_MJPEG(即通過(guò) V4L2 接口 設(shè)置視頻格式 VID10C_S_FMT 為 V4L2_PIX_FMT_MJPEG格式;),否,則不進(jìn)行操作;這種做法保證android終端app應(yīng)用默認(rèn)還是NV21格式,無(wú)需改變上面應(yīng)用程序。
[0025]線程類PreviewThread獲取到一幀數(shù)據(jù)frame后,將視頻的MJPEG格式數(shù)據(jù)存儲(chǔ)在frame虛擬地址上;如果幀格式是V4L2_PIX_FMT_MJPEG,則進(jìn)行MJPEG轉(zhuǎn)化成NVl 2數(shù)據(jù);
[0026]把轉(zhuǎn)換解碼出得的NV21數(shù)據(jù)拷貝到frame虛擬地址,并重新設(shè)置幀數(shù)據(jù)frame的格式為 V4L2_PIX_FMT_NV21。
[0027]另外,所述MJPEG轉(zhuǎn)化成NV12數(shù)據(jù)能采用硬件加速進(jìn)行轉(zhuǎn)換解碼,硬件加速流程如下:如RK3288芯片,支持硬件加速,
[0028]首先USB2.0攝像頭動(dòng)態(tài)加載硬件加速庫(kù)I ibrk_vpuap1.so ;
[0029]通過(guò)dlsym 函數(shù),獲取 MJPEG 解碼函數(shù) get_class_RkJpegDecoder;
[0030]根據(jù)獲取到得解碼函數(shù),進(jìn)行MJPEG轉(zhuǎn)換解碼成NV21格式;
[0031 ] 如果不支持硬件加速時(shí),則進(jìn)行軟件解碼MJPEG。
[0032]總之,本發(fā)明在采集的視頻分辨率是720P/1080P時(shí),攝像頭抽象層采用MJPEG格式,從攝像頭抽象層收到MJPEG流后,將MJPEG流實(shí)時(shí)轉(zhuǎn)成NV21格式,使android終端的應(yīng)用層在高分辨率情況下使用高幀率;本發(fā)明能在USB2.0攝像頭分辨率高的情況下,提高了幀率,提高用戶的體驗(yàn),USB2.0攝像頭不會(huì)在運(yùn)動(dòng)頻率比較大的情況下,采集的視頻出現(xiàn)模糊情況。
[0033]以上所述僅為本發(fā)明的較佳實(shí)施例,凡依本發(fā)明申請(qǐng)專利范圍所做的均等變化與修飾,皆應(yīng)屬本發(fā)明的涵蓋范圍。
【主權(quán)項(xiàng)】
1.一種基于android終端提高USB2.0攝像頭高分辨率高幀率的方法,其特征在于: 所述USB2.0攝像頭支持UVC驅(qū)動(dòng),通過(guò)V4L2接口設(shè)置采樣視頻的格式; 在采集的視頻分辨率是720P/1080P時(shí),攝像頭抽象層采用MJPEG格式,從攝像頭抽象層收到MJPEG流后,將MJPEG流實(shí)時(shí)轉(zhuǎn)成NV21格式,使android終端的應(yīng)用層在高分辨率情況下使用高幀率。2.根據(jù)權(quán)利要求1所述的一種基于android終端提高USB2.0攝像頭高分辨率高幀率的方法,其特征在于:所述方法進(jìn)一步具體為: 打開攝像頭抽象層時(shí),通過(guò)1ctI函數(shù)向UVC驅(qū)動(dòng)申請(qǐng)緩存buffer,并通過(guò)mmap函數(shù)將緩存buffer映射進(jìn)用戶空間; USB2.0攝像頭適配層里面的StartPrivew函數(shù)會(huì)設(shè)置視頻格式的長(zhǎng)和寬,在設(shè)置NV21格式時(shí),則判斷視頻分辨率是否是720P/1080P,如果是720P/1080P,則視頻格式轉(zhuǎn)化成V4L2_PIX_FMT_MJPEG,否,則不進(jìn)行操作; 線程類PreviewThread獲取到一幀數(shù)據(jù)frame后,將視頻的MJPEG格式數(shù)據(jù)存儲(chǔ)在frame虛擬地址上;如果幀格式是V4L2_PIX_FMT_MJPEG,則進(jìn)行MJPEG轉(zhuǎn)化成NVl 2數(shù)據(jù); 把轉(zhuǎn)換解碼出得的NV21數(shù)據(jù)拷貝到frame虛擬地址,并重新設(shè)置幀數(shù)據(jù)frame的格式為V4L2_PIX_FMT_NV21。3.根據(jù)權(quán)利要求2所述的一種基于android終端提高USB2.0攝像頭高分辨率高幀率的方法,其特征在于: 所述MJPEG轉(zhuǎn)化成NV12數(shù)據(jù)能采用硬件加速進(jìn)行轉(zhuǎn)換解碼,硬件加速流程如下: 首先USB2.0攝像頭動(dòng)態(tài)加載硬件加速庫(kù)librk_vpuap1.so ; 通過(guò) dlsym 函數(shù),獲取 MJPEG 解碼函數(shù) get_class_RkJpegDecoder ; 根據(jù)獲取到得解碼函數(shù),進(jìn)行MJPEG轉(zhuǎn)換解碼成NV21格式; 如果不支持硬件加速時(shí),則進(jìn)行軟件解碼MJPEG。
【專利摘要】本發(fā)明提供一種基于android終端提高USB2.0攝像頭高分辨率高幀率的方法,所述USB2.0攝像頭支持UVC驅(qū)動(dòng),通過(guò)V4L2接口設(shè)置采樣視頻的格式;在采集的視頻分辨率是720P/1080P時(shí),攝像頭抽象層采用MJPEG格式,從攝像頭抽象層收到MJPEG流后,將MJPEG流實(shí)時(shí)轉(zhuǎn)成NV21格式,使android終端的應(yīng)用層在高分辨率情況下使用高幀率。本發(fā)明在USB2.0攝像頭分辨率高的情況下,提高了幀率,提高用戶的體驗(yàn),USB2.0攝像頭不會(huì)在運(yùn)動(dòng)頻率比較大的情況下,采集的視頻出現(xiàn)模糊情況。
【IPC分類】H04N5/232, H04N5/225
【公開號(hào)】CN105578008
【申請(qǐng)?zhí)枴緾N201510976747
【發(fā)明人】鐘添華
【申請(qǐng)人】福建星網(wǎng)智慧科技股份有限公司
【公開日】2016年5月11日
【申請(qǐng)日】2015年12月23日