Android Surface 之旅

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

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

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

再進一步:Surface? 由GraphicBufferAllocator 分配 ,來源于Native層

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

2? [客戶] Surface 為誰服務

android.graphics.SurfaceTexture? ? ? -----? ? ?圖片應用

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

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

????????????????????????????????????????????????????????????----? Surface 是android OpenGl? 之? NativeWindow 的后端實現

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

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

3? [實現] Surface如何顯神通

重要的事情,提前說。孫悟空戰斗力爆表,是因為尋尋覓覓找到了那根金箍棒。Surface顯神通,他的利器,就是BufferQueue.

.? 因為有了BufferQueue, 以及內嵌其中的GraphicBufferProducer, GraphicBufferConsumer,? 實現了跨進程,以及自動的消息通知機制?

? ? ? ? -----? 比如Opengl 對應的swapBuffer, 內部對應IGraphicBufferProduder的,dequeueBuffer,enqueueBuffer.

? ? ? ? ? ? ? ? 進而觸發,Consumer那一端的onFrameAvailable.

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


GraphicBuffer Bn端?
GraphicBuffer Bp端

【待續----】

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容