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 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.gn中 30 │ │ │ └── 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.gn中 37 │ │ │ └── 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.gn中 44 │ │ └── 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<ICameraHostCallback> &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<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<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<ICameraDeviceCallback> &callback,<br> 146 OHOS::sptr<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<IStreamOperatorCallback> &callback,<br> 174 OHOS::sptr<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<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<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<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<MetaType> &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<CameraStandard::CameraMetadata> &modeSetting,<br> 246 const std::shared_ptr<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<std::shared_ptr<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<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<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<std::shared_ptr<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<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<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<int> &streamIds,<br> 345 OHOS::sptr<IStreamOperatorCallback> &callback,<br> 346 OHOS::sptr<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<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<std::shared_ptr<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<std::shared_ptr<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<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<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<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<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<ICameraHost> cameraHost = ICameraHost::Get(TEST_SERVICE_NAME);<br> 508判断cameraHost服务指针对象不为空继续以下调用<br> 509OHOS::sptr<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<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<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<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<ICameraDeviceCallback> &callback,<br> 559 OHOS::sptr<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<CameraDeviceCallback> deviceCallback = new CameraDeviceCallback();<br> 570OHOS::sptr<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<IStreamOperatorCallback> &callback,<br> 600 OHOS::sptr<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<StreamOperatorCallback> streamOperatorCallback = new StreamOperatorCallback();<br> 609OHOS::sptr<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<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<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<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<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<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<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<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<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<CameraStandard::CameraMetadata> &modeSetting,<br> 720 const std::shared_ptr<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<StreamInfo> streamInfo = std::make_shared<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<std::shared_ptr<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<std::shared_ptr<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<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<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<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<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<std::shared_ptr<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<std::shared_ptr<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<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<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<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<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<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<int> &streamIds,<br> 904 OHOS::sptr<IStreamOperatorCallback> &callback,<br> 905 OHOS::sptr<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<int> streamIds = {1001};<br> 915OHOS::sptr<IStreamOperatorCallback> offlineStreamOperatorCallback = new StreamOperatorCallback();<br> 916OHOS::sptr<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<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<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