一種多核相機的osd中文顯示實現(xiàn)方法
【專利摘要】本發(fā)明提供了一種多核相機的OSD中文顯示實現(xiàn)方法,包括以下步驟:(1)使用庫函數(shù)libfreetype.so.6.9.0和libbz2.so.1.0把帶有中文的字符串轉(zhuǎn)換成rgb圖;(2)通過工具ffmpeg把rgb轉(zhuǎn)換成yuv文件;(3)將yuv文件讀出來放到數(shù)組里,發(fā)送給OSD控制電路處理;(4)任意2個核之間通過Syslink/IPC通信,每個link中包含了一個基于BIOS6/Linux的任務(wù)、線程、消息盒;(5)將OSD的yuv數(shù)據(jù)壓到每一個幀里面,顯示。本發(fā)明解決了OSD只能顯示英文,并且只能在一個核上實現(xiàn)的問題,使多核也可以實現(xiàn)OSD的中文顯示,操作簡單方便。
【專利說明】—種多核相機的OSD中文顯示實現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及高清相機領(lǐng)域,尤其是一種多核相機的OSD中文顯示實現(xiàn)方法。
【背景技術(shù)】
[0002]目前德州儀器(TI)的平臺可以實現(xiàn)OSD (On-Screen Display)需要的大部分功能,可以支持自定義log以及動態(tài)的使能和變化位置。但是TI的平臺都是英文的,如果需要面向中國的市場,需要做些中文化的處理,需要能實現(xiàn)OSD的中文顯示,所以,基于現(xiàn)在的背景,需要實現(xiàn)多核相機的OSD中文顯示功能。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的在于提供一種多核相機的OSD中文顯示實現(xiàn)方法。
[0004]本發(fā)明的技術(shù)方案如下:
一種多核相機的OSD中文顯示實現(xiàn)方法,其特征在于,包括以下步驟:
(I)使用庫函數(shù)libfreetype.s0.6.9.0和libbz2.s0.1.0把帶有中文的字符串轉(zhuǎn)換成rgb圖;(2)通過工具ffmpeg把rgb轉(zhuǎn)換成yuv文件;
(3)將yuv文件讀出來放到數(shù)組里,發(fā)送給OSD控制電路處理;
(4)任意2個核之間通過Syslink/IPC通信,每個link中包含了一個基于B10S6/Linux的任務(wù)、線程、消息盒;
(5)將OSD的yuv數(shù)據(jù)壓到每一個幀里面,顯示。
[0005]本發(fā)明的技術(shù)效果在于解決了 OSD只能顯示英文,并且只能在一個核上實現(xiàn)的問題,使多核也可以實現(xiàn)OSD的中文顯示,操作簡單方便。
【專利附圖】
【附圖說明】
[0006]圖1為本發(fā)明的多核相機的OSD中文顯示實現(xiàn)方法的示意圖。
【具體實施方式】
[0007]本發(fā)明提供了一種多核相機的OSD中文顯示實現(xiàn)方法,如圖1所示,包括以下步驟:
(1)使用庫函數(shù)libfreetype.s0.6.9.0和libbz2.s0.1.0把帶有中文的字符串轉(zhuǎn)換成rgb 圖;
(2)通過工具ffmpeg把rgb轉(zhuǎn)換成yuv文件;
(3)將yuv文件讀出來放到數(shù)組里,發(fā)送給OSD控制電路處理;
(4)任意2個核之間通過Syslink/IPC通信,每個link中包含了一個基于B10S6/Linux的任務(wù)、線程、消息盒;
(5)將OSD的yuv數(shù)據(jù)壓到每一個幀里面,顯示。
[0008]第⑴-(3)步,需要用到庫函數(shù)libfreetype.s0.6.9.0, libbz2.s0.1.0 把帶有中文的字符串轉(zhuǎn)換成rgb圖,然后通過工具ffmpeg把rgb轉(zhuǎn)換成yuv文件,最后將yuv文件讀出來放到數(shù)組里,等待發(fā)送給DSP處理。
[0009]第(4)步,通過Syslink/IPC通信,任意2個核之間都可以直接通信,每個link中包含了一個基于B10S6/Linux的任務(wù)、線程、消息盒(使用操作系統(tǒng)的信號量實現(xiàn))。由于每個link運行一個獨立的現(xiàn)成,因此link之間可以并行運行。消息盒是關(guān)聯(lián)用戶指定的link,讓link之間有個互相對話的機制,用來傳遞信令。而對于視頻流數(shù)據(jù)、幀數(shù)據(jù)的傳遞I ink實現(xiàn)了專門的接口來實現(xiàn),只傳遞指針,而不是數(shù)據(jù)。實現(xiàn)數(shù)據(jù)流可以通過將多個 link 連接來實現(xiàn) chain, link API 允許用戶 Create、Start、Stop、Delete、Control 各個link。在Rdk中TI基于link API進行再次封裝,用于特定的應(yīng)用場合,其各種參數(shù)均是為特定的產(chǎn)品定制,可以是相關(guān)業(yè)務(wù)的開發(fā)更迅速。每個link都有自己獨立的任務(wù)/線程用于完成視頻采集或播放等處理;每個link都可以處理來自多個通道的視頻幀數(shù)據(jù),每個通道的視頻寬高和數(shù)據(jù)格式都可以不同;A8作為HOST可以用來連接多個link形成數(shù)據(jù)流的鏈并對其進行控制;數(shù)據(jù)鏈被建立并啟動時,數(shù)據(jù)鏈中的每個link將和它的下游link進行幀數(shù)據(jù)的交互;links之間的幀數(shù)據(jù)交互可以在多個核心之間進行,并且并不需要ASHOST的干涉,從而降低AS的開銷;在數(shù)據(jù)鏈運行過程中用戶可以發(fā)送控制信令給任意link來動態(tài)設(shè)置相關(guān)的link參數(shù)。一個Link可以有一個或多個輸出隊列用來存放采集到的或處理完畢的巾貞數(shù)據(jù),每個Link的輸出隊列內(nèi)存由自己分配;大多數(shù)Links只有一個輸出隊列,但是有些link有多個,從而可以實現(xiàn)多路不同的輸出數(shù)據(jù)流滿足不同的應(yīng)用需求,例如,Noise filter Link可以輸出16路幀數(shù)據(jù)到2個輸出隊列,每個輸出隊列輸出8路通道數(shù)據(jù)跟別給2個DEI Links模塊處理。一個輸出隊列中可以有多個視頻channels的數(shù)據(jù),每個channel可以有不同的大小和數(shù)據(jù)格式;數(shù)據(jù)結(jié)構(gòu)FVID2_Frame是在VPSS驅(qū)動中定義的,Links之間就通過該結(jié)構(gòu)參數(shù)傳遞幀數(shù)據(jù)的信息,如幀數(shù)據(jù)的Buf指針,而幀數(shù)據(jù)本身并不會被拷貝,從而節(jié)省內(nèi)存開銷;當(dāng)一個Link采集完或處理完一幀數(shù)據(jù)后會發(fā)送一個消息“SYSTEM_CMD_NEW_DATA”給下游的Link,從而通知它有數(shù)據(jù)可?。划?dāng)下游Link收到該消息后會調(diào)System_getLinksFulIFrames O函數(shù)來獲取對用的巾貞數(shù)據(jù),處理完后再調(diào)用System_putLinksEmptyFrames O函數(shù)來歸還給上游Link繼續(xù)使用,因此一個Link需要知道上游Link的LinkID和QuelD,從而從該隊列里面獲取幀數(shù)據(jù)下游LinkID,從而在有新數(shù)據(jù)產(chǎn)生時通知下游Link來取上游Link的LinkID和QueID以及下游LinkID都是在System_linkCreate O時由A8 HOST端來指定的。IPC Link,是用來多核之間的巾貞數(shù)據(jù)傳遞的。
[0010]如VPSS上的采集Link想把巾貞數(shù)據(jù)發(fā)送給Video Link處理,先將巾貞數(shù)據(jù)傳遞給本地的 IPC Link,然后 IPC Link 再通過 Syslink/IPC 發(fā)送到 Video Link 上的 IPC Link,然后再轉(zhuǎn)發(fā)給Video Link,這樣的話對于采集Link的實現(xiàn)來說就非常清晰簡單,它的實現(xiàn)都是發(fā)送給本地的另一個Link ;IPC Link的實現(xiàn)有點復(fù)雜,因為它涉及的幀數(shù)據(jù)傳遞是在多個核之間,這里面就牽扯到cache的一致性問題,考慮到每個核的特性以及高效性,總共設(shè)計了 3個內(nèi)部Links用于巾貞數(shù)據(jù)的傳遞機制:Intra-processor links即同一核心內(nèi)部的link,如采集與降噪之間的幀數(shù)據(jù)傳遞,這種內(nèi)部的link間傳遞幀數(shù)據(jù)都是在VPSS M3內(nèi)部完成,因此采用簡單且高效的隊列機制實現(xiàn)。Inter M3 (Video / VPSS) links即M3內(nèi)部核心之間的link,由于Video和Vpss所在的2個M3核心是同屬于一個多核M3處理器,它們的cache是共享的;如降噪模塊(VPSS NF)到編碼模塊(VIDEO Enc)之間傳遞幀數(shù)據(jù),帶有NoTIfy的IPC ListMP機制被用來在這2個M3核心之間傳遞幀信息(FVID2_Frame),該過程中不需要任何cache操作和地址轉(zhuǎn)換。Inter processor (M3 to A8 or DSP)即處理器內(nèi)部核心之間,如編碼(VideoM3)到BitStream In(HostA8)之間傳遞幀數(shù)據(jù),同樣使用帶NoTIfy的IPC ListMP機制在2個核心之間傳遞幀信息(FVID2_Frame),但該過程中需要做cache同步和地址轉(zhuǎn)換操作。一個Chain是由多個links按照一定的應(yīng)用需求按順序連接成一條視頻處理的數(shù)據(jù)流。一個Chain可以銷毀后重新按照新的需求組成新的Chain,不需要重啟系統(tǒng)。Chain創(chuàng)建是特別需要相關(guān)link的順序通過System_linkCreate O函數(shù)按照由source?sink的順序創(chuàng)建需要的Links, Source Link即沒有上游Link的Link,如:視頻采集;Sink Link是沒有下游Link的Link,如:視頻播放;這個創(chuàng)建順序是非常重要的,因為一個Link創(chuàng)建時它會查詢上游Link的一些信息,如上游Link需要的channel的個數(shù)和屬性,從而按照這些參數(shù)配置自己。下一步調(diào)用SyStem_linkStart()函數(shù)啟動每個Link,啟動順序一般從Sink Link往前到Sorce Link,當(dāng)然你也可以不按照這個順序,不過不推薦,因為這樣可以保證每個Link在它的上游Link啟動前準備好接收數(shù)據(jù),避免過多的緩沖引入額外的時延。當(dāng)一個Chain運行后控制命令就可以發(fā)送到各個Links來控制它,如調(diào)用System_linkControl O函數(shù)發(fā)送改變畫面合成風(fēng)格的命令給相應(yīng)的Link,具體的命令定義由每個Link的功能實現(xiàn)來決定;一般來說System_linkControl O函數(shù)是在System_linkCreate O創(chuàng)建了 Link之后才能調(diào)用,不過有些控制命令可以在System_IinkCreate O調(diào)用之前調(diào)用,以完成Link創(chuàng)建之前必須的一些初始化,如復(fù)位;當(dāng)Chain工作完成或銷毀時可以調(diào)用System_linkStop O函數(shù)先停止每個Link,注意:停止的順序必須從Source開始依次到Sink結(jié)束;因為一個Link可能阻塞著等待下游Link釋放當(dāng)前Link的輸出Buffer, 如果下游Link先停止的話當(dāng)前Link可能會出于wait for ever的狀態(tài)而永久退不出來,因此上游Link必須先停止,之后才能停止下游Link ;最后等所有Link全部停止后,可以調(diào)用SystemJinkDeleteO函數(shù)刪除所有Links,刪除順序沒有要求;當(dāng)Chain銷毀后就可以按照之前的順序重新創(chuàng)建一個新的Chain來完成另一個工作了。
[0011]第(5)步,將OSD的yuv數(shù)據(jù)壓到每一個幀里面,顯示。其實現(xiàn)的具體步驟為(I)當(dāng)有一個新的幀產(chǎn)生的時候,通過調(diào)用函數(shù)Int VIDEO_swOSDRun(int tskld, int streamld,OSA_BufInfo ^pBufInfo)發(fā)送新數(shù)據(jù)消息命令;(2) OSD環(huán)境的創(chuàng)建,包括初始化、字體的設(shè)置、創(chuàng)建句柄以及窗口數(shù)目的劃分、窗口參數(shù)的設(shè)置、字符轉(zhuǎn)化成YUV格式;其中,初始化包括在調(diào)用其他的OSD函數(shù)之前,調(diào)用SWOSD_init函數(shù)完成初始化,返回O成功,-1失??;創(chuàng)建句柄以及窗口數(shù)的劃分:視頻有多個碼流,每個碼流顯示的內(nèi)容一樣,有的像素高,有的像素低,因此有幾個碼流就得有幾個句柄;然后設(shè)置窗口參數(shù),再將字符串轉(zhuǎn)換成yuv數(shù)據(jù)。(3)0SD的運行,為每一幀打上預(yù)定的印記,通過設(shè)置主窗口的參數(shù),然后調(diào)用SW0SD_winDrawHandle函數(shù)在一幀上打上印記。
[0012]最后應(yīng)當(dāng)說明的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案而非對其限制;盡管參照較佳實施例對本發(fā)明進行了詳細的說明,所屬領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,依然可對本發(fā)明的【具體實施方式】進行修改或者對部分技術(shù)特征進行等同替換而不脫離本發(fā)明技術(shù)方案的精神,其均應(yīng)當(dāng)涵蓋本發(fā)明請求保護的技術(shù)方案范圍當(dāng)中。
【權(quán)利要求】
1.一種多核相機的OSD中文顯示實現(xiàn)方法,其特征在于,包括以下步驟: (1)使用庫函數(shù)libfreetype.s0.6.9.0和libbz2.s0.1.0把帶有中文的字符串轉(zhuǎn)換成rgb圖;(2)通過工具ffmpeg把rgb轉(zhuǎn)換成yuv文件; (3)將yuv文件讀出來放到數(shù)組里,發(fā)送給OSD控制電路處理; (4)任意2個核之間通過Syslink/IPC通信,每個link中包含了一個基于B10S6/Linux的任務(wù)、線程、消息盒; (5)將OSD的yuv數(shù)據(jù)壓到每一個幀里面,顯示。
2.如權(quán)利要求1所述的多核相機的OSD中文顯示實現(xiàn)方法,其特征在于,所述步驟(5)具體包括: (O當(dāng)有一個新的幀產(chǎn)生的時候,通過調(diào)用函數(shù)Int VIDEO_swOSDRun(int tskld, intstreamld, 0SA_BufInfo ^pBufInfo)發(fā)送新數(shù)據(jù)消息命令; (2)OSD環(huán)境的創(chuàng)建,包括初始化、字體的設(shè)置、創(chuàng)建句柄以及窗口數(shù)目的劃分、窗口參數(shù)的設(shè)置、字符轉(zhuǎn)化成YUV格式;其中,初始化包括在調(diào)用其他的OSD函數(shù)之前,調(diào)用SW0SD_init函數(shù)完成初始化,返回O成功,-1失??;創(chuàng)建句柄以及窗口數(shù)的劃分:視頻有多個碼流,每個碼流顯示的內(nèi)容一樣,有的像素高,有的像素低,因此有幾個碼流就得有幾個句柄;然后設(shè)置窗口參數(shù),再將字符串轉(zhuǎn)換成yuv數(shù)據(jù); (3)OSD的運行,為每一幀打上預(yù)定的印記,通過設(shè)置主窗口的參數(shù),然后調(diào)用SW0SD_winDrawHandle函數(shù)在一幀上打上印記。
【文檔編號】H04N5/232GK103986870SQ201410219789
【公開日】2014年8月13日 申請日期:2014年5月23日 優(yōu)先權(quán)日:2014年5月23日
【發(fā)明者】陳剛 申請人:江蘇友上科技實業(yè)有限公司