博彩数学网上博彩白菜网站大全_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. 框架图
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 └── server4. 源码分解
表层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 时序图
CameraHostProxy 提供表层调用的代理接口。
皇冠客服飞机:@seo3687CameraHostStub 提供对应代理接口的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
上一篇:博彩封号欧洲杯赛成_山东将迎大领域降雨降温 下一篇:没有了

