赞
踩
本文作者:江苏润和软件股份有限公司 郎建中
一、总体描述
在鸿蒙轻量设备侧图形子系统中包含了Surface模块。这个模块模仿了Android的Surface实现,采用了生产者和消费者模型,但是也有些区别。
Android中的Surface的生产者和消费者模型如下:
HarmonyOS中Camera recoder应用中Surface模型如下:(注意本文只针对Camera应用,在AbilityMain中,Surface使用将采用远程IPC模型)
二、代码目录结构
Surface实现的代码路径为:foundation/graphic/lite/frameworks/surface
目录结构:
buffer_client_producer.cpp:实现BufferClientProducer类,支持SurfaceImpl的另外一种实现,持有这个类,可以实现远程IPC调用到WMS。在AbilityMain进程中有使用,这里不讨论。
buffer_manager.cpp:实现了BufferManager类,通过Galloc Hal来对显存进行操作(分配、释放等)。
buffer_queue_consumer.cpp:实现了BufferQueueConsumer,消费者,从BufferQueue的dirty_list拿到含有数据的buffer,使用后将buffer归还为空闲buffer。
buffer_queue.cpp:实现了BufferQueue,消费者和生产者的中介,通过BufferManager分配预先设定的buffer数组。
buffer_queue_producer.cpp:实现了BufferQueueProducer,生产者,从BufferQueue中拿到空闲的Buffer。
surface_buffer_impl.cpp:实现了SurfaceBufferImpl类,是对Galloc Hal直接分配的buffer的封装。
surface.cpp:Surface基类,实现了Surface模块的初始化。
surface_impl.cpp:实现了SurfaceImpl类,是Surface的实现类。
类图如下:
说明:
1、SurfaceImpl:是 Surface的实现类,具体实现Surface的功能。持有 BufferQueueProducer和BufferQueueConsumer。App通过SurfaceImpl可以申请SurfaceBuffer内存(生产者),也可以作为消费者请求已经有内容的SurfaceBuffer内存。
2、BufferQueueProducer:生产者类。通过持有的BufferQueue对象操作内存。
3、BufferQueueConsumer:消费者类。通过持有的BufferQueue对象操作内存。
4、BufferQueue:是生产者和消费者的中介。通过BufferManager向底层申请和释放内存。
5、BufferManager:Galloc Hal的封装。
6、SurfaceBufferImpl:是SurfaceBuffer的实现,封装了申请的内存。
三、代码分析
我们通过Camera录像的例子程序来分析Surface的使用过程。
Camera录像的例子程序的代码路径为:applications/sample/camera/media/camera_sample.cpp。框架代码路径:录像实现的代码路径为ÿ
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。