皇冠官网

博彩数学网上博彩白菜网站大全_OpenHarmony-v3.0-LTS Camera相机驱动框架(L2)分解1_运行化

皇冠现金博彩数学网上博彩白菜网站大全

念念了解更多骨子,请打听:

51CTO和华为官方配合共建的鸿蒙技艺社区

https://harmonyos.51cto.com

菠菜推荐平台论坛

评释

博彩数学 分解源码基于 OpenHarmony-v3.0-LTS 版块,代码结构和部分源码与现时贵重的干线分支有分辨。 分解示例代码 drivers\peripheral\camera\hal\init\demo_main.cpp 1. 简介

HarmonyOS 相机驱动框架模子对上扫尾相机HDI接口,对下扫尾相机Pipeline模子,照应相机各个硬件确立。

各层的基本倡导如下:

HDI扫尾层,对上扫尾OHOS相机尺度南向接口。

框架层,对接HDI扫尾层的铁心、流的转发,扫余数据通路的搭建、照应相机各个硬件确立等功能。

适配层,屏蔽底层芯片和OS各别,复古多平台适配。

欧博国际 2. 框架图 OpenHarmony-v3.0-LTS Camera相机驱动框架(L2)分解1_运行化-鸿蒙HarmonyOS技艺社区 3. 代码结构
drivers\peripheral\camera ├── hal │   ├── adapter                //芯片和平台适配层  │   ├── buffer_manager         //buffer照应 │   ├── device_manager         //确立铁心接口界说 │   ├── hdi_impl               //HDI Implementation扫尾 │   │   ├── include │   │   ├── src │   │   │   ├── camera_device              //Device │   │   │   ├── camera_host                //Host │   │   │   ├── offline_stream_operator    //OffineStreamOperator │   │   │   └── stream_operator            //StreamOperator │   │   └── test │   ├── include │   ├── init                                //HiSpark 3516 demo 代码 │   ├── pipeline_core                        │   │   ├── host_stream │   │   │   ├── include │   │   │   └── src │   │   ├── include │   │   ├── ipp                            //ipp │   │   │   ├── include │   │   │   └── src │   │   ├── nodes                          //基础通用node │   │   │   ├── include │   │   │   └── src │   │   │       ├── dummy_node │   │   │       ├── fork_node │   │   │       ├── merge_node │   │   │       ├── node_base │   │   │       ├── sensor_node │   │   │       ├── sink_node │   │   │       ├── source_node │   │   │       └── transform_node │   │   ├── pipeline_impl                //pipeline构建扫尾 │   │   │   ├── include │   │   │   └── src │   │   │       ├── builder │   │   │       ├── dispatcher │   │   │       ├── parser │   │   │       └── strategy │   │   │           └── config │   │   ├── src                          //PipelineCore │   │   └── utils ├── hal_c                                //hal层 C扫尾接口 │   ├── hdi_cif │   │   ├── include │   │   └── src │   └── include └── interfaces                            //Camera Host框架HDI接口     └── include                                    ├── callback                      //框架波及的统统callback接口         │   ├── device         │   ├── host         │   └── operator         ├── client         └── server 
4. 源码分解

表层demo代码相对浅显,这里只贴出要害部分代码

int main(int argc, char** argv) {     RetCode rc = RC_OK;      auto mainDemo = std::make_shared<Hos3516Demo>();     rc = mainDemo->InitSensors();     if (rc == RC_ERROR) {         CAMERA_LOGE("main test: mainDemo->InitSensors() error\n");         return -1;     }     rc = mainDemo->InitCameraDevice();     if (rc == RC_ERROR) {         CAMERA_LOGE("main test: mainDemo->InitCameraDevice() error\n");         return -1;     }      ......      return RC_OK; } 
4.1 Hos3516Demo::InitSensors()

4.1.1 表层代码

表层获得HDI层的ICameraHost:确立照应接口,并成立Host层的回调。

constexpr const char *DEMO_SERVICE_NAME = "camera_service";  RetCode Hos3516Demo::InitSensors() {     int rc = 0;      CAMERA_LOGD("demo test: InitSensors enter");      if (demoCameraHost_ != nullptr) {         return RC_OK;     }      demoCameraHost_ = ICameraHost::Get(DEMO_SERVICE_NAME);     if (demoCameraHost_ == nullptr) {         CAMERA_LOGE("demo test: ICameraHost::Get error");         return RC_ERROR;     }      hostCallback_ = new CameraHostCallback();     rc = demoCameraHost_->SetCallback(hostCallback_);     if (rc != Camera::NO_ERROR) {         CAMERA_LOGE("demo test: demoCameraHost_->SetCallback(hostCallback_) error");         return RC_ERROR;     }      CAMERA_LOGD("demo test: InitSensors exit");      return RC_OK; } 

4.1.2 时序图

OpenHarmony-v3.0-LTS Camera相机驱动框架(L2)分解1_运行化-鸿蒙HarmonyOS技艺社区

CameraHostProxy 提供表层调用的代理接口。

皇冠客服飞机:@seo3687

CameraHostStub 提供对应代理接口的HDI层的 ‘桩’。

CameraHostImpl 是接口层的具体扫尾。

Proxy-Stub 认真高下接口参数的数据诊治等职责。

4.1.3 ICameraHost::Get(const char *serviceName)

ck娱乐传媒

从ServiceManager中取出CameraHostProxy。并复返ICameraHost接口类指针

王某因一起民间借贷纠纷案件成为被执行人,但他一直未到法院进行处理。6月14日早晨,皇冠管理端江宁法院执行法官接到线索,立即出发将王某拘传至法院。

//drivers\peripheral\camera\interfaces\include\client\camera_host_proxy.cpp sptr<ICameraHost> ICameraHost::Get(const char *serviceName) {     do {         using namespace OHOS::HDI::ServiceManager::V1_0;         auto servMgr = IServiceManager::Get();         if (servMgr == nullptr) {             HDF_LOGE("%s: IServiceManager failed!", __func__);             break;         }          auto remote = servMgr->GetService(serviceName);         if (remote != nullptr) {             sptr<CameraHostProxy> hostSptr = iface_cast<CameraHostProxy>(remote);             return hostSptr;         }         HDF_LOGE("%s: GetService failed! serviceName = %s", __func__, serviceName);     } while(false);      HDF_LOGE("%s: get %s failed!", __func__, serviceName);     return nullptr; } 

4.1.4 CameraHostProxy::SetCallback(const OHOS::sptr &callback)

ICameraHostCallback 回调接口类界说了底下两个回调接口,在CameraHostCallback类中具体扫尾并通过IPC通信最终成立到CameraHostImpl

virtual void OnCameraStatus(const std::string &cameraId, CameraStatus status) = 0; virtual void OnFlashlightStatus(const std::string &cameraId, FlashlightStatus status) = 0; 

 client::host_proxy发起IPC —> server::host_service_stub

介意 这里有个坑! 经常 SendRequest() 和 OnRemoteRequest() 是一双。sendRequest()在client::XXX_proxy调用,OnRemoteRequest() 在server::XXX_stub调用。然则CamereaHost 的OnRemoteRequest是由 HDF中的 HdfCameraService来承袭 通过Dispatch接口再调工具体的CameraHostStub!!

皇冠hg86a

这里的proxy和stub 的cmdID 宏界说名字不相同,不太利于代码阅读。

最近,皇冠博彩平台邀请多位知名体育明星代言,包括詹姆斯、梅西,平台注入新活力激情。提供博彩攻略技巧分享,您博彩游戏中尽情享受乐趣收益。平台安全稳定,操作简便,充值提款方便快捷,您最佳博彩选择。欧博官网
//drivers\peripheral\camera\interfaces\include\client\camera_host_proxy.cpp CamRetCode CameraHostProxy::SetCallback(const OHOS::sptr<ICameraHostCallback> &callback) {     ......      int32_t ret = Remote()->SendRequest(CMD_CAMERA_HOST_REMOTE_SET_CALLBACK, data, reply, option);      ......      return static_cast<CamRetCode>(reply.ReadInt32()); } 
//drivers\peripheral\camera\interfaces\include\server\camera_host_service_stub.cpp int32_t CameraHostStub::CameraHostStubSetCallback(     MessageParcel &data, MessageParcel &reply, MessageOption &option) {     bool flag = data.ReadBool();     sptr<ICameraHostCallback> hostCallback = nullptr;     if (flag) {         sptr<IRemoteObject> remoteObj = data.ReadRemoteObject();         hostCallback = OHOS::iface_cast<ICameraHostCallback>(remoteObj);     }     CamRetCode ret = cameraHost_->SetCallback(hostCallback);     if (!reply.WriteInt32(static_cast<int32_t>(ret))) {         HDF_LOGE("%s: write retcode failed", __func__);         return HDF_FAILURE;     }      return HDF_SUCCESS; } 

 最终调用到HDI 接口层的camera_host 完成callback的成立。

网上博彩白菜网站大全www.zawce.com
//drivers\peripheral\camera\hal\hdi_impl\src\camera_host\camera_host_impl.cpp /**  * @brief 成立Host回调函数  *  * @param callback Host回调函数  * @return CamRetCode  */ CamRetCode CameraHostImpl::SetCallback(const OHOS::sptr<ICameraHostCallback> &callback) {     DFX_LOCAL_HITRACE_BEGIN;      if (callback == nullptr) {         CAMERA_LOGW("host callback is null.");         return INVALID_ARGUMENT;     }      cameraHostCallback_ = callback;      DFX_LOCAL_HITRACE_END;     return NO_ERROR; } 
4.2 Hos3516Demo::InitCameraDevice()

4.2.1 表层代码

获得CameraIds 、获得默许前置的录像头确立的ability、创建CameraDeviceCallbak 并OpenCamera皇冠app安卓下载安装

澳门银河赌场
RetCode Hos3516Demo::InitCameraDevice() {     int rc = 0;      CAMERA_LOGD("demo test: InitCameraDevice enter");      if (demoCameraHost_ == nullptr) {         CAMERA_LOGE("demo test: InitCameraDevice demoCameraHost_ == nullptr");         return RC_ERROR;     }      (void)demoCameraHost_->GetCameraIds(cameraIds_);     if (cameraIds_.empty()) {         return RC_ERROR;     }     const std::string cameraId = cameraIds_.front();     demoCameraHost_->GetCameraAbility(cameraId, ability_);      sptr<CameraDeviceCallback> callback = new CameraDeviceCallback();     rc = demoCameraHost_->OpenCamera(cameraIds_.front(), callback, demoCameraDevice_);     if (rc != Camera::NO_ERROR 


上一篇:博彩封号欧洲杯赛成_山东将迎大领域降雨降温    下一篇:没有了