• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# IStreamOperator
2
3
4## 概述
5
6定义Camera设备流操作。
7
8对Camera设备执行流的创建、配置与添加参数、属性获取、句柄绑定与解除、图像捕获与取消、流的转换以及流释放操作。
9
10流是指从底层设备输出,经本模块内部各环节处理,最终传递到上层服务或者应用的一组数据序列。 本模块支持的流的类型有预览流,录像流,拍照流等,更多类型可查看[StreamIntent](_camera_v10.md#streamintent)。
11
12**起始版本:** 3.2
13
14**相关模块:**[Camera](_camera_v10.md)
15
16
17## 汇总
18
19
20### Public 成员函数
21
22| 名称 | 描述 |
23| -------- | -------- |
24| [IsStreamsSupported](#isstreamssupported) ([in] enum [OperationMode](_camera_v10.md#operationmode) mode, [in] unsigned char[] modeSetting, [in] struct [StreamInfo](_stream_info_v10.md)[] infos, [out] enum [StreamSupportType](_camera_v10.md#streamsupporttype) type) | 查询是否支持添加参数对应的流。 |
25| [CreateStreams](#createstreams) ([in] struct [StreamInfo](_stream_info_v10.md)[] streamInfos) | 创建流。 |
26| [ReleaseStreams](#releasestreams) ([in] int[] streamIds) | 释放流。 |
27| [CommitStreams](#commitstreams) ([in] enum [OperationMode](_camera_v10.md#operationmode) mode, [in] unsigned char[] modeSetting) | 配置流。 |
28| [GetStreamAttributes](#getstreamattributes) ([out] struct [StreamAttribute](_stream_attribute_v10.md)[] attributes) | 获取流的属性。通过该接口获取的流属性可能会和[CreateStreams](#createstreams)输入的流信息存在差异。 |
29| [AttachBufferQueue](#attachbufferqueue) ([in] int streamId, [in] BufferProducerSequenceable bufferProducer) | 绑定生产者句柄和指定流。 |
30| [DetachBufferQueue](#detachbufferqueue) ([in] int streamId) | 解除生产者句柄和指定流的绑定关系。 |
31| [Capture](#capture) ([in] int captureId, [in] struct [CaptureInfo](_capture_info_v10.md) info, [in] boolean isStreaming) | 捕获图像。 |
32| [CancelCapture](#cancelcapture) ([in] int captureId) | 取消连续捕获。捕获结束时,会调用[OnCaptureEnded](interface_i_stream_operator_callback_v10.md#oncaptureended)来通知调用者捕获的帧计数等信息。 |
33| [ChangeToOfflineStream](#changetoofflinestream) ([in] int[] streamIds, [in] [IStreamOperatorCallback](interface_i_stream_operator_callback_v10.md) callbackObj, [out] [IOfflineStreamOperator](interface_i_offline_stream_operator_v10.md) offlineOperator) | 将指定流转换成离线流。 |
34
35
36## 成员函数说明
37
38
39### AttachBufferQueue()
40
41```
42IStreamOperator::AttachBufferQueue ([in] int streamId, [in] BufferProducerSequenceable bufferProducer )
43```
44
45**描述**
46
47绑定生产者句柄和指定流。
48
49如果在[CreateStreams](#createstreams)创建流时已经指定了生产者句柄,则不需要调用该接口。如果需要重新绑定, 需先调用[DetachBufferQueue](#detachbufferqueue)进行解绑,然后再绑定。 对于一些IOT设备,可能不需要或者不支持预览流的图像数据缓存流转,那么不需要绑定生产者句柄, 此时在创建流时[CreateStreams](#createstreams)的[StreamInfo](_stream_info_v10.md)参数的生产者句柄bufferQueue_为空,而 tunneledMode_需设置为false。
50
51**起始版本:** 3.2
52
53**参数:**
54
55| 名称 | 描述 |
56| -------- | -------- |
57| streamId | 用于标识要绑定的流。 |
58| bufferProducer | 生产者句柄。 |
59
60**返回:**
61
62NO_ERROR 表示执行成功。
63
64其他值表示执行失败,具体错误码查看[CamRetCode](_camera_v10.md#camretcode)。
65
66**参见:**
67
68[DetachBufferQueue](#detachbufferqueue)
69
70
71### CancelCapture()
72
73```
74IStreamOperator::CancelCapture ([in] int captureId)
75```
76
77**描述**
78
79取消连续捕获。捕获结束时,会调用[OnCaptureEnded](interface_i_stream_operator_callback_v10.md#oncaptureended)来通知调用者捕获的帧计数等信息。
80
81**起始版本:** 3.2
82
83**参数:**
84
85| 名称 | 描述 |
86| -------- | -------- |
87| captureId | 用于标识要取消的捕获请求。 |
88
89**返回:**
90
91NO_ERROR 表示执行成功。
92
93其他值表示执行失败,具体错误码查看[CamRetCode](_camera_v10.md#camretcode)。
94
95**参见:**
96
97[Capture](#capture)
98
99
100### Capture()
101
102```
103IStreamOperator::Capture ([in] int captureId, [in] struct CaptureInfo info, [in] boolean isStreaming )
104```
105
106**描述**
107
108捕获图像。
109
110本接口必须在调用[CommitStreams](#commitstreams)配置流之后调用。 图像捕获有两种模式,分别是连续捕获和单次捕获。
111
112- 连续捕获即触发之后模块内部进行连续的捕获,消费者只需调用此函数一次即可连续接收捕获的图像数据。若再次调用了本接口, 则停止当前捕获,更新捕获信息,再进行一次新的捕获,多用于预览、录像或者连拍场景。
113
114- 单次捕获即触发之后只捕获一帧图像数据,用于单次拍照场景。捕获启动时,会调用[OnCaptureStarted](interface_i_stream_operator_callback_v10.md#oncapturestarted)来通知调用者捕获已经启动。
115
116- 连续捕获需调用[CancelCapture](#cancelcapture)来停止捕获。捕获结束时,会调用[OnCaptureEnded](interface_i_stream_operator_callback_v10.md#oncaptureended)来通知调用者捕获的帧计数等信息。 [CaptureInfo](_capture_info_v10.md)的enableShutterCallback_使能[OnFrameShutter](interface_i_stream_operator_callback_v10.md#onframeshutter),使能后每次捕获触发[OnFrameShutter](interface_i_stream_operator_callback_v10.md#onframeshutter)。 对于多个流同时捕获的场景,本模块内部保证同时上报多路流捕获数据。
117
118**起始版本:** 3.2
119
120**参数:**
121
122| 名称 | 描述 |
123| -------- | -------- |
124| captureId | 捕获请求的唯一标识,由调用者指定,调用者需保证在Camera设备打开期间,捕获请求ID是唯一的。 |
125| info | 捕获请求的参数信息,具体信息查看[CaptureInfo](_capture_info_v10.md)。 |
126| isStreaming | 是否连续捕获,true表示连续捕获,否则为单次捕获。 |
127
128**返回:**
129
130NO_ERROR 表示执行成功。
131
132其他值表示执行失败,具体错误码查看[CamRetCode](_camera_v10.md#camretcode)。
133
134**参见:**
135
136OnFrameShutter
137
138
139### ChangeToOfflineStream()
140
141```
142IStreamOperator::ChangeToOfflineStream ([in] int[] streamIds, [in] IStreamOperatorCallback callbackObj, [out] IOfflineStreamOperator offlineOperator )
143```
144
145**描述**
146
147将指定流转换成离线流。
148
149离线流只能由拍照流转换而来,其他流不支持。 一些设备处理能力有限,可能导致拍照时算法处理时间较长,从而引起捕获请求堆积在模块内部,而转换为离线 流之后,可关闭底层设备,由离线流接替,进行后续的处理。
150
151**起始版本:** 3.2
152
153**参数:**
154
155| 名称 | 描述 |
156| -------- | -------- |
157| streamIds | 用于指定要转换成离线流的流集合。 |
158| callbackObj | 用于设置离线流的回调。 |
159| offlineOperator | 转换后的离线流。 |
160
161**返回:**
162
163NO_ERROR 表示执行成功。
164
165其他值表示执行失败,具体错误码查看[CamRetCode](_camera_v10.md#camretcode)。
166
167
168### CommitStreams()
169
170```
171IStreamOperator::CommitStreams ([in] enum OperationMode mode, [in] unsigned char[] modeSetting )
172```
173
174**描述**
175
176配置流。
177
178本接口需在调用[CreateStreams](#createstreams)创建流之后调用。
179
180**起始版本:** 3.2
181
182**参数:**
183
184| 名称 | 描述 |
185| -------- | -------- |
186| mode | 流运行的模式,支持的模式定义在[OperationMode](_camera_v10.md#operationmode)。 |
187| modeSetting | 流的配置参数,包括帧率,ZOOM等信息。ZOOM:变焦,目前可以忽略 |
188
189**返回:**
190
191NO_ERROR 表示执行成功。
192
193其他值表示执行失败,具体错误码查看[CamRetCode](_camera_v10.md#camretcode)。
194
195
196### CreateStreams()
197
198```
199IStreamOperator::CreateStreams ([in] struct StreamInfo[] streamInfos)
200```
201
202**描述**
203
204创建流。
205
206此函数接口依据输入的流信息创建流,调用该接口之前需先通过[IsStreamsSupported](#isstreamssupported)查询HAL是否支持要创建的流。
207
208**起始版本:** 3.2
209
210**参数:**
211
212| 名称 | 描述 |
213| -------- | -------- |
214| streamInfos | 流信息列表,流信息定义在[StreamInfo](_stream_info_v10.md)。输入的流信息可能会被修改,需通过 [GetStreamAttributes](#getstreamattributes)获取最新的流属性。 |
215
216**返回:**
217
218NO_ERROR 表示执行成功。
219
220其他值表示执行失败,具体错误码查看[CamRetCode](_camera_v10.md#camretcode)。
221
222
223### DetachBufferQueue()
224
225```
226IStreamOperator::DetachBufferQueue ([in] int streamId)
227```
228
229**描述**
230
231解除生产者句柄和指定流的绑定关系。
232
233**起始版本:** 3.2
234
235**参数:**
236
237| 名称 | 描述 |
238| -------- | -------- |
239| streamId | 用于标识要解除绑定的流。 |
240
241**返回:**
242
243NO_ERROR 表示执行成功。
244
245其他值表示执行失败,具体错误码查看[CamRetCode](_camera_v10.md#camretcode)。
246
247**参见:**
248
249[AttachBufferQueue](#attachbufferqueue)
250
251
252### GetStreamAttributes()
253
254```
255IStreamOperator::GetStreamAttributes ([out] struct StreamAttribute[] attributes)
256```
257
258**描述**
259
260获取流的属性。通过该接口获取的流属性可能会和[CreateStreams](#createstreams)输入的流信息存在差异。
261
262**起始版本:** 3.2
263
264**参数:**
265
266| 名称 | 描述 |
267| -------- | -------- |
268| attributes | 用于获取流的属性。在调用[CreateStreams](#createstreams)时,通过参数streamInfos携带的流信息可能会被重写。 |
269
270**返回:**
271
272NO_ERROR 表示执行成功。
273
274其他值表示执行失败,具体错误码查看[CamRetCode](_camera_v10.md#camretcode)。
275
276
277### IsStreamsSupported()
278
279```
280IStreamOperator::IsStreamsSupported ([in] enum OperationMode mode, [in] unsigned char[] modeSetting, [in] struct StreamInfo[] infos, [out] enum StreamSupportType type )
281```
282
283**描述**
284
285查询是否支持添加参数对应的流。
286
287此函数接口根据输入的运行模式和配置信息以及当前模块中正在运行的流,查询是否支持动态添加流。
288
289- 如果本模块支持在不停止其他流的情况下添加新流,或者即使停止其他流但上层服务或应用不感知, 则通过type参数返回DYNAMIC_SUPPORTED,上层服务或应用可以直接添加新流;
290
291- 如果本模块支持添加新流但需要上层服务或应用先停止所有流的捕获,则通过type参数返回RE_CONFIGURED_REQUIRED;
292
293- 如果不支持添加输入的新流,则返回NOT_SUPPORTED。 此函数需要在调用[CreateStreams](#createstreams)创建流之前调用。
294
295**起始版本:** 3.2
296
297**参数:**
298
299| 名称 | 描述 |
300| -------- | -------- |
301| mode | 流的使用模式,支持的模式参考[OperationMode](_camera_v10.md#operationmode)。 |
302| modeSetting | 流的配置,包括帧率,3A等配置信息。3A:自动曝光 (AE)、自动聚焦 (AF)、自动白平衡 (AWB) |
303| infos | 流的配置信息,具体参考[StreamInfo](_stream_info_v10.md)。 |
304| type | 对动态配置流的支持类型,支持类型定义在[StreamSupportType](_camera_v10.md#streamsupporttype)。 |
305
306**返回:**
307
308NO_ERROR 表示执行成功。
309
310其他值表示执行失败,具体错误码查看[CamRetCode](_camera_v10.md#camretcode)。
311
312
313### ReleaseStreams()
314
315```
316IStreamOperator::ReleaseStreams ([in] int[] streamIds)
317```
318
319**描述**
320
321释放流。
322
323**起始版本:** 3.2
324
325**参数:**
326
327| 名称 | 描述 |
328| -------- | -------- |
329| streamIds | 要释放的流ID列表。 |
330
331**返回:**
332
333NO_ERROR 表示执行成功。
334
335其他值表示执行失败,具体错误码查看[CamRetCode](_camera_v10.md#camretcode)。
336