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