• Home
Name Date Size #Lines LOC

..--

include/12-May-2024-4,7002,801

README_zh.mdD12-May-202448.9 KiB977852

README_zh.md

1# Camera驱动子系统HDI使用说明
2
3## 简介
4该仓下主要包含相机驱动框架模型 HDI(Hardware Driver Interface)接口定义及其实现,对上实现相机HDI接口,对下实现相机Pipeline模型,管理相机各个硬件设备,HDI接口主要提供如下功能:
5
6* ICameraHost:设备管理接口,camera_host服务注册到系统的入口;
7* ICameraDevice:设备控制接口,设备参数的下发回传及使能等管理;
8* IStreamOperator:流控制管理器,管理流与捕获动作的关系,控制buffer轮转线程;
9* IOfflineStreamOperator:离线流管理器,控制离线流buffer正常回传;
10
11图1 相关模块逻辑视图
12
13![](C:\Users\grj\Pictures\子系统架构图.png)
14
15
16
17## 目录
18该仓下源代码目录结构如下所示:
19drivers/peripheral/camera/interfaces
20
21    .
22    ├── include
23    │    ├── callback #框架涉及的所有callback接口目录
24    │    ├── device #ICameraDeviceCallback接口Remote实现
25    │    │   │   ├── camera_device_callback.cpp #device回调响应在此处实现或参考自定义
26    │    │   │   ├── camera_device_callback.h
27    │    │   │   ├── camera_device_callback_proxy.cpp    #client端实现,编译在hdi_impl中
28    │    │   │   ├── camera_device_callback_proxy.h
29    │    │   │   ├── camera_device_callback_stub.cpp #server端实现,编译在client/BUILD.gn30    │    │   │   └── camera_device_callback_stub.h
31    │    │   ├── host
32    │    │   │   ├── camera_host_callback.cpp #host回调响应在此处实现或参考自定义
33    │    │   │   ├── camera_host_callback.h
34    │    │   │   ├── camera_host_callback_proxy.cpp #client端实现,编译在hdi_impl中
35    │    │   │   ├── camera_host_callback_proxy.h
36    │    │   │   ├── camera_host_callback_stub.cpp #server端实现,编译在client/BUILD.gn37    │    │   │   └── camera_host_callback_stub.h
38    │    │   └── operator
39    │    │       ├── stream_operator_callback.cpp #StreamOperator回调响应在此处实现或参考自定义
40    │    │       ├── stream_operator_callback.h
41    │    │       ├── stream_operator_callback_proxy.cpp #client端实现,编译在hdi_impl中
42    │    │       ├── stream_operator_callback_proxy.h
43    │    │       ├── stream_operator_callback_stub.cpp #server端实现,编译在client/BUILD.gn44    │    │       └── stream_operator_callback_stub.h
45    │    ├── client
46    │    │   ├── BUILD.gn                          #编译为libcamera_client,作为远端调用库
47    │    │   ├── camera_device_proxy.cpp           #ICameraDevice接口远端client代理实现
48    │    │   ├── camera_device_proxy.h
49    │    │   ├── camera_host_proxy.cpp             #ICameraHost接口远端client代理实现
50    │    │   ├── camera_host_proxy.h
51    │    │   ├── offline_stream_operator_proxy.cpp #IOfflineStreamOperator接口远端client代理实现
52    │    │   ├── offline_stream_operator_proxy.h
53    │    │   ├── stream_operator_proxy.cpp  #IStreamOperator接口远端client代理实现
54    │    │   └── stream_operator_proxy.h
55    │    ├── icamera_device_callback.h      #IcameraDeviceCallback回调接口定义
56    │    ├── icamera_device.h               #ICameraDevice接口定义
57    │    ├── icamera_host_callback.h        #ICameraHostCallback回调接口定义
58    │    ├── icamera_host.h                 #ICameraHost接口定义
59    │    ├── ioffline_stream_operator.h     #IOfflineSteamOperator接口定义
60    │    ├── istream_operator_callback.h    #IStreamOperatorCallback回调接口定义
61    │    ├── istream_operator.h             #IStreamOperator接口定义
62    │    ├── server
63    │    │   ├── camera_device_service_stub.cpp  #ICameraDevice服务端序列化实现
64    │    │   ├── camera_device_service_stub.h
65    │    │   ├── camera_host_driver.cpp          #camera_host服务注册到IServiceManager
66    │    │   ├── camera_host_service_stub.cpp    #ICameraHost服务端序列化实现
67    │    │   ├── camera_host_service_stub.h
68    │    │   ├── offline_stream_operator_service_stub.cpp    #IOfflineStreamOperator离线流服务端序列化实现
69    │    │   ├── offline_stream_operator_service_stub.h
70    │    │   ├── stream_operator_service_stub.cpp       #IStreamOperator服务端序列化实现
71    │    │   └── stream_operator_service_stub.h
72    │    ├── types.h #整个框架对外类型定义
73    │    └── utils_data_stub.h #camera_metadata & StreamInfo序列化实现
74    └── README_zh.md
75
76
77
78## 说明
79### 接口说明
80相机驱动提供给上层层可直接调用的能力接口,提供的部分接口说明如表1 HDI接口列表所示:
81
82表 1 HDI接口列表
83
84<a name="table1513255710559"></a>
85<table><thead align="left"><tr id="row171321857155517"><th class="cellrowborder" align="center" valign="top" width="12.121212121212123%" id="mcps1.2.4.1.1"><p id="p6132957115511"><a name="p6132957115511"></a><a name="p6132957115511"></a>
86头文件
87</p>
88</th>
89<th class="cellrowborder" align="center" valign="top" width="64.95649564956496%" id="mcps1.2.4.1.2"><p id="p14132125715552"><a name="p14132125715552"></a><a name="p14132125715552"></a>
90接口名称
91</p>
92</th>
93<th class="cellrowborder" align="center" valign="top" width="22.922292229222922%" id="mcps1.2.4.1.3"><p id="p18132205755516"><a name="p18132205755516"></a><a name="p18132205755516"></a>
94功能描述
95</p>
96
97</th>
98</tr>
99</thead>
100<tbody><tr id="row13132357165514"><td class="cellrowborder" rowspan="5" valign="top" width="12.121212121212123%" headers="mcps1.2.4.1.1 "><p id="p829618389386"><a name="p829618389386"></a><a name="p829618389386"></a></p>
101<p id="p35261387384"><a name="p35261387384"></a><a name="p35261387384"></a></p>
102<p id="p776383812388"><a name="p776383812388"></a><a name="p776383812388"></a></p>
103<p id="p11950123812382"><a name="p11950123812382"></a><a name="p11950123812382"></a></p>
104<p id="p13168103915381"><a name="p13168103915381"></a><a name="p13168103915381"></a></p>
105<p id="p825185015460"><a name="p825185015460"></a><a name="p825185015460"></a>icamera_host.h</p>
106<p id="p2133757135510"><a name="p2133757135510"></a><a name="p2133757135510"></a></p>
107<p id="p1476175815372"><a name="p1476175815372"></a><a name="p1476175815372"></a></p>
108</td>
109
110<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p1365411515117"><a name="p1365411515117"></a><a name="p1365411515117"></a>
111CamRetCode SetCallback(const OHOS::sptr&lt;ICameraHostCallback&gt &callback);
112</p>
113</td>
114
115<td class="cellrowborder" align="center" valign="top" width="22.922292229222922%" headers="mcps1.2.4.1.3 "><p id="p041814588404"><a name="p041814588404"></a><a name="p041814588404"></a>
116设置ICameraHostCallback回调接口
117</p>
118</td>
119
120</tr>
121<tr id="row9132135715515"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1398804043612"><a name="p1398804043612"></a><a name="p1398804043612"></a>
122CamRetCode GetCameraIds(std::vector&lt;std::string> &cameraIds);
123</p>
124
125</td>
126<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p1341845816404"><a name="p1341845816404"></a><a name="p1341845816404"></a>
127获取当前可用的Camera设备列表,数据来源于camera_host_config.hcs配置文件,由开发者配置
128</p>
129</td>
130
131</tr>
132<tr id="row171330575555"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1974125024812"><a name="p1974125024812"></a><a name="p1974125024812"></a>
133CamRetCode GetCameraAbility(const std::string &cameraId,<br>
134    std::shared_ptr&lt;CameraAbility> &ability);<br>
135</p>
136</td>
137<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p1041815816403"><a name="p1041815816403"></a><a name="p1041815816403"></a>
138获取相应camera的能力集,CameraAbility定义为CameraMetadata
139</p>
140</td>
141
142</tr>
143<tr id="row576145883720"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p8761658183714"><a name="p8761658183714"></a><a name="p8761658183714"></a>
144CamRetCode OpenCamera(const std::string &cameraId,<br>
145        const OHOS::sptr&lt;ICameraDeviceCallback> &callback,<br>
146        OHOS::sptr&lt;ICameraDevice> &pDevice);
147</p>
148</td>
149<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p15418165812409"><a name="p15418165812409"></a><a name="p15418165812409"></a>
150camera设备上电,cameraId由GetCameraIds接口获取,返回相应的CameraDevice指针
151</p>
152</td>
153
154</tr>
155<tr id="row1957862120383"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p55781217381"><a name="p55781217381"></a><a name="p55781217381"></a>
156CamRetCode SetFlashlight(const std::string &cameraId, bool &isEnable);
157</p>
158</td>
159<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p1641875834010"><a name="p1641875834010"></a><a name="p1641875834010"></a>
160打开或关闭手电筒,isEnable = true打开手电筒;isEnable = false关闭手电筒
161</p>
162</td>
163
164</tr>
165<tr id="row1513316577554"><td class="cellrowborder" rowspan="7" valign="top" width="12.121212121212123%" headers="mcps1.2.4.1.1 "><p id="p14171441118"><a name="p14171441118"></a><a name="p14171441118"></a></p>
166<p id="p154814318410"><a name="p154814318410"></a><a name="p154814318410"></a></p>
167<p id="p3481154311418"><a name="p3481154311418"></a><a name="p3481154311418"></a></p>
168<p id="p57063567463"><a name="p57063567463"></a><a name="p57063567463"></a>icamera_device.h</p>
169<p id="p7909447418"><a name="p7909447418"></a><a name="p7909447418"></a></p>
170</td>
171<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p228510326414"><a name="p228510326414"></a><a name="p228510326414"></a>
172CamRetCode GetStreamOperator(<br>
173const OHOS::sptr&lt;IStreamOperatorCallback> &callback,<br>
174        OHOS::sptr&lt;IStreamOperator> &streamOperator);
175</p>
176</td>
177<td class="cellrowborder" align="center" valign="top" width="22.922292229222922%" headers="mcps1.2.4.1.3 "><p id="p17421321134612"><a name="p17421321134612"></a><a name="p17421321134612"></a>
178获取流控制器,同步设置流控制回调接口给服务
179</p>
180</td>
181</tr>
182<tr id="row171331657185514"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p12841932114117"><a name="p12841932114117"></a><a name="p12841932114117"></a>
183CamRetCode UpdateSettings(const std::shared_ptr&lt;CameraSetting> &settings);
184</p>
185</td>
186<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p1874202174615"><a name="p1874202174615"></a><a name="p1874202174615"></a>
187设置设备控制参数,CameraSetting定义为CameraMetadata
188</p>
189</td>
190</tr>
191<tr id="row41331557165518"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p92831132184119"><a name="p92831132184119"></a><a name="p92831132184119"></a>
192CamRetCode SetResultMode(const ResultCallbackMode &mode);
193</p>
194</td>
195<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p474262184610"><a name="p474262184610"></a><a name="p474262184610"></a>
196设置Result回调模式和回调函数,详细参照types.h文件注释
197</p>
198</td>
199</tr>
200<tr id="row77021769584"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p8283123284110"><a name="p8283123284110"></a><a name="p8283123284110"></a>
201CamRetCode GetEnabledResults(std::vector&lt;MetaType> &results);
202</p>
203</td>
204<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p107422021204615"><a name="p107422021204615"></a><a name="p107422021204615"></a>
205获取sensor使能上报项,即,camera_metadata的tags
206</p>
207</td>
208</tr>
209<tr id="row71857914585"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p4282032114118"><a name="p4282032114118"></a><a name="p4282032114118"></a>
210CamRetCode EnableResult(const std::vector&lt;MetaType> &results);
211</p>
212</td>
213<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p374210219468"><a name="p374210219468"></a><a name="p374210219468"></a>
214使能具体的tags上报
215</p>
216</td>
217</tr>
218<tr id="row884115357415"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p68421035114115"><a name="p68421035114115"></a><a name="p68421035114115"></a>
219CamRetCode DisableResult(const std::vector&lt;MetaType&gt;  &results);
220</p>
221</td>
222<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1674212113467"><a name="p1674212113467"></a><a name="p1674212113467"></a>
223禁止具体的tags上报
224</p>
225</td>
226</tr>
227<tr id="row18831119115815"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p172641732134117"><a name="p172641732134117"></a><a name="p172641732134117"></a>
228void Close();
229</p>
230</td>
231<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p10742182114462"><a name="p10742182114462"></a><a name="p10742182114462"></a>
232关闭camera设备
233</p>
234</td>
235
236</tr>
237<tr id="row1452521025813"><td class="cellrowborder" rowspan="10" valign="top" width="12.121212121212123%" headers="mcps1.2.4.1.1 "><p id="p033128174618"><a name="p033128174618"></a><a name="p033128174618"></a></p>
238<p id="p4252162854616"><a name="p4252162854616"></a><a name="p4252162854616"></a></p>
239<p id="p10421192894615"><a name="p10421192894615"></a><a name="p10421192894615"></a></p>
240<p id="p12525910165811"><a name="p12525910165811"></a><a name="p12525910165811"></a>istream_operator.h</p>
241</td>
242<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
243CamRetCode IsStreamsSupported(<br>
244        OperationMode mode,<br>
245        const std::shared_ptr&lt;CameraStandard::CameraMetadata> &modeSetting,<br>
246        const std::shared_ptr&lt;StreamInfo> &pInfo,<br>
247        StreamSupportType &pType);
248</p>
249</td>
250<td class="cellrowborder" align="center" valign="top" width="22.922292229222922%" headers="mcps1.2.4.1.3 "><p id="p1675964994818"><a name="p1675964994818"></a><a name="p1675964994818"></a>
251查询模式和流的配置组合是否支持OperationMode操作模式,现阶段只支持普通模式<br>
252modeSetting定义为CameraMetadata,判断硬件是否支持对应的tag,pInfo携带需求流属性,判断硬件是否支持,pType出参返回支持方式.<br>
253详见types.h注释
254</p>
255</td>
256
257</tr>
258<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1249042564815"><a name="p1249042564815"></a><a name="p1249042564815"></a>
259CamRetCode CreateStreams(const std::vector&lt;std::shared_ptr&lt;StreamInfo>> &streamInfos);
260</p>
261</td>
262<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p17591149104819"><a name="p17591149104819"></a><a name="p17591149104819"></a>
263批量创建流,streamInfo指定流的各项参数
264</p>
265</td>
266
267</tr>
268<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1249042564815"><a name="p1249042564815"></a><a name="p1249042564815"></a>
269CamRetCode ReleaseStreams(const std::vector&lt;int> &streamIds);
270</p>
271</td>
272<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p17591149104819"><a name="p17591149104819"></a><a name="p17591149104819"></a>
273通过streamId批量释放流资源
274</p>
275</td>
276
277</tr>
278<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1249042564815"><a name="p1249042564815"></a><a name="p1249042564815"></a>
279CamRetCode CommitStreams(OperationMode mode,<br>
280        const std::shared_ptr&lt;CameraStandard::CameraMetadata> &modeSetting);
281</p>
282</td>
283<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p17591149104819"><a name="p17591149104819"></a><a name="p17591149104819"></a>
284使能相机流的配置,并配置工作模式
285</p>
286</td>
287
288</tr>
289<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1249042564815"><a name="p1249042564815"></a><a name="p1249042564815"></a>
290CamRetCode GetStreamAttributes(<br>
291        std::vector&lt;std::shared_ptr&lt;StreamAttribute>> &attributes);
292</p>
293</td>
294<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p17591149104819"><a name="p17591149104819"></a><a name="p17591149104819"></a>
295获取所有流属性
296</p>
297</td>
298
299</tr>
300<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1249042564815"><a name="p1249042564815"></a><a name="p1249042564815"></a>
301CamRetCode AttachBufferQueue(int streamId,<br>
302        const OHOS::sptr&lt;OHOS::IBufferProducer> &producer);</p>
303</td>
304<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p17591149104819"><a name="p17591149104819"></a><a name="p17591149104819"></a>
305绑定BufferQueue到streamId对应的流,通过BufferQueue上传图像数据
306</p>
307</td>
308
309</tr>
310<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1249042564815"><a name="p1249042564815"></a><a name="p1249042564815"></a>
311CamRetCode DetachBufferQueue(int streamId);
312</p>
313</td>
314<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p17591149104819"><a name="p17591149104819"></a><a name="p17591149104819"></a>
315解绑streamId对应流的BufferQueue
316</p>
317</td>
318
319
320
321</tr>
322<tr id="row1948179195"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p5783143154816"><a name="p5783143154816"></a><a name="p5783143154816"></a>
323CamRetCode Capture(int captureId,<br>
324        const std::shared_ptr&lt;CaptureInfo> &pInfo,  bool isStreaming);
325</p>
326</td>
327<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p1759749134818"><a name="p1759749134818"></a><a name="p1759749134818"></a>
328图像捕获,captureId 标志此次捕获请求的id,info 捕获图像的参数信息,如果数组中的info存在多个,
329则表明是batch模式,连续捕获多帧,isStreaming 是否连续捕获
330</p>
331</td>
332
333</tr>
334<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1249042564815"><a name="p1249042564815"></a><a name="p1249042564815"></a>
335CamRetCode CancelCapture(int captureId);
336</p>
337</td>
338<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p17591149104819"><a name="p17591149104819"></a><a name="p17591149104819"></a>
339取消图像捕获,针对连续捕获,单帧捕获框架自动结束
340</p>
341</td>
342</tr>
343<tr id="row1948179195"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p5783143154816"><a name="p5783143154816"></a><a name="p5783143154816"></a>
344CamRetCode ChangeToOfflineStream(const std::vector&lt;int> &streamIds,<br>
345        OHOS::sptr&lt;IStreamOperatorCallback> &callback,<br>
346        OHOS::sptr&lt;IOfflineStreamOperator> &offlineOperator);
347</p>
348</td>
349<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p1759749134818"><a name="p1759749134818"></a><a name="p1759749134818"></a>
350将普通流转换成离线流,截取pipeline一段作为离线流控制器,保证后续buffer顺利回传
351</p>
352</td>
353
354</tr>
355</tr>
356<tr id="row1452521025813"><td class="cellrowborder" rowspan="4" valign="top" width="12.121212121212123%" headers="mcps1.2.4.1.1 "><p id="p033128174618"><a name="p033128174618"></a><a name="p033128174618"></a></p>
357<p id="p4252162854616"><a name="p4252162854616"></a><a name="p4252162854616"></a></p>
358<p id="p10421192894615"><a name="p10421192894615"></a><a name="p10421192894615"></a></p>
359<p id="p12525910165811"><a name="p12525910165811"></a><a name="p12525910165811"></a>istream_operator_callback.h</p>
360</td>
361
362<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
363void OnCaptureStarted(int32_t captureId, const std::vector&lt;int32_t> &streamId);
364</p>
365</td>
366<td class="cellrowborder" align="center" valign="top" width="22.922292229222922%" headers="mcps1.2.4.1.3 "><p id="p1675964994818"><a name="p1675964994818"></a><a name="p1675964994818"></a>
367开始捕获图像状态回调
368</p>
369</td>
370
371</tr>
372<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1249042564815"><a name="p1249042564815"></a><a name="p1249042564815"></a>
373void OnCaptureEnded(int32_t captureId,<br>
374        const std::vector&lt;std::shared_ptr&lt;CaptureEndedInfo>> &info);
375</p>
376</td>
377<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p17591149104819"><a name="p17591149104819"></a><a name="p17591149104819"></a>
378结束捕获状态回调
379</p>
380</td>
381</tr>
382<tr id="row1948179195"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p5783143154816"><a name="p5783143154816"></a><a name="p5783143154816"></a>
383void OnCaptureError(int32_t captureId,<br>
384        const std::vector&lt;std::shared_ptr&lt;CaptureErrorInfo>> &info);
385</p>
386</td>
387<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p1759749134818"><a name="p1759749134818"></a><a name="p1759749134818"></a>
388捕获错误回调
389</p>
390</td>
391</tr>
392<tr id="row1331121813197"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p2728173711481"><a name="p2728173711481"></a><a name="p2728173711481"></a>
393void OnFrameShutter(int32_t captureId,<br>
394        const std::vector&lt;int32_t> &streamId, uint64_t timestamp);
395</p>
396</td>
397<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p107591749104810"><a name="p107591749104810"></a><a name="p107591749104810"></a>
398单帧捕获完成回调,与CaptureInfo中enableShutterCallback_配合使用
399</p>
400</td>
401</tr>
402</tr>
403<tr id="row1452521025813"><td class="cellrowborder" rowspan="3" valign="top" width="12.121212121212123%" headers="mcps1.2.4.1.1 "><p id="p033128174618"><a name="p033128174618"></a><a name="p033128174618"></a></p>
404<p id="p4252162854616"><a name="p4252162854616"></a><a name="p4252162854616"></a></p>
405<p id="p10421192894615"><a name="p10421192894615"></a><a name="p10421192894615"></a></p>
406<p id="p12525910165811"><a name="p12525910165811"></a><a name="p12525910165811"></a>ioffline_stream_operator.h</p>
407</td>
408<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
409CamRetCode CancelCapture(int captureId);
410</p>
411</td>
412<td class="cellrowborder" align="center" valign="top" width="22.922292229222922%" headers="mcps1.2.4.1.3 "><p id="p1675964994818"><a name="p1675964994818"></a><a name="p1675964994818"></a>
413取消离线流的连续捕获动作
414</p>
415</td>
416</tr>
417<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1249042564815"><a name="p1249042564815"></a><a name="p1249042564815"></a>
418CamRetCode ReleaseStreams(const std::vector&lt;int> &streamIds);
419</p>
420</td>
421<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p17591149104819"><a name="p17591149104819"></a><a name="p17591149104819"></a>
422释放streamId对应流资源
423</p>
424</td>
425</tr>
426<tr id="row1948179195"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p5783143154816"><a name="p5783143154816"></a><a name="p5783143154816"></a>
427CamRetCode Release();</p>
428</td>
429<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p1759749134818"><a name="p1759749134818"></a><a name="p1759749134818"></a>
430释放IOfflineStreamOperator句柄</p>
431</td>
432</tr>
433</tr>
434<tr id="row1452521025813"><td class="cellrowborder" rowspan="2" valign="top" width="12.121212121212123%" headers="mcps1.2.4.1.1 "><p id="p033128174618"><a name="p033128174618"></a><a name="p033128174618"></a></p>
435<p id="p4252162854616"><a name="p4252162854616"></a><a name="p4252162854616"></a></p>
436<p id="p10421192894615"><a name="p10421192894615"></a><a name="p10421192894615"></a></p>
437<p id="p12525910165811"><a name="p12525910165811"></a><a name="p12525910165811"></a>icamera_host_callback.h</p>
438</td>
439<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
440void OnCameraStatus(const std::string &cameraId, CameraStatus status);</p>
441</td>
442<td class="cellrowborder" align="center" valign="top" width="22.922292229222922%" headers="mcps1.2.4.1.3 "><p id="p1675964994818"><a name="p1675964994818"></a><a name="p1675964994818"></a>
443上报camera状态,针对UVC设备,状态定义详见types.h</p>
444</td>
445</tr>
446<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1249042564815"><a name="p1249042564815"></a><a name="p1249042564815"></a>
447void OnFlashlightStatus(const std::string &cameraId, FlashlightStatus status);</p>
448</td>
449<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p17591149104819"><a name="p17591149104819"></a><a name="p17591149104819"></a>
450上报手电筒状态</p>
451</td>
452
453</tr>
454</tr>
455<tr id="row1452521025813"><td class="cellrowborder" rowspan="2" valign="top" width="12.121212121212123%" headers="mcps1.2.4.1.1 "><p id="p033128174618"><a name="p033128174618"></a><a name="p033128174618"></a></p>
456<p id="p4252162854616"><a name="p4252162854616"></a><a name="p4252162854616"></a></p>
457<p id="p10421192894615"><a name="p10421192894615"></a><a name="p10421192894615"></a></p>
458<p id="p12525910165811"><a name="p12525910165811"></a><a name="p12525910165811"></a>icamera_device_callback.h</p>
459</td>
460<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
461void OnError(ErrorType type, int32_t errorMsg);</p>
462</td>
463<td class="cellrowborder" align="center" valign="top" width="22.922292229222922%" headers="mcps1.2.4.1.3 "><p id="p1675964994818"><a name="p1675964994818"></a><a name="p1675964994818"></a>
464Camera设备错误回调</p>
465</td>
466</tr>
467<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1249042564815"><a name="p1249042564815"></a><a name="p1249042564815"></a>
468void OnResult(uint64_t timestamp, const std::shared_ptr&lt;CameraStandard::CameraMetadata> &result);</p>
469</td>
470<td class="cellrowborder" align="center" valign="top" headers="mcps1.2.4.1.2 "><p id="p17591149104819"><a name="p17591149104819"></a><a name="p17591149104819"></a>
471Camera设备Meta回调</p>
472</td>
473
474
475</tbody>
476</table>
477
478
479### 使用说明
480
481该仓核心功能是提供相机驱动能力接口供上层系统服务调用,提供的驱动能力接口统一归属为HDI接口层。
482
483
484
485<a name="table1513255710559"></a>
486<table><thead align="left"><tr id="row171321857155517">
487
488</th>
489<th class="cellrowborder" align="center" valign="top" width="50%" id="mcps1.2.4.1.2"><p id="p14132125715552"><a name="p14132125715552"></a><a name="p14132125715552"></a>接口名称</p>
490</th>
491</th>
492<th class="cellrowborder" align="center" valign="top" width="50%" id="mcps1.2.4.1.2"><p id="p14132125715552"><a name="p14132125715552"></a><a name="p14132125715552"></a>使用说明</p>
493</th>
494
495</tr>
496</td>
497<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
498CamRetCode SetCallback(const OHOS::sptr&lt;ICameraHostCallback> &callback);
499</p>
500</td>
501
502
503</td>
504<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
505获取camera_host服务<br>
506constexpr const char *TEST_SERVICE_NAME = "camera_service";<br>
507sptr&lt;ICameraHost> cameraHost = ICameraHost::Get(TEST_SERVICE_NAME);<br>
508判断cameraHost服务指针对象不为空继续以下调用<br>
509OHOS::sptr&lt;CameraHostCallback> callback = new CameraHostCallback();<br>
510sampleObj->SetCallback(callback);<br>
511判断返回值</p>
512</td>
513
514</tr>
515</td>
516<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
517CamRetCode GetCameraIds(std::vector&lt;std::string> &cameraIds) ;
518</p>
519</td>
520
521
522</td>
523<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
524获取camera_host服务<br>
525判断cameraHost服务指针对象不为空<br>
526获取cameraIds<br>
527std::vector&lt;std::string> cameraIds;<br>
528sampleObj->GetCameraIds(cameraIds);<br>
529判断返回值<br>
530</p>
531</td>
532
533</tr>
534</td>
535<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
536CamRetCode GetCameraAbility(const std::string &cameraId,<br>
537        std::shared_ptr&lt;CameraAbility> &ability);
538</p>
539</td>
540
541
542</td>
543<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
544获取camera_host服务<br>
545判断cameraHost服务指针对象不为空<br>
546获取cameraIds<br>
547cameraId中选取一个获取其对应的属性<br>
548std::string cameraId = cameraIds.front();<br>
549sampleObj->GetCameraAbility(cameraId, ability);<br>
550判断返回值
551</p>
552</td>
553
554</tr>
555</td>
556<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
557CamRetCode OpenCamera(const std::string &cameraId,<br>
558        const OHOS::sptr&lt;ICameraDeviceCallback> &callback,<br>
559        OHOS::sptr&lt;ICameraDevice> &pDevice);<br>
560</p>
561</td>
562
563
564</td>
565<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
566获取camera_host服务<br>
567判断cameraHost服务指针对象不为空<br>
568打开cameraId对应设备<br>
569OHOS::sptr&lt;CameraDeviceCallback> deviceCallback = new CameraDeviceCallback();<br>
570OHOS::sptr&lt;ICameraDevice> cameraDevice = nullptr;<br>
571sampleObj->OpenCamera(cameraId, deviceCallback, cameraDevice);<br>
572判断返回值
573</p>
574</td>
575
576</tr>
577</td>
578<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
579CamRetCode SetFlashlight(const std::string &cameraId, bool &isEnable);
580</p>
581</td>
582
583
584</td>
585<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
586获取camera_host服务<br>
587判断cameraHost服务指针对象不为空<br>
588打开手电筒<br>
589bool isEnable = true;<br>
590sampleObj->SetFlashlight(cameraIds.front(), isEnable);<br>
591判断返回值
592</p>
593</td>
594
595</tr>
596</td>
597<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
598CamRetCode GetStreamOperator(<br>
599        const OHOS::sptr&lt;IStreamOperatorCallback> &callback,<br>
600        OHOS::sptr&lt;IStreamOperator> &streamOperator);<br>
601</p>
602</td>
603
604
605</td>
606<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
607获取camera_host服务,调用OpenCamera接口获取cameraDevice后做以下调用<br>
608OHOS::sptr&lt;StreamOperatorCallback> streamOperatorCallback = new StreamOperatorCallback();<br>
609OHOS::sptr&lt;IStreamOperator> streamOperator = nullptr;<br>
610cameraDevice->GetStreamOperator(streamOperatorCallback, streamOperator);<br>
611判断返回值,并判断streamOperator是否为空<br>
612</p>
613</td>
614
615</tr>
616</td>
617<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
618CamRetCode UpdateSettings(const std::shared_ptr&lt;CameraSetting> &settings);
619</p>
620</td>
621
622
623</td>
624<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
625获取camera_host服务,调用OpenCamera接口获取cameraDevice后做以下调用<br>
626std::shared_ptr&lt;CameraSetting> cameraSetting = new CameraSetting(entryCapacity, dataCapacity);<br>
627entryCapacity: 需要设置的tag数量,dataCapacity: 所有tag对应的数据项数量<br>
628cameraDevice-> UpdateSettings(cameraSetting);<br>
629判断返回值
630</p>
631</td>
632
633</tr>
634</td>
635<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
636CamRetCode SetResultMode(const ResultCallbackMode &mode);
637</p>
638</td>
639
640
641</td>
642<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
643获取camera_host服务,调用OpenCamera接口获取cameraDevice后做以下调用<br>
644ResultCallbackMode resultCallbackMode = ON_CHANGED;<br>
645cameraDevice->SetResultMode(resultCallbackMode);<br>
646判断返回值
647</p>
648</td>
649
650</tr>
651</td>
652<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
653CamRetCode GetEnabledResults(std::vector&lt;MetaType> &results);</p>
654</td>
655
656
657</td>
658<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
659获取camera_host服务,调用OpenCamera接口获取cameraDevice后做以下调用<br>
660std::vector&lt;MetaType> results;<br>
661cameraDevice->GetEnabledResults(results);<br>
662判断返回值
663</p>
664</td>
665
666</tr>
667</td>
668<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
669CamRetCode EnableResult(const std::vector&lt;MetaType> &results);
670</p>
671</td>
672
673
674</td>
675<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
676获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用GetEnabledResults接口获取支持的使能后,调用使能接口<br>
677std::vector&lt;MetaType> results;<br>
678cameraDevice->EnableResult(results);;<br>
679判断返回值
680</p>
681</td>
682
683</tr>
684</td>
685<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
686CamRetCode DisableResult(const std::vector&lt;MetaType> &results);
687</p>
688</td>
689
690
691</td>
692<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
693获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用GetEnabledResults接口获取支持的使能后,调用取消使能接口<br>
694std::vector&lt;MetaType> results;<br>
695cameraDevice->EnableResult(results);;<br>
696判断返回值
697</p>
698</td>
699
700</tr>
701</td>
702<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
703void Close();
704</p>
705</td>
706
707
708</td>
709<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
710获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用Close关闭当前设备
711</p>
712</td>
713
714</tr>
715</td>
716<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
717CamRetCode IsStreamsSupported(<br>
718        OperationMode mode,<br>
719        const std::shared_ptr&lt;CameraStandard::CameraMetadata> &modeSetting,<br>
720        const std::shared_ptr&lt;StreamInfo> &pInfo,<br>
721        StreamSupportType &pType);
722</p>
723</td>
724
725
726</td>
727<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
728获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象<br>
729判断流控制器对象streamOperator不为空<br>
730OperationMode operationMode = NORMAL;<br>
731StreamSupportType supportType;<br>
732std::shared_ptr&lt;StreamInfo> streamInfo = std::make_shared&lt;StreamInfo>();<br>
733streamInfo->streamId_ = 1001;<br>
734streamInfo->width_ = 720;<br>
735streamInfo->height_ = 480;<br>
736streamInfo->format_ = PIXEL_FMT_YCRCB_420_SP;<br>
737streamInfo->datasapce_ = 8;<br>
738streamInfo->intent_ = PREVIEW;<br>
739StreamConsumer previewConsumer;<br>
740streamInfo->bufferQueue_ = previewConsumer.CreateProducer(<br>
741    [](void* addr, uint32_t size) { }); // StreamConsumer参见UT,或详细了解BufferProducer的使用<br>
742streamInfo->tunneledMode_ = 5;<br>
743streamOperator->IsStreamsSupported(NORMAL, ability, streamInfo, supportType);<br>
744判断返回值
745</p>
746</td>
747
748</tr>
749</td>
750<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
751CamRetCode CreateStreams(const std::vector&lt;std::shared_ptr&lt;StreamInfo>> &streamInfos);
752</p>
753</td>
754
755
756</td>
757<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
758获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象<br>
759判断流控制器对象streamOperator不为空<br>
760按照IsStreamsSupported步骤的StreamInfo定义方式,创建一个或多个对象放入std::vector&lt;std::shared_ptr&lt;Camera::StreamInfo>> streamInfos;容器中做如下调用<br>
761streamOperator->CreateStreams(streamInfos);<br>
762判断返回值
763</p>
764</td>
765</tr>
766</td>
767<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
768CamRetCode ReleaseStreams(const std::vector&lt;int> &streamIds);
769</p>
770</td>
771
772
773</td>
774<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
775获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象<br>
776判断流控制器对象streamOperator不为空<br>
777std::vector&lt;int> streamIds; // 一个货多个需要释放掉的流id<br>
778streamOperator->ReleaseStreams(streamIds);<br>
779判断返回值<br>
780</p>
781</td>
782</tr>
783</td>
784<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
785CamRetCode CommitStreams(OperationMode mode,<br>
786        const std::shared_ptr&lt;CameraStandard::CameraMetadata> &modeSetting);</p>
787</td>
788
789
790</td>
791<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
792获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象<br>
793判断流控制器对象streamOperator不为空<br>
794与CreateStreams联合使用,先做CreateStreams调用
795std::shared_ptr&lt;CameraStandard::CameraMetadata> modeSetting = new CameraSetting(entryCapacity, dataCapacity);<br>
796streamOperator->CommitStreams(NORMAL, modeSetting);<br>
797判断返回值<br>
798</p>
799</td>
800
801</tr>
802</td>
803<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
804CamRetCode GetStreamAttributes(<br>
805        std::vector&lt;std::shared_ptr&lt;StreamAttribute>> &attributes);
806</p>
807</td>
808
809
810</td>
811<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
812获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象<br>
813判断流控制器对象streamOperator不为空<br>
814std::vector&lt;std::shared_ptr&lt;StreamAttribute>> attributes;<br>
815streamOperator->GetStreamAttributes(attributes);<br>
816判断返回值<br>
817</p>
818</td>
819
820</tr>
821</td>
822<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
823CamRetCode AttachBufferQueue(int streamId,<br>
824        const OHOS::sptr&lt;OHOS::IBufferProducer> &producer);<br>
825</p>
826</td>
827
828
829</td>
830<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
831获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象<br>
832判断流控制器对象streamOperator不为空<br>
833注意:如果CreateStreams时,streamInfo里面bufferQueue_不为空,则这个不用设置,否则视为替换<br>
834OHOS::sptr&lt;OHOS::IBufferProducer> producer; // 创建方式见CreateStreams<br>
835streamOperator->AttachBufferQueue(producer);<br>
836判断返回值<br>
837</p>
838</td>
839
840</tr>
841</td>
842<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
843CamRetCode DetachBufferQueue(int streamId);<br>
844</p>
845</td>
846
847
848</td>
849<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
850获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象<br>
851判断流控制器对象streamOperator不为空<br>
852注意:如果需要调用AttachBufferQueue,最好调用DetachBufferQueue先解绑<br>
853OHOS::sptr&lt;OHOS::IBufferProducer> producer; // 创建方式见CreateStreams<br>
854streamOperator->AttachBufferQueue( DetachBufferQueue);<br>
855判断返回值
856</p>
857</td>
858
859</tr>
860</td>
861<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
862CamRetCode Capture(int captureId,<br>
863        const std::shared_ptr&lt;CaptureInfo> &pInfo,  bool isStreaming);
864</p>
865</td>
866
867
868</td>
869<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
870获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象<br>
871判断流控制器对象streamOperator不为空<br>
872调用CreateStreams创建流,调用CommitStreams配置流<br>
873int captureId = 2001; // 调用端提供捕获动作的唯一标识<br>
874std::shared_ptr&lt;CaptureInfo> captureInfo = std::make_shared<:CaptureInfo>();<br>
875captureInfo->streamIds_ = {streamInfo->streamId_};<br>
876captureInfo->captureSetting_ = new CameraMetadata(entryCapacity, dataCapacity); // 需要做数据填充<br>
877captureInfo->enableShutterCallback_ = false;<br>
878streamOperator->Capture(captureId, captureInfo, true);<br>
879判断返回值
880</p>
881</td>
882
883</tr>
884</td>
885<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
886CamRetCode CancelCapture(int captureId);</p>
887</td>
888
889
890</td>
891<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
892获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象<br>
893判断流控制器对象streamOperator不为空<br>
894与Capture捕获动作配套使用,并且本次捕获为连续捕获,否则无需调用<br>
895int captureId = 2001; // 调用端提供捕获动作的唯一标识<br>
896streamOperator->CancelCapture(captureId, captureInfo, true);<br>
897</p>
898</td>
899
900</tr>
901</td>
902<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
903CamRetCode ChangeToOfflineStream(const std::vector&lt;int> &streamIds,<br>
904        OHOS::sptr&lt;IStreamOperatorCallback> &callback,<br>
905        OHOS::sptr&lt;IOfflineStreamOperator> &offlineOperator);<br></p>
906</td>
907
908
909</td>
910<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
911获取camera_host服务,调用OpenCamera接口获取cameraDevice,调用ICameraDevice的GetStreamOperator接口获取流控制器代理对象<br>
912判断流控制器对象streamOperator不为空<br>
913与Capture捕获动作配套使用,如果不希望捕获中断,则调用此接口使得未完成的buffer顺利回传<br>
914std::vector&lt;int> streamIds = {1001};<br>
915OHOS::sptr&lt;IStreamOperatorCallback> offlineStreamOperatorCallback = new StreamOperatorCallback();<br>
916OHOS::sptr&lt;IOfflineStreamOperator> offlineOperator;<br>
917streamOperator->ChangeToOfflineStream(streamIds, offlineStreamOperatorCallback, offlineOperator);<br>
918判断返回值
919</p>
920</td>
921
922</tr>
923</td>
924<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
925CamRetCode CancelCapture(int captureId);
926</p>
927</td>
928
929
930</td>
931<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
932调用完ChangeToOfflineStream后,会获取到离线流代理对象offlineStreamOperator<br>
933int captureId = 2001; // 调用端提供捕获动作的唯一标识,切换到离线流的捕获动作标识<br>
934offlineStreamOperator->CancelCapture(captureId);<br>
935</p>
936</td>
937
938</tr>
939</td>
940<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
941CamRetCode ReleaseStreams(const std::vector&lt;int> &streamIds);</p>
942</td>
943
944
945</td>
946<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
947调用完ChangeToOfflineStream后,会获取到离线流代理对象offlineStreamOperator<br>
948int captureId = 2001; // 调用端提供捕获动作的唯一标识,切换到离线流的捕获动作标识<br>
949std::vector&lt;int> streamIds = {captureId};<br>
950offlineStreamOperator->ReleaseStreams(streamIds);<br>
951释放离线流资源后判断返回值<br>
952</p>
953</td>
954
955</tr>
956</td>
957<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
958CamRetCode Release();
959</p>
960</td>
961
962
963</td>
964<td class="cellrowborder" valign="top" width="64.95649564956496%" headers="mcps1.2.4.1.2 "><p id="p16761419154811"><a name="p16761419154811"></a><a name="p16761419154811"></a>
965调用完ChangeToOfflineStream后,会获取到离线流代理对象offlineStreamOperator<br>
966offlineStreamOperator->Release();<br>
967释放IOfflineStreamOperator控制的流资源,并且释放IOfflineStreamOprator句柄<br>
968</p>
969</td>
970
971
972</tbody>
973</table>
974
975
976
977