当前位置:   article > 正文

鸿蒙轻量设备侧Camera应用中的Surface使用_camerabuffermanager::getinstance()

camerabuffermanager::getinstance()

鸿蒙轻量设备侧Camera应用中的Surface使用

本文作者:江苏润和软件股份有限公司 郎建中

一、总体描述
在鸿蒙轻量设备侧图形子系统中包含了Surface模块。这个模块模仿了Android的Surface实现,采用了生产者和消费者模型,但是也有些区别。
Android中的Surface的生产者和消费者模型如下:
在这里插入图片描述

(上图引用自:https://blog.csdn.net/armwind/article/details/73436532)

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。框架代码路径:录像实现的代码路径为ÿ

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/262837
推荐阅读
相关标签
  

闽ICP备14008679号