1/*
2 * Copyright (c) 2024 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 OHAVSession
18 * @{
19 *
20 * @brief Provide the definition of the C interface for the avsession module.
21 *
22 * @syscap SystemCapability.Multimedia.AVSession.Core
23 *
24 * @since 13
25 * @version 1.0
26 */
27
28/**
29 * @file native_avsession.h
30 *
31 * @brief Declare avsession interface.
32 *
33 * @library libohavsession.so
34 * @syscap SystemCapability.Multimedia.AVSession.Core
35 * @kit AVSessionKit
36 * @since 13
37 * @version 1.0
38 */
39
40#ifndef NATIVE_AVSESSION_H
41#define NATIVE_AVSESSION_H
42
43#include <stdint.h>
44#include "native_avsession_errors.h"
45#include "native_avmetadata.h"
46
47#ifdef __cplusplus
48extern "C" {
49#endif
50
51/**
52 * @brief Enum for avsession type.
53 *
54 * @since 13
55 * @version 1.0
56 */
57typedef enum {
58    /**
59     * @brief audio session type.
60     */
61    SESSION_TYPE_AUDIO = 0,
62
63    /**
64     * @brief video session type.
65     */
66    SESSION_TYPE_VIDEO = 1,
67
68    /**
69     * @brief voice call session type.
70     */
71    SESSION_TYPE_VOICE_CALL = 2,
72
73    /**
74     * @brief video call session type.
75     */
76    SESSION_TYPE_VIDEO_CALL = 3
77} AVSession_Type;
78
79/**
80 * @brief Enum for playback state.
81 *
82 * @since 13
83 * @version 1.0
84 */
85typedef enum {
86    /**
87     * @brief Initial state.
88     */
89    PLAYBACK_STATE_INITIAL = 0,
90
91    /**
92     * @brief Preparing state. Indicates that the media file is not ready to play.
93     */
94    PLAYBACK_STATE_PREPARING = 1,
95
96    /**
97     * @brief Playing state.
98     */
99    PLAYBACK_STATE_PLAYING = 2,
100
101    /**
102     * @brief Pause state.
103     */
104    PLAYBACK_STATE_PAUSED = 3,
105
106    /**
107     * @brief Fast forward state.
108     */
109    PLAYBACK_STATE_FAST_FORWARDING = 4,
110
111    /**
112     * @brief Rewind state.
113     */
114    PLAYBACK_STATE_REWINDED = 5,
115
116    /**
117     * @brief Stopped state.
118     */
119    PLAYBACK_STATE_STOPPED = 6,
120
121    /**
122     * @brief Complete state.
123     */
124    PLAYBACK_STATE_COMPLETED = 7,
125
126    /**
127     * @brief Release state.
128     */
129    PLAYBACK_STATE_RELEASED = 8,
130
131    /**
132     * @brief Error state.
133     */
134    PLAYBACK_STATE_ERROR = 9,
135
136    /**
137     * @brief Idle state.
138     */
139    PLAYBACK_STATE_IDLE = 10,
140
141    /**
142     * @brief Buffering state.
143     */
144    PLAYBACK_STATE_BUFFERING = 11,
145
146    /**
147     * @brief Max state.
148     */
149    PLAYBACK_STATE_MAX = 12,
150} AVSession_PlaybackState;
151
152/**
153 * @brief Defines the playback position.
154 *
155 * @since 13
156 */
157typedef struct AVSession_PlaybackPosition {
158    /**
159     * @brief Elapsed time(position) of this media set by the app.
160     */
161    int64_t elapsedTime;
162
163    /**
164     * @brief Record the system time when elapsedTime is set.
165     */
166    int64_t updateTime;
167} AVSession_PlaybackPosition;
168
169/**
170 * @brief Defines the playback mode.
171 *
172 * @since 13
173 */
174typedef enum {
175    /**
176     * @brief sequential playback mode
177     */
178    LOOP_MODE_SEQUENCE = 0,
179
180    /**
181     * @brief single playback mode
182     */
183    LOOP_MODE_SINGLE = 1,
184
185    /**
186     * @brief list playback mode
187     */
188    LOOP_MODE_LIST = 2,
189
190    /**
191     * @brief shuffle playback mode
192     */
193    LOOP_MODE_SHUFFLE = 3,
194
195    /**
196     * @brief custom playback mode
197     */
198    LOOP_MODE_CUSTOM = 4,
199} AVSession_LoopMode;
200
201/**
202 * @brief Enum for different control command.
203 *
204 * @since 13
205 * @version 1.0
206 */
207typedef enum AVSession_ControlCommand {
208    /**
209     * @brief invalid control command
210     */
211    CONTROL_CMD_INVALID = -1,
212
213    /**
214     * @brief play command
215     */
216    CONTROL_CMD_PLAY = 0,
217
218    /**
219     * @brief pause command
220     */
221    CONTROL_CMD_PAUSE = 1,
222
223    /**
224     * @brief stop command
225     */
226    CONTROL_CMD_STOP = 2,
227
228    /**
229     * @brief playnext command
230     */
231    CONTROL_CMD_PLAY_NEXT = 3,
232
233    /**
234     * @brief playprevious command
235     */
236    CONTROL_CMD_PLAY_PREVIOUS = 4,
237} AVSession_ControlCommand;
238
239/**
240 * @brief Defines enumeration of avsession callback result.
241 *
242 * @since 13
243 */
244typedef enum {
245    /**
246     * @brief Result of avsession callabck is success.
247     */
248    AVSESSION_CALLBACK_RESULT_SUCCESS = 0,
249
250    /**
251     * @brief Result of avsession callabck failed.
252     */
253    AVSESSION_CALLBACK_RESULT_FAILURE = -1,
254} AVSessionCallback_Result;
255
256/**
257 * @brief AVSession object
258 *
259 * A pointer can be created using {@link OH_AVSession_Create} method.
260 *
261 * @since 13
262 * @version 1.0
263 */
264typedef struct OH_AVSession OH_AVSession;
265
266/**
267 * @brief Declaring the callback struct for playback command
268 *
269 * @since 13
270 * @version 1.0
271 */
272typedef AVSessionCallback_Result (*OH_AVSessionCallback_OnCommand)(OH_AVSession* session,
273    AVSession_ControlCommand command, void* userData);
274
275/**
276 * @brief Declaring the callback struct for forward command
277 *
278 * @since 13
279 * @version 1.0
280 */
281typedef AVSessionCallback_Result (*OH_AVSessionCallback_OnFastForward)(OH_AVSession* session,
282    uint32_t seekTime, void* userData);
283
284/**
285 * @brief Declaring the callback struct for rewind command
286 *
287 * @since 13
288 * @version 1.0
289 */
290typedef AVSessionCallback_Result (*OH_AVSessionCallback_OnRewind)(OH_AVSession* session,
291    uint32_t seekTime, void* userData);
292
293/**
294 * @brief Declaring the callback struct for seek command
295 *
296 * @since 13
297 * @version 1.0
298 */
299typedef AVSessionCallback_Result (*OH_AVSessionCallback_OnSeek)(OH_AVSession* session,
300    uint64_t seekTime, void* userData);
301
302/**
303 * @brief Declaring the callback struct for set loop mode command
304 *
305 * @since 13
306 * @version 1.0
307 */
308typedef AVSessionCallback_Result (*OH_AVSessionCallback_OnSetLoopMode)(OH_AVSession* session,
309    AVSession_LoopMode curLoopMode, void* userData);
310
311/**
312 * @brief Declaring the callback struct for toggle favorite command
313 *
314 * @since 13
315 * @version 1.0
316 */
317typedef AVSessionCallback_Result (*OH_AVSessionCallback_OnToggleFavorite)(OH_AVSession* session,
318    const char* assetId, void* userData);
319
320/**
321 * @brief Request to create the avsession.
322 *
323 * @param sessionType The session type to set
324 * @param sessionTag The session tag set by the application
325 * @param bundleName The bundle name to set
326 * @param abilityName The abilityName name to set
327 * @param avsession Pointer to a viriable to receive the OH_AVSession
328 * @return Function result code:
329 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
330 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}:
331 *                                                 1. The param of sessionType is invalid.
332 *                                                 2. The param of sessionTag is nullptr.
333 *                                                 3. The param of bundleName is nullptr.
334 *                                                 4. The param of abilityName is nullptr.
335 *                                                 5. The param of avsession is nullptr.
336 * @since 13
337 */
338AVSession_ErrCode OH_AVSession_Create(AVSession_Type sessionType, const char* sessionTag,
339    const char* bundleName, const char* abilityName, OH_AVSession** avsession);
340
341/**
342 * @brief Request to destory the avsession.
343 *
344 * @param avsession The avsession instance pointer
345 * @return Function result code:
346 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
347 *         {@link AV_SESSION_ERR_INVALID_PARAMETER} The param of avsession is nullptr.
348 * @since 13
349 */
350AVSession_ErrCode OH_AVSession_Destroy(OH_AVSession* avsession);
351
352/**
353 * @brief Activate the avsession.
354 *
355 * @param avsession The avsession instance pointer
356 * @return Function result code:
357 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
358 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
359 *         {@link AV_SESSION_ERR_INVALID_PARAMETER} The param of avsession is nullptr.
360 * @since 13
361 */
362AVSession_ErrCode OH_AVSession_Activate(OH_AVSession* avsession);
363
364/**
365 * @brief Deactivate the avsession.
366 *
367 * @param avsession The avsession instance pointer
368 * @return Function result code:
369 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
370 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
371 *         {@link AV_SESSION_ERR_INVALID_PARAMETER} The param of avsession is nullptr.
372 * @since 13
373 */
374AVSession_ErrCode OH_AVSession_Deactivate(OH_AVSession* avsession);
375
376/**
377 * @brief Get session type.
378 *
379 * @param avsession The avsession instance pointer
380 * @param sessionType The returned session type
381 * @return Function result code:
382 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
383 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
384 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
385 *                                                 1. The param of avsession is invalid.
386 *                                                 2. The param of sessionType is nullptr.
387 * @since 13
388 */
389AVSession_ErrCode OH_AVSession_GetSessionType(OH_AVSession* avsession, AVSession_Type* sessionType);
390
391/**
392 * @brief Get session id.
393 *
394 * @param avsession The avsession instance pointer
395 * @param sessionId The returned session id
396 * @return Function result code:
397 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
398 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
399 *                                                 1. The param of avsession is nullptr.
400 *                                                 2. The param of sessionId is nullptr.
401 * @since 13
402 */
403AVSession_ErrCode OH_AVSession_GetSessionId(OH_AVSession* avsession, const char** sessionId);
404
405/**
406 * @brief Request to set av metadata.
407 *
408 * @param avsession The avsession instance pointer
409 * @param avmetadata The metadata to set
410 * @return Function result code:
411 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
412 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
413 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
414 *                                                 1. The param of avsession is nullptr.
415 *                                                 2. The param of avmetadata is nullptr.
416 * @since 13
417 */
418AVSession_ErrCode OH_AVSession_SetAVMetadata(OH_AVSession* avsession, OH_AVMetadata* avmetadata);
419
420/**
421 * @brief Request to set av playbackstate.
422 *
423 * @param avsession The avsession instance pointer
424 * @param playbackState The playbackState to set
425 * @return Function result code:
426 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
427 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
428 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
429 *                                                 1. The param of avsession is nullptr.
430 *                                                 2. The param of playbackState is invalid.
431 * @since 13
432 */
433AVSession_ErrCode OH_AVSession_SetPlaybackState(OH_AVSession* avsession,
434    AVSession_PlaybackState playbackState);
435
436/**
437 * @brief Request to set playback position.
438 *
439 * @param avsession The avsession instance pointer
440 * @param playbackPosition The playbackPosition to set
441 * @return Function result code:
442 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
443 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
444 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
445 *                                                 1. The param of avsession is nullptr.
446 *                                                 2. The param of playbackPosition is nullptr.
447 * @since 13
448 */
449AVSession_ErrCode OH_AVSession_SetPlaybackPosition(OH_AVSession* avsession,
450    AVSession_PlaybackPosition* playbackPosition);
451
452/**
453 * @brief Request to set favorite state.
454 *
455 * @param avsession The avsession instance pointer
456 * @param favorite true means making the resource to be liked, false means dislike.
457 * @return Function result code:
458 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
459 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
460 *         {@link AV_SESSION_ERR_INVALID_PARAMETER} The param of avsession is nullptr.
461 * @since 13
462 */
463AVSession_ErrCode OH_AVSession_SetFavorite(OH_AVSession* avsession, bool favorite);
464
465/**
466 * @brief Request to set loop mode.
467 *
468 * @param avsession The avsession instance pointer
469 * @param loopMode The loopmode to be set for playback.
470 * @return Function result code:
471 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
472 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
473 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
474 *                                                 1. The param of avsession is nullptr.
475 *                                                 2. The param of loopMode is invalid.
476 * @since 13
477 */
478AVSession_ErrCode OH_AVSession_SetLoopMode(OH_AVSession* avsession, AVSession_LoopMode loopMode);
479
480/**
481 * @brief Request to register command callback.
482 *
483 * @param avsession The avsession instance pointer
484 * @param command The control command type to be registered.
485 * @param callback the {@link OH_AVSessionCallback_OnCommand} to be registered.
486 * @param userData User data which is passed by user.
487 * @return Function result code:
488 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
489 *         {@link AV_SESSION_ERR_CODE_COMMAND_INVALID} The command is invalid.
490 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
491 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
492 *                                                 1. The param of avsession is nullptr.
493 *                                                 2. The param of callback is nullptr.
494 * @since 13
495 */
496AVSession_ErrCode OH_AVSession_RegisterCommandCallback(OH_AVSession* avsession,
497    AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback, void* userData);
498
499/**
500 * @brief Request to unregister command callback.
501 *
502 * @param avsession The avsession instance pointer
503 * @param command The control command type to be unregistered.
504 * @param callback the {@link OH_AVSessionCallback_OnCommand} to be unregistered.
505 * @return Function result code:
506 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
507 *         {@link AV_SESSION_ERR_CODE_COMMAND_INVALID} The command is invalid.
508 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
509 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
510 *                                                 1. The param of avsession is nullptr.
511 *                                                 2. The param of callback is nullptr.
512 * @since 13
513 */
514AVSession_ErrCode OH_AVSession_UnregisterCommandCallback(OH_AVSession* avsession,
515    AVSession_ControlCommand command, OH_AVSessionCallback_OnCommand callback);
516
517/**
518 * @brief Request to register fastforward callback.
519 *
520 * @param avsession The avsession instance pointer
521 * @param callback the {@link OH_AVSessionCallback_OnFastForward} to be registered.
522 * @param userData User data which is passed by user.
523 * @return Function result code:
524 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
525 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
526 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
527 *                                                 1. The param of avsession is nullptr.
528 *                                                 2. The param of callback is nullptr.
529 * @since 13
530 */
531AVSession_ErrCode OH_AVSession_RegisterForwardCallback(OH_AVSession* avsession,
532    OH_AVSessionCallback_OnFastForward callback, void* userData);
533
534/**
535 * @brief Request to unregister fastforward callback.
536 *
537 * @param avsession The avsession instance pointer
538 * @param callback the {@link OH_AVSessionCallback_OnFastForward} to be unregistered.
539 * @return Function result code:
540 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
541 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
542 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
543 *                                                 1. The param of avsession is nullptr.
544 *                                                 2. The param of callback is nullptr.
545 * @since 13
546 */
547AVSession_ErrCode OH_AVSession_UnregisterForwardCallback(OH_AVSession* avsession,
548    OH_AVSessionCallback_OnFastForward callback);
549
550/**
551 * @brief Request to register rewind callback.
552 *
553 * @param avsession The avsession instance pointer
554 * @param callback the {@link OH_AVSessionCallback_OnRewind} to be registered.
555 * @param userData User data which is passed by user.
556 * @return Function result code:
557 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
558 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
559 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
560 *                                                 1. The param of avsession is nullptr.
561 *                                                 2. The param of callback is nullptr.
562 * @since 13
563 */
564AVSession_ErrCode OH_AVSession_RegisterRewindCallback(OH_AVSession* avsession,
565    OH_AVSessionCallback_OnRewind callback, void* userData);
566
567/**
568 * @brief Request to unregister rewind callback.
569 *
570 * @param avsession The avsession instance pointer
571 * @param callback the {@link OH_AVSessionCallback_OnRewind} to be unregistered.
572 * @return Function result code:
573 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
574 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
575 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
576 *                                                 1. The param of avsession is nullptr.
577 *                                                 2. The param of callback is nullptr.
578 * @since 13
579 */
580AVSession_ErrCode OH_AVSession_UnregisterRewindCallback(OH_AVSession* avsession,
581    OH_AVSessionCallback_OnRewind callback);
582
583/**
584 * @brief Request to register seek callback.
585 *
586 * @param avsession The avsession instance pointer
587 * @param callback the {@link OH_AVSessionCallback_OnSeek} to be registered.
588 * @param userData User data which is passed by user.
589 * @return Function result code:
590 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
591 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
592 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
593 *                                                 1. The param of avsession is nullptr.
594 *                                                 2. The param of callback is nullptr.
595 * @since 13
596 */
597AVSession_ErrCode OH_AVSession_RegisterSeekCallback(OH_AVSession* avsession,
598    OH_AVSessionCallback_OnSeek callback, void* userData);
599
600/**
601 * @brief Request to unregister seek callback.
602 *
603 * @param avsession The avsession instance pointer
604 * @param callback the {@link OH_AVSessionCallback_OnSeek} to be unregistered.
605 * @return Function result code:
606 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
607 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
608 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
609 *                                                 1. The param of avsession is nullptr.
610 *                                                 2. The param of callback is nullptr.
611 * @since 13
612 */
613AVSession_ErrCode OH_AVSession_UnregisterSeekCallback(OH_AVSession* avsession,
614    OH_AVSessionCallback_OnSeek callback);
615
616/**
617 * @brief Request to register set loopmode callback.
618 *
619 * @param avsession The avsession instance pointer
620 * @param callback the {@link OH_AVSessionCallback_OnSetLoopMode} to be registered.
621 * @param userData User data which is passed by user.
622 * @return Function result code:
623 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
624 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
625 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
626 *                                                 1. The param of avsession is nullptr.
627 *                                                 2. The param of callback is nullptr.
628 * @since 13
629 */
630AVSession_ErrCode OH_AVSession_RegisterSetLoopModeCallback(OH_AVSession* avsession,
631    OH_AVSessionCallback_OnSetLoopMode callback, void* userData);
632
633/**
634 * @brief Request to unregister set loopmode callback.
635 *
636 * @param avsession The avsession instance pointer
637 * @param callback the {@link OH_AVSessionCallback_OnSetLoopMode} to be unregistered.
638 * @return Function result code:
639 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
640 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
641 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
642 *                                                 1. The param of avsession is nullptr.
643 *                                                 2. The param of callback is nullptr.
644 * @since 13
645 */
646AVSession_ErrCode OH_AVSession_UnregisterSetLoopModeCallback(OH_AVSession* avsession,
647    OH_AVSessionCallback_OnSetLoopMode callback);
648
649/**
650 * @brief Request to register toggle favorite callback.
651 *
652 * @param avsession The avsession instance pointer
653 * @param callback the {@link OH_AVSessionCallback_OnToggleFavorite} to be registered.
654 * @param userData User data which is passed by user.
655 * @return Function result code:
656 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
657 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
658 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
659 *                                                 1. The param of avsession is nullptr.
660 *                                                 2. The param of callback is nullptr.
661 * @since 13
662 */
663AVSession_ErrCode OH_AVSession_RegisterToggleFavoriteCallback(OH_AVSession* avsession,
664    OH_AVSessionCallback_OnToggleFavorite callback, void* userData);
665
666/**
667 * @brief Request to unregister toggle favorite callback.
668 *
669 * @param avsession The avsession instance pointer
670 * @param callback the {@link OH_AVSessionCallback_OnToggleFavorite} to be unregistered.
671 * @return Function result code:
672 *         {@link AV_SESSION_ERR_SUCCESS} If the execution is successful.
673 *         {@link AV_SESSION_ERR_SERVICE_EXCEPTION} Internal server error.
674 *         {@link AV_SESSION_ERR_INVALID_PARAMETER}
675 *                                                 1. The param of avsession is nullptr.
676 *                                                 2. The param of callback is nullptr.
677 * @since 13
678 */
679AVSession_ErrCode OH_AVSession_UnregisterToggleFavoriteCallback(OH_AVSession* avsession,
680    OH_AVSessionCallback_OnToggleFavorite callback);
681
682#ifdef __cplusplus
683}
684#endif
685
686#endif // NATIVE_AVSESSION_H
687/** @} */