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 ,都會產生一次映射。
【待續----】