README_zh.md
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