当前位置:   article > 正文

鸿蒙子系统解读-Camera子系统篇_鸿蒙 action_update_camera_status

鸿蒙 action_update_camera_status

鸿蒙子系统解读-Camera子系统篇

本文作者:江苏润和软件股份有限公司 王高浩

一、简介
媒体子系统旨在为多媒体应用开发者提供统一的开发接口,使得开发者可以专注于应用业务的开发,轻松使用多媒体的资源。下图分别展现媒体子系统的框架及业务流程。

在这里插入图片描述

图 1 媒体子系统框架图

如图1,多媒体框架支持相机、录像和播放业务功能,这些功能支持鸿蒙JS应用开发及各种使用媒体能力的KIT模块开发,系统框架包括framework层,framework对外提供应用调用的native接口及其对应的业务实现,针对相机、录像及播放业务,framework实现了音视频输入输出,音视频编解码,视频文件的打包及解复用等功能。core service层,core service利用平台提供的能力去实现对底层硬件及相关驱动使用,另外core server实现文件管理,存储管理及日志管理。

在这里插入图片描述

图 2 多媒体业务流程图

如图2,多媒体包括camera,recorder和player,camera提供YUV、RGB、JPEG以及H264,H265数据到共享内存surface中,recorder模块将surface中h264/h265数据和音频aac数据打包成mp4文件,player模块把mp4文件解复用成音频和视频数据,分别送入对应编码器解码,然后进行播放。

目录结构

表1 轻量级多媒体子系统源代码目录结构

名称 描述
foundation/multimedia/frameworks 内部框架实现,包括audio,camera,player.recorder
foundation/multimedia/interfaces/kits 应用接口对外头文件
foundation/multimedia/services/media_lite 应用接口底层服务实现
foundation/multimedia/utils/lite 应用接口通用模块实现
foundation/multimedia/hals 硬件平台相关媒体适配接口头文件

使用
Native应用接口调用可以参考applications/sample/camera/media下demo实现。应用开发者使用多媒体接口实现录像、预览和播放音视频,使用可以参考《多媒体开发指南》。
本文解读媒体子系统里面的Camera子系统。

二、Camera子系统解读
1、Camera的各功能模块

模块(类)名称 功能
CameraAbility 摄像头的能力相关,主要是摄像头所产生的图像的分辨率和帧率
CameraConfigImpl 摄像头配置功能,主要是设置帧状态回调
CameraDevice 实现RecordAssistant、PreviewAssistant、CaptureAssistant、CameraDevice四个类。主要是将前三个类的对象与摄像头设备相关联:Record设置 vencHdls_、vencSurfaces_、vencAttr_这3个属性、设置产生码流后的回调、启动和停止编码器;Preview则没有这3个属性,也没有回调;Capture有2个属性,但是没有回调,以阻塞方式获取图片。CameraDevice类则是把CameraAbility里的参数传入设置摄像头,并初始化成员变量prcessorHdls_和prcessorAttrs_。并在运行之前把摄像头的输出状态设置为以下三者之一:Record、Preview、Capture,并根据输出状态设置对应的assistant。
CameraImpl 实现一个类CameraImpl,主要的功能把CameraDevice对象和CameraConfig对象、FrameConfig对象、EventHandler对象、CameraStateCallback对象关联在一起。并且用这些对象对CameraDevice进行设置和操纵,并用EventHandler对象发送一些回调消息。
CameraKit 全局唯一变量,是整个架构的入口,同时里面隐含了cameraManager_变量。
CameraManagerImpl 全局唯一变量,该变量维护了一个空闲摄像头池,整个摄像头架构都围绕着对这些摄像头的操作展开。
CameraService 全局唯一变量,该变量维护着摄像头的ability和device
CameraStateCallback 该类设置和维护用户要摄像头执行的业务功能,比如record、preview、capture。该类用回调函数响应消息的方式来执行。该类为纯虚类,需要开发者自己派生新类来实现自己的业务逻辑。

2、对Camera的例子程序的分析
applications\sample\camera\media\camera_sample.cpp是一个打开摄像头并且进行录像、预览、截图的例子,通过例子程序可以深入了解camera各模块的功能和大体流程。本文先对代码做尽可能的精简,再对剩余代码做简要的解释。

static int32_t SampleGetRecordFd()
{
   
	//创建一个后缀为mp4的文件并返回文件句柄,用于record。
}
static void SampleSaveCapture(const char *p, uint32_t size)
{
   
    //创建一个后缀为jpg的文件,作为capture文件,并把传入的内存p保存其中。
}
Recorder *SampleCreateRecorder()
{
   
//1、规定各种音视频编码参数
//2、Recorder *recorder = new Recorder();
    //3、用这些音视频参数设置Recorder
    //4、return recorder;
}
//处理capture的回调类
class 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/257665
推荐阅读
相关标签
  

闽ICP备14008679号