• Home
Name Date Size #Lines LOC

..--

figures/12-May-2024-

hal/12-May-2024-53,30139,806

hal_c/12-May-2024-2,0611,338

interfaces/12-May-2024-8,9245,709

.gitignoreD12-May-202428 54

README_zh.mdD12-May-202420.3 KiB400366

bundle.jsonD12-May-20242.1 KiB7675

README_zh.md

1# Camera<a name="ZH-CN_TOPIC_0000001078436908"></a>
2
3-   [简介](#section11660541593)
4-   [目录](#section161941989596)
5-   [接口说明](#section1564411661810)
6-   [使用说明](#section19806524151819)
7-   [相关仓](#section1371113476307)
8
9## 简介<a name="section11660541593"></a>
10
11OHOS相机驱动框架模型对上实现相机HDI接口,对下实现相机Pipeline模型,管理相机各个硬件设备。
12各层的基本概念如下:
13
141.  HDI实现层,对上实现OHOS相机标准南向接口。
15
162.  框架层,对接HDI实现层的控制、流的转发,实现数据通路的搭建、管理相机各个硬件设备等功能。
17
183.  适配层,屏蔽底层芯片和OS差异,支持多平台适配。
19
20**图 1**  Camera驱动模块架构图<a name="fig14142101381112"></a>
21
22
23![](figures/logic-view-of-modules-related-to-this-repository_zh.png)
24
25
26## 目录<a name="section161941989596"></a>
27
28
29```
30/drivers/peripheral/input
31    ├── hal                         # camera模块的hal层代码
32    │   ├── adapter                 # camera hal平台适配层的实现
33    │   ├── buffer_manager          # camera hal统一的Buffer管理
34    │   ├── device_manager          # 提供camera hal层设备管理能力,包括设备枚举、设备能力查询等
35    │   ├── hdi_impl                # camera hal HDI的具体实现
36    │   ├── include                 # camera hal层内部的头文件
37    │   ├── init                    # camera hal层HDI接口使用样例实现
38    │   ├── pipeline_core           # camera hal层pipeline核心代码
39    │   ├── test                    # camera hal层测试代码实现
40    │   └── utils                   # camera hal层工具类代码,目前提供的是watchdog
41    ├── hal_c                       # 提供C实现的HAL接口
42    │   ├── hdi_cif                 # C实现的HDI接口适配代码
43    │   └── include                 # C形式的HDI接口
44    └── interfaces                  # camera hal对上层服务提供的驱动能力接口
45        ├── hdi_ipc                 # IPC模式的HDI实现
46        ├── hdi_passthrough         # 直通模式的HDI实现
47        └── include                 # camera hal对外提供的HDI定义
48
49
50```
51
52## 接口说明<a name="section1564411661810"></a>
53
54<table border=0 cellpadding=0 cellspacing=0 width=1119 style='border-collapse:
55 collapse;table-layout:fixed;width:839pt'>
56 <col width=119 style='mso-width-source:userset;mso-width-alt:3797;width:89pt'>
57 <col width=568 style='mso-width-source:userset;mso-width-alt:18176;width:426pt'>
58 <col width=363 style='mso-width-source:userset;mso-width-alt:11605;width:272pt'>
59 <col width=69 style='width:52pt'>
60 <tr height=19 style='height:14.0pt'>
61  <td height=19 width=119 style='height:14.0pt;width:89pt'>头文件</td>
62  <td width=568 style='width:426pt'><a name=p14132125715552>接口名称</a></td>
63  <td width=363 style='width:272pt'><a name=p18132205755516>功能描述</a>
64</td>
65 </tr>
66 <tr height=93 style='height:70.0pt'>
67  <td rowspan=10 height=728 class=xl66 style='height:546.0pt'>icamera_device.h</td>
68  <td class=xl65 width=568 style='width:426pt'>CamRetCode
69  IsStreamsSupported(<br>
70    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
71  </span>OperationMode mode,<br>
72    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
73  </span>const std::shared_ptr&lt;CameraMetadata&gt;&amp; modeSetting,<br>
74    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
75  </span>const std::vector&lt;std::shared_ptr&ltStreamInfo&gt;&gt &amp;info,<br>
76    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
77  </span>StreamSupportType &amp;type)</td>
78  <td>查询是否支持添加参数对应的流</td>
79 </tr>
80 <tr height=75 style='height:56.0pt'>
81  <td height=75 style='height:56.0pt'>CamRetCode CreateStreams(const
82  std::vector&lt;std::shared_ptr&lt;StreamInfo&gt;&gt; &amp;streamInfo<span
83  style='display:none'>s)</span></td>
84  <td class=xl65 width=363 style='width:272pt'>创建流<br>
85    <span style='mso-spacerun:yes'>&nbsp;</span>此函数接口依据输入的流信息创建流,调用该接口之前需先通过
86  {@link IsStreamsSupported} 查询HAL是否支持要创建的流</td>
87 </tr>
88 <tr height=19 style='height:14.0pt'>
89  <td height=19 style='height:14.0pt'>CamRetCode ReleaseStreams(const
90  std::vector&lt;int&gt; &amp;streamIds)</td>
91  <td>释放流</td>
92 </tr>
93 <tr height=37 style='height:28.0pt'>
94  <td height=37 class=xl65 width=568 style='height:28.0pt;width:426pt'>CamRetCode
95  CommitStreams(OperationMode mode,<br>
96    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
97  </span>const std::shared_ptr&lt;CameraMetadata&gt; &amp;modeSetting)</td>
98  <td class=xl65 width=363 style='width:272pt'>配置流<br>
99    本接口需在调用{@link CreateStreams}创建流之后调用</td>
100 </tr>
101 <tr height=37 style='height:28.0pt'>
102  <td height=37 class=xl65 width=568 style='height:28.0pt;width:426pt'>CamRetCode
103  GetStreamAttributes(<br>
104    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
105  </span>std::vector&lt;std::shared_ptr&lt;StreamAttribute&gt;&gt;
106  &amp;attributes)</td>
107  <td>获取流的属性</td>
108 </tr>
109 <tr height=168 style='height:126.0pt'>
110  <td height=168 class=xl65 width=568 style='height:126.0pt;width:426pt'>CamRetCode
111  AttachBufferQueue(int streamId, const OHOS::sptr&lt;OHOS::IBufferProducer&gt;
112  &amp;producer)</td>
113  <td class=xl65 width=363 style='width:272pt'>绑定生产者句柄和指定流<br>
114    <br>
115    如果在{@link CreateStreams}创建流时已经指定了生产者句柄,则不需要调用该接口。如果需要重新绑定,<br>
116    <span
117  style='mso-spacerun:yes'>&nbsp;</span>对于一些IOT设备,可能不需要或者不支持预览流的图像数据缓存流转,那么不需要绑定生产者句柄,<br>
118    此时在创建流时{@link CreateStreams} 的 {@link StreamInfo} 参数的生产者句柄bufferQueue_为空,而<br>
119    <span style='mso-spacerun:yes'>&nbsp;</span>tunneledMode_需设置为false。</td>
120 </tr>
121 <tr height=19 style='height:14.0pt'>
122  <td height=19 class=xl65 width=568 style='height:14.0pt;width:426pt'>CamRetCode
123  DetachBufferQueue(int streamId)</td>
124  <td>解除生产者句柄和指定流的绑定关系</td>
125 </tr>
126 <tr height=205 style='height:154.0pt'>
127  <td height=205 class=xl65 width=568 style='height:154.0pt;width:426pt'>CamRetCode
128  Capture(int captureId,<br>
129    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
130  </span>const std::shared_ptr&lt;CaptureInfo&gt; &amp;info,<span
131  style='mso-spacerun:yes'>&nbsp; </span>bool isStreaming)</td>
132  <td class=xl65 width=363 style='width:272pt'>捕获图像<br>
133    <span style='mso-spacerun:yes'>&nbsp;</span>本接口必须在调用 {@link CommitStreams}
134  配置流之后调用。<br>
135    <span
136  style='mso-spacerun:yes'>&nbsp;</span>图像捕获有两种模式,分别是连续捕获和单次捕获。连续捕获即触发之后模块内部进行连续的捕获,<br>
137    消费者可以连续收到图像数据,不需要多次调用本接口,若再次调用了本接口,<br>
138    <span
139  style='mso-spacerun:yes'>&nbsp;</span>则停止当前捕获,更新捕获信息,再进行一次新的捕获,多用于预览、录像或者连拍场景。<br>
140    <span style='mso-spacerun:yes'>&nbsp;</span>单次捕获即触发之后只捕获一帧图像数据,用于单次拍照场景</td>
141 </tr>
142 <tr height=19 style='height:14.0pt'>
143  <td height=19 class=xl65 width=568 style='height:14.0pt;width:426pt'>CamRetCode
144  CancelCapture(int captureId)</td>
145  <td>取消捕获</td>
146 </tr>
147 <tr height=56 style='height:42.0pt'>
148  <td height=56 class=xl65 width=568 style='height:42.0pt;width:426pt'>CamRetCode
149  ChangeToOfflineStream(const std::vector&lt;int&gt; &amp;streamIds,<br>
150    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
151  </span>OHOS::sptr&lt;IStreamOperatorCallback&gt; &amp;callback,<br>
152    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
153  </span>OHOS::sptr&lt;IOfflineStreamOperator&gt; &amp;offlineOperator)</td>
154  <td class=xl65 width=363 style='width:272pt'>将指定流转换成离线流</td>
155 </tr>
156 <tr height=19 style='height:14.0pt'>
157  <td rowspan=2 height=38 class=xl66 style='height:28.0pt'>icamera_device_callback.h</td>
158  <td class=xl65 width=568 style='width:426pt'>void OnError(ErrorType type,
159  int32_t errorCode)</td>
160  <td colspan=2 style='mso-ignore:colspan'>设备发生错误时调用,由调用者实现,用于返回错误信息给调用者</td>
161 </tr>
162 <tr height=19 style='height:14.0pt'>
163  <td height=19 class=xl65 width=568 style='height:14.0pt;width:426pt'>void
164  OnResult(uint64_t timestamp, const std::shared_ptr&lt;CameraMetadata&gt;
165  &amp;result)</td>
166  <td class=xl65 width=363 style='width:272pt'>上报camera设备相关的metadata的回调</td>
167 </tr>
168 <tr height=19 style='height:14.0pt'>
169  <td rowspan=5 height=150 class=xl66 style='height:112.0pt'>icamera_host.h</td>
170  <td class=xl65 width=568 style='width:426pt'>CamRetCode SetCallback(const
171  OHOS::sptr&lt;ICameraHostCallback&gt; &amp;callback)</td>
172  <td>设置ICameraHost回调接口</td>
173 </tr>
174 <tr height=19 style='height:14.0pt'>
175  <td height=19 style='height:14.0pt'>CamRetCode
176  GetCameraIds(std::vector&lt;std::string&gt; &amp;cameraIds)</td>
177  <td>获取当前可用的Camera设备ID列表</td>
178 </tr>
179 <tr height=37 style='height:28.0pt'>
180  <td height=37 class=xl65 width=568 style='height:28.0pt;width:426pt'>CamRetCode
181  GetCameraAbility(const std::string &amp;cameraId,<br>
182    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
183  </span>std::shared_ptr&lt;CameraAbility&gt; &amp;ability)</td>
184  <td>获取Camera设备能力集合</td>
185 </tr>
186 <tr height=56 style='height:42.0pt'>
187  <td height=56 class=xl65 width=568 style='height:42.0pt;width:426pt'>CamRetCode
188  OpenCamera(const std::string &amp;cameraId,<br>
189    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
190  </span>const OHOS::sptr&lt;ICameraDeviceCallback&gt; &amp;callback,<br>
191    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
192  </span>OHOS::sptr&lt;ICameraDevice&gt; &amp;device)</td>
193  <td>打开Camera设备</td>
194 </tr>
195 <tr height=19 style='height:14.0pt'>
196  <td height=19 class=xl65 width=568 style='height:14.0pt;width:426pt'>CamRetCode
197  SetFlashlight(const std::string &amp;cameraId, bool &amp;isEnable)</td>
198  <td>打开或关闭闪光灯</td>
199 </tr>
200 <tr height=19 style='height:14.0pt'>
201  <td rowspan=2 height=38 class=xl66 style='height:28.0pt'>icamera_host_callback.h</td>
202  <td class=xl65 width=568 style='width:426pt'>void OnCameraStatus(const
203  std::string &amp;cameraId, CameraStatus status)</td>
204  <td>Camera设备状态变化上报</td>
205 </tr>
206 <tr height=19 style='height:14.0pt'>
207  <td height=19 class=xl65 width=568 style='height:14.0pt;width:426pt'>void
208  OnFlashlightStatus(const std::string &amp;cameraId, FlashlightStatus status)</td>
209  <td>闪光灯状态变化回调</td>
210 </tr>
211 <tr height=19 style='height:14.0pt'>
212  <td rowspan=3 height=57 class=xl66 style='height:42.0pt'>ioffline_stream_operator.h</td>
213  <td class=xl65 width=568 style='width:426pt'><span
214  style='mso-spacerun:yes'>&nbsp;</span>CamRetCode CancelCapture(int captureId)</td>
215  <td>取消捕获请求</td>
216 </tr>
217 <tr height=19 style='height:14.0pt'>
218  <td height=19 class=xl65 width=568 style='height:14.0pt;width:426pt'>CamRetCode
219  ReleaseStreams(const std::vector&lt;int&gt; &amp;streamIds)</td>
220  <td>释放流</td>
221 </tr>
222 <tr height=19 style='height:14.0pt'>
223  <td height=19 class=xl65 width=568 style='height:14.0pt;width:426pt'>CamRetCode
224  Release()</td>
225  <td>释放所有离线流</td>
226 </tr>
227 <tr height=93 style='height:70.0pt'>
228  <td rowspan=10 height=783 class=xl66 style='height:588.0pt'>istream_operator.h</td>
229  <td class=xl65 width=568 style='width:426pt'>CamRetCode
230  IsStreamsSupported(<br>
231    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
232  </span>OperationMode mode,<br>
233    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
234  </span>const std::shared_ptr&lt;CameraMetadata&gt; &amp;modeSetting,<br>
235    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
236  </span>const std::vector&ltstd::shared_ptr&ltStreamInfo&gt&gt; &amp;info,<br>
237    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
238  </span>StreamSupportType &amp;type)</td>
239  <td>查询是否支持添加参数对应的流</td>
240 </tr>
241 <tr height=37 style='height:28.0pt'>
242  <td height=37 class=xl65 width=568 style='height:28.0pt;width:426pt'>CamRetCode
243  CreateStreams(const std::vector&lt;std::shared_ptr&lt;StreamInfo&gt;&gt;
244  &amp;streamInfos)</td>
245  <td>创建流</td>
246 </tr>
247 <tr height=19 style='height:14.0pt'>
248  <td height=19 class=xl65 width=568 style='height:14.0pt;width:426pt'>CamRetCode
249  ReleaseStreams(const std::vector&lt;int&gt; &amp;streamIds)</td>
250  <td>释放流</td>
251 </tr>
252 <tr height=37 style='height:28.0pt'>
253  <td height=37 class=xl65 width=568 style='height:28.0pt;width:426pt'>CamRetCode
254  CommitStreams(OperationMode mode,<br>
255    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
256  </span>const std::shared_ptr&lt;CameraMetadata&gt; &amp;modeSetting)</td>
257  <td class=xl65 width=363 style='width:272pt'><br>
258    配置流</td>
259 </tr>
260 <tr height=37 style='height:28.0pt'>
261  <td height=37 class=xl65 width=568 style='height:28.0pt;width:426pt'>CamRetCode
262  GetStreamAttributes(<br>
263    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
264  </span>std::vector&lt;std::shared_ptr&lt;StreamAttribute&gt;&gt;
265  &amp;attributes)</td>
266  <td>获取流的属性</td>
267 </tr>
268 <tr height=37 style='height:28.0pt'>
269  <td height=37 class=xl65 width=568 style='height:28.0pt;width:426pt'>CamRetCode
270  AttachBufferQueue(int streamId, const OHOS::sptr&lt;OHOS::IBufferProducer&gt;
271  &amp;producer)</td>
272  <td>绑定生产者句柄和指定流</td>
273 </tr>
274 <tr height=19 style='height:14.0pt'>
275  <td height=19 class=xl65 width=568 style='height:14.0pt;width:426pt'><span
276  style='mso-spacerun:yes'>&nbsp;</span>CamRetCode DetachBufferQueue(int
277  streamId)</td>
278  <td>解除生产者句柄和指定流的绑定关系</td>
279 </tr>
280 <tr height=429 style='height:322.0pt'>
281  <td height=429 class=xl65 width=568 style='height:322.0pt;width:426pt'>CamRetCode
282  Capture(int captureId,<br>
283    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
284  </span>const std::shared_ptr&lt;CaptureInfo&gt; &amp;info,<span
285  style='mso-spacerun:yes'>&nbsp; </span>bool isStreaming)</td>
286  <td class=xl65 width=363 style='width:272pt'>捕获图像<br>
287    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp; </span>*<br>
288    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp; </span>* 本接口必须在调用
289  {@link CommitStreams} 配置流之后调用。<br>
290    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp; </span>*
291  图像捕获有两种模式,分别是连续捕获和单次捕获。连续捕获即触发之后模块内部进行连续的捕获,<br>
292    	 * 消费者可以连续收到图像数据,不需要多次调用本接口,若再次调用了本接口,<br>
293    	 * 则停止当前捕获,更新捕获信息,再进行一次新的捕获,多用于预览、录像或者连拍场景。<br>
294    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp; </span>*
295  单次捕获即触发之后只捕获一帧图像数据,用于单次拍照场景。<br>
296    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp; </span>* 捕获启动时,会调用
297  {@link OnCaptureStarted}来通知调用者捕获已经启动。<br>
298    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp; </span>* 连续捕获需调用
299  {@link CancelCapture} 来停止捕获。<br>
300    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp; </span>* 捕获结束时,会调用
301  {@link OnCaptureEnded}来通知调用者捕获的帧计数等信息。<br>
302    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp; </span>* {@link
303  CaptureInfo} 的 enableShutterCallback_ 使能 {@link OnFrameShutter},使能后每次捕获触发
304  {@link OnFrameShutter}<br>
305    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp; </span>*
306  对于多个流同时捕获的场景,本模块内部保证同时上报多路流捕获数据。</td>
307 </tr>
308 <tr height=19 style='height:14.0pt'>
309  <td height=19 class=xl65 width=568 style='height:14.0pt;width:426pt'>CamRetCode
310  CancelCapture(int captureId)</td>
311  <td>取消捕获</td>
312 </tr>
313 <tr height=56 style='height:42.0pt'>
314  <td height=56 class=xl65 width=568 style='height:42.0pt;width:426pt'>CamRetCode
315  ChangeToOfflineStream(const std::vector&lt;int&gt; &amp;streamIds,<br>
316    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
317  </span>OHOS::sptr&lt;IStreamOperatorCallback&gt; &amp;callback,<br>
318    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
319  </span>OHOS::sptr&lt;IOfflineStreamOperator&gt; &amp;offlineOperator)</td>
320  <td>将指定流转换成离线流</td>
321 </tr>
322 <tr height=19 style='height:14.0pt'>
323  <td rowspan=4 height=130 class=xl66 style='height:98.0pt'>istream_operator_callback.h</td>
324  <td class=xl65 width=568 style='width:426pt'>void OnCaptureStarted(int32_t
325  captureId, const std::vector&lt;int32_t&gt; &amp;streamIds)</td>
326  <td>捕获开始回调,在捕获开始时调用</td>
327 </tr>
328 <tr height=37 style='height:28.0pt'>
329  <td height=37 class=xl65 width=568 style='height:28.0pt;width:426pt'>void
330  OnCaptureEnded(int32_t captureId,<br>
331    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
332  </span>const std::vector&lt;std::shared_ptr&lt;CaptureEndedInfo&gt;&gt;
333  &amp;infos)</td>
334  <td>捕获结束回调,在捕获结束时调用</td>
335 </tr>
336 <tr height=37 style='height:28.0pt'>
337  <td height=37 class=xl65 width=568 style='height:28.0pt;width:426pt'>void
338  OnCaptureError(int32_t captureId,<br>
339    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
340  </span>const std::vector&lt;std::shared_ptr&lt;CaptureErrorInfo&gt;&gt;
341  &amp;infos)</td>
342  <td>捕获错误回调,在捕获过程中发生错误时调用</td>
343 </tr>
344 <tr height=37 style='height:28.0pt'>
345  <td height=37 class=xl65 width=568 style='height:28.0pt;width:426pt'>void
346  OnFrameShutter(int32_t captureId,<br>
347    <span style='mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
348  </span>const std::vector&lt;int32_t&gt; &amp;streamIds, uint64_t timestamp)</td>
349  <td>帧捕获回调</td>
350</table>
351
352## 使用方法
353
354### 获取CameraHost
355
356    std::shared_ptr<Camera::CameraHost> cameraHost = Camera::CameraHost::CreateCameraHost();
357
358### 获取配置的cameraId
359
360    std::vector<std::string> cameraIds;
361cameraHost->GetCameraIds(cameraIds); #
362
363### 打开camera设备并获取到device
364
365    const std::shared_ptr<Camera::ICameraDeviceCallback> callback = std::make_shared<Camera::ICameraDeviceCallback>();
366
367    std::shared_ptr<Camera::CameraDevice> device;
368
369    std::cout << "cameraIds.front() = " << cameraIds.front() << std::endl;
370
371    Camera::CamRetCode rc = cameraHost->OpenCamera(cameraIds.front(), callback, device);
372
373
374### 调用device的GetStreamOperator函数获取streamOperator
375
376    std::make_shared<Camera::IStreamOperatorCallback>();
377    std::shared_ptr<Camera::StreamOperator> streamOperator = nullptr;
378    rc = device->GetStreamOperator(streamOperatorCallback, streamOperator);`
379### 批量创建数据流
380    std::vector<std::shared_ptr<Camera::StreamInfo>> streamInfos;
381    std::shared_ptr<Camera::StreamInfo> streamInfo = std::make_shared<Camera::StreamInfo>();
382    streamInfo->streamId_ = 1001;
383    streamInfo->width_ = 1280;
384    streamInfo->height_ = 720;
385    streamInfo->format_ = 2;
386    streamInfo->datasapce_ = 10;
387    streamInfo->intent_ = Camera::PREVIEW;
388    streamInfo->tunneledMode_ = 5;
389    streamInfos.push_back(streamInfo);
390    rc = streamOperator->CreateStreams(streamInfos);
391### 配流起流
392    rc = streamOperator->CommitStreams(Camera::NORMAL, nullptr);
393
394## 相关仓<a name="section1371113476307"></a>
395[驱动子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E9%A9%B1%E5%8A%A8%E5%AD%90%E7%B3%BB%E7%BB%9F.md)
396
397[vendor_hisilicon/tree/master/Hi3516DV300/hdf_config](https://gitee.com/openharmony/vendor_hisilicon/blob/master/README_zh.md)
398
399[drivers\_peripheral](https://gitee.com/openharmony/drivers_peripheral)
400