1# 代码仓 2OHOS_STD/drivers_peripheral 3 4# 目录结构 5``` 6 . 7 ├── hal 8 │ ├── adapter 9 │ │ ├── chipset 10 │ │ │ ├── gni 11 │ │ │ ├── hispark_taurus 12 │ │ │ │ ├── include 13 │ │ │ │ │ ├── device_manager 14 │ │ │ │ │ └── driver_adapter 15 │ │ │ │ └── src 16 │ │ │ │ ├── device_manager 17 │ │ │ │ ├── driver_adapter 18 │ │ │ │ └── pipeline_core 19 │ │ │ │ ├── ipp_algo_example 20 │ │ │ │ └── nodes 21 │ │ │ │ ├── mpi_node 22 │ │ │ │ ├── venc_node 23 │ │ │ │ ├── vi_node 24 │ │ │ │ ├── vo_node 25 │ │ │ │ └── vpss_node 26 │ │ │ └── rpi3 27 │ │ │ ├── include 28 │ │ │ │ └── device_manager 29 │ │ │ └── src 30 │ │ │ ├── device_manager 31 │ │ │ └── driver_adapter 32 │ │ │ ├── main_test 33 │ │ │ └── test 34 │ │ │ └── unittest 35 │ │ │ └── include 36 │ │ └── platform 37 │ │ └── v4l2 38 │ │ └── src 39 │ │ ├── driver_adapter 40 │ │ │ ├── include 41 │ │ │ └── src 42 │ │ └── pipeline_core 43 │ │ ├── ipp_algo_example 44 │ │ └── nodes 45 │ │ ├── uvc_node 46 │ │ └── v4l2_source_node 47 │ ├── buffer_manager 48 │ │ ├── include 49 │ │ ├── src 50 │ │ │ ├── gralloc_buffer_allocator 51 │ │ │ └── heap_buffer_allocator 52 │ │ └── test 53 │ │ └── unittest 54 │ ├── device_manager 55 │ │ ├── include 56 │ │ ├── src 57 │ │ └── test 58 │ │ └── unittest 59 │ │ ├── mpi 60 │ │ └── v4l2 61 │ ├── hdi_impl 62 │ │ ├── include 63 │ │ │ ├── camera_device 64 │ │ │ ├── camera_host 65 │ │ │ ├── offline_stream_operator 66 │ │ │ └── stream_operator 67 │ │ ├── src 68 │ │ │ ├── camera_device 69 │ │ │ ├── camera_host 70 │ │ │ ├── offline_stream_operator 71 │ │ │ └── stream_operator 72 │ │ └── test 73 │ │ └── unittest 74 │ ├── include 75 │ ├── init 76 │ ├── pipeline_core 77 │ │ ├── host_stream 78 │ │ │ ├── include 79 │ │ │ └── src 80 │ │ ├── include 81 │ │ ├── ipp 82 │ │ │ ├── include 83 │ │ │ └── src 84 │ │ ├── nodes 85 │ │ │ ├── include 86 │ │ │ └── src 87 │ │ │ ├── dummy_node 88 │ │ │ ├── fork_node 89 │ │ │ ├── merge_node 90 │ │ │ ├── node_base 91 │ │ │ ├── sensor_node 92 │ │ │ ├── sink_node 93 │ │ │ ├── source_node 94 │ │ │ └── transform_node 95 │ │ ├── pipeline_impl 96 │ │ │ ├── include 97 │ │ │ └── src 98 │ │ │ ├── builder 99 │ │ │ ├── dispatcher 100 │ │ │ ├── parser 101 │ │ │ └── strategy 102 │ │ │ └── config 103 │ │ ├── src 104 │ │ ├── test 105 │ │ │ └── unittest 106 │ │ └── utils 107 │ ├── test 108 │ │ ├── mpi 109 │ │ │ ├── include 110 │ │ │ └── src 111 │ │ └── v4l2 112 │ │ ├── include 113 │ │ └── src 114 │ └── utils 115 │ ├── event 116 │ └── watchdog 117 ├── hal_c 118 │ ├── hdi_cif 119 │ │ ├── include 120 │ │ └── src 121 │ └── include 122 └── interfaces 123 └── include 124 ├── callback 125 │ ├── device 126 │ ├── host 127 │ └── operator 128 ├── client 129 └── server 130 131``` 132 133# 接口说明 134 135## 接口数量:25 136 137### 包: 138 139 package ohos.hdi.camera.host@1.0; 140 141### 路径: 142 143 interfaces/include/icamera_host.h 144 145### 类: 146 147 CameraHost:提供设备个数查询、能力查询和打开设备等接口; 148 149### 函数: 150 151``` 152 153/** 154 * @brief 设置Host回调函数 155 * 156 * @param callback Host回调函数 157 * @return CamRetCode 158 */ 159CamRetCode SetCallback([in] ICameraHostCallback callback); 160 161/** 162 * @brief 获取当前可用的Camera设备列表 163 * 164 * @param ids 返回的当前可用的设备列表 165 */ 166CamRetCode GetCameraIds([out] String[] ids); 167 168/** 169 * @brief 获取Camera的能力集 170 * 171 * @param cameraId 要获取的Camera设备id 172 * @param ability Camera设备的能力集 173 * @return CamRetCode 174 * @see CameraAbility 175 */ 176CamRetCode GetCameraAbility([in] String cameraId, [out] CameraAbility ability); 177 178/** 179 * @brief 打开Camera设备 180 * 181 * @param cameraId 要打开的Camera设备id 182 * @param callback Camera设备的回调函数 183 * @param camera 返回的Camera设备接口 184 * @return CamRetCode 185 * @see ICameraDeviceCallback 186 * @see ICameraDevice 187 */ 188CamRetCode OpenCamera([in] String cameraId, [in] ICameraDeviceCallback callback, [out] ICameraDevice camera); 189 190/** 191 * @brief 打开或者关闭手电筒 192 * 193 * @param cameraId 手电筒与之关联的Camera设备id 194 * @param isEnable 闪光灯打开或者关闭 195 * @return CamRetCode 196 */ 197CamRetCode SetFlashlight[in] String cameraId, [out] boolean isEnable); 198 199``` 200 201 202### 包: 203 package ohos.hdi.camera.device@1.0; 204### 路径: 205 interfaces/include/icamera_device.h 206### 类: 207 CameraDevice: Camera设备控制接口; 208### 函数: 209 210 /** 211 * @brief 获取流控制器 212 * 213 * @param callback 流回调函数 214 * @param operator 返回的流控制器 215 * @return CamRetCode 216 */ 217 CamRetCode GetStreamOperator([in] IStreamOperatorCallback callback, [out] IStreamOperator operator); 218 219 /** 220 * @brief 更新设备控制参数 221 * 222 * @param setting Camera设置参数 223 * @return CamRetCode 224 */ 225 CamRetCode UpdateSettings(CameraSetting setting); 226 227 /** 228 * @brief 设置Result回调模式和回调函数 229 * 230 * @param mode Result的上报模式 231 * @param callback Result的上报callback函数 232 * @return CamRetCode 233 */ 234 CamRetCode SetResultMode([in] ResultCallbackMode mode); 235 236 /** 237 * @brief 获取使能的ResultMeta 238 * 239 * @param results 使能的ResultMeta数组 240 * @return CamRetCode 241 */ 242 CamRetCode GetEnabledResults([out] MetaType[] results); 243 244 /** 245 * @brief 使能具体的ResultMeta 246 * 247 * @param results 需要使能的ResultMeta数组 248 * @return CamRetCode 249 */ 250 CamRetCode EnableResult([in] MetaType[] results); 251 252 /** 253 * @brief 禁止具体的ResultMeta 254 * 255 * @param results 需要禁止的ResultMeta数组 256 * @return CamRetCode 257 */ 258 CamRetCode DisableResult(in] MetaType[] results); 259 260 /** 261 * @brief 关闭Camera设备 262 */ 263 void Close(); 264 265 266 267### 包: 268 package ohos.hdi.camera.stream@1.0; 269### 路径: 270 interfaces/include/istream_operator.h 271### 类: 272 SteamOperator: 提供设备个数查询、能力查询和打开设备等接口; 273### 函数: 274 275 276 /** 277 * @brief 查询模式和流的配置组合是否支持 278 * 279 * @param mode 要配置的模式 280 * @param modeSettings 模式对应的参数 281 * @param info 流的信息 282 * @param type 配置流支持的方式 283 * @return RetCode 284 */ 285 RetCode IsStreamsSupported([in] OperationMode mode, [in] CameraMetadata modeSetting, [in] StreamInfo[] info, [out] StreamSupportType type); 286 287 /** 288 * @brief 创建流 289 * 290 * @param streamInfo 需要创建的流信息列表 291 * @return RetCode 292 */ 293 RetCode CreateStreams([in] StreamInfo[] streamInfo); 294 295 /** 296 * @brief 释放流 297 * 298 * @param streamIds 需要释放的流Id列表 299 * @return RetCode 300 */ 301 RetCode ReleaseStreams([in] int[] streamIds); 302 303 /** 304 * @brief 使能相机流的配置,并配置工作模式 305 * 306 * @param mode 要配置的模式 307 * @param modeSetting 模式对应的参数 308 * @return RetCode 309 * @see OperationMode 310 */ 311 RetCode CommitStreams([in] OperationMode mode, [in] CameraMetadata modeSetting); 312 313 /** 314 * @brief 获取所有流特征 315 * 316 * @param streamId 需要获取额的流id 317 * @param attribute 流的属性 318 * @return RetCode 319 */ 320 RetCode GetStreamAttributes([out] StreamAttribute[] attributes); 321 322 /** 323 * @brief 关联BufferQueue 324 * 325 * @param streamId 需要关联的流id 326 * @param producer 要关联的BufferQueue对应的producer接口 327 * @return RetCode 328 */ 329 RetCode AttachBufferQueue([in] streamId, [in] IBufferClientProducer producer); 330 331 /** 332 * @brief 取消关联BufferQueue 333 * 334 * @param streamId 取消关联的流id 335 * @return RetCode 336 */ 337 RetCode DetachBufferQueue([in] int streamId); 338 339 /** 340 * @brief 捕获图像 341 * 342 * @param captureId 标志此次捕获请求的id 343 * @param info 捕获图像的参数信息,如果数组中的info存在多个,则表明是batch模式,连续捕获多帧 344 * @param isStreaming 是否连续捕获 345 * @see StreamAttribute 346 * @return RetCode 347 */ 348 RetCode Capture([in] int captureId, [in] CaptureInfo[] info, [in] bool isStreaming); 349 350 /** 351 * @brief 取消图像捕获 352 * 353 * @return RetCode 354 */ 355 RetCode CancelCapture([in] int captureId); 356 357 /** 358 * @brief 将普通流转换成离线流 359 * 360 * @param streams 需要转换的普通流Id列表 361 * @param callback 离线流的callback 362 * @param offlineOperator 离线流的控制器 363 * @return RetCode 364 */ 365 RetCode ChangeToOfflineStream([in] int[] streamIds, [in]IStreamOperatorCallback callback, [out]IOfflineStreamOperator offlineOperator);` 366 367### 包: 368 package ohos.hdi.camera.stream@1.0; 369### 路径: 370 interfaces/include/istream_operator.h 371### 类: 372 IOfflineStreamOperator: 离线流控制类; 373### 函数: 374 375 /** 376 * @brief 取消图像捕获 377 * 378 * @param captureId 取消捕获的captureId 379 * @return RetCode 380 */ 381 RetCode CancelCapture([in] int captureId); 382 383 /** 384 * @brief 释放离线流资源 385 * 386 * @param streamIds 释放的流id列表 387 * @return RetCode 388 */ 389 RetCode ReleaseStreams([in] int[] streamIds); 390 391 /** 392 * @brief 释放IOfflineStreamOperator句柄 393 * 394 * @return RetCode 395 */ 396 RetCode Release();` 397 398## 数据结构定义 399 400 interfaces/hdi/types.h 401 402## 使用方法 403 404 using namespace Camera; 405 406### 获取CameraHost 407 408 std::shared_ptr<Camera::CameraHost> cameraHost = Camera::CameraHost::CreateCameraHost(); 409 410### 获取配置的cameraId 411 412 std::vector<std::string> cameraIds; 413cameraHost->GetCameraIds(cameraIds); # 414 415### 打开camera设备并获取到device 416 417 const std::shared_ptr<Camera::ICameraDeviceCallback> callback = std::make_shared<Camera::ICameraDeviceCallback>(); 418 419 std::shared_ptr<Camera::CameraDevice> device; 420 421 std::cout << "cameraIds.front() = " << cameraIds.front() << std::endl; 422 423 Camera::CamRetCode rc = cameraHost->OpenCamera(cameraIds.front(), callback, device); 424 425 426### 调用device的GetStreamOperator函数获取streamOperator 427 428 std::make_shared<Camera::IStreamOperatorCallback>(); 429 std::shared_ptr<Camera::StreamOperator> streamOperator = nullptr; 430 rc = device->GetStreamOperator(streamOperatorCallback, streamOperator);` 431### 批量创建数据流 432 std::vector<std::shared_ptr<Camera::StreamInfo>> streamInfos; 433 std::shared_ptr<Camera::StreamInfo> streamInfo = std::make_shared<Camera::StreamInfo>(); 434 streamInfo->streamId_ = 1001; 435 streamInfo->width_ = 1280; 436 streamInfo->height_ = 720; 437 streamInfo->format_ = 2; 438 streamInfo->datasapce_ = 10; 439 streamInfo->intent_ = Camera::PREVIEW; 440 streamInfo->tunneledMode_ = 5; 441 streamInfos.push_back(streamInfo); 442 rc = streamOperator->CreateStreams(streamInfos); 443### 配流起流 444 rc = streamOperator->CommitStreams(Camera::NORMAL, nullptr); 445 446