|
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 {}
}; |
|