999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

適用于機頂盒的嵌入式窗口系統開發

2010-04-17 03:34:24
電視技術 2010年8期
關鍵詞:引擎系統

劉 暢

(中國電子科技集團公司第三研究所,北京 100015)

1 引言

作為一種面向最終用戶的消費電子產品,用戶界面的設計在機頂盒軟件的開發中占有越來越重要的地位。界面軟件的設計以用戶為中心,其目的是讓用戶能夠用最簡單有效的方式完成交互操作,圖形界面作為有效提高用戶易用性的手段被廣泛使用。圖形用戶界面的設計具有復雜度高、需求多變、可重用性差的特點,而在實際工程中具有開發周期長、穩定性低、模塊化程度低等問題[1-3]。

導致產生上述問題的一個重要因素是:機頂盒軟件基于嵌入式實時操作系統開發,而此類操作系統一般沒有對圖形用戶界面的特殊支持,用戶界面往往被簡單劃分為用戶層軟件的一部分,其實現與具體的界面設計方案耦合過強。解決此問題的有效方法是:定義一個適用于界面開發的中間層模塊,為圖形界面的開發提供必要支持[4]。圖1為一個典型的采用此種設計模式的機頂盒系統結構。

與傳統的機頂盒軟件相比,其最顯著的區別是新增了一個位于中間層的軟件模塊,為圖形界面的開發提供必要的支持。而基于窗口系統的圖形界面系統是目前應用最為廣泛的技術。由于硬件機能的限制,機頂盒通常不能支持PC上常見的復雜圖形系統。筆者介紹了一種適用于機頂盒的輕量級圖形系統,該系統能夠有效完成大多數界面設計的需求,同時保持很高的性能和靈活性。

圖1 基于圖形系統的機頂盒軟件結構

2 窗口系統的整體結構

本設計中的窗口系統的基本功能包括標量及矢量圖形繪制、屏幕區域管理、窗口管理和分發輸入事件,提供常用界面控件以及應用編程接口。該系統采用層次化設計思想,每一層均可根據工程中的實際需要進行修改,而不會對系統的整體結構造成影響。該系統的結構模型如圖 2所示[5]。

圖2 窗口系統結構模型

在底層,驅動程序為訪問圖形設備和輸入設備提供最基本的支持。在目前常見的機頂盒系統中,圖形硬件通常包括二維圖形加速器,而輸入設備在多數情況下為遙控器和機頂盒控制面板。

在中間層,該系統實現了一個與硬件無關的繪圖引擎,提供了常用的標量圖繪制和少量的矢量圖繪制功能,同時提供對屏幕緩沖區的管理和裁剪區域的支持。

在上層,窗口管理器提供了窗口系統的大部分核心功能,如窗口的創建和管理、窗口的重繪,以及對輸入事件的分發等功能。

應用程序通過窗口管理器提供了編程接口與圖形系統交互,為保證用戶界面的一致性并提高開發效率,該系統同時包含常用的界面控件庫,提供諸如按鈕、列表等常用圖形控件。基于該系統開發的應用完全與具體的硬件和操作系統隔離,可以很方便地移植到不同的機頂盒平臺上。

3 繪圖引擎

繪圖引擎是整個圖形系統的重要組成部分,主要功能包括[6]:1)管理屏幕緩沖區和顯示內存。2)提供對窗口區域的管理和屏幕裁剪的支持。3)提供對矢量圖、標量圖以及矢量字庫的支持。4)為上層模塊提供與設備無關的編程接口。繪圖引擎的結構如圖3所示。

圖3 與硬件無關的繪圖引擎結構圖

繪圖引擎直接操縱下層硬件設備,并為上層模塊提供與設備無關的編程接口,是整個圖形系統跨平臺性的保證。繪圖引擎所提供的各項功能對窗口系統也是非常關鍵的。

3.1 屏幕緩沖區管理

當前主流機頂盒系統的顯示設備無一例外地采用幀緩存設計,屏幕上顯示的內容對應于顯示內存中的一幀圖像數據。機頂盒軟件向幀緩存中寫入數據,顯示設備從同一個緩存中讀取數據,進而更新屏幕上顯示的圖像內容。

管理屏幕緩沖區需要解決2個基本問題:確保寫入緩存的數據符合當前顯示設備的顯示模式,以及保證幀緩存中數據的完整性,避免在機頂盒軟件更新幀緩存時,屏幕圖像產生抖動。

圖形顯示模式決定了幀緩存中的數據格式,即色深和內存排布方式。機頂盒軟件必須采用設備要求的顯示模式向緩存中寫入圖像數據,否則顯示設備無法顯示正確的圖像信息。不同的硬件設備和圖形模式下,寫入幀緩存中的數據格式差異很大。為了避免這些差異對上層軟件的影響,圖形引擎通過一系列宏定義,為不同的顯示模式生成正確的顏色數據,例如定義如下的宏來寫入32位的像素數據:#define ARGB_8888(a,r,g,b),(a)<<24|(r)|(g)<<8|(b)<<16。

不同于桌面計算機系統,機頂盒系統的顯示模式在出廠后是不可改變的,因此圖形引擎通過條件編譯,選擇一種匹配當前系統顏色模式的數據格式作為通用的像素表示:#define ARGB ARGB_8888。上層模塊只需統一使用ARGB宏定義顏色即可,無須考慮具體的硬件顯示模式。

在保證數據格式正確的同時,機頂盒軟件還會面臨屏幕內容與幀緩存內容同步的問題。在軟件繪制屏幕圖像的過程中,往往會多次更新屏幕同一個像素的內容。例如,應用程序需要更改屏幕上顯示的文字,通常的做法是先將屏幕上相應的區域用背景色完全填充,然后重新繪制新的文字內容。這樣做比先計算不同的文字更改了哪些像素,然后只更新受影響的像素開銷更低。然而其帶來的影響是:尚未完全更新的圖像(清空的背景)可能會短暫顯示在屏幕上,從而造成圖像閃爍。

為了保證幀緩存中圖像的完整性,繪圖引擎使用多緩沖技術。也就是在顯存中分配多個緩沖區,任意時刻僅將其中的一幀作為當前顯示幀。機頂盒軟件在工作時只向非當前屏幕顯示幀中寫入將要顯示的幀數據,當全部繪圖操作完成后,再將當前的顯示幀切換到已經繪制完成的幀緩存中去,這樣避免了圖像閃爍的發生。

使用多重緩沖勢必會帶來顯存的開銷,因此在機頂盒系統中,繪圖引擎只使用2塊幀緩存。幀緩存的管理對上層應用是透明的,繪圖引擎對上層提供以下2個編程接口:BeginPaint和EndPaint,用來標識1次屏幕更新的開始和結束。幀緩存的切換在EndPaint調用時進行。

3.2 屏幕區域和裁剪

屏幕區域是指在屏幕上的一系列像素構成的集合。考慮到機頂盒系統的限制和實際工程的需要,繪圖引擎僅支持矩形的屏幕區域。上層應用可以使用編程接口AllocateRegion和DestroyRegion來分配或銷毀區域。

屏幕區域的主要使用者是上層的窗口管理器,因為屏幕區域對應一個窗口,因此最重要的功能是完成對繪圖內容的裁剪。在任意時刻,繪圖引擎僅支持一個活動區域作為當前的裁剪區域。任何繪圖指令都只會影響該區域中的幀緩存內的數據,超出該區域的部分不會發生變化。上層模塊可以通過SetClipRegion接口來設置當前的裁剪區域。

圖形引擎中提供了對軟件和硬件裁剪的支持,由于軟件裁剪的速度較慢,而主流的機頂盒平臺均已提供對硬件裁剪的支持,硬件裁剪是首選的實現方式。

3.3 繪圖編程接口

在對幀緩存和裁剪支持的基礎上,繪圖引擎提供了一系列繪圖接口供上層模塊使用。考慮到在實際工程中,機頂盒上的界面軟件往往僅使用標量繪圖,因而繪圖引擎提供的圖形接口包括:

1)繪制線段。實際工程中通常不需要繪制除水平和垂直線段之外的任意角度線段。繪圖引擎會對這2類特殊線段提供硬件加速支持。

2)繪制標量圖。這是在機頂盒系統上最為常用的圖形操作,包括對標量圖形的顯示、縮放,以及基于透明度的混合等,所有操作都提供硬件加速支持。

3)文字顯示。繪圖引擎提供對矢量和標量字庫的支持。用于顯示固定或任意大小的文字。

4 窗口管理器

基于繪圖引擎提供的繪圖能力,窗口管理器將屏幕劃分為任意的矩形區域,每個區域作為一個窗口,提供給上層應用程序,是應用可編程的最基本屏幕單元。窗口管理器實現對窗口的管理,例如窗口的創建和銷毀、窗口的布局等。窗口管理器作為整個圖形系統的最上層,是上層應用訪問圖形系統的唯一入口,因此窗口管理器提供了絕大部分的應用編程接口,其結構如圖4所示。

圖4 窗口管理器結構圖

在窗口管理器中,各種輸入設備產生的事件通過消息隊列分發到窗口系統的各個窗口中,窗口通過處理不同的消息來更新其在屏幕上的顯示內容,從而完成與用戶的交互。

4.1 消息隊列和消息傳遞

窗口間的基本通信機制是窗口消息,每條消息由1個消息編號以及2個32位的參數構成。窗口消息存儲在應用程序的消息隊列中,每個使用窗口管理器的線程都有一個消息隊列。在實際工程中,機頂盒系統往往采用基于微內核結構的實時操作系統,在這樣的系統中,每個任務通常都已經有一個消息隊列,因此窗口管理器會重用該任務的消息隊列來傳遞窗口消息。

窗口系統中的消息分為3類:

1)輸入設備消息。通常是遙控器或控制面板按鍵產生的消息,此類消息會被窗口管理器分發給當前具有輸入焦點的窗口。在任意時刻,系統中最多只有一個窗口具有輸入焦點,通常是一個編輯框窗口。

2)普通窗口消息。此類消息發送給某個特定的窗口,發送方在發送消息時,必須正確指定目的窗口的窗口句柄。

3)系統廣播消息。當系統中的硬件設備產生特定事件,需要提示用戶注意時,產生此類消息。這些消息不對應特定窗口。往往由應用程序決定如何處理。

應用程序通過調用GetMessage接口來獲取隊列中的窗口消息,該函數的調用會被阻塞,直到有新的窗口消息到達。當新的消息到達后,應用通過DispatchMessage接口將收到的消息分發給特定的窗口處理。

系統中的每個窗口都需要提供與其相關聯的消息處理函數,窗口管理器在分發消息的過程中,通過調用相關窗口的消息處理函數來處理消息。窗口管理器同時提供了缺省的消息處理函數DefWindowProc(),用于統一處理常見的消息,例如改變窗口的位置和大小。窗口的消息處理函數應當將自身不處理的消息交給缺省消息處理函數處理。

當應用程序通過窗口管理器發送消息時,有2種方式可供選擇:1)異步發送。消息被放置到消息隊列中,當下一次調用GetMessage()時該消息被處理。采用此種發送方式時,消息的發送方不能確認接收方何時會處理該消息。2)同步發送。此時消息并不會被放置在消息隊列中,窗口管理器直接調用目標窗口的消息處理函數。此時消息傳遞等同于函數調用,因此發送方能夠確定接收方會立刻處理該消息。

此消息傳遞機制的存在使窗口管理器能夠通過發送消息來管理和協調系統中所有窗口的功能,例如在創建和銷毀窗口時發送特定消息,同時也能夠通過缺省的消息處理函數保證各個窗口在基本交互行為上的一致性。

4.2 窗口樹

圖形用戶界面中的界面元素自然形成一顆樹,因此窗口系統中的窗口以樹形結構存放在窗口管理器中。窗口樹中重要的操作包括:窗口的創建和銷毀、窗口的遮擋關系和窗口的顯示和隱藏。

1)窗口的創建和銷毀

創建和銷毀窗口對應于窗口樹上節點的插入和刪除操作。窗口樹的根節點由窗口管理器創建,應用程序創建新的窗口時應當指定該窗口的父窗口。如果父窗口為空,窗口管理器會將根節點作為其父節點。窗口管理器將新建的窗口節點的指針返回給上層應用作為窗口句柄,窗口句柄將被用于絕大多數窗口系統的編程接口中,用于快速定位窗口樹中的特定節點。

2)窗口的遮擋關系

窗口之間的遮擋關系可以通過相應節點在樹中的位置確定:高度相同的窗口節點之間,左鄰居遮擋右鄰居;高度不同的窗口節點之間,子節點遮擋父節點。窗口間默認的Z序在創建窗口時被確定,新創建的窗口遮擋已經創建的窗口。窗口管理器同時提供調整Z序的編程接口,用于調整同一高度的窗口節點之間的相互關系。

3)窗口的顯示和隱藏

應用可以通過設置窗口的屬性來顯示或隱藏某個窗口,隱藏的窗口不會被銷毀。窗口管理器在遍歷窗口樹時會檢查相應的屬性,如果窗口被隱藏,該節點及其所有子節點會被跳過,從而不會出現在屏幕上。

4.3 窗口布局和屏幕重繪

窗口的重繪過程等效于在該窗口樹上的中序遍歷,圖5為簡單窗口樹實例。

桌面作為覆蓋整個屏幕的窗口被最先繪制,由于頂層窗口2具有更高的Z序,因此系統首先繪制窗口1及其所有子窗口,然后繪制窗口2,進而完成對所有屏幕元素的重繪。

為了提高繪圖效率,窗口管理器在重繪屏幕時采用2次遍歷的方式。第1次遍歷時,系統僅根據Z序計算各個窗口需要重繪區域的外接矩形,進而判斷出哪些窗口由于完全被遮擋而不需重繪。第2次遍歷時,完成實際的重繪過程。以圖5為例,如果窗口2具有與窗口1同樣的位置,則窗口1的重繪將被忽略,進而提高重繪過程的效率。

窗口管理器提供在窗口中繪圖的編程接口,這些編程接口大多對應繪圖引擎中的相應函數,窗口管理器在調用繪圖引擎前完成的額外操作包括:

1)坐標變換。應用程序通過窗口管理器繪圖時需要指定特定的窗口句柄作為繪圖的目標,繪圖時所有坐標均是窗口坐標,即以窗口左上角為原點的坐標。這樣當窗口被移動時,所有繪圖指令在窗口內仍然有效。在調用繪圖引擎前,窗口管理器根據當前窗口的實際位置完成窗口坐標到屏幕坐標的轉換,然后以屏幕坐標作為參數調用繪圖引擎的相應接口。

2)設定裁剪區域。窗口自然映射到繪圖引擎中的裁剪區域,為了保證任何繪圖指令只影響某一個窗口內的內容,窗口管理器首先根據指令中的窗口句柄設置相應的裁剪區域,然后再進行實際的繪圖操作。

4.4 常用界面控件庫

采用上述窗口管理器,應用程序已經可以開發各類圖形用戶界面。本文的圖形系統中,常用的界面元素被包含在窗口管理器中提供給應用程序使用。界面控件庫是基于該系統窗口的實現,包括按鈕、選單、列表、編輯輸入框和分頁顯示控件等。應用程序通過創建某類控件窗口的實例來使用該控件庫。

5 小結

通過筆者介紹的方法實現的嵌入式窗口系統,應用于廣東南方銀視網絡傳媒有限公司的各種類型機頂盒軟件中。該軟件可移植性高,操作靈活,邏輯清晰,性能穩定,上層開發簡便,界面優美,受到用戶的肯定和好評。

[1] 陳卉,劉衛忠,馮卓明.嵌入式平臺下GUI工具的設計[J].電視技術,2007,31(2):29-31.

[2] 彭文,陳虹,羅惠瓊.嵌入式窗口系統的研究與實現[J].計算機應用研究, 2002(9):104-107.

[3] 李升亮,徐劍峰,李峻林.嵌入式系統中的多窗口GUI系統的研究[J].計算機與數字工程, 2008(10):126-128.

[4] 陳雁飛,趙岳松,陳榕.基于構件技術的嵌入式GUI系統[J].計算機工程與設計, 2006, 27(4):561-564.

[5] 丁茂順.用戶接口技術與交互系統構造方法[M].北京:科學出版社,1992.

[6] 孫家廣.計算機圖形學[M].北京:清華大學出版社,1998.

猜你喜歡
引擎系統
以學促干 挺膺擔當 激活砥礪前行的紅色引擎
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
三生 三大引擎齊發力
藍谷: “涉藍”新引擎
商周刊(2017年22期)2017-11-09 05:08:31
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
無形的引擎
河南電力(2015年5期)2015-06-08 06:01:46
主站蜘蛛池模板: 国产91精品调教在线播放| 国产女人在线视频| 中文字幕亚洲乱码熟女1区2区| 99资源在线| 午夜丁香婷婷| 久久久亚洲国产美女国产盗摄| 国产精品9| 国产九九精品视频| 四虎国产精品永久一区| 久久精品这里只有国产中文精品| 久久夜夜视频| 亚洲午夜福利精品无码不卡| 国产精品视频猛进猛出| 国产91无码福利在线| 美女被操91视频| 亚洲欧美综合在线观看| 日韩一级毛一欧美一国产| 国产精品一区二区在线播放| 熟妇丰满人妻av无码区| 亚洲欧美国产视频| 天堂亚洲网| 国产一区二区三区在线精品专区| 欧美综合一区二区三区| 久久黄色影院| 999精品视频在线| 久久精品国产亚洲麻豆| 国产精品亚洲一区二区在线观看| 久久久精品国产SM调教网站| 欧美日韩第二页| 亚洲精品你懂的| 亚洲欧美一区二区三区图片| 91视频区| 蜜桃视频一区二区| 浮力影院国产第一页| 亚洲综合18p| 久久久久无码精品| 毛片免费视频| 国产激情无码一区二区免费| 亚洲妓女综合网995久久| 亚洲精品波多野结衣| 国产精品污视频| 91久久偷偷做嫩草影院| 亚洲欧美极品| 欧美午夜视频| 无码中文AⅤ在线观看| 亚洲人成网站在线观看播放不卡| 国产黄色免费看| 波多野结衣无码视频在线观看| 欧美成人区| 国产性生大片免费观看性欧美| 午夜精品福利影院| a级毛片视频免费观看| 狠狠色噜噜狠狠狠狠奇米777| 免费又黄又爽又猛大片午夜| 久久视精品| 黄色网在线| 成人在线不卡| 久久先锋资源| 亚洲一区二区三区香蕉| 国产91丝袜在线播放动漫| 在线观看免费黄色网址| 18黑白丝水手服自慰喷水网站| 亚洲av无码专区久久蜜芽| 免费看一级毛片波多结衣| 国模粉嫩小泬视频在线观看| 青青草原国产精品啪啪视频| 91美女视频在线观看| 国产一区二区三区视频| 亚洲手机在线| 亚洲91精品视频| 欧美伦理一区| 在线视频一区二区三区不卡| 国产极品美女在线观看| 欧美午夜视频在线| 亚洲美女视频一区| 婷婷成人综合| 免费A级毛片无码无遮挡| 国产精鲁鲁网在线视频| 国产自在线播放| 无码人中文字幕| AV老司机AV天堂| 欧美成人二区|