本發(fā)明屬于數(shù)據(jù)處理領(lǐng)域,尤其涉及一種視頻數(shù)據(jù)的處理方法、處理裝置及存儲(chǔ)介質(zhì)。
背景技術(shù):
視頻錄制已成為移動(dòng)終端的必備功能之一,使用戶可以隨時(shí)隨地記錄難忘的時(shí)光。除了常規(guī)的視頻錄制,移動(dòng)終端還提供了諸多附加功能,比如:美顏、畫中畫、慢動(dòng)作、延時(shí)攝影等,以增強(qiáng)觀賞視頻的樂趣。然而,上述附加功能只能獨(dú)立存在,而不能在錄制過程中同時(shí)實(shí)現(xiàn),比如:無(wú)法錄制的美顏的慢動(dòng)作視頻。
對(duì)此,現(xiàn)有的解決方案是先選擇其中一種附加功能進(jìn)行錄制,比如:美顏,再通過調(diào)節(jié)播放速度來(lái)進(jìn)行另一種附加功能,比如:慢動(dòng)作。
現(xiàn)有技術(shù)的缺點(diǎn)在于:依賴后期處理導(dǎo)致操作復(fù)雜、無(wú)法實(shí)時(shí)呈現(xiàn)多附加功能的視頻數(shù)據(jù)、以及采集的視頻幀數(shù)量不當(dāng)導(dǎo)致畫質(zhì)較差或播放卡頓等。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種視頻數(shù)據(jù)的處理方法、處理裝置及存儲(chǔ)介質(zhì),旨在對(duì)視頻數(shù)據(jù)進(jìn)行多種附加功能的實(shí)時(shí)處理,無(wú)需后期的復(fù)雜再加工,且采集幀數(shù)量適宜,不會(huì)導(dǎo)致畫質(zhì)較差或播放卡頓的問題。
為解決上述技術(shù)問題,本發(fā)明實(shí)施例提供以下技術(shù)方案:
一種視頻數(shù)據(jù)的處理方法,包括:
開啟視頻流線程,所述視頻流線程包括顯示線程和線程池,所述線程池包括多個(gè)處理線程;
獲取原始視頻數(shù)據(jù),并通過調(diào)用所述顯示線程和所述線程池對(duì)所述原始視頻數(shù)據(jù)進(jìn)行處理,以生成處理視頻流;
獲取播放模式,所述播放模式中包括錄制幀率,所述錄制幀率用于確定單位時(shí)間內(nèi)的幀采集數(shù)量;以及
調(diào)用所述線程池中空閑的處理線程,按照所述錄制幀率對(duì)所述處理視頻流中的每一幀進(jìn)行錄制。
為解決上述技術(shù)問題,本發(fā)明實(shí)施例還提供以下技術(shù)方案:
一種視頻數(shù)據(jù)的處理裝置,包括:
線程管理模塊,用于開啟視頻流線程,所述視頻流線程包括顯示線程和線程池,所述線程池包括多個(gè)處理線程;
視頻處理模塊,用于獲取原始視頻數(shù)據(jù),并通過調(diào)用所述顯示線程和所述線程池對(duì)所述原始視頻數(shù)據(jù)進(jìn)行處理,以生成處理視頻流;
幀率確認(rèn)模塊,用于獲取播放模式,所述播放模式中包括錄制幀率,所述錄制幀率用于確定單位時(shí)間內(nèi)的幀采集數(shù)量;以及
視頻錄制模塊,用于調(diào)用所述線程池中空閑的處理線程,按照所述錄制幀率對(duì)所述處理視頻流中的每一幀進(jìn)行錄制。
為解決上述技術(shù)問題,本發(fā)明實(shí)施例還提供以下技術(shù)方案:
一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí),實(shí)現(xiàn)上述的視頻數(shù)據(jù)的處理方法。
本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理方法、處理裝置及存儲(chǔ)介質(zhì),開啟視頻流線程,并通過所述視頻流線程中的顯示線程和線程池分別調(diào)用圖像處理器和中央處理器,用以對(duì)原始視頻數(shù)據(jù)進(jìn)行多種附加功能進(jìn)行協(xié)同處理,無(wú)需后期的復(fù)雜再加工,且采集幀數(shù)量適宜,不會(huì)導(dǎo)致畫質(zhì)較差或播放卡頓的問題。
附圖說明
下面結(jié)合附圖,通過對(duì)本發(fā)明的具體實(shí)施方式詳細(xì)描述,將使本發(fā)明的技術(shù)方案及其它有益效果顯而易見。
圖1是本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理方法的流程示意圖;
圖2是本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理方法的另一流程示意圖;
圖3是本發(fā)明實(shí)施例提供的對(duì)原始視頻數(shù)據(jù)進(jìn)行處理的細(xì)化步驟示意圖;
圖4是本發(fā)明實(shí)施例提供的對(duì)處理視頻流進(jìn)行錄制處理的細(xì)化步驟示意圖;
圖5是本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理裝置的模塊示意圖;
圖6是本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理裝置的另一模塊示意圖;
圖7是本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理方法、處理裝置及存儲(chǔ)介質(zhì)的硬件環(huán)境示意圖。
圖8是本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理方法、處理裝置及存儲(chǔ)介質(zhì)的中處理效果的示意圖。
具體實(shí)施方式
請(qǐng)參照?qǐng)D式,其中相同的組件符號(hào)代表相同的組件,本發(fā)明的原理是以實(shí)施在一適當(dāng)?shù)倪\(yùn)算環(huán)境中來(lái)舉例說明。以下的說明是基于所例示的本發(fā)明具體實(shí)施例,其不應(yīng)被視為限制本發(fā)明未在此詳述的其它具體實(shí)施例。
在以下的說明中,本發(fā)明的具體實(shí)施例將參考由一部或多部計(jì)算機(jī)所執(zhí)行的步驟及符號(hào)來(lái)說明,除非另有述明。因此,這些步驟及操作將有數(shù)次提到由計(jì)算機(jī)執(zhí)行,本文所指的計(jì)算機(jī)執(zhí)行包括了由代表了以一結(jié)構(gòu)化型式中的數(shù)據(jù)的電子信號(hào)的計(jì)算機(jī)處理單元的操作。此操作轉(zhuǎn)換該數(shù)據(jù)或?qū)⑵渚S持在該計(jì)算機(jī)的內(nèi)存系統(tǒng)中的位置處,其可重新配置或另外以本領(lǐng)域技術(shù)人員所熟知的方式來(lái)改變?cè)撚?jì)算機(jī)的運(yùn)作。該數(shù)據(jù)所維持的數(shù)據(jù)結(jié)構(gòu)為該內(nèi)存的實(shí)體位置,其具有由該數(shù)據(jù)格式所定義的特定特性。但是,本發(fā)明原理以上述文字來(lái)說明,其并不代表為一種限制,本領(lǐng)域技術(shù)人員將可了解到以下所述的多種步驟及操作亦可實(shí)施在硬件當(dāng)中。
本文所使用的術(shù)語(yǔ)「模塊」、「單元」可看做為在該運(yùn)算系統(tǒng)上執(zhí)行的軟件對(duì)象。本文所述的不同組件、模塊、引擎及服務(wù)可看做為在該運(yùn)算系統(tǒng)上的實(shí)施對(duì)象。而本文所述的裝置及方法優(yōu)選的以軟件的方式進(jìn)行實(shí)施,當(dāng)然也可在硬件上進(jìn)行實(shí)施,均在本發(fā)明保護(hù)范圍之內(nèi)。
請(qǐng)參閱圖1,圖1是本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理方法的流程示意圖。所述視頻數(shù)據(jù)的處理方法,可應(yīng)用于具有錄像功能的各類終端設(shè)備。
所述視頻數(shù)據(jù)的處理方法,包括如下步驟:
在步驟s101中,開啟視頻流線程,所述視頻流線程包括顯示線程和線程池,所述線程池包括多個(gè)處理線程。
其中,在主線程中調(diào)用子線程來(lái)執(zhí)行如下步驟,會(huì)導(dǎo)致操作用戶界面(userinterface,ui)時(shí)卡頓,因此,在本步驟中,隨著進(jìn)入相機(jī)界面而開啟一個(gè)獨(dú)立的線程(detachedthread),作為視頻流線程。視頻流線程的結(jié)束,包括:根據(jù)用戶的退出指令而結(jié)束,比如按主鍵(home),或接收中斷指令而結(jié)束,比如接聽電話。
在步驟s102中,獲取原始視頻數(shù)據(jù),并通過調(diào)用所述顯示線程和所述線程池對(duì)所述原始視頻數(shù)據(jù)進(jìn)行處理,以生成處理視頻流。
具體而言,本步驟可執(zhí)行如下:
(1)通過圖像采集裝置來(lái)獲取原始視頻數(shù)據(jù),所述圖像采集裝置如攝像頭模塊、和截屏模塊。其中所述截屏模塊用于從終端設(shè)備播放的視頻中獲取原始視頻數(shù)據(jù)。
(2)通過所述顯示線程和所述線程池分別調(diào)用圖形處理器(graphicsprocessingunit,gpu)和中央處理器(centralprocessingunit,cpu),用于對(duì)所述原始視頻數(shù)據(jù)進(jìn)行協(xié)同處理。
其中可以采用嵌入系統(tǒng)的開源圖形庫(kù)(opengraphicslibraryforembeddedsystems,opengles)來(lái)進(jìn)行所述協(xié)同處理。所述協(xié)同處理,是指橫跨gpu和cpu之間,協(xié)調(diào)另一個(gè)區(qū)域之間的數(shù)據(jù)交互,進(jìn)而提升對(duì)原始視頻數(shù)據(jù)的渲染性能。
(3)將所生成的處理視頻流寫入緩沖區(qū)。
其中,opengles還為所述數(shù)據(jù)交互定義了緩沖區(qū)(buffer),緩沖區(qū)是指gpu能夠控制和管理的連續(xù)的ram,應(yīng)用程序可以從cpu的內(nèi)存復(fù)制所述原始視頻數(shù)據(jù)到緩沖區(qū)中,gpu通過獨(dú)占緩沖區(qū),可以提高讀寫內(nèi)存的有效性。同時(shí),gpu還可以將處理數(shù)據(jù)的能力異步到應(yīng)用在緩沖區(qū)上,意味著gpu在處理緩沖區(qū)的任務(wù)時(shí),運(yùn)行在cpu中的顯示進(jìn)程可以繼續(xù)執(zhí)行。
在步驟s103中,獲取播放模式,所述播放模式中包括錄制幀率,所述錄制幀率用于確定單位時(shí)間內(nèi)的幀采集數(shù)量。
其中,所述播放模式,可以簡(jiǎn)單的包括:快速模式、正常模式、和慢速模式;也可以進(jìn)一步包括:自定義n倍播放,比如:1.1倍模式,0.8倍模式,其中n是針對(duì)正常模式而言。
就目前常用的正常模式而言,通常1秒內(nèi)采集30幀,那么在選擇慢速模式時(shí),根據(jù)播放模式生成對(duì)應(yīng)的幀率,比如錄制幀率=45幀/秒;然后在播放時(shí),仍然按照1秒30幀的正常速度進(jìn)行播放,則可顯示出的慢動(dòng)作的效果。
需要說明的是,本步驟可以在視頻的錄制前或錄制中隨時(shí)進(jìn)行設(shè)置和修改。
在步驟s104中,調(diào)用所述線程池中空閑的處理線程,按照所述錄制幀率對(duì)所述處理視頻流中的每一幀進(jìn)行錄制。
具體而言,本步驟包括:
首先,確定所述線程池中是否存在空閑的處理線程;
然后,當(dāng)存在空閑的處理線程時(shí),通過所述空閑的處理線程調(diào)用中央處理器,并執(zhí)行按照所述錄制幀率對(duì)所述處理視頻流中的每一幀進(jìn)行錄制的步驟;
相反,當(dāng)不存在空閑的處理線程時(shí),則建立一個(gè)新線程,以進(jìn)行上述錄制。
本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理方法,開啟獨(dú)立線程作為視頻流線程,并通過所述視頻流線程中的顯示線程和線程池分別調(diào)用圖像處理器和中央處理器,用以對(duì)原始視頻數(shù)據(jù)進(jìn)行多種附加功能進(jìn)行協(xié)同處理,無(wú)需后期的復(fù)雜再加工,且采集幀數(shù)量適宜,不會(huì)導(dǎo)致畫質(zhì)較差或播放卡頓的問題。
請(qǐng)參閱圖2,圖2是本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理方法的另一流程示意圖。所述視頻數(shù)據(jù)的處理方法,可應(yīng)用于具有錄像功能的各類終端設(shè)備。
所述視頻數(shù)據(jù)的處理方法,包括如下步驟:
在步驟s201中,進(jìn)入相機(jī)界面時(shí)開啟獨(dú)立的線程作為視頻流線程,所述視頻流線程包括顯示線程和線程池,所述線程池包括多個(gè)處理線程。
其中,所述顯示線程用于調(diào)用圖形處理器(gpu),所述處理線程用于調(diào)用中央處理器(cpu)。
在步驟s202中,獲取原始視頻數(shù)據(jù)。
其中,所述原始視頻數(shù)據(jù)可以通過圖像采集裝置來(lái)進(jìn)行獲取,所述圖像采集裝置包括但不限于攝像頭模塊。
在步驟s203中,對(duì)所述原始視頻數(shù)據(jù)進(jìn)行處理,以生成處理視頻流。
具體而言,請(qǐng)參閱圖3,所示為對(duì)所述原始視頻數(shù)據(jù)進(jìn)行處理的細(xì)化示意圖,本步驟包括:
在步驟s301中,獲取處理主體,所述處理主體包括:人體、物品、或景色。以下以人體為例,即可以理解為:美顏模式。
在步驟s302中,獲取處理內(nèi)容,所述處理內(nèi)容包括:去噪、顏色、形狀、亮度。
其中,美顏的去噪算法,都要保持一個(gè)特點(diǎn):既要是邊界保持,又要做到平滑,也就是要濾波。濾波算法中比較常見的是雙邊濾波,它的優(yōu)點(diǎn)在于高效,因此非常適合移動(dòng)終端的處理平臺(tái)。包括雙邊濾波在內(nèi),一每種濾波算法都有各種對(duì)應(yīng)的處理方式,比如:適當(dāng)降低精度,達(dá)到效果與效率的平衡。
其中,美顏的顏色算法,一般是基于色調(diào)、飽和度、和明度(hsv)進(jìn)行膚色檢測(cè)??梢岳斫獾氖?,如果用顏色模式-紅綠藍(lán)(rgb)來(lái)做膚色檢測(cè),需要檢測(cè)r、g、b三個(gè)值是否同時(shí)滿足膚色的顏色范圍,亮度色度模式(yuv)同理。而hsv三個(gè)值:色調(diào)(h)、飽和度(s),明度(v)中,只有h是關(guān)乎膚色的,因此只需要對(duì)h進(jìn)行考慮(h值在25-50之間即可判斷為膚色),所需要的運(yùn)算量比rgb少很多。
在步驟s303中,獲取虛擬裝飾物及其所在位置。
其中所述位置包括:第一位置和/或第二位置。所述第一位置是相對(duì)于畫面而言的固定位置,第二位置是相對(duì)于處理主體而言的固定位置。
如圖8所示,為處理效果的示意圖。其中,處理畫面81中包括的背景(未標(biāo)示)和處理主體82。第一位置83是相對(duì)于處理畫面81而言的固定位置,比如:位于右下方,通常顯示錄制信息。所述錄制信息包括但不限于:錄制地、錄制人、和/或錄制時(shí)間。其中所述錄制時(shí)間還進(jìn)一步包括:錄制時(shí)的時(shí)間、和持續(xù)時(shí)長(zhǎng)等;第二位置84是相對(duì)于處理主體82而言的固定位置,比如:位于處理主體82的正上方增加一對(duì)兔子耳朵,且所述兔子耳朵會(huì)隨著處理主體82的移動(dòng)而在處理畫面81上移動(dòng),但其相對(duì)于處理主體82而言是不變或變化甚微的。
在步驟s304中,根據(jù)所述處理主體、處理內(nèi)容、和/或虛擬裝飾物及其所在位置,生成處理指令。
可以理解的是,可以通過所述步驟s301-s304,獲取處理指令。所述處理指令包括去噪、調(diào)整畫面中指定人體、物品、或景色的形狀、顏色、或亮度,以及在指定位置添加虛擬裝飾物。
在步驟s305中,通過所述顯示線程和所述線程池分別調(diào)用圖形處理器和中央處理器,執(zhí)行所述處理指令,并對(duì)所述原始視頻數(shù)據(jù)進(jìn)行協(xié)同處理。
具體而言,可以采用嵌入系統(tǒng)的開源圖形庫(kù)(opengraphicslibraryforembeddedsystems,opengles)來(lái)進(jìn)行所述協(xié)同處理。所述協(xié)同處理,是指橫跨gpu和cpu之間,協(xié)調(diào)另一個(gè)區(qū)域之間的數(shù)據(jù)交互,進(jìn)而提升對(duì)原始視頻數(shù)據(jù)的渲染性能。
在步驟s306中,將所生成的處理視頻流寫入緩沖區(qū)。
其中,opengles還為所述數(shù)據(jù)交互定義了緩沖區(qū)(buffer),緩沖區(qū)是指gpu能夠控制和管理的連續(xù)的ram,應(yīng)用程序可以從cpu的內(nèi)存復(fù)制所述原始視頻數(shù)據(jù)到緩沖區(qū)中,gpu通過獨(dú)占緩沖區(qū),可以提高讀寫內(nèi)存的有效性。同時(shí),gpu還可以將處理數(shù)據(jù)的能力異步到應(yīng)用在緩沖區(qū)上,意味著gpu在處理緩沖區(qū)的任務(wù)時(shí),運(yùn)行在cpu中的顯示進(jìn)程可以繼續(xù)執(zhí)行。
可以理解的是,可以通過所述步驟s305-s306,根據(jù)所述處理指令,對(duì)所述原始視頻數(shù)據(jù)中的每一幀進(jìn)行處理,以生成處理視頻流。
在步驟s204中,獲取播放模式,所述播放模式中包括錄制幀率,所述錄制幀率用于確定單位時(shí)間內(nèi)的幀采集數(shù)量。
具體而言,本步驟包括:
(1)根據(jù)設(shè)備的gpu的刷新頻率和顯示器的刷新頻率,生成多種預(yù)設(shè)的播放參數(shù)。
(2)根據(jù)用戶的觸發(fā)指令將所述播放參數(shù)生成播放模式,所述播放模式中包括原始幀率和播放倍數(shù)。
其中,所述播放模式,可以簡(jiǎn)單的包括:快速模式、正常模式、和慢速模式;也可以進(jìn)一步包括:自定義n倍播放,比如:1.1倍模式,0.8倍模式,其中n是針對(duì)正常模式而言。就目前常用的正常模式而言,原始幀率通常為30幀/秒。
(3)根據(jù)所述原始幀率和播放倍數(shù)生成錄制幀率,所述錄制幀率用于確定單位時(shí)間內(nèi)的幀采集數(shù)量。
比如,播放倍數(shù)為1.5倍,則對(duì)應(yīng)的錄制幀率=45幀/秒??梢岳斫獾氖?,在播放時(shí),按照1秒30幀的正常速度進(jìn)行播放,則可顯示出的慢動(dòng)作的效果。
在步驟s205中,調(diào)用所述線程池中空閑的處理線程按照所述錄制幀率對(duì)所述緩沖區(qū)中的處理視頻流中的每一幀進(jìn)行錄制。
具體而言,請(qǐng)參閱圖4,所示為錄制步驟的細(xì)化示意圖,本步驟包括:
在步驟s401中,確定所述線程池中是否存在空閑的處理線程。
其中,若是則執(zhí)行步驟s402,若否則執(zhí)行步驟s403。
在步驟s402中,通過所述空閑的處理線程調(diào)用中央處理器,并按照所述錄制幀率對(duì)所述處理視頻流中的每一幀進(jìn)行錄制。
在步驟s403中,判斷非空閑的線程數(shù)量是否大于負(fù)載閾值。
其中,若大不于則執(zhí)行步驟s404,若大于則執(zhí)行步驟s405。
在步驟s404中,建立一個(gè)新線程,以進(jìn)行上述步驟s402中的錄制。
在步驟s405中,將處理視頻流中的當(dāng)前幀放入緩沖池,并當(dāng)存在空閑的處理線程時(shí)從所述緩沖池中讀取幀進(jìn)行錄制。
其中每一幀,在所述緩沖池中形成一個(gè)任務(wù)數(shù)組。所述任務(wù)數(shù)組表示為:每一幀對(duì)應(yīng)的視頻數(shù)據(jù)和時(shí)間戳,即:按照時(shí)間戳對(duì)應(yīng)的緩存時(shí)間,先入先出的讀取所述視頻數(shù)據(jù)進(jìn)行上述錄制。
可以理解的是,所述緩沖區(qū),可以理解為是內(nèi)存中存放視頻數(shù)據(jù)的地方。在內(nèi)存的最小粒度(granule)中有很多緩沖區(qū),所述緩沖區(qū)包括頭部和其關(guān)聯(lián)的緩存區(qū)數(shù)組,所述頭部用于存儲(chǔ)緩存數(shù)組中的信息,即支持緩存數(shù)組的尋址。所述緩沖池,是指多個(gè)最小粒度(granule)的內(nèi)存塊的組合,便于進(jìn)行視頻幀的分配和管理。
本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理方法,開啟獨(dú)立線程作為視頻流線程,并通過所述視頻流線程中的顯示線程和線程池分別調(diào)用圖像處理器和中央處理器,用以對(duì)原始視頻數(shù)據(jù)進(jìn)行多種附加功能進(jìn)行協(xié)同處理。同時(shí),還對(duì)處理線程的數(shù)量進(jìn)行負(fù)載閾值的判斷,在不大于負(fù)載閾值的情況下,若無(wú)空閑的處理線程則建立新線程來(lái)進(jìn)行錄制,在大于負(fù)載的情況下,通過緩沖池對(duì)處理視頻流中的幀進(jìn)行緩存,并當(dāng)存在空閑線程時(shí)進(jìn)行及時(shí)處理,即通過多任務(wù)隊(duì)列多緩存模型來(lái)進(jìn)行性能處理。此外,還通過本發(fā)明無(wú)需后期的復(fù)雜再加工,且采集幀數(shù)量適宜,不會(huì)導(dǎo)致畫質(zhì)較差或播放卡頓的問題。
請(qǐng)參閱圖5,圖5是本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理裝置的模塊示意圖。所述視頻數(shù)據(jù)的處理裝置,可應(yīng)用于具有錄像功能的各類終端設(shè)備。
所述視頻數(shù)據(jù)的處理裝置500,包括:線程管理模塊51、視頻處理模塊52、幀率確認(rèn)模塊53、和視頻錄制模塊54。
具體而言,線程管理模塊51,用于開啟視頻流線程,所述視頻流線程包括顯示線程和線程池,所述線程池包括多個(gè)處理線程。
其中,在主線程中調(diào)用子線程來(lái)執(zhí)行如下步驟,會(huì)導(dǎo)致操作用戶界面(userinterface,ui)時(shí)卡頓,因此,線程管理模塊51隨著進(jìn)入相機(jī)界面而開啟一個(gè)獨(dú)立的線程(detachedthread),作為視頻流線程。
此外,所述線程管理模塊51還用于根據(jù)用戶退出指令或系統(tǒng)中斷指令結(jié)束所述視頻流線程,其中所述用戶退出指令,是指用戶的指定操作,比如按主鍵(home),所述系統(tǒng)中斷指令,是指由非用戶操作導(dǎo)致的中斷,比如接聽電話。
視頻處理模塊52,連接于線程管理模塊51,用于獲取原始視頻數(shù)據(jù),并通過調(diào)用所述顯示線程和所述線程池對(duì)所述原始視頻數(shù)據(jù)進(jìn)行處理,以生成處理視頻流。
具體而言,所述視頻處理模塊52執(zhí)行的動(dòng)作可概述為如下:
首先,通過圖像采集裝置來(lái)獲取原始視頻數(shù)據(jù),所述圖像采集裝置包括但不限于攝像頭模塊;
然后,通過所述顯示線程和所述線程池分別調(diào)用圖形處理器(graphicsprocessingunit,gpu)和中央處理器(centralprocessingunit,cpu),用于對(duì)所述原始視頻數(shù)據(jù)進(jìn)行協(xié)同處理。
其中,可以采用嵌入系統(tǒng)的開源圖形庫(kù)(opengraphicslibraryforembeddedsystems,opengles)來(lái)進(jìn)行所述協(xié)同處理。所述協(xié)同處理,是指橫跨gpu和cpu之間,協(xié)調(diào)另一個(gè)區(qū)域之間的數(shù)據(jù)交互,進(jìn)而提升對(duì)原始視頻數(shù)據(jù)的渲染性能。
最后,將所生成的處理視頻流寫入緩沖區(qū)。
可以理解的是,opengles還為gpu與cpu之間的所述數(shù)據(jù)交互定義了緩沖區(qū)(buffer)。緩沖區(qū)是指gpu能夠控制和管理的連續(xù)的ram,應(yīng)用程序可以從cpu的內(nèi)存復(fù)制所述原始視頻數(shù)據(jù)到緩沖區(qū)中,gpu通過獨(dú)占緩沖區(qū),可以提高讀寫內(nèi)存的有效性。同時(shí),gpu還可以將處理數(shù)據(jù)的能力異步得應(yīng)用在緩沖區(qū)上,意味著gpu在處理緩沖區(qū)的任務(wù)時(shí),運(yùn)行在cpu中的顯示進(jìn)程可以繼續(xù)執(zhí)行。
幀率確認(rèn)模塊53,用于獲取播放模式,所述播放模式中包括錄制幀率,所述錄制幀率用于確定單位時(shí)間內(nèi)的幀采集數(shù)量。
其中,所述播放模式,可以簡(jiǎn)單的包括:快速模式、正常模式、和慢速模式;也可以進(jìn)一步包括:自定義n倍播放,比如:1.1倍模式,0.8倍模式,其中n是針對(duì)正常模式而言。
就目前常用的正常模式而言,通常1秒內(nèi)采集30幀,那么在選擇慢速模式時(shí),根據(jù)播放模式生成對(duì)應(yīng)的幀率,比如錄制幀率=45幀/秒;然后在播放時(shí),仍然按照1秒30幀的正常速度進(jìn)行播放,則可顯示出的慢動(dòng)作的效果。
視頻錄制模塊54,連接于視頻處理模塊52和幀率確認(rèn)模塊53,用于調(diào)用所述線程池中空閑的處理線程,按照所述錄制幀率對(duì)所述處理視頻流中的每一幀進(jìn)行錄制。
具體而言,所述視頻錄制模塊54執(zhí)行的動(dòng)作可概述為如下:
首先,確定所述線程池中是否存在空閑的處理線程;
然后,當(dāng)存在空閑的處理線程時(shí),通過所述空閑的處理線程調(diào)用中央處理器,并執(zhí)行按照所述錄制幀率對(duì)所述處理視頻流中的每一幀進(jìn)行錄制的步驟;
相反,當(dāng)不存在空閑的處理線程時(shí),則建立一個(gè)新線程,以進(jìn)行上述錄制。
本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理裝置,開啟獨(dú)立線程作為視頻流線程,并通過所述視頻流線程中的顯示線程和線程池分別調(diào)用圖像處理器和中央處理器,用以對(duì)原始視頻數(shù)據(jù)進(jìn)行多種附加功能進(jìn)行協(xié)同處理,無(wú)需后期的復(fù)雜再加工,且采集幀數(shù)量適宜,不會(huì)導(dǎo)致畫質(zhì)較差或播放卡頓的問題。
請(qǐng)參閱圖6,圖6是本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理裝置的另一模塊示意圖。所述視頻數(shù)據(jù)的處理裝置,可應(yīng)用于具有錄像功能的各類終端設(shè)備。
所述視頻數(shù)據(jù)的處理裝置600,包括:線程管理模塊61、視頻處理模塊62、幀率確認(rèn)模塊63、視頻錄制模塊64、和視頻顯示模塊65。
線程管理模塊61,用于管理視頻流線程。其中,所述管理視頻流線程,包括視頻流線程的開啟和關(guān)閉,并隨著開啟或關(guān)閉,獲取或釋放線程對(duì)應(yīng)的系統(tǒng)資源。
具體而言,線程管理模塊61隨著進(jìn)入相機(jī)界面而開啟一個(gè)獨(dú)立的線程(detachedthread),作為視頻流線程。所述視頻流線程包括顯示線程和線程池,所述線程池包括多個(gè)處理線程。其中,所述顯示線程用于調(diào)用圖形處理器(gpu),所述處理線程用于調(diào)用中央處理器(cpu)。
所述線程管理模塊61根據(jù)用戶退出指令或系統(tǒng)中斷指令結(jié)束所述視頻流線程。其中所述用戶退出指令,是指用戶的指定操作,比如按主鍵(home),所述系統(tǒng)中斷指令,是指由非用戶操作導(dǎo)致的中斷,比如接聽電話。
視頻處理模塊62,連接于所述線程管理模塊61,用于獲取原始視頻數(shù)據(jù),并通過調(diào)用所述顯示線程和所述線程池對(duì)所述原始視頻數(shù)據(jù)進(jìn)行處理,以生成處理視頻流。
其中,所述視頻處理模塊62包括:指令單元621、和處理單元622。
所述指令單元621,用于獲取處理指令,所述處理指令包括去噪、調(diào)整畫面中指定人體、物品、或景色的形狀、顏色、或亮度,以及在指定位置添加虛擬裝飾物。
其中,所述指令單元621,包括:主體子單元6211、內(nèi)容子單元6212、虛擬子單元6213、和生成子單元6214。
具體而言,所述主體子單元6211,用于獲取處理主體,所述處理主體包括:人體、物品、或景色。以下以人體為例,即可以理解為:美顏模式。
所述內(nèi)容子單元6212,用于獲取處理內(nèi)容,所述處理內(nèi)容包括:去噪、顏色、形狀、亮度。
其中,美顏的去噪算法,都要保持一個(gè)特點(diǎn):既要是邊界保持,又要做到平滑,也就是要濾波。濾波算法中比較常見的是雙邊濾波,它的優(yōu)點(diǎn)在于很高效,因此非常適合移動(dòng)終端的處理平臺(tái)。包括雙邊濾波在內(nèi),一每種濾波算法都有各種對(duì)應(yīng)的處理方式,比如:適當(dāng)降低精度,達(dá)到效果與效率的平衡。美顏的顏色算法,一般是基于色調(diào)、飽和度、和明度(hsv)進(jìn)行膚色檢測(cè)。可以理解的是,如果用顏色模式-紅綠藍(lán)(rgb)來(lái)做膚色檢測(cè),需要檢測(cè)r、g、b三個(gè)值是否同時(shí)滿足膚色的顏色范圍,亮度色度模式(yuv)同理。而hsv三個(gè)值:色調(diào)(h)、飽和度(s),明度(v)中,只有h是關(guān)乎膚色的,因此只需要對(duì)h進(jìn)行考慮(h值在25-50之間即可判斷為膚色),所需要的運(yùn)算量比rgb少很多。
所述虛擬子單元6213,用于獲取虛擬裝飾物及其所在位置。
其中所述位置包括:第一位置和/或第二位置。所述第一位置是相對(duì)于畫面而言的固定位置,第二位置是相對(duì)于處理主體而言的固定位置。
如圖8所示,為處理效果的示意圖。其中,處理畫面81中包括的處理主體82。第一位置83是相對(duì)于處理畫面81而言的固定位置,比如:位于右下方,通常顯示錄制信息。所述錄制信息包括但不限于:錄制地、錄制人、和/或錄制時(shí)間。其中所述錄制時(shí)間還進(jìn)一步包括:錄制時(shí)的時(shí)間、和持續(xù)時(shí)長(zhǎng)等;第二位置84是相對(duì)于處理主體82而言的固定位置,比如:位于處理主體82的正上方增加一對(duì)兔子耳朵,且所述兔子耳朵會(huì)隨著處理主體82的移動(dòng)而在處理畫面81上移動(dòng),但其相對(duì)于處理主體82而言是不變或變化甚微的。
所述生成子單元6214,連接于,用于根據(jù)所述處理主體、處理內(nèi)容、和/或虛擬裝飾物及其所在位置,生成處理指令。
處理單元622,連接于指令單元621,用于根據(jù)所述處理指令,對(duì)所述原始視頻數(shù)據(jù)中的每一幀進(jìn)行處理,以生成處理視頻流。
其中,所述處理單元622還可以包括:調(diào)用子單元6221、和緩存子單元6222。
調(diào)用子單元6221,用于通過所述顯示線程和所述線程池分別調(diào)用圖形處理器和中央處理器,用于對(duì)所述原始視頻數(shù)據(jù)進(jìn)行協(xié)同處理。
具體而言,可以采用嵌入系統(tǒng)的開源圖形庫(kù)(opengraphicslibraryforembeddedsystems,opengles)來(lái)進(jìn)行所述協(xié)同處理。所述協(xié)同處理,是指橫跨gpu和cpu之間,協(xié)調(diào)另個(gè)區(qū)域之間的數(shù)據(jù)交互,進(jìn)而提升對(duì)原始視頻數(shù)據(jù)的渲染性能。緩存子單元6222,用于將所生成的處理視頻流寫入緩沖區(qū)。
其中,opengles還為所述數(shù)據(jù)交互定義了緩沖區(qū)(buffer),緩沖區(qū)是指gpu能夠控制和管理的連續(xù)的ram,應(yīng)用程序可以從cpu的內(nèi)存復(fù)制所述原始視頻數(shù)據(jù)到緩沖區(qū)中,gpu通過獨(dú)占緩沖區(qū),可以提高讀寫內(nèi)存的有效性。同時(shí),gpu還可以將處理數(shù)據(jù)的能力異步到應(yīng)用在緩沖區(qū)上,意味著gpu在處理緩沖區(qū)的任務(wù)時(shí),運(yùn)行在cpu中的顯示進(jìn)程可以繼續(xù)執(zhí)行。
視頻顯示模塊65,連接于視頻處理模塊62,用于顯示所述處理視頻流。
其中,所述視頻顯示模塊65包括:調(diào)度單元651和顯示單元652。
具體而言,調(diào)度單元651,用于通過所述顯示線程調(diào)用圖形處理器。
顯示單元652,用于通過所述圖形處理器讀取所述緩沖區(qū)中的處理視頻流,并通過顯示屏幕進(jìn)行實(shí)時(shí)顯示。
可以理解的是,用戶可以根據(jù)實(shí)時(shí)顯示的內(nèi)容進(jìn)行適當(dāng)調(diào)整,比如:調(diào)整錄制畫面中處理主體所占的比例、處理主體在錄制畫面中的相對(duì)位置等。
幀率確認(rèn)模塊63,用于獲取播放模式,所述播放模式中包括錄制幀率,所述錄制幀率用于確定單位時(shí)間內(nèi)的幀采集數(shù)量。
具體而言,幀率確認(rèn)模塊63包括:參數(shù)單元631、模式單元632、和幀率單元633。
參數(shù)單元631,用于根據(jù)設(shè)備的gpu的刷新頻率和顯示器的刷新頻率,生成多種預(yù)設(shè)的播放參數(shù)。
模式單元632,連接于參數(shù)單元631,用于根據(jù)用戶的觸發(fā)指令將所述播放參數(shù)生成播放模式,所述播放模式中包括原始幀率和播放倍數(shù)。
其中,所述播放模式,可以簡(jiǎn)單的包括:快速模式、正常模式、和慢速模式;也可以進(jìn)一步包括:自定義n倍播放,比如:1.1倍模式,0.8倍模式,其中n是針對(duì)正常模式而言。就目前常用的正常模式而言,原始幀率通常為30幀/秒。
幀率單元633,連接于模式單元632,用于根據(jù)所述原始幀率和播放倍數(shù)生成錄制幀率,所述錄制幀率用于確定單位時(shí)間內(nèi)的幀采集數(shù)量。
比如,播放倍數(shù)為1.5倍,則對(duì)應(yīng)的錄制幀率=45幀/秒??梢岳斫獾氖?,在播放時(shí),按照1秒30幀的正常速度進(jìn)行播放,則可顯示出的慢動(dòng)作的效果。
視頻錄制模塊64,連接于視頻處理模塊62和幀率確認(rèn)模塊63,用于調(diào)用所述線程池中空閑的處理線程,按照所述錄制幀率對(duì)所述緩沖區(qū)中的處理視頻流中的每一幀進(jìn)行錄制。
所述視頻錄制模塊64包括:篩選單元641、錄制單元642、和緩沖單元643。
具體而言,篩選單元641,用于確定所述線程池中是否存在空閑的處理線程。
錄制單元642,用于當(dāng)存在空閑的處理線程時(shí),通過所述空閑的處理線程調(diào)用中央處理器,并執(zhí)行按照所述錄制幀率對(duì)所述處理視頻流中的每一幀進(jìn)行錄制的步驟。
緩沖單元643,用于當(dāng)不存在空閑的處理線程時(shí),判斷非空閑的線程數(shù)量是否大于負(fù)載閾值;若不大于負(fù)載閾值,則建立一個(gè)新線程,以進(jìn)行上述錄制;若大于負(fù)載閾值,則將處理視頻流中的當(dāng)前幀放入緩沖池,并當(dāng)存在空閑的處理線程時(shí)從所述緩沖池中讀取幀進(jìn)行錄制。
可以理解的是,其中每一幀,在所述緩沖池中形成一個(gè)任務(wù)數(shù)組。所述任務(wù)數(shù)組表示為:每一幀對(duì)應(yīng)的視頻數(shù)據(jù)和時(shí)間戳,即:按照時(shí)間戳對(duì)應(yīng)的緩存時(shí)間,先入先出的讀取所述視頻數(shù)據(jù)進(jìn)行上述錄制。
本發(fā)明實(shí)施例提供的視頻數(shù)據(jù)的處理裝置,開啟獨(dú)立線程作為視頻流線程,并通過所述視頻流線程中的顯示線程和線程池分別調(diào)用圖像處理器和中央處理器,用以對(duì)原始視頻數(shù)據(jù)進(jìn)行多種附加功能進(jìn)行協(xié)同處理。同時(shí),還對(duì)處理線程的數(shù)量進(jìn)行負(fù)載閾值的判斷,在不大于負(fù)載閾值的情況下,若無(wú)空閑的處理線程則建立新線程來(lái)進(jìn)行錄制,在大于負(fù)載的情況下,通過緩沖池對(duì)處理視頻流中的幀進(jìn)行緩存,并當(dāng)存在空閑線程時(shí)進(jìn)行及時(shí)處理,即通過多任務(wù)隊(duì)列多緩存模型來(lái)進(jìn)行性能處理。此外,還通過本發(fā)明無(wú)需后期的復(fù)雜再加工,且采集幀數(shù)量適宜,不會(huì)導(dǎo)致畫質(zhì)較差或播放卡頓的問題。
相應(yīng)的,本發(fā)明實(shí)施例還提供一種終端設(shè)備,用于展示視頻數(shù)據(jù)的處理方法及處理裝置的硬件環(huán)境示意圖。如圖7所示,所述終端設(shè)備用于執(zhí)行圖1-2中的視頻數(shù)據(jù)的處理方法、或運(yùn)行圖5-6中的視頻數(shù)據(jù)的處理裝置。所述終端設(shè)備700包括:一個(gè)或者一個(gè)以上處理核心的處理器701、一個(gè)或一個(gè)以上計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的存儲(chǔ)器702、輸入單元703、短距離無(wú)線傳輸(wifi)模塊704、顯示屏幕705、以及電源706等部件。其中,所述處理器701包括:中央處理器和圖形處理器。所述存儲(chǔ)器702還進(jìn)一步提供:緩沖區(qū)、和緩沖池。
本領(lǐng)域技術(shù)人員可以理解,上述結(jié)構(gòu)并不構(gòu)成對(duì)終端設(shè)備700的限定,可以包括比上述更多或更少的部件、組合某些部件、或不同的部件布置。其中:
具體在本實(shí)施例中,在終端設(shè)備700中,處理器701會(huì)按照如下的指令,將一個(gè)或一個(gè)以上的應(yīng)用程序的進(jìn)程對(duì)應(yīng)的可執(zhí)行文件加載到存儲(chǔ)器702中,并由處理器701來(lái)運(yùn)行存儲(chǔ)在存儲(chǔ)器702中的應(yīng)用程序,從而實(shí)現(xiàn)各種功能,如下:開啟視頻流線程,所述視頻流線程包括顯示線程和線程池,所述線程池包括多個(gè)處理線程;獲取原始視頻數(shù)據(jù),并通過調(diào)用所述顯示線程和所述線程池對(duì)所述原始視頻數(shù)據(jù)進(jìn)行處理,以生成處理視頻流;獲取播放模式,所述播放模式中包括錄制幀率,所述錄制幀率用于確定單位時(shí)間內(nèi)的幀采集數(shù)量;調(diào)用所述線程池中空閑的處理線程,按照所述錄制幀率對(duì)所述處理視頻流中的每一幀進(jìn)行錄制。
優(yōu)選的,所述處理器601還可以用于:獲取處理指令,所述處理指令包括去噪、調(diào)整畫面中指定人體、物品、或景色的形狀、顏色、或亮度,以及在指定位置添加虛擬裝飾物;根據(jù)所述處理指令,對(duì)所述原始視頻數(shù)據(jù)中的每一幀進(jìn)行處理,以生成處理視頻流。
優(yōu)選的,所述處理器601還可以用于:獲取處理主體,所述處理主體包括:人體、物品、或景色;獲取處理內(nèi)容,所述處理內(nèi)容包括:去噪、顏色、形狀、亮度;獲取虛擬裝飾物及其所在位置,其中所述位置包括:第一位置或第二位置,所述第一位置是相對(duì)于畫面而言的固定位置;第二位置是相對(duì)于處理主體而言的固定位置;根據(jù)所述處理主體、處理內(nèi)容、和/或虛擬裝飾物及其所在位置,生成處理指令。
優(yōu)選的,所述處理器601還可以用于:通過所述顯示線程和所述線程池分別調(diào)用圖形處理器和中央處理器,用于對(duì)所述原始視頻數(shù)據(jù)進(jìn)行協(xié)同處理;將所生成的處理視頻流寫入緩沖區(qū)。
優(yōu)選的,所述處理器601還可以用于:通過所述顯示線程調(diào)用圖形處理器;通過所述圖形處理器讀取所述緩沖區(qū)中的處理視頻流,并進(jìn)行實(shí)時(shí)顯示。
優(yōu)選的,所述處理器601還可以用于:確定所述線程池中是否存在空閑的處理線程;若是,則通過所述空閑的處理線程調(diào)用中央處理器,并執(zhí)行按照所述錄制幀率對(duì)所述處理視頻流中的每一幀進(jìn)行錄制的步驟;若否,則判斷非空閑的線程數(shù)量是否大于負(fù)載閾值;若不大于負(fù)載閾值,則建立一個(gè)新線程,以進(jìn)行上述錄制;若大于負(fù)載閾值,則將處理視頻流中的當(dāng)前幀放入緩沖池,并當(dāng)存在空閑的處理線程時(shí)從所述緩沖池中讀取幀進(jìn)行錄制。
優(yōu)選的,所述處理器601還可以用于:根據(jù)設(shè)備的圖形處理器的刷新頻率和顯示器的刷新頻率,生成多種預(yù)設(shè)的播放參數(shù);根據(jù)用戶的觸發(fā)指令將所述播放參數(shù)生成播放模式,所述播放模式中包括原始幀率和播放倍數(shù);根據(jù)所述原始幀率和播放倍數(shù)生成錄制幀率,所述錄制幀率用于確定單位時(shí)間內(nèi)的幀采集數(shù)量。
本發(fā)明實(shí)施例提供的終端設(shè)備,開啟獨(dú)立線程作為視頻流線程,并通過所述視頻流線程中的顯示線程和線程池分別調(diào)用圖像處理器和中央處理器,用以對(duì)原始視頻數(shù)據(jù)進(jìn)行多種附加功能進(jìn)行協(xié)同處理。同時(shí),還對(duì)處理線程的數(shù)量進(jìn)行負(fù)載閾值的判斷,在不大于負(fù)載閾值的情況下,若無(wú)空閑的處理線程則建立新線程來(lái)進(jìn)行錄制,在大于負(fù)載的情況下,通過緩沖池對(duì)處理視頻流中的幀進(jìn)行緩存,并當(dāng)存在空閑線程時(shí)進(jìn)行及時(shí)處理,即通過多任務(wù)隊(duì)列多緩存模型來(lái)進(jìn)行性能處理。此外,還通過本發(fā)明無(wú)需后期的復(fù)雜再加工,且采集幀數(shù)量適宜,不會(huì)導(dǎo)致畫質(zhì)較差或播放卡頓的問題。
本發(fā)明實(shí)施例提供的所述終端設(shè)備,與上文實(shí)施例中的視頻數(shù)據(jù)的處理方法及處理裝置屬于同一構(gòu)思。
需要說明的是,對(duì)本發(fā)明所述視頻數(shù)據(jù)的處理方法而言,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)本發(fā)明實(shí)施例中的全部或部分流程,是可以通過計(jì)算機(jī)程序來(lái)控制相關(guān)的硬件來(lái)完成,所述計(jì)算機(jī)程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,如存儲(chǔ)在終端設(shè)備的存儲(chǔ)器中,并被該終端設(shè)備內(nèi)的至少一個(gè)處理器執(zhí)行,在執(zhí)行過程中可包括如所述信息分享方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)器(rom,readonlymemory)、隨機(jī)存取記憶體(ram,randomaccessmemory)等。
對(duì)本發(fā)明實(shí)施例的所述視頻數(shù)據(jù)的處理裝置而言,其各功能模塊可以集成在一個(gè)處理芯片中,也可以是各個(gè)模塊單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上模塊集成在一個(gè)模塊中。上述集成的模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。所述集成的模塊如果以軟件功能模塊的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),也可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,所述存儲(chǔ)介質(zhì)譬如為只讀存儲(chǔ)器,磁盤或光盤等。
以上對(duì)本發(fā)明實(shí)施例所提供的一種視頻數(shù)據(jù)的處理方法、處理裝置、存儲(chǔ)介質(zhì)、及終端設(shè)備進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。