[文章]

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

2021-1-18 11:26:12  301 HarmonyOS HiSpark
分享
1
语言: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
以上这个就是错误信息的回调流程。就是出错了就直接执行的方法。这个方法不怎么常用,我也没有用过,就是了解一下。我就不误人子弟了。


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











相关文章

评论

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发文章