• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License"),
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 /**
17  * @addtogroup LowPowerVideoSink
18  * @{
19  *
20  * @brief The LowPowerVideoSink sub module provides variables, properties, and functions
21  * for lowpower video sink.
22  *
23  * @since 20
24  */
25 
26 /**
27  * @file lowpower_video_sink.h
28  *
29  * @brief Declare the Native API used for lowpower video sink.
30  *
31  * @library liblowpower_avsink.so
32  * @kit MediaKit
33  * @syscap SystemCapability.Multimedia.Media.LowPowerAVSink
34  * @since 20
35  */
36 
37 #ifndef NATIVE_LOWPOWER_VIDEOSINK_H
38 #define NATIVE_LOWPOWER_VIDEOSINK_H
39 
40 #include <stdint.h>
41 #include "native_averrors.h"
42 #include "native_avformat.h"
43 #include "lowpower_avsink_base.h"
44 #include "lowpower_video_sink_base.h"
45 #include "lowpower_audio_sink_base.h"
46 
47 
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 
52 /**
53  * @brief Creates a lowpower video sink instance from the mime type, which is recommended in most cases.
54  *
55  * @param {const char*} mime mime type description string, refer to {@link AVCODEC_MIME_TYPE}
56  * @return Returns a Pointer to an OH_LowPowerVideoSink instance.
57  * Return nullptr if memory ran out or the mime type is not supported.
58  * @since 20
59  */
60 OH_LowPowerVideoSink* OH_LowPowerVideoSink_CreateByMime(const char* mime);
61 
62 /**
63  * @brief To configure the lowpower video sink, typically, you need to configure the description information of the
64  * decoded video track, which can be extracted from the OH_AVSource. This interface must be called before Prepare
65  * is called.
66  *
67  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
68  * @param {OH_AVFormat*} format A pointer to an OH_AVFormat to give the description of the video track to be decoded,
69  * key of format refer to lowpower_avsink_base.h
70  * @return Returns AV_ERR_OK if the execution is successful,
71  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
72  * {@link AV_ERR_INVALID_VAL}, the sink or format is nullptr or invalid. Invalid param in format.
73  * {@link AV_ERR_UNKNOWN}, unknown error.
74  * {@link AV_ERR_SERVICE_DIED}, media service is died.
75  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state, must be called before Prepare.
76  * {@link AV_ERR_UNSUPPORTED_FORMAT}, unsupported format.
77  * @since 20
78  */
79 OH_AVErrCode OH_LowPowerVideoSink_Configure(OH_LowPowerVideoSink* sink, const OH_AVFormat* format);
80 
81 /**
82  * @brief Set dynamic parameters to the lowpower video sink.
83  * Note: This interface can only be called after the decoder is started.
84  * At the same time, incorrect parameter settings may cause video sink failure.
85  *
86  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
87  * @param {OH_AVFormat*} format pointer to an OH_AVFormat instance, key of format refer to lowpower_avsink_base.h
88  * @return Returns AV_ERR_OK if the execution is successful,
89  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
90  * {@link AV_ERR_INVALID_VAL}, the sink or format is nullptr or invalid. Invalid param in format.
91  * {@link AV_ERR_UNKNOWN}, unknown error.
92  * {@link AV_ERR_SERVICE_DIED}, media service is died.
93  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
94  * {@link AV_ERR_UNSUPPORTED_FORMAT}, unsupported format.
95  * @since 20
96  */
97 OH_AVErrCode OH_LowPowerVideoSink_SetParameter(OH_LowPowerVideoSink* sink, const OH_AVFormat* format);
98 
99 /**
100  * @brief Get parameter of current lowpower video sink.
101  *
102  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
103  * @param {OH_AVFormat*} format pointer to an OH_AVFormat instance, key of format refer to lowpower_avsink_base.h
104  * @return Returns AV_ERR_OK if the execution is successful,
105  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
106  * {@link AV_ERR_INVALID_VAL}, the sink or format is nullptr or invalid. Invalid param in format.
107  * {@link AV_ERR_UNKNOWN}, unknown error.
108  * {@link AV_ERR_SERVICE_DIED}, media service is died.
109  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
110  * {@link AV_ERR_UNSUPPORTED_FORMAT}, unsupported format.
111  * @since 20
112  */
113 OH_AVErrCode OH_LowPowerVideoSink_GetParameter(OH_LowPowerVideoSink* sink, OH_AVFormat* format);
114 
115 /**
116  * @brief Specify the output Surface to provide decoded lowpower video sink,
117  * this interface must be called before Prepare is called. In the executing state, it can be called directly.
118  *
119  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
120  * @param {OHNativeWindow*} surface A pointer to a OHNativeWindow instance, see {@link OHNativeWindow}
121  * @return Returns AV_ERR_OK if the execution is successful,
122  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
123  * {@link AV_ERR_INVALID_VAL}, the sink or the surface is nullptr or invalid.
124  * {@link AV_ERR_UNKNOWN}, unknown error.
125  * {@link AV_ERR_SERVICE_DIED}, media service is died.
126  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
127  * @since 20
128  */
129 OH_AVErrCode OH_LowPowerVideoSink_SetVideoSurface(OH_LowPowerVideoSink* sink, const OHNativeWindow* surface);
130 
131 /**
132  * @brief To prepare the internal resources of the lowpower video sink, the Configure interface must be called before
133  * calling this interface.
134  *
135  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
136  * @return Returns AV_ERR_OK if the execution is successful,
137  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
138  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
139  * {@link AV_ERR_UNKNOWN}, unknown error.
140  * {@link AV_ERR_SERVICE_DIED}, media service is died.
141  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
142  * {@link AV_ERR_OPERATE_NOT_PERMIT}, has not called SetVideoSurface.
143  * @since 20
144  */
145 OH_AVErrCode OH_LowPowerVideoSink_Prepare(OH_LowPowerVideoSink* sink);
146 
147 /**
148  * @brief Start decoder of the lowpower video sink, this interface must be called after the Prepare is successful.
149  * After being successfully started, the lowpower audio sink will start reporting DataNeeded events.
150  *
151  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
152  * @return Returns AV_ERR_OK if the execution is successful,
153  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
154  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
155  * {@link AV_ERR_UNKNOWN}, unknown error.
156  * {@link AV_ERR_SERVICE_DIED}, media service is died.
157  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
158  * @since 20
159  */
160 OH_AVErrCode OH_LowPowerVideoSink_StartDecoder(OH_LowPowerVideoSink* sink);
161 
162 /**
163  * @brief Render first frame of video sink, this interface must be called after the StartDecode is successful and
164  * onFirstFrameDecoded is called.
165  *
166  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
167  * @return Returns AV_ERR_OK if the execution is successful,
168  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
169  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
170  * {@link AV_ERR_UNKNOWN}, unknown error.
171  * {@link AV_ERR_SERVICE_DIED}, media service is died.
172  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
173  * @since 20
174  */
175 OH_AVErrCode OH_LowPowerVideoSink_RenderFirstFrame(OH_LowPowerVideoSink* sink);
176 
177 /**
178  * @brief Start renderer of the lowpower video sink, this interface must be called after the StartDecode is successful.
179  *
180  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
181  * @return Returns AV_ERR_OK if the execution is successful,
182  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
183  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
184  * {@link AV_ERR_UNKNOWN}, unknown error.
185  * {@link AV_ERR_SERVICE_DIED}, media service is died.
186  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
187  * @since 20
188  */
189 OH_AVErrCode OH_LowPowerVideoSink_StartRenderer(OH_LowPowerVideoSink* sink);
190 
191 /**
192  * @brief Pause the lowpower video sink, this interface must be called after the StartRender or Resume is successful.
193  * After being successfully paused, the lowpower video sink will pause reporting DataNeeded events..
194  *
195  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
196  * @return Returns AV_ERR_OK if the execution is successful,
197  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
198  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
199  * {@link AV_ERR_UNKNOWN}, unknown error.
200  * {@link AV_ERR_SERVICE_DIED}, media service is died.
201  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
202  * @since 20
203  */
204 OH_AVErrCode OH_LowPowerVideoSink_Pause(OH_LowPowerVideoSink* sink);
205 
206 /**
207  * @brief Resume the lowpower video sink, this interface must be called after the Pause is successful.
208  * After being successfully resumed, the lowpower video sink will resume reporting DataNeeded events.
209  *
210  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSinkinstance
211  * @return Returns AV_ERR_OK if the execution is successful,
212  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
213  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
214  * {@link AV_ERR_UNKNOWN}, unknown error.
215  * {@link AV_ERR_SERVICE_DIED}, media service is died.
216  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
217  * @since 20
218  */
219 OH_AVErrCode OH_LowPowerVideoSink_Resume(OH_LowPowerVideoSink* sink);
220 
221 /**
222  * @brief Clear cache data in the lowpower video sink, this interface is suggested to not be called after the Start
223  * or Resume. It should be noted that need to re-enter if the codec has been input before Codec-Specific-Data.
224  *
225  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
226  * @return Returns AV_ERR_OK if the execution is successful,
227  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
228  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
229  * {@link AV_ERR_UNKNOWN}, unknown error.
230  * {@link AV_ERR_SERVICE_DIED}, media service is died.
231  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
232  * @since 20
233  */
234 OH_AVErrCode OH_LowPowerVideoSink_Flush(OH_LowPowerVideoSink* sink);
235 
236 /**
237  * @brief Stop the lowpower video sink.
238  *
239  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
240  * @return Returns AV_ERR_OK if the execution is successful,
241  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}.
242  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
243  * {@link AV_ERR_UNKNOWN}, unknown error.
244  * {@link AV_ERR_SERVICE_DIED}, media service is died.
245  * {@link AV_ERR_INVALID_STATE}, this interface was called in invalid state.
246  * @since 20
247  */
248 OH_AVErrCode OH_LowPowerVideoSink_Stop(OH_LowPowerVideoSink* sink);
249 
250 /**
251  * @brief Reset the lowpower video sink. Too reuse this instance, you need to call the Configure.
252  *
253  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
254  * @return Returns AV_ERR_OK if the execution is successful,
255  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
256  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
257  * {@link AV_ERR_UNKNOWN}, unknown error.
258  * {@link AV_ERR_SERVICE_DIED}, media service is died.
259  * {@link AV_ERR_INVALID_STATE}, the interface was called in an invalid state.
260  * @since 20
261  */
262 OH_AVErrCode OH_LowPowerVideoSink_Reset(OH_LowPowerVideoSink* sink);
263 
264 /**
265  * @brief Clear the internal resources of the lowpower video sink and destroy the lowpower video sink instance.
266  *
267  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
268  * @return Returns AV_ERR_OK if the execution is successful,
269  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
270  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
271  * {@link AV_ERR_UNKNOWN}, unknown error.
272  * {@link AV_ERR_INVALID_STATE}, the interface was called in an invalid state.
273  * @since 20
274  */
275 OH_AVErrCode OH_LowPowerVideoSink_Destroy(OH_LowPowerVideoSink* sink);
276 
277 /**
278  * @brief Set the lowpower audio sink instance to the lowpower video sink instance for audio video sync.
279  *
280  * @param {OH_LowPowerVideoSink*} videoSink Pointer to an OH_LowPowerVideoSink instance
281  * @param {OH_LowPowerAudioSink*} audioSink Pointer to an OH_LowPowerAudioSink instance
282  * @return Returns AV_ERR_OK if the execution is successful,
283  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
284  * {@link AV_ERR_INVALID_VAL}, the videoSink or audioSink is nullptr or invalid.
285  * {@link AV_ERR_UNKNOWN}, unknown error.
286  * {@link AV_ERR_SERVICE_DIED}, media service is died.
287  * {@link AV_ERR_INVALID_STATE}, the interface was called in an invalid state.
288  * @since 20
289  */
290 OH_AVErrCode OH_LowPowerVideoSink_SetSyncAudioSink(
291     OH_LowPowerVideoSink* videoSink, OH_LowPowerAudioSink* audioSink);
292 
293 /**
294  * @brief Set target start frame pts, and the video frame will be renderred from the target pts.
295  *
296  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
297  * @param {const int64_t} framePts target video frame pts
298  * @param {OH_LowPowerVideoSink_OnTargetArrived*} onTargetArrived OH_LowPowerVideoSink_OnTargetArrived func,
299  * will be called once, refer to {@link OH_LowPowerVideoSink_OnTargetArrived}
300  * @param {const int64_t} timeoutMs if wait first frame over timeoutMs, onTargetArrived will be called directly.
301  * @param {void *} userData User specific data
302  * @return Returns AV_ERR_OK if the execution is successful,
303  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
304  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
305  * {@link AV_ERR_UNKNOWN}, unknown error.
306  * {@link AV_ERR_SERVICE_DIED}, media service is died.
307  * {@link AV_ERR_INVALID_STATE}, the interface was called in an invalid state.
308  * @since 20
309  */
310 OH_AVErrCode OH_LowPowerVideoSink_SetTargetStartFrame(
311     OH_LowPowerVideoSink* sink,
312     const int64_t framePts,
313     OH_LowPowerVideoSink_OnTargetArrived onTargetArrived,
314     const int64_t timeoutMs,
315     void* userData);
316 
317 /**
318  * @brief Set playback speed for the lowpower video sink
319  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
320  * @param {const float} speed Indicates the value of the playback rate.
321  * The current version is valid in the range of 0.1-4.0
322  * @return Returns AV_ERR_OK if the execution is successful,
323  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
324  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
325  * {@link AV_ERR_UNKNOWN}, unknown error.
326  * {@link AV_ERR_SERVICE_DIED}, media service is died.
327  * {@link AV_ERR_INVALID_STATE}, the interface was called in an invalid state.
328  * @since 20
329  */
330 OH_AVErrCode OH_LowPowerVideoSink_SetPlaybackSpeed(OH_LowPowerVideoSink* sink, const float speed);
331 
332 /**
333  * @brief Return frame packet buffer to lowpower video sink.
334  *
335  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
336  * @param {OH_AVSamplesBuffer*} samples Pointer to an OH_AVSamplesBuffer instance
337  * @return Returns AV_ERR_OK if the execution is successful,
338  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
339  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
340  * {@link AV_ERR_UNKNOWN}, unknown error.
341  * {@link AV_ERR_SERVICE_DIED}, media service is died.
342  * {@link AV_ERR_INVALID_STATE}, the interface was called in an invalid state.
343  * @since 20
344  */
345 OH_AVErrCode OH_LowPowerVideoSink_ReturnSamples(OH_LowPowerVideoSink* sink, OH_AVSamplesBuffer* samples);
346 
347 /**
348  * @brief Regsister callback instance for lowpower video sink.
349  *
350  * @param {OH_LowPowerVideoSink*} sink Pointer to an OH_LowPowerVideoSink instance
351  * @param {OH_LowPowerVideoSinkCallback*} callback Pointer to an OH_LowPowerVideoSinkCallback instance
352  * @return Returns AV_ERR_OK if the execution is successful,
353  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
354  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
355  * {@link AV_ERR_UNKNOWN}, unknown error.
356  * {@link AV_ERR_SERVICE_DIED}, media service is died.
357  * {@link AV_ERR_INVALID_STATE}, the interface was called in an invalid state.
358  * @since 20
359  */
360 OH_AVErrCode OH_LowPowerVideoSink_RegisterCallback(OH_LowPowerVideoSink* sink, OH_LowPowerVideoSinkCallback* callback);
361 
362 /**
363  * @brief Creates a lowpower video sink callback instance.
364  *
365  * @return Returns a Pointer to an OH_LowPowerVideoSinkCallback instance.
366  * Return nullptr if memory ran out.
367  * @since 20
368  */
369 OH_LowPowerVideoSinkCallback* OH_LowPowerVideoSinkCallback_Create(void);
370 
371 /**
372  * @brief Destroy the lowpower video sink callback instance.
373  *
374  * @param {OH_LowPowerVideoSinkCallback*} callback Pointer to an OH_LowPowerVideoSinkCallback instance
375  * @return Returns AV_ERR_OK if the execution is successful,
376  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
377  * {@link AV_ERR_INVALID_VAL}, the callback is nullptr or invalid.
378  * @since 20
379  */
380 OH_AVErrCode OH_LowPowerVideoSinkCallback_Destroy(OH_LowPowerVideoSinkCallback* callback);
381 
382 /**
383  * @brief Add onDataNeeded listener to the lowpower video sink callback instance.
384  *
385  * @param {OH_LowPowerVideoSinkCallback*} callback Pointer to an OH_LowPowerVideoSinkCallback instance
386  * @param {OH_LowPowerVideoSink_OnDataNeeded} onDataNeeded OH_LowPowerVideoSink_OnDataNeeded function,
387  * refer to {@link OH_LowPowerVideoSink_OnDataNeeded}
388  * @param {void*} userData User specific data
389  * @return Returns AV_ERR_OK if the execution is successful,
390  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
391  * {@link AV_ERR_INVALID_VAL}, the callback is nullptr or invalid.
392  * @since 20
393  */
394 OH_AVErrCode OH_LowPowerVideoSinkCallback_SetDataNeededListener(
395     OH_LowPowerVideoSinkCallback* callback, OH_LowPowerVideoSink_OnDataNeeded onDataNeeded, void* userData);
396 
397 /**
398  * @brief Add onError listener to the lowpower video sink callback instance.
399  *
400  * @param {OH_LowPowerVideoSinkCallback*} callback Pointer to an OH_LowPowerVideoSinkCallback instance
401  * @param {OH_LowPowerVideoSink_OnError} onError OH_LowPowerVideoSink_OnError function,
402  * refer to {@link OH_LowPowerVideoSink_OnError}
403  * @param {void*} userData User specific data
404  * @return Returns AV_ERR_OK if the execution is successful,
405  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
406  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
407  * @since 20
408  */
409 OH_AVErrCode OH_LowPowerVideoSinkCallback_SetErrorListener(
410     OH_LowPowerVideoSinkCallback* callback, OH_LowPowerVideoSink_OnError onError, void* userData);
411 
412 /**
413  * @brief Add onRenderStarted listener to the lowpower video sink callback instance.
414  *
415  * @param {OH_LowPowerVideoSinkCallback*} callback Pointer to an OH_LowPowerVideoSinkCallback instance
416  * @param {OH_LowPowerVideoSink_OnRenderStarted} onRenderStarted OH_LowPowerVideoSink_OnRenderStarted function,
417  * refer to {@link OH_LowPowerVideoSink_OnRenderStarted}
418  * @param {void*} userData User specific data
419  * @return Returns AV_ERR_OK if the execution is successful,
420  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
421  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
422  * @since 20
423  */
424 OH_AVErrCode OH_LowPowerVideoSinkCallback_SetRenderStartListener(
425     OH_LowPowerVideoSinkCallback* callback, OH_LowPowerVideoSink_OnRenderStarted onRenderStarted, void* userData);
426 
427 /**
428  * @brief Add onStreamChanged listener to the lowpower video sink callback instance.
429  *
430  * @param {OH_LowPowerVideoSinkCallback*} callback Pointer to an OH_LowPowerVideoSinkCallback instance
431  * @param {OH_LowPowerVideoSink_OnStreamChanged} onStreamChanged OH_LowPowerVideoSink_OnStreamChanged function,
432  * refer to {@link OH_LowPowerVideoSink_OnStreamChanged}
433  * @param {void*} userData User specific data
434  * @return Returns AV_ERR_OK if the execution is successful,
435  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
436  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
437  * @since 20
438  */
439 OH_AVErrCode OH_LowPowerVideoSinkCallback_SetStreamChangedListener(
440     OH_LowPowerVideoSinkCallback* callback, OH_LowPowerVideoSink_OnStreamChanged onStreamChanged, void* userData);
441 
442 /**
443  * @brief Add onRenderStarted listener to the lowpower video sink callback instance.
444  *
445  * @param {OH_LowPowerVideoSinkCallback*} callback Pointer to an OH_LowPowerVideoSinkCallback instance
446  * @param {OH_LowPowerVideoSink_OnFirstFrameDecoded} onFirstFrameDecoded OH_LowPowerVideoSink_OnFirstFrameDecoded
447  * function, refer to {@link OH_LowPowerVideoSink_OnFirstFrameDecoded}
448  * @param {void*} userData User specific data
449  * @return Returns AV_ERR_OK if the execution is successful,
450  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
451  * {@link AV_ERR_INVALID_VAL}, the sink is nullptr or invalid.
452  * @since 20
453  */
454 OH_AVErrCode OH_LowPowerVideoSinkCallback_SetFirstFrameDecodedListener(
455     OH_LowPowerVideoSinkCallback* callback,
456     OH_LowPowerVideoSink_OnFirstFrameDecoded onFirstFrameDecoded,
457     void* userData);
458 
459 /**
460  * @brief Add onEos listener to the lowpower video sink callback instance.
461  *
462  * @param {OH_LowPowerVideoSinkCallback*} callback Pointer to an OH_LowPowerVideoSinkCallback instance
463  * @param {OH_LowPowerVideoSink_OnEos} onEos OH_LowPowerVideoSink_OnEos function,
464  * refer to {@link OH_LowPowerVideoSink_OnEos}
465  * @param {void*} userData User specific data
466  * @return Returns AV_ERR_OK if the execution is successful,
467  * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
468  * {@link AV_ERR_INVALID_VAL}, the callback is nullptr or invalid.
469  * @since 20
470  */
471 OH_AVErrCode OH_LowPowerVideoSinkCallback_SetEosListener(OH_LowPowerVideoSinkCallback* callback,
472     OH_LowPowerVideoSink_OnEos onEos, void* userData);
473 
474 #ifdef __cplusplus
475 }
476 #endif
477 
478 #endif // NATIVE_LOWPOWER_VIDEOSINK_H
479 
480 /** @} */