Android Surface 之旅

1? [定義] Surface是何方神圣

? ? ? ? google Surface.java 的原文解釋 【Handle onto a raw buffer that is being managed by the screen? compositor.】

說人話: Surface 就是一塊Buffer的封裝,它被SurfaceComposer使用, SurfaceFlinger是其中之一

再進(jìn)一步:Surface? 由GraphicBufferAllocator 分配 ,來源于Native層

更深一層:那塊神圣的raw buffer, 是由 GraphicBufferAllocator? 來料加工而成,來源于底層ION 管理的,或者者framebuffer device 對(duì)應(yīng)的地址空間

2? [客戶] Surface 為誰服務(wù)

android.graphics.SurfaceTexture? ? ? -----? ? ?圖片應(yīng)用

android.media.MediaRecorder? ? ? ? ? -----? ? ?截屏,錄屏, 虛擬顯示

android.opengl.EGL14? ? ? ? ? ? ? ? ? ? ? ?-----? ? ?GPU, game,opengl graphic

????????????????????????????????????????????????????????????----? Surface 是android OpenGl? 之? NativeWindow 的后端實(shí)現(xiàn)

android.media.MediaPlayer? ? ? ? ? ? ? ? -----? ? ?Decoder

android.hardware.camera2.CameraDevice -----? ?Camera

3? [實(shí)現(xiàn)] Surface如何顯神通

重要的事情,提前說。孫悟空戰(zhàn)斗力爆表,是因?yàn)閷ひ捯捳业搅四歉鸸堪?。Surface顯神通,他的利器,就是BufferQueue.

.? 因?yàn)橛辛薆ufferQueue, 以及內(nèi)嵌其中的GraphicBufferProducer, GraphicBufferConsumer,? 實(shí)現(xiàn)了跨進(jìn)程,以及自動(dòng)的消息通知機(jī)制?

? ? ? ? -----? 比如Opengl 對(duì)應(yīng)的swapBuffer, 內(nèi)部對(duì)應(yīng)IGraphicBufferProduder的,dequeueBuffer,enqueueBuffer.

? ? ? ? ? ? ? ? 進(jìn)而觸發(fā),Consumer那一端的onFrameAvailable.

.? GraphicBuffer 通過Allocator 分配之后, 在進(jìn)程鏈 的鏈路上,可以多次映射,每次穿越Binder ,都會(huì)產(chǎn)生一次映射。


GraphicBuffer Bn端?
GraphicBuffer Bp端

【待續(xù)----】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容