SurfaceFlinger對(duì)Miracast的支持
SurfaceFlinger對(duì)Miracast的支持
MediaPlayerService及相關(guān)模塊:因?yàn)镸iracast本身就涉及到RTP/RTSP及相應(yīng)的編解碼技術(shù)。

SurfaceFlinger及相關(guān)模塊:SurfaceF丨inger的作用是將各層UI數(shù)據(jù)泡屏并投遞到顯示設(shè)備中去S示。現(xiàn)在,SurfaceFlinger支持多個(gè)顯示設(shè)備,而支持Miracast的遠(yuǎn)端設(shè)備也作為一個(gè)獨(dú)立的顯示設(shè)備存在于系統(tǒng)中。
VWndowManagerService及相關(guān)模塊:WindowManagerService用子管理系統(tǒng)中各個(gè)UI層的位置和尿性。由于并非所杳的UI層都會(huì)通過Miracast投遞到遠(yuǎn)端設(shè)備上,例如手機(jī)中的視頻可投遞到遠(yuǎn)端設(shè)備上去顯示,但假如在播放過程中,突然彈出一個(gè)密碼輸入框(可能是某個(gè)后臺(tái)應(yīng)用程序發(fā)起的),則這個(gè)密碼輸入框就不能投遞到遠(yuǎn)端設(shè)備上去顯示。所以,WindowManagcrService也需要修改以適設(shè)Miracast的需要。
Disp丨ayManagerScrvice及相關(guān)模塊:DisplayManagerScrvice服務(wù)適Android4.2新增的,用于轉(zhuǎn)理系統(tǒng)中所有的Display設(shè)備。

SurfaceFlinger對(duì)Miracast的支持
相比前面的版本,Android4.2中SurfaceFlingcr的最大變化就是培加了一個(gè)名為DisplayDcvice的抽象層。Surface系統(tǒng)定義了一個(gè)DisplayType的枚舉,其中有代表手機(jī)屏幕的D1SPLAY_PR1MARY和代表HDM丨等外接設(shè)備的DISPLAY_EXTERNAU比較有意思的是,作為Wi>FiDisplay,它的設(shè)備類型是DISPLAY_VlRnJAL。
SurfaceFlinger類,其內(nèi)部有—個(gè)名為mDisplays的變量,它保存了系統(tǒng)中當(dāng)前所有的設(shè)備(DisplayDevicc)。另外,SurfaceFlinger通過mCurrcmState和mDrawingStatc來控制顯示層的狀態(tài)。
其中,mDrawingState用來控制當(dāng)前正在繪制的顯示層的狀態(tài)。mOurcmState表木當(dāng)前所有顯示層的狀態(tài)。有這兩種State顯示層的原因是不論是Miracast還是HDMI設(shè)備,其在系統(tǒng)中存在的時(shí)間是不確定的。

例如用戶可以隨時(shí)選擇連接一個(gè)MiracasiM示設(shè)備。為了不破壞當(dāng)前正在顯示的內(nèi)容,這個(gè)新顯示設(shè)備的一些位息將保存到CurremState中。等到SurfaceFlingerK前的集中處理。
