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 /** @} */