电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1870|回复: 0
收起左侧

HarmonyOS HiSpark IPC DIY Camera 摄像头API详解与详细分析 第一期(CameraKit类)

[复制链接]

2607

主题

2607

帖子

7472

积分

高级会员

Rank: 5Rank: 5

积分
7472
发表于 2021-1-18 11:55:57 | 显示全部楼层 |阅读模式
HarmonyOS HiSpark IPC DIY Camera 摄像头API详解与详细分析 第一期(CameraKit类), 语言:C++(世界上最难学的语言)

看这篇文档的时候,要有一定的C++基础才行,要不应该有些东西看不懂(入门即可)。

我准备把所有的API都进行分析,分析的同时会在某期中进行代码上传,你们可以进行下载。如果哪一期有代码可以下载,我会在title中进行标注。



CameraKit类   接口说明
CameraKit
int32_t GetCameraIds(std::list<string> cameraList)
获取cameraId列表
CameraKit
CameraAbility& GetCameraAbility(string cameraId)
获取指定camera的能力
CameraKit
void RegisterCameraDeviceCallback(CameraDeviceCallback* callback, EventHandler* handler)
注册camera设备状态回调
CameraKit
void UnregisterCameraDeviceCallback(CameraDeviceCallback* callback)
去注册camera设备状态回调
CameraKit
void CreateCamera(string cameraId, CameraStateCallback* callback, EventHandler* handler)
创建camera实例
此类为摄像头的基础类(最基础的)应用方面都靠他。在创建应用的时候都要对他进行实例化。



1. GetCameraIds  和  GetCameraAbility

咱们先来了解一下  GetCameraIds 方法,这个方法是用来获取相机的信息列表的。例如你的开发板上有两个相机会获取到一个列表,列表中会有两个Item。以下中的例子就用2个摄像头进行举例。

CameraKit *camKit = CameraKit::GetInstance();   //对camerakit进行实例,返回一个地址

list<string> camList = camKit->GetCameraIds();  //调用类中的方法,这时list<string>就会出现两个摄像头,角标[0],[1]

可以直接获取第一个摄像头camList[0],也可以直接获取第二个摄像头camList[1]

也可以直接利用for循环

for (auto &item : camList) {

      //item为摄像头的对象

     cout << item << endl;//直接输出摄像头的名字

     const CameraAbility *ability = camKit->GetCameraAbility(item);//获取此摄像头的能力,也就是这个摄像头的参数,像素的,可以照相的图片大小啊,就是相机的参数。

     //下面就要用到别的API了,所以先介绍这些,以上这些可以直接烧到硬件中,之后打印log,也就是cout打印出来,就可以看到一些信息了

}





2.RegisterCameraDeviceCallback  和  UnregisterCameraDeviceCallback

这两个方法就是注册摄像头与注销摄像头的回调函数。

这两个方法,我感觉是用到了Android Camera的架构。



回调流程.png (213.83 KB, 下载次数: 0)

下载附件  保存到相册  

半小时前 上传

以上这个就是错误信息的回调流程。就是出错了就直接执行的方法。这个方法不怎么常用,我也没有用过,就是了解一下。我就不误人子弟了。





3.CreateCamera

这个方法可以常用的,创建摄像头的实例。



EventHandler eventHdlr;   //创建一个事件

SampleCameraStateMng CamStateMng(eventHdlr); //实例化一个类,这个类就是创建示例的时候用到的

camKit->CreateCamera(camId, CamStateMng, eventHdlr);//创建示例

以上的示例就是实例,打错字了,也不想改了。

以下就是这个创建示例的类。实例化成功之后,就会直接调用下面的标红方法其中的一个。

class SampleCameraStateMng : public CameraStateCallback {

public:

     SampleCameraStateMng() = delete;

     SampleCameraStateMng(EventHandler &eventHdlr) : eventHdlr_(eventHdlr) {}

     ~SampleCameraStateMng()

     {

         if (recordFd_ != -1) {

             close(recordFd_);

         }

     }

     void OnCreated(Camera &c) override

     {

       //主要就是这个方法,创建成功的时候调用这个方法(等下次讲解)

         cout << “Sample recv OnCreate camera.“ << endl;

     }

     //主要就是这个方法,创建失败的时候调用这个方法 (等下次讲解)

     void OnCreateFaiLED(const std::string cameraId, int32_t errorCode) override {}

     //主要就是这个方法,释放的时候调用这个方法 (等下次讲解)

     void OnReleased(Camera &c) override {}

};
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表