DM6446 OSD
TMS320DM6446支持背景窗顏色,兩個視頻窗口,兩個OSD窗口,一個指針(cursor)窗口。它們以遞增的順序排列:
一個特有的第二個OSD窗口(OSDWIN1)可以用來配置成屬性窗口來控制視頻窗口和第一個OSD窗口(OSDWIN0)的混合(如透明度)。因為“alpha”混合功能是OSDWIN1最通用的功能,所以以下就主要討論第一個OSD窗口(OSDWIN0)用來顯示OSD圖片,以及第二個OSD窗口(OSDWIN1)用作屬性窗口來控制混合。
OSD窗口可以配置成接收RGB565或者bitmap數據。一般情況,RGB,BITMAP和原始圖像數據格式(raw data format)在技術行業是可以交換的。如果每個像素使用的bit數一樣,那么這些格式就一樣。在達芬奇處理器上卻不是這種情況。它們提供了配置成RGB565 或者 bitmap的選項。當OSD窗口配置成接收bitmap數據,它就使用256條目的顏色查找表(CLUT)。這意味著最大顏色深度是8bit(4,2,1bit的也支持)。當OSD窗口配置成接收RGB565數據,CLUT就不需要的了,因為RGB數據在外部存儲器中先轉換成YCBCR;RGB565使用16bit/pixel,因此能接收64k顏色。兩個窗口都可以同時配置成接收bitmap數據。然而,只有一個OSD窗口可以配置成接收RGB565數據二不能兩個都配置。因此,如果第二個OSD窗口用作屬性窗口,第一個OSD窗口最好使用RGB565模式,主要因為它可以存取16bits(64k顏色)。 Linux 有兩個重要的驅動結構,塊驅動和特征驅動塊驅動允許無須存取并能掛載到文件系統中。包括了硬盤驅動,外部RAM,及copmpact flash驅動。Character驅動讀取作為流,以FIFO順序(如音頻視頻)。所以大家會測出,OSD功能是作為character(視頻驅動)驅動。 Linux的另一個的特征是character驅動能以類似的方式存取文件。這意味著你可以open,write,close這些設備跟操作文件一樣。從Linux的命令提示下,你可以copy(cp),display(cat) 及pipe(>>)數據從一個文件到另一個文件中。這個強大的特征允許把數據放到OSD窗口中而不用寫任何的代碼。 達芬奇平臺提供了訪問視頻硬件的兩個Linux驅動,V4L2視頻采集驅動(視頻處理前端VPFE --- davinci_vpfe.c)和FBDev(即Framebuffer設備)顯示驅動(視頻處理后端VPBE ---- davincifb.c)。
(1)Video for Linux 2(V4L2)是一個標準的,二級Linux視頻輸入驅動,它修正了第一版的一個bug。
(2)FBDev是一個標準的Linux視頻輸出驅動,用來映射顯示設備幀存。如DaVinci處理器到user空間。
Linux frame buffer display device(ie. FBDev 驅動)包含了OSD特征。幀存驅動提供了顯示硬件的概括。它令視頻輸出硬件(OSD亦如此)作為一個幀存設備。并因此允許軟件訪問圖形硬件就像寫入一個緩沖區。跟上面提到的一樣,輸出設備緩存存取跟訪問文件一樣,一般定位在 /dev 路徑中。在這種情況下,這個路徑我們感興趣的是改變DaVinci OSD 是/dev/fb/0。使用這個路徑,我們能修改顯示,而只是通過一個定義好的接口。它的操作包括跟文件一樣(如open, read,write,close)的操作和設備指定的命令(ioctls 來查詢/設置關于硬件的信息)。
我們應該熟悉下面的命令:
cp – copy (e.g. >cp osd.r16 /dev/fb/0 --copies osd.r16 file to /dev/fb/0 設備)
把以上的幾點放到一起,通過寫一個簡單的命令(>cp osd.r16 /dev/fb/0)就可以把osd.r16的內容復制到OSD幀存中,并能顯示。Osd.r16文件從哪里來呢?這個文件包含了現有顯示到OSD的內容;因此通過圖像編輯器(如GIMP)編輯好圖像后,通過運行轉換工具(tar.gz 文件中)就可以轉換。但是GIMP要創建什么樣格式的文件呢?推薦的格式是BMP。
步驟如下:
(1)創建OSD圖像通過圖像編輯器(如GIMP)并且保存為BMP文件。
(2)運行小程序來轉換為RGB565格式。>.bmpToRgb16 mysod.bmp,這個命令就會產生osd.r16文件。
(3)把轉換后的文件復制到OSD幀存中。>cp osd.r16 /dev/fb/0
(4)重復以上的幾步,直到滿意。保存osd.r16文件,它就可以被應用程序加到源代碼中了。
需要指出的是屬性窗口不應該設置為100%視頻(所有都為0),因為這樣混合水平不允許OSD圖形顯示。
一個特有的第二個OSD窗口(OSDWIN1)可以用來配置成屬性窗口來控制視頻窗口和第一個OSD窗口(OSDWIN0)的混合(如透明度)。因為“alpha”混合功能是OSDWIN1最通用的功能,所以以下就主要討論第一個OSD窗口(OSDWIN0)用來顯示OSD圖片,以及第二個OSD窗口(OSDWIN1)用作屬性窗口來控制混合。
OSD窗口可以配置成接收RGB565或者bitmap數據。一般情況,RGB,BITMAP和原始圖像數據格式(raw data format)在技術行業是可以交換的。如果每個像素使用的bit數一樣,那么這些格式就一樣。在達芬奇處理器上卻不是這種情況。它們提供了配置成RGB565 或者 bitmap的選項。當OSD窗口配置成接收bitmap數據,它就使用256條目的顏色查找表(CLUT)。這意味著最大顏色深度是8bit(4,2,1bit的也支持)。當OSD窗口配置成接收RGB565數據,CLUT就不需要的了,因為RGB數據在外部存儲器中先轉換成YCBCR;RGB565使用16bit/pixel,因此能接收64k顏色。兩個窗口都可以同時配置成接收bitmap數據。然而,只有一個OSD窗口可以配置成接收RGB565數據二不能兩個都配置。因此,如果第二個OSD窗口用作屬性窗口,第一個OSD窗口最好使用RGB565模式,主要因為它可以存取16bits(64k顏色)。 Linux 有兩個重要的驅動結構,塊驅動和特征驅動塊驅動允許無須存取并能掛載到文件系統中。包括了硬盤驅動,外部RAM,及copmpact flash驅動。Character驅動讀取作為流,以FIFO順序(如音頻視頻)。所以大家會測出,OSD功能是作為character(視頻驅動)驅動。 Linux的另一個的特征是character驅動能以類似的方式存取文件。這意味著你可以open,write,close這些設備跟操作文件一樣。從Linux的命令提示下,你可以copy(cp),display(cat) 及pipe(>>)數據從一個文件到另一個文件中。這個強大的特征允許把數據放到OSD窗口中而不用寫任何的代碼。 達芬奇平臺提供了訪問視頻硬件的兩個Linux驅動,V4L2視頻采集驅動(視頻處理前端VPFE --- davinci_vpfe.c)和FBDev(即Framebuffer設備)顯示驅動(視頻處理后端VPBE ---- davincifb.c)。
(1)Video for Linux 2(V4L2)是一個標準的,二級Linux視頻輸入驅動,它修正了第一版的一個bug。
(2)FBDev是一個標準的Linux視頻輸出驅動,用來映射顯示設備幀存。如DaVinci處理器到user空間。
Linux frame buffer display device(ie. FBDev 驅動)包含了OSD特征。幀存驅動提供了顯示硬件的概括。它令視頻輸出硬件(OSD亦如此)作為一個幀存設備。并因此允許軟件訪問圖形硬件就像寫入一個緩沖區。跟上面提到的一樣,輸出設備緩存存取跟訪問文件一樣,一般定位在 /dev 路徑中。在這種情況下,這個路徑我們感興趣的是改變DaVinci OSD 是/dev/fb/0。使用這個路徑,我們能修改顯示,而只是通過一個定義好的接口。它的操作包括跟文件一樣(如open, read,write,close)的操作和設備指定的命令(ioctls 來查詢/設置關于硬件的信息)。
我們應該熟悉下面的命令:
cp – copy (e.g. >cp osd.r16 /dev/fb/0 --copies osd.r16 file to /dev/fb/0 設備)
把以上的幾點放到一起,通過寫一個簡單的命令(>cp osd.r16 /dev/fb/0)就可以把osd.r16的內容復制到OSD幀存中,并能顯示。Osd.r16文件從哪里來呢?這個文件包含了現有顯示到OSD的內容;因此通過圖像編輯器(如GIMP)編輯好圖像后,通過運行轉換工具(tar.gz 文件中)就可以轉換。但是GIMP要創建什么樣格式的文件呢?推薦的格式是BMP。
步驟如下:
(1)創建OSD圖像通過圖像編輯器(如GIMP)并且保存為BMP文件。
(2)運行小程序來轉換為RGB565格式。>.bmpToRgb16 mysod.bmp,這個命令就會產生osd.r16文件。
(3)把轉換后的文件復制到OSD幀存中。>cp osd.r16 /dev/fb/0
(4)重復以上的幾步,直到滿意。保存osd.r16文件,它就可以被應用程序加到源代碼中了。
需要指出的是屬性窗口不應該設置為100%視頻(所有都為0),因為這樣混合水平不允許OSD圖形顯示。