Mstar液晶電視專項方案OSD代碼詳解_第1頁
Mstar液晶電視專項方案OSD代碼詳解_第2頁
Mstar液晶電視專項方案OSD代碼詳解_第3頁
Mstar液晶電視專項方案OSD代碼詳解_第4頁
Mstar液晶電視專項方案OSD代碼詳解_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

MstarOSD詳解一、OSD基礎(chǔ)概念UI語言:指OSD內(nèi)容中文字部分使用語言類型;UI模式:指OSD內(nèi)容適用環(huán)境,比如不一樣信號源(TV、DVD、PC)帶來模式化其作用關(guān)鍵區(qū)分不一樣環(huán)境下OSD不一樣表現(xiàn);UI場景:特定語言模式下及較多信息頁面情況下,目前OSD適用特定頁面;UI事件:用戶利用輸入設(shè)備向UI系統(tǒng)提供操作命令;UI動作表:指在特定UI場景中,對于UI輸入命令進行對應(yīng)處理索引表;OSD畫布:指整個OSD展現(xiàn)區(qū)域,通常為一個矩形區(qū)域;OSD位置:通常指在OSD畫布中,相較左上角原點相對位置;OSD物件:展現(xiàn)在畫布上,表示特定信息,含有特定屬性像素組合。二、MSTOSD步驟圖MstarOSD方案,感覺關(guān)鍵是在msosd.c(底層部分),menu.c,menutbl.c這里,關(guān)鍵有MenuPageType、MenuItemType、DrawSubMenuGroupType、MenuItemFuncType等多個Stucture,菜單位置、大小及對應(yīng)操作方法全部在結(jié)構(gòu)體里;在Main循環(huán)程序中經(jīng)過不停調(diào)用keyDetectHander()、irDecodeCommand()和OsdHandler()來達成OSD多種功效和目標(biāo)。三、模塊說明1、UserCommand這部分指是用戶利用Keypad、Ir或VisualKey進行操作,產(chǎn)生中止觸發(fā)激活KeyEvent;關(guān)鍵功效是在Irfunc.c、keyPad.c里完成,在keyDetectHandler()、irDecodeCommand()中取得相關(guān)按鍵信息,以后經(jīng)過MenuProcessKey()、ExecuteKeyEvent()實施對應(yīng)操作(包含畫OSD和實施按鍵功效等)。這里比較關(guān)鍵是怎樣將某狀態(tài)下按鍵(如某一按鍵連續(xù)按兩次或一直按下)轉(zhuǎn)化成正確MenuItemActionType,因為全部按鍵最終全部會被轉(zhuǎn)到ExecuteKeyEvent()進行處理,而ExecuteKeyEvent()正是依據(jù)不一樣MenuItemActionType實現(xiàn)不一樣功效;實現(xiàn)此功效關(guān)鍵在于所使用MenuStructure上,具體內(nèi)容請參考MenuTable模塊。2、DrawOSD在Global.h中定義部分和OSD相關(guān)全局變量(如:g_ucMenuPageIndex、g_ucMenuItemIndex、g_ucOsdTimeCounter等等),在UserCommand部分中若用戶進行了不一樣操作則會影響到這些變量,依據(jù)變量值不一樣,OsdHandler()、DrawOsdMenu()、DrawOsdMenuPage()、DrawOsdSubMenuGroup()也就能夠畫出不一樣OSD界面了;這多個函數(shù)大部分是在Menu.c里定義,實現(xiàn)這些函數(shù)功效則是依靠調(diào)用底層部分(msosd.c)多種功效函數(shù),通常來講,我們不需要更改底層內(nèi)容。一樣,實現(xiàn)多種OSD界面風(fēng)格關(guān)鍵也是在于所使用MenuStructure上,所以,了解MenuDef.h中多種MenuStructure是學(xué)習(xí)整個MstarOSD結(jié)構(gòu)關(guān)鍵。3、MenuTable這個很關(guān)鍵,了解了MenuStructure,整個OSD學(xué)習(xí)也就輕易多了,在MenuDef.h中定義以下多個結(jié)構(gòu):A、菜單頁面結(jié)構(gòu)體:typedefstruct{BYTEXSize,YSize;//定義MenuPage窗口大?。⊿etWindowSize)BYTEPrevMenuPage;//前一個MenuPage(場景)MenuItemType*MenuItems;//該MenuPage下MenuItemsBYTEMenuItemCount;//該MenuPage下MenuItems個數(shù)BYTEItemSelLength,ItemSubGroupSelLength;//Item及可選長度fpExecFuncExecFunction;//實施功效,如PowerOn/Off等//MenuFontType*Fonts;//關(guān)閉,臨時未用BYTEFlags;//標(biāo)志位,是否可見/保持}MenuPageType;在MenuDef.h中枚舉型變量MenuPageIndexType和MenuTbl.c中tblMenus[]一起定義了MenuPageType類型多種MenuPage。如:MENU_MAIN,//值5,為1級菜單(MENU_ROOT為虛擬根菜單,另外還有1、2、3級菜單)MENU_PICTURE,//2級菜單MENU_SOUND,MENU_CHANNEL,MENU_FUNCTION,MENU_PC,MENU_OSD,//值11,為2級菜單等等。該結(jié)構(gòu)和DrawOsdMenu間溝通橋梁是定義在Menu.h中以下宏定義:#defineCURRENT_MENUtblMenus[g_ucMenuPageIndex]#defineCURRENT_MENU_ITEMSCURRENT_MENU.MenuItems#defineCURRENT_MENU_ITEM_COUNT(CURRENT_MENU.MenuItemCount)#defineCURRENT_MENU_ITEMCURRENT_MENU_ITEMS[g_ucMenuItemIndex]#defineCURRENT_MENU_ITEM_FUNCCURRENT_MENU_ITEM.KeyFunctionB、頁面選項結(jié)構(gòu)體:typedefstruct{BYTEXPos,YPos;//MenuItem區(qū)域BYTEUnSelColorType,SelColorType;//選中和未選中圖標(biāo)顏色模式BYTENextMenuPage;//下一個MenuPage(場景)DrawMenuTextTypeDrawItemMethod;//畫Item方法,包含可選顏色、字體等fpDisplayTextDisplayText;//所要顯示字符MenuItemActionType*KeyEvents;//按鍵觸發(fā)事件類別(該MenuItem下各按鍵動作,導(dǎo)航信息)MenuItemFuncTypeKeyFunction;//所選Item對應(yīng)功效DrawSubMenuGroupType*DrawSubMenuGroup;//畫菜單方法//MenuFontType*Fonts;BYTEFlags;//該MenuItem是否可選、在不一樣模式下是否可用(MENU_MAIN)}MenuItemType;MenuItemActionType*KeyEvents選項對應(yīng)不一樣狀態(tài)下各個按鍵不一樣響應(yīng)(導(dǎo)航信息)。比如:當(dāng)使用IR按下Menu按鍵時,IR產(chǎn)生一個IRKEY_OSD_MENU值,利用IrDecommand()調(diào)用MenuProcessKey(BTN_OSD),在這里,就必需判定目前狀態(tài)下KeyEvent,用于產(chǎn)生對應(yīng)MenuItemActionType供ExecuteKeyEvent()使用,若目前狀態(tài)(即目前g_ucMenuPageIndex和g_ucMenuItemIndex值)和按下此按鍵后狀態(tài)相同,也就是按下Menu鍵后再次按下Menu鍵,這時,所依據(jù)KeyEvent就為CURRENT_MENU_ITEM.KeyEvent指向結(jié)構(gòu)(定義在MenuTbl.h),為MenuItemActionTypecodeNaviAdjustKeyEvent[BTN_ENDBTN]={MIA_POWER,//BTN_POWERMIA_SOURCE,//BTN_SOURCEMIA_INCVALUE,//BTN_RightMIA_GOTOPREV,//BTN_OsdMIA_PREVITEM,//BTN_UpMIA_NEXTITEM,//BTN_DownMIA_DECVALUE,//BTN_LeftMIA_PIPFUNC//BTN_Pip};即對應(yīng)BTN_Osd為MIA_GOTOPREV,表示在兩次按下Menu鍵后返回第一次按下Menu鍵前場景,應(yīng)該說明一點是不一樣狀態(tài)下所對應(yīng)KeyEvent大多會有異同。所以,每個Button能夠轉(zhuǎn)換成多個類型MenuAction,以后調(diào)用ExecuteKeyEvent(MenuAction)來實施這個MenuAction。另外還需要注意是,對于不一樣InputSource,OSD需要顯示MenuPage或MenuItem是會不一樣,決定是否顯示某一MenuPage控制權(quán)在于MenuPage為1級MENU_MAIN中該結(jié)構(gòu)體下Flag位(MenuItem控制權(quán)在各自MenuPage下該Flag位),經(jīng)過IsItemSelectable()取得其值,若為True則畫之,不然就蔽之;畫出具體某一MenuItem功效函數(shù)是DrawOsdSubMenuGroup()。C、菜單物件結(jié)構(gòu)體:typedefstruct{BYTEFlags;//DrawSubMenuItemTextmethodBYTEUnSelColorType,SelColorType;//選中和未選中圖標(biāo)顏色樣式BYTEXPos,YPos;//文本信息顯示位置BYTELength;//選中/箭頭等長度fpDisplayTextDisplayText;//所要顯示文本信息fpGetValueGetValue;//獲取數(shù)值,如OSD位置、透明度等}DrawSubMenuGroupType;這個部分要說明是DisplayText,因為有多個語言格式,需要從MenuStrings模塊中選擇正確語言DisplayTextStrings(實際上是個表),在String.c中GetStringToBuffer()實現(xiàn)此功效,大致過程是:在DrawSubMenuGroupType結(jié)構(gòu)里添加指向定義在MenuStr.c里多種字符串函數(shù),返回定義在Strings.h里對應(yīng)字符串索引,該索引最終指向Strings.c里一些字符表代碼,最終當(dāng)調(diào)用DrawOsdSubMenuGroup()時就顯示出多種菜單信息。另外全局變量bCurrFontTableId表示目前使用哪種語言字庫,使用OSD菜單下進行語系更改時改變其值,從而實現(xiàn)語言重載,顯示出對應(yīng)語系下OSD信息。D、菜單功效結(jié)構(gòu)體:typedefstruct{fpAdjustValueAdjustFunction;//調(diào)整功效函數(shù)fpExecFuncExecFunction;//實施功效函數(shù)}MenuItemFuncType;在Menu.c中ExecuteKeyEvent()函數(shù)中判定菜單項功效,假如有對應(yīng)功效便實施。4、MenuStrings表結(jié)構(gòu),關(guān)鍵定義在Strings.c里,依據(jù)用戶選擇不一樣語言查找對應(yīng)表;當(dāng)我們需要更改或添加語言時,能夠使用Mstar提供制作ICON及修改添加語言功效工具,其中,Mstgen.exe功效是制作ICON,將個性化菜單圖標(biāo)生成源碼,需要注意是要選好Horizontal和Vertical值,對于6X89系列話其值分別為12、32,它產(chǎn)生源碼需添加到Palette.c、Font.c、Font_Download.c等文件里;MenuEditor.exe用來更改添加語言,打開strings.xls文件,修改添加字符串直接在Strings里改,添加字庫則在Dynamic里添加定義,至于要添加什么字體及多少字體,則要使用DynFontSort.exe工具,將新增語言字符COPY到DynFontSort.exe,點擊Sort后便可產(chǎn)生需要字體,選擇除已經(jīng)有字體外全部字符,添加到自己所定義語言項里,修改完strings.xls文件后保留,使用Menu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論