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端

【待续----】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容