• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 #ifndef OHOS_AVSESSION_INFO_H
17 #define OHOS_AVSESSION_INFO_H
18 
19 #include <string>
20 
21 #include "avcall_meta_data.h"
22 #include "avcall_state.h"
23 #include "avmeta_data.h"
24 #include "avplayback_state.h"
25 #include "avcast_player_state.h"
26 #include "avmedia_description.h"
27 #include "avqueue_item.h"
28 #include "avsession_descriptor.h"
29 #include "av_shared_memory_base.h"
30 #include "key_event.h"
31 #include "want_params.h"
32 #include "av_shared_memory.h"
33 
34 /**
35  * @brief Listening events for the creation and destruction of sessions
36  *     and the latest session changes.
37  * @since 9
38  */
39 namespace OHOS::AVSession {
40 using DeathCallback = std::function<void()>;
41 struct DeviceState;
42 class SessionListener {
43 public:
44     /**
45      * @brief Listen for session creation events.
46      *
47      * @param descriptor Session related description callback.
48      * @since 9
49     */
50     virtual void OnSessionCreate(const AVSessionDescriptor& descriptor) = 0;
51 
52     /**
53      * @brief Listen for session release events.
54      *
55      * @param descriptor Session related description callback.
56      * @since 9
57     */
58     virtual void OnSessionRelease(const AVSessionDescriptor& descriptor) = 0;
59 
60     /**
61      * @brief Listen for changes in the latest session.
62      *
63      * @param descriptor Session related description callback.
64      * @since 9
65     */
66     virtual void OnTopSessionChange(const AVSessionDescriptor& descriptor) = 0;
67 
68     /**
69      * @brief Listen for AudioSession verification.
70      *
71      * @param uid Session related uid.
72      * @since 9
73     */
OnAudioSessionChecked(const int32_t uid)74     virtual void OnAudioSessionChecked(const int32_t uid) {};
75 
76     /**
77      * @brief Listen for the event of device discovery.
78      *
79      * @param { OutputDeviceInfo } castOutputDeviceInfo - Discovered device info.
80      * @since 10
81     */
OnDeviceAvailable(const OutputDeviceInfo & castOutputDeviceInfo)82     virtual void OnDeviceAvailable(const OutputDeviceInfo& castOutputDeviceInfo) {};
83 
84     /**
85      * @brief Listen for the event of device logging.
86      *
87      * @param { DeviceLogEventCode } eventId - Event ID.
88      * @param { int64_t } int64_t - Param.
89      * @since 13
90     */
OnDeviceLogEvent(const DeviceLogEventCode eventId,const int64_t param)91     virtual void OnDeviceLogEvent(const DeviceLogEventCode eventId, const int64_t param) {};
92 
93     /**
94      * @brief Listen for the event of device offline.
95      *
96      * @param { std::string& } deviceId - Offlined device ID.
97      * @since 10
98     */
OnDeviceOffline(const std::string & deviceId)99     virtual void OnDeviceOffline(const std::string& deviceId) {};
100 
101     /**
102      * @brief Listen for the distributed session changed.
103      *
104      * @param { std::vector<sptr<IRemoteObject>>& } sessionControllers - changed distributed session.
105      * @since 16
106     */
OnRemoteDistributedSessionChange(const std::vector<sptr<IRemoteObject>> & sessionControllers)107     virtual void OnRemoteDistributedSessionChange(
108         const std::vector<sptr<IRemoteObject>>& sessionControllers) {};
109 
110     /**
111      * @brief Listen for the event of device changed.
112      *
113      * @param { DeviceState } device state info.
114      * @since 20
115     */
OnDeviceStateChange(const DeviceState & deviceState)116     virtual void OnDeviceStateChange(const DeviceState& deviceState) {};
117 
118     /**
119      * @brief Deconstruct SessionListener.
120      * @since 9
121     */
122     virtual ~SessionListener() = default;
123 };
124 
125 class IAVCastControllerProxyListener {
126 public:
127     virtual void OnCastPlaybackStateChange(const AVPlaybackState& state) = 0;
128 
129     virtual void OnMediaItemChange(const AVQueueItem& avQueueItem) = 0;
130 
131     virtual void OnPlayNext() = 0;
132 
133     virtual void OnPlayPrevious() = 0;
134 
135     virtual void OnSeekDone(const int32_t seekNumber) = 0;
136 
137     virtual void OnVideoSizeChange(const int32_t width, const int32_t height) = 0;
138 
139     virtual void OnPlayerError(const int32_t errorCode, const std::string& errorMsg) = 0;
140 
141     virtual void OnEndOfStream(const int32_t isLooping) = 0;
142 
143     virtual void OnPlayRequest(const AVQueueItem& avQueueItem) = 0;
144 
145     virtual void OnKeyRequest(const std::string& assetId, const std::vector<uint8_t>& keyRequestData) = 0;
146 
147     virtual void OnValidCommandChange(const std::vector<int32_t> &cmds) = 0;
148 
OnCustomData(const AAFwk::WantParams & data)149     virtual void OnCustomData(const AAFwk::WantParams& data) {};
150 
151     virtual int32_t onDataSrcRead(const std::shared_ptr<AVSharedMemoryBase>& mem, uint32_t length,
152         int64_t pos, int32_t& result) = 0;
153 
154     /**
155      * @brief Deconstruct SessionListener.
156      * @since 9
157     */
158     virtual ~IAVCastControllerProxyListener() = default;
159 };
160 
161 class AVSessionCallback {
162 public:
163     /**
164      * @brief playback.
165      * @since 9
166     */
167     virtual void OnPlay() = 0;
168 
169     /**
170      * @brief Pause playback.
171      * @since 9
172     */
173     virtual void OnPause() = 0;
174 
175     /**
176      * @brief Stop playback.
177      * @since 9
178     */
179     virtual void OnStop() = 0;
180 
181     /**
182      * @brief play next.
183      * @since 9
184     */
185     virtual void OnPlayNext() = 0;
186 
187     /**
188      * @brief Play the previous song.
189      * @since 9
190     */
191     virtual void OnPlayPrevious() = 0;
192 
193     /**
194      * @brief Fast forward.
195      *
196      * @param time fastforward skip intervals
197      * @since 11
198     */
199     virtual void OnFastForward(int64_t time) = 0;
200 
201     /**
202      * @brief Fast rewind.
203      *
204      * @param time rewind skip intervals
205      * @since 11
206     */
207     virtual void OnRewind(int64_t time) = 0;
208 
209     /**
210      * @brief Seek to the specified time.
211      *
212      * @param time Seek to the specified time
213      * @since 9
214     */
215     virtual void OnSeek(int64_t time) = 0;
216 
217     /**
218      * @brief Set playback speed.
219      *
220      * @param speed The playback speed to be set
221      * @return Whether the playback speed is set successfully
222      * @since 9
223     */
224     virtual void OnSetSpeed(double speed) = 0;
225 
226     /**
227      * @brief Set cycle mode.
228      *
229      * @param mode Cycle mode to be set {@link LoopMode}
230      * @return Whether the cycle mode is set successfully.
231      * @since 9
232     */
233     virtual void OnSetLoopMode(int32_t loopMode) = 0;
234 
235     /**
236      * @brief Set target cycle mode.
237      *
238      * @param mode Cycle mode to be set {@link LoopMode}
239      * @return Whether the cycle mode is set successfully.
240      * @since 9
241     */
OnSetTargetLoopMode(int32_t targetLoopMode)242     virtual void OnSetTargetLoopMode(int32_t targetLoopMode) {}
243 
244     /**
245      * @brief Whether to collect the current song.
246      *
247      * @param mediaId current song id.
248      * @since 9
249     */
250     virtual void OnToggleFavorite(const std::string& mediaId) = 0;
251 
252     /**
253      * @brief Listening for Media key events.
254      *
255      * @param keyEvent event callbacks.
256      * @since 9
257     */
258     virtual void OnMediaKeyEvent(const MMI::KeyEvent& keyEvent) = 0;
259 
260     /**
261      * @brief Monitor and play device change events.
262      *
263      * @param connectionState Event callback of device state.
264      * @param outputDeviceInfo Event callback of device information.
265      * @since 9
266     */
267     virtual void OnOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo& outputDeviceInfo) = 0;
268 
269     /**
270      * @brief Listen for command events.
271      *
272      * @param commonCommand The name of the command to be sent.
273     * @param commandArgs Command packets to be sent
274      * @since 10
275      */
276     virtual void OnCommonCommand(const std::string& commonCommand, const AAFwk::WantParams& commandArgs) = 0;
277 
278     /**
279      * @brief Listen to the change of item in the playlist to be played.
280      *
281      * @param itemId The serial number of the item to be played.
282      * @since 10
283      */
284     virtual void OnSkipToQueueItem(int32_t itemId) = 0;
285 
286     /**
287      * Register answer command callback.
288      * @since 11
289      */
290     virtual void OnAVCallAnswer() = 0;
291 
292     /**
293      * Register hangUp command callback.
294      * @since 11
295      */
296     virtual void OnAVCallHangUp() = 0;
297 
298     /**
299      * Register toggleCallMute command callback.
300      * @since 11
301      */
302     virtual void OnAVCallToggleCallMute() = 0;
303 
304     /**
305      * @brief Play from assetId.
306      *
307      * @param assetId Id for asset
308      * @since 11
309     */
310     virtual void OnPlayFromAssetId(int64_t assetId) = 0;
311 
312     /**
313      * @brief cast display change.
314      *
315      * @param castDisplayInfo for castDisplay
316      * @since 11
317      */
318     virtual void OnCastDisplayChange(const CastDisplayInfo& castDisplayInfo) = 0;
319 
320     /**
321      * @brief cast display size change.
322      *
323      * @param castDisplayInfo for castDisplay
324      * @since 11
325      */
OnCastDisplaySizeChange(const CastDisplayInfo & castDisplayInfo)326     virtual void OnCastDisplaySizeChange(const CastDisplayInfo& castDisplayInfo) {};
327 
328     /**
329      * @brief custom media packet for 4k change callback.
330      *
331      * @param data The changed custom media packet.
332      * @since 11
333      */
OnCustomData(const AAFwk::WantParams & data)334     virtual void OnCustomData(const AAFwk::WantParams& data) {};
335 
336     /**
337      * @brief Deconstruct AVSessionCallback.
338      * @since 9
339     */
340     virtual ~AVSessionCallback() = default;
341 
342     /**
343      * @brief Play with assetId.
344      *
345      * @param assetId Id for asset
346      * @since 20
347     */
OnPlayWithAssetId(const std::string & assetId)348     virtual void OnPlayWithAssetId(const std::string& assetId) {};
349 };
350 
351 class AVControllerCallback {
352 public:
353 
354     /**
355      * @brief Listen for avcall metadata change events.
356      *
357      * @param avCallMetaData is the changed avcall metadata.
358      * @since 11
359     */
360     virtual void OnAVCallMetaDataChange(const AVCallMetaData& avCallMetaData) = 0;
361 
362     /**
363      * @brief Listening session avcall status change event.
364      *
365      * @param avCallState Session related avcall state.
366      * @since 11
367     */
368     virtual void OnAVCallStateChange(const AVCallState& avCallState) = 0;
369     /**
370      * @brief Session Destroy.
371      * @since 9
372     */
373     virtual void OnSessionDestroy() = 0;
374 
375     /**
376      * @brief Listening session destruction playback status change event.
377      *
378      * @param state Session related description callback.
379      * @since 9
380     */
381     virtual void OnPlaybackStateChange(const AVPlaybackState& state) = 0;
382 
383     /**
384      * @brief Listen for metadata change events.
385      *
386      * @param data Data is the changed metadata.
387      * @since 9
388     */
389     virtual void OnMetaDataChange(const AVMetaData& data) = 0;
390 
391     /**
392      * @brief Listen to the activation status event of the session.
393      *
394      * @param isActive Whether the session is activated.
395      * @since 9
396     */
397     virtual void OnActiveStateChange(bool isActive) = 0;
398 
399     /**
400      * @brief Listen for valid command change events supported by the session.
401      *
402      * @param cmds Collection callback of valid commands.
403      * @since 9
404     */
405     virtual void OnValidCommandChange(const std::vector<int32_t>& cmds) = 0;
406 
407     /**
408      * @brief Monitor and play device change events.
409      *
410      * @param connectionState Event callback of device state.
411      * @param outputDeviceInfo Device related information callback.
412      * @since 9
413     */
414     virtual void OnOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo& outputDeviceInfo) = 0;
415 
416     /**
417      * @brief Listen for changes in custom events of the session.
418      *
419      * @param event Changed session event name.
420      * @param args Parameters of parts.
421      * @since 9
422     */
423     virtual void OnSessionEventChange(const std::string& event, const AAFwk::WantParams& args) = 0;
424 
425     /**
426      * @brief Session playlist change callback.
427      *
428      * @param items The changed queue items.
429      * @since 10
430      */
431     virtual void OnQueueItemsChange(const std::vector<AVQueueItem>& items) = 0;
432 
433     /**
434      * @brief Session title change callback.
435      *
436      * @param title The changed title.
437      * @since 10
438      */
439     virtual void OnQueueTitleChange(const std::string& title) = 0;
440 
441     /**
442      * @brief Session custom media packet change callback.
443      *
444      * @param extras The changed custom media packet.
445      * @since 10
446      */
447     virtual void OnExtrasChange(const AAFwk::WantParams& extras) = 0;
448 
449     /**
450      * @brief Session custom media packet for 4k change callback.
451      *
452      * @param data The changed custom media packet.
453      * @since 10
454      */
OnCustomData(const AAFwk::WantParams & data)455     virtual void OnCustomData(const AAFwk::WantParams& data) {};
456 
457     /**
458      * @brief Deconstruct AVControllerCallback.
459      * @since 9
460     */
461     virtual ~AVControllerCallback() = default;
462 };
463 
464 class AVCastControllerCallback {
465 public:
466     virtual void OnCastPlaybackStateChange(const AVPlaybackState& state) = 0;
467 
468     virtual void OnMediaItemChange(const AVQueueItem& avQueueItem) = 0;
469 
470     virtual void OnPlayNext() = 0;
471 
472     virtual void OnPlayPrevious() = 0;
473 
474     virtual void OnSeekDone(const int32_t seekNumber) = 0;
475 
476     virtual void OnVideoSizeChange(const int32_t width, const int32_t height) = 0;
477 
478     virtual void OnPlayerError(const int32_t errorCode, const std::string& errorMsg) = 0;
479 
480     virtual void OnEndOfStream(const int32_t isLooping) = 0;
481 
482     virtual void OnPlayRequest(const AVQueueItem& avQueueItem) = 0;
483 
484     virtual void OnKeyRequest(const std::string& assetId, const std::vector<uint8_t>& keyRequestData) = 0;
485 
486     virtual void OnCastValidCommandChanged(const std::vector<int32_t> &cmds) = 0;
487 
488     virtual int32_t onDataSrcRead(const std::shared_ptr<AVSharedMemoryBase>& mem, uint32_t length,
489         int64_t pos, int32_t& result) = 0;
490 
OnCustomData(const AAFwk::WantParams & data)491     virtual void OnCustomData(const AAFwk::WantParams& data) {};
492 
493     /**
494      * @brief Deconstruct AVControllerCallback.
495      * @since 9
496     */
497     virtual ~AVCastControllerCallback() = default;
498 };
499 
500 class IAVCastSessionStateListener {
501 public:
502     /**
503      * @brief Listen to the change of cast state change.
504      *
505      * @param castState The cast state of device info.
506      * @param deviceInfo The device info.
507      * @since 9
508     */
509     virtual void OnCastStateChange(int32_t castState, DeviceInfo deviceInfo) = 0;
510 
511     /**
512      * @brief Listen to the change of cast event.
513      *
514      * @param errorCode The error code of cast event.
515      * @param errorMsg The error message of cast event.
516      * @since 9
517     */
518     virtual void OnCastEventRecv(int32_t errorCode, std::string& errorMsg) = 0;
519 
520     /**
521      * @brief Deconstruct IAVCastSessionStateListener.
522      * @since 10
523     */
524     virtual ~IAVCastSessionStateListener() = default;
525 };
526 
527 class IAVRouterListener {
528 public:
529     /**
530      * @brief Listen to the change of cast state change.
531      *
532      * @param castState The cast state of device info.
533      * @param deviceInfo The device info.
534      * @param isNeedRemove is need remove cast device
535      * @since 13
536     */
537     virtual void OnCastStateChange(int32_t castState, DeviceInfo deviceInfo, bool isNeedRemove) = 0;
538 
539     /**
540      * @brief Listen to the change of cast event.
541      *
542      * @param errorCode The error code of cast event.
543      * @param errorMsg The error message of cast event.
544      * @since 13
545     */
546     virtual void OnCastEventRecv(int32_t errorCode, std::string& errorMsg) = 0;
547 
548     /**
549      * @brief Deconstruct IAVRouterListener.
550      * @since 13
551     */
552     virtual ~IAVRouterListener() = default;
553 };
554 
555 class HistoricalRecordListener {
556 public:
557     /**
558      * @brief Listen to the change of historical record.
559      */
560     virtual void OnHistoricalRecordChange() = 0;
561 };
562 
563 struct SessionToken {
564     std::string sessionId;
565     pid_t pid;
566     pid_t uid;
567 };
568 
569 enum SessionDataCategory {
570     SESSION_DATA_CATEGORY_INVALID = -1,
571     SESSION_DATA_META = 0,
572     SESSION_DATA_PLAYBACK_STATE = 1,
573     SESSION_DATA_CONTROL_COMMAND = 2,
574     SESSION_DATA_SET_EVENT = 3,
575     SESSION_DATA_QUEUE_ITEMS = 4,
576     SESSION_DATA_QUEUE_TITLE = 5,
577     SESSION_DATA_COMMON_COMMAND = 6,
578     SESSION_DATA_EXTRAS = 7,
579     SESSION_DATA_CATEGORY_MAX = 8,
580 };
581 
582 enum AVCastCategory {
583     /**
584      * The default cast type "local", media can be routed on the same device,
585      * including internal speakers or audio jacks on the device itself, A2DP devices.
586      * @syscap SystemCapability.Multimedia.AVSession.AVCast
587      * @since 10
588      */
589     CATEGORY_LOCAL = 0,
590 
591     /**
592      * The remote category indicating the media is presenting on a remote device,
593      * the application needs to get an AVCastController to control remote playback.
594      * @syscap SystemCapability.Multimedia.AVSession.AVCast
595      * @since 10
596      */
597     CATEGORY_REMOTE = 1,
598 };
599 
600 enum ProtocolType {
601     /**
602      * The default cast type "local", media can be routed on the same device,
603      * including internal speakers or audio jacks on the device itself, A2DP devices.
604      * @syscap SystemCapability.Multimedia.AVSession.AVCast
605      * @since 10
606      */
607     TYPE_LOCAL = 0,
608 
609     /**
610      * Cast+ mirror capability
611      * @syscap SystemCapability.Multimedia.AVSession.AVCast
612      * @systemapi
613      * @since 10
614      */
615     TYPE_CAST_PLUS_MIRROR  = 1,
616 
617     /**
618      * The Cast+ Stream indicating the media is presenting on a different device
619      * the application need get an AVCastController to control remote playback.
620      * @syscap SystemCapability.Multimedia.AVSession.AVCast
621      * @since 10
622      */
623     TYPE_CAST_PLUS_STREAM  = 2,
624 
625     /**
626      * The DLNA type indicates the device supports DLNA protocol,
627      * the application needs to get an AVCastController to control remote playback.
628      * @syscap SystemCapability.Multimedia.AVSession.AVCast
629      * @since 12
630      */
631     TYPE_DLNA = 4,
632 
633     /**
634      * This type indicates the device supports audio casting with high defination to get a better sound quality.
635      * @syscap SystemCapability.Multimedia.AVSession.AVCast
636      * @atomicservice
637      * @since 20
638      */
639     TYPE_CAST_PLUS_AUDIO = 8,
640 };
641 
642 /**
643  * Define different distributed session type
644  * @enum { number }
645  * @syscap SystemCapability.Multimedia.AVSession.Manager
646  * @systemapi
647  * @since 16
648  */
649 enum DistributedSessionType {
650     /**
651      * Remote session sensed from remote device.
652      * @syscap SystemCapability.Multimedia.AVSession.Manager
653      * @systemapi
654      * @since 16
655      */
656     TYPE_SESSION_REMOTE = 0,
657 
658     /**
659      * Migrate from remote device to this device.
660      * @syscap SystemCapability.Multimedia.AVSession.Manager
661      * @systemapi
662      * @since 16
663      */
664     TYPE_SESSION_MIGRATE_IN = 1,
665 
666     /**
667      * Migrate from this device to remote device.
668      * @syscap SystemCapability.Multimedia.AVSession.Manager
669      * @systemapi
670      * @since 16
671      */
672     TYPE_SESSION_MIGRATE_OUT = 2,
673 
674     /**
675      * Migrate session max flag.
676      * @syscap SystemCapability.Multimedia.AVSession.Manager
677      * @systemapi
678      * @since 16
679      */
680     TYPE_SESSION_MAX = 3,
681 };
682 
683 /**
684  * Define the device connection state.
685  * @syscap SystemCapability.Multimedia.AVSession.Core
686  * @since 10
687  */
688 enum ConnectionState {
689     /**
690      * A connection state indicating the device is in the process of connecting.
691      * @syscap SystemCapability.Multimedia.AVSession.Core
692      * @since 10
693      */
694     STATE_CONNECTING = 0,
695     /**
696      * A connection state indicating the device is connected.
697      * @syscap SystemCapability.Multimedia.AVSession.Core
698      * @since 10
699      */
700     STATE_CONNECTED = 1,
701     /**
702      * The default connection state indicating the device is disconnected.
703      * @syscap SystemCapability.Multimedia.AVSession.Core
704      * @since 10
705      */
706     STATE_DISCONNECTED = 6,
707 };
708 
709 enum DeviceType {
710     /**
711      * A device type indicating the route is on internal speakers or audio jacks on the device itself.
712      * @since 10
713      * @syscap SystemCapability.Multimedia.AVSession.Core
714      */
715     DEVICE_TYPE_LOCAL = 0,
716     /**
717      * A device type indicating the route is on a TV.
718      * @since 10
719      * @syscap SystemCapability.Multimedia.AVSession.AVCast
720      */
721     DEVICE_TYPE_TV = 2,
722     /**
723      * A device type indicating the route is on a smart speaker.
724      * @since 10
725      * @syscap SystemCapability.Multimedia.AVSession.AVCast
726      */
727     DEVICE_TYPE_SPEAKER = 3,
728     /**
729      * A device type indicating the route is on a bluetooth device.
730      * @since 10
731      * @syscap SystemCapability.Multimedia.AVSession.Core
732      */
733     DEVICE_TYPE_BLUETOOTH = 10,
734 };
735 
736 /**
737  * The defination of suggested resolution.
738  * @enum { number }
739  * @syscap SystemCapability.Multimedia.AVSession.AVCast
740  * @atomicservice
741  * @since 18
742  */
743 enum ResolutionLevel {
744     /**
745      * Definition of 480P which typically resolution is 640*480.
746      * @syscap SystemCapability.Multimedia.AVSession.AVCast
747      * @atomicservice
748      * @since 18
749      */
750     RESOLUTION_480P = 0,
751 
752     /**
753      * Defination of 720P which typically resolution is 1280*720.
754      * @syscap SystemCapability.Multimedia.AVSession.AVCast
755      * @atomicservice
756      * @since 18
757      */
758     RESOLUTION_720P = 1,
759 
760     /**
761      * Definition of 1080P which typically resolution is 1920*1080.
762      * @syscap SystemCapability.Multimedia.AVSession.AVCast
763      * @atomicservice
764      * @since 18
765      */
766     RESOLUTION_1080P = 2,
767 
768     /**
769      * Definition of 2K which typically resolution is 2560*1440.
770      * @syscap SystemCapability.Multimedia.AVSession.AVCast
771      * @atomicservice
772      * @since 18
773      */
774     RESOLUTION_2K = 3,
775 
776     /**
777      * Definition of 4K which typically resolution is 4096*3840.
778      * @syscap SystemCapability.Multimedia.AVSession.AVCast
779      * @atomicservice
780      * @since 18
781      */
782     RESOLUTION_4K = 4,
783 };
784 
785 /**
786  * Enumerates the HDR Format
787  *
788  * @enum { number }
789  * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
790  * @since 11
791  */
792 /**
793  * Enumerates the HDR Format
794  *
795  * @enum { number }
796  * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
797  * @atomicservice
798  * @since 12
799  */
800 enum HDRFormat {
801     /**
802      * Not support HDR.
803      *
804      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
805      * @since 11
806      */
807     /**
808      * Not support HDR.
809      *
810      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
811      * @atomicservice
812      * @since 12
813      */
814     NONE = 0,
815     /**
816      * HLG format supported by video.
817      *
818      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
819      * @since 11
820      */
821     /**
822      * HLG format supported by video.
823      *
824      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
825      * @atomicservice
826      * @since 12
827      */
828     VIDEO_HLG = 1,
829     /**
830      * HDR10 format supported by video.
831      *
832      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
833      * @since 11
834      */
835     /**
836      * HDR10 format supported by video.
837      *
838      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
839      * @atomicservice
840      * @since 12
841      */
842     VIDEO_HDR10 = 2,
843     /**
844      * HDR Vivid format supported by video.
845      *
846      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
847      * @since 11
848      */
849     /**
850      * HDR Vivid format supported by video.
851      *
852      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
853      * @atomicservice
854      * @since 12
855      */
856     VIDEO_HDR_VIVID = 3,
857     /**
858      * HDR Vivid format supported by image, stored in dual JPEG format.
859      *
860      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
861      * @since 11
862      */
863     /**
864      * HDR Vivid format supported by image, stored in dual JPEG format.
865      *
866      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
867      * @atomicservice
868      * @since 12
869      */
870     IMAGE_HDR_VIVID_DUAL = 4,
871     /**
872      * HDR Vivid format supported by image, stored in single HEIF format.
873      *
874      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
875      * @since 11
876      */
877     /**
878      * HDR Vivid format supported by image, stored in single HEIF format.
879      *
880      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
881      * @atomicservice
882      * @since 12
883      */
884     IMAGE_HDR_VIVID_SINGLE = 5,
885     /**
886      * ISO HDR format supported by image, stored in dual JPEG format.
887      *
888      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
889      * @since 11
890      */
891     /**
892      * ISO HDR format supported by image, stored in dual JPEG format.
893      *
894      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
895      * @atomicservice
896      * @since 12
897      */
898     IMAGE_HDR_ISO_DUAL = 6,
899     /**
900      * ISO HDR format supported by image, stored in single HEIF format.
901      *
902      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
903      * @since 11
904      */
905     /**
906      * ISO HDR format supported by image, stored in single HEIF format.
907      *
908      * @syscap SystemCapability.Graphic.Graphic2D.ColorManager.Core
909      * @atomicservice
910      * @since 12
911      */
912     IMAGE_HDR_ISO_SINGLE = 7,
913 };
914 
915 /**
916  * The defination of decoder type.
917  * @enum { string }
918  * @syscap SystemCapability.Multimedia.AVSession.AVCast
919  * @atomicservice
920  * @since 18
921  */
922 struct DecoderType {
923     /**
924      * Defination of avc codec type.
925      * @syscap SystemCapability.Multimedia.AVSession.AVCast
926      * @atomicservice
927      * @since 18
928      */
929     static constexpr const char *OH_AVCODEC_MIMETYPE_VIDEO_AVC = "video/avc";
930 
931     /**
932      * Defination of hevc codec type.
933      * @syscap SystemCapability.Multimedia.AVSession.AVCast
934      * @atomicservice
935      * @since 18
936      */
937     static constexpr const char *OH_AVCODEC_MIMETYPE_VIDEO_HEVC = "video/hevc";
938 
939     /**
940      * Defination of audio vivid codec type.
941      * @syscap SystemCapability.Multimedia.AVSession.AVCast
942      * @atomicservice
943      * @since 18
944      */
945     static constexpr const char *OH_AVCODEC_MIMETYPE_AUDIO_VIVID = "audio/av3a";
946 };
947 
948 enum CastEngineConnectState {
949     CONNECTING = 0,
950     CONNECTED = 1,
951     PAUSED = 2,
952     PLAYING = 3,
953     DISCONNECTING = 4,
954     DISCONNECTED = 5,
955     STREAM = 6,
956     MIRROR_TO_UI = 7,
957     UI_TO_MIRROR = 8,
958     UICAST = 9,
959     DEVICE_STATE_MAX = 10,
960 };
961 
962 /**
963  * Device state used to describe states including discovery, authentication and other scenes.
964  * @typedef DeviceState
965  * @syscap SystemCapability.Multimedia.AVSession.AVCast
966  * @atomicservice
967  * @since 20
968  */
969 struct DeviceState: public Parcelable {
970     /**
971      * Unique device descriptor.
972      * @syscap SystemCapability.Multimedia.AVSession.AVCast
973      * @atomicservice
974      * @since 20
975      */
976     std::string deviceId = "";
977 
978     /**
979      * Device connection state.
980      * @syscap SystemCapability.Multimedia.AVSession.AVCast
981      * @atomicservice
982      * @since 20
983      */
984     int32_t deviceState = CastEngineConnectState::DISCONNECTED;
985 
986     /**
987      * Reason for connection failure, for example, user cancellation and timeout.
988      * @syscap SystemCapability.Multimedia.AVSession.AVCast
989      * @atomicservice
990      * @since 20
991      */
992     int32_t reasonCode = 0;
993 
994     /**
995      * System radar error code returned by cast+services.
996      * @syscap SystemCapability.Multimedia.AVSession.AVCast
997      * @atomicservice
998      * @since 20
999      */
1000     int32_t radarErrorCode = 0;
1001 
MarshallingDeviceState1002     bool Marshalling(Parcel& out) const override
1003     {
1004         return out.WriteString(deviceId) &&
1005             out.WriteInt32(static_cast<int32_t>(deviceState)) &&
1006             out.WriteInt32(static_cast<int32_t>(reasonCode)) &&
1007             out.WriteInt32(static_cast<int32_t>(radarErrorCode));
1008     }
1009 
UnmarshallingDeviceState1010     static DeviceState* Unmarshalling(Parcel& in)
1011     {
1012         auto info = std::make_unique<DeviceState>();
1013         if (info != nullptr && info->ReadFromParcel(in)) {
1014             return info.release();
1015         }
1016         return nullptr;
1017     }
1018 
ReadFromParcelDeviceState1019     bool ReadFromParcel(Parcel& in)
1020     {
1021         if (!in.ReadString(deviceId)) {
1022             return false;
1023         }
1024 
1025         if (!in.ReadInt32(deviceState)) {
1026             return false;
1027         }
1028 
1029         if (!in.ReadInt32(reasonCode)) {
1030             return false;
1031         }
1032 
1033         if (!in.ReadInt32(radarErrorCode)) {
1034             return false;
1035         }
1036         return true;
1037     }
1038 };
1039 
1040 /**
1041  * Enumerates ErrorCode types, returns in BusinessError.code.
1042  * @enum { number }
1043  * @syscap SystemCapability.Multimedia.AVSession.Core
1044  * @since 10
1045  */
1046 enum AVSessionErrorCode {
1047     /**
1048      * Session service exception.
1049      * @syscap SystemCapability.Multimedia.AVSession.Core
1050      * @since 10
1051      */
1052     ERR_CODE_SERVICE_EXCEPTION = 6600101,
1053 
1054     /**
1055      * The session does not exist
1056      * @syscap SystemCapability.Multimedia.AVSession.Core
1057      * @since 10
1058      */
1059     ERR_CODE_SESSION_NOT_EXIST = 6600102,
1060 
1061     /**
1062      * The session controller does not exist.
1063      * @syscap SystemCapability.Multimedia.AVSession.Core
1064      * @since 10
1065      */
1066     ERR_CODE_CONTROLLER_NOT_EXIST = 6600103,
1067 
1068     /**
1069      * The remote session connection failed.
1070      * @syscap SystemCapability.Multimedia.AVSession.Core
1071      * @since 10
1072      */
1073     ERR_CODE_REMOTE_CONNECTION_ERR = 6600104,
1074 
1075     /**
1076      * Invalid session command.
1077      * @syscap SystemCapability.Multimedia.AVSession.Core
1078      * @since 10
1079      */
1080     ERR_CODE_COMMAND_INVALID = 6600105,
1081 
1082     /**
1083      * The session is not activated.
1084      * @syscap SystemCapability.Multimedia.AVSession.Core
1085      * @since 10
1086      */
1087     ERR_CODE_SESSION_INACTIVE = 6600106,
1088 
1089     /**
1090      * Too many commands or events.
1091      * @syscap SystemCapability.Multimedia.AVSession.Core
1092      * @since 10
1093      */
1094     ERR_CODE_MESSAGE_OVERLOAD = 6600107,
1095 
1096     /**
1097      * Device connecting failed.
1098      * @syscap SystemCapability.Multimedia.AVSession.Core
1099      * @since 10
1100      */
1101     ERR_CODE_DEVICE_CONNECTION_FAILED = 6600108,
1102 
1103     /**
1104      * The remote connection is not established.
1105      * @syscap SystemCapability.Multimedia.AVSession.Core
1106      * @since 10
1107      */
1108     ERR_CODE_REMOTE_CONNECTION_NOT_EXIST = 6600109,
1109 
1110     /**
1111      * The error code for cast control is unspecified.
1112      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1113      * @atomicservice
1114      * @since 13
1115      */
1116     ERR_CODE_CAST_CONTROL_UNSPECIFIED = 6611000,
1117 
1118     /**
1119      * An unspecified error occurs in the remote player.
1120      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1121      * @atomicservice
1122      * @since 13
1123      */
1124     ERR_CODE_CAST_CONTROL_REMOTE_ERROR = 6611001,
1125 
1126     /**
1127      * The playback position falls behind the live window.
1128      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1129      * @atomicservice
1130      * @since 13
1131      */
1132     ERR_CODE_CAST_CONTROL_BEHIND_LIVE_WINDOW = 6611002,
1133 
1134     /**
1135      * The process of cast control times out.
1136      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1137      * @atomicservice
1138      * @since 13
1139      */
1140     ERR_CODE_CAST_CONTROL_TIMEOUT = 6611003,
1141 
1142     /**
1143      * The runtime check failed.
1144      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1145      * @atomicservice
1146      * @since 13
1147      */
1148     ERR_CODE_CAST_CONTROL_RUNTIME_CHECK_FAILED = 6611004,
1149 
1150     /**
1151      * Cross-device data transmission is locked.
1152      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1153      * @atomicservice
1154      * @since 13
1155      */
1156     ERR_CODE_CAST_CONTROL_PLAYER_NOT_WORKING = 6611100,
1157 
1158     /**
1159      * The specified seek mode is not supported.
1160      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1161      * @atomicservice
1162      * @since 13
1163      */
1164     ERR_CODE_CAST_CONTROL_SEEK_MODE_UNSUPPORTED = 6611101,
1165 
1166     /**
1167      * The position to seek to is out of the range of the media asset or the specified seek mode is not supported.
1168      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1169      * @atomicservice
1170      * @since 13
1171      */
1172     ERR_CODE_CAST_CONTROL_ILLEGAL_SEEK_TARGET = 6611102,
1173 
1174     /**
1175      * The specified playback mode is not supported.
1176      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1177      * @atomicservice
1178      * @since 13
1179      */
1180     ERR_CODE_CAST_CONTROL_PLAY_MODE_UNSUPPORTED = 6611103,
1181 
1182     /**
1183      * The specified playback speed is not supported.
1184      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1185      * @atomicservice
1186      * @since 13
1187      */
1188     ERR_CODE_CAST_CONTROL_PLAY_SPEED_UNSUPPORTED = 6611104,
1189 
1190     /**
1191      * The action failed because either the media source device or the media sink device has been revoked.
1192      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1193      * @atomicservice
1194      * @since 13
1195      */
1196     ERR_CODE_CAST_CONTROL_DEVICE_MISSING = 6611105,
1197 
1198     /**
1199      * The parameter is invalid, for example, the url is illegal to play.
1200      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1201      * @atomicservice
1202      * @since 13
1203      */
1204     ERR_CODE_CAST_CONTROL_INVALID_PARAM = 6611106,
1205 
1206     /**
1207      * Allocation of memory failed.
1208      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1209      * @atomicservice
1210      * @since 13
1211      */
1212     ERR_CODE_CAST_CONTROL_NO_MEMORY = 6611107,
1213 
1214     /**
1215      * Operation is not allowed.
1216      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1217      * @atomicservice
1218      * @since 13
1219      */
1220     ERR_CODE_CAST_CONTROL_OPERATION_NOT_ALLOWED = 6611108,
1221 
1222     /**
1223      * An unspecified input/output error occurs.
1224      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1225      * @atomicservice
1226      * @since 13
1227      */
1228     ERR_CODE_CAST_CONTROL_IO_UNSPECIFIED = 6612000,
1229 
1230     /**
1231      * Network connection failure.
1232      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1233      * @atomicservice
1234      * @since 13
1235      */
1236     ERR_CODE_CAST_CONTROL_IO_NETWORK_CONNECTION_FAILED = 6612001,
1237 
1238     /**
1239      * Network timeout.
1240      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1241      * @atomicservice
1242      * @since 13
1243      */
1244     ERR_CODE_CAST_CONTROL_IO_NETWORK_CONNECTION_TIMEOUT = 6612002,
1245 
1246     /**
1247      * Invalid "Content-Type" HTTP header.
1248      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1249      * @atomicservice
1250      * @since 13
1251      */
1252     ERR_CODE_CAST_CONTROL_IO_INVALID_HTTP_CONTENT_TYPE = 6612003,
1253 
1254     /**
1255      * The HTTP server returns an unexpected HTTP response status code.
1256      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1257      * @atomicservice
1258      * @since 13
1259      */
1260     ERR_CODE_CAST_CONTROL_IO_BAD_HTTP_STATUS = 6612004,
1261 
1262     /**
1263      * The file does not exist.
1264      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1265      * @atomicservice
1266      * @since 13
1267      */
1268     ERR_CODE_CAST_CONTROL_IO_FILE_NOT_FOUND = 6612005,
1269 
1270     /**
1271      * No permission is granted to perform the IO operation.
1272      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1273      * @atomicservice
1274      * @since 13
1275      */
1276     ERR_CODE_CAST_CONTROL_IO_NO_PERMISSION = 6612006,
1277 
1278     /**
1279      * Access to cleartext HTTP traffic is not allowed by the app's network security configuration.
1280      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1281      * @atomicservice
1282      * @since 13
1283      */
1284     ERR_CODE_CAST_CONTROL_IO_CLEARTEXT_NOT_PERMITTED = 6612007,
1285 
1286     /**
1287      * Reading data out of the data bound.
1288      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1289      * @atomicservice
1290      * @since 13
1291      */
1292     ERR_CODE_CAST_CONTROL_IO_READ_POSITION_OUT_OF_RANGE = 6612008,
1293 
1294     /**
1295      * The media does not contain any contents that can be played.
1296      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1297      * @atomicservice
1298      * @since 13
1299      */
1300     ERR_CODE_CAST_CONTROL_IO_NO_CONTENTS = 6612100,
1301 
1302     /**
1303      * The media cannot be read, for example, because of dust or scratches.
1304      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1305      * @atomicservice
1306      * @since 13
1307      */
1308     ERR_CODE_CAST_CONTROL_IO_READ_ERROR = 6612101,
1309 
1310     /**
1311      * This resource is already in use.
1312      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1313      * @atomicservice
1314      * @since 13
1315      */
1316     ERR_CODE_CAST_CONTROL_IO_CONTENT_BUSY = 6612102,
1317 
1318     /**
1319      * The content using the validity interval has expired.
1320      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1321      * @atomicservice
1322      * @since 13
1323      */
1324     ERR_CODE_CAST_CONTROL_IO_CONTENT_EXPIRED = 6612103,
1325 
1326     /**
1327      * Using the requested content to play is not allowed.
1328      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1329      * @atomicservice
1330      * @since 13
1331      */
1332     ERR_CODE_CAST_CONTROL_IO_USE_FORBIDDEN = 6612104,
1333 
1334     /**
1335      * The use of the allowed content cannot be verified.
1336      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1337      * @atomicservice
1338      * @since 13
1339      */
1340     ERR_CODE_CAST_CONTROL_IO_NOT_VERIFIED = 6612105,
1341 
1342     /**
1343      * The number of times this content has been used as requested has reached the maximum allowed number of uses.
1344      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1345      * @atomicservice
1346      * @since 13
1347      */
1348     ERR_CODE_CAST_CONTROL_IO_EXHAUSTED_ALLOWED_USES = 6612106,
1349 
1350     /**
1351      * An error occurs when sending packet from source device to sink device.
1352      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1353      * @atomicservice
1354      * @since 13
1355      */
1356     ERR_CODE_CAST_CONTROL_IO_NETWORK_PACKET_SENDING_FAILED = 6612107,
1357 
1358     /**
1359      * Unspecified error related to content parsing.
1360      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1361      * @atomicservice
1362      * @since 13
1363      */
1364     ERR_CODE_CAST_CONTROL_PARSING_UNSPECIFIED = 6613000,
1365 
1366     /**
1367      * Parsing error associated with media container format bit streams.
1368      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1369      * @atomicservice
1370      * @since 13
1371      */
1372     ERR_CODE_CAST_CONTROL_PARSING_CONTAINER_MALFORMED = 6613001,
1373 
1374     /**
1375      * Parsing error associated with the media manifest.
1376      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1377      * @atomicservice
1378      * @since 13
1379      */
1380     ERR_CODE_CAST_CONTROL_PARSING_MANIFEST_MALFORMED = 6613002,
1381 
1382     /**
1383      * An error occurs when attempting to extract a file with an unsupported media container format
1384      * or an unsupported media container feature.
1385      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1386      * @atomicservice
1387      * @since 13
1388      */
1389     ERR_CODE_CAST_CONTROL_PARSING_CONTAINER_UNSUPPORTED = 6613003,
1390 
1391     /**
1392      * Unsupported feature in the media manifest.
1393      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1394      * @atomicservice
1395      * @since 13
1396      */
1397     ERR_CODE_CAST_CONTROL_PARSING_MANIFEST_UNSUPPORTED = 6613004,
1398 
1399     /**
1400      * Unspecified decoding error.
1401      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1402      * @atomicservice
1403      * @since 13
1404      */
1405     ERR_CODE_CAST_CONTROL_DECODING_UNSPECIFIED = 6614000,
1406 
1407     /**
1408      * Decoder initialization failed.
1409      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1410      * @atomicservice
1411      * @since 13
1412      */
1413     ERR_CODE_CAST_CONTROL_DECODING_INIT_FAILED = 6614001,
1414 
1415     /**
1416      * Decoder query failed.
1417      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1418      * @atomicservice
1419      * @since 13
1420      */
1421     ERR_CODE_CAST_CONTROL_DECODING_QUERY_FAILED = 6614002,
1422 
1423     /**
1424      * Decoding the media samples failed.
1425      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1426      * @atomicservice
1427      * @since 13
1428      */
1429     ERR_CODE_CAST_CONTROL_DECODING_FAILED = 6614003,
1430 
1431     /**
1432      * The format of the content to decode exceeds the capabilities of the device.
1433      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1434      * @atomicservice
1435      * @since 13
1436      */
1437     ERR_CODE_CAST_CONTROL_DECODING_FORMAT_EXCEEDS_CAPABILITIES = 6614004,
1438 
1439     /**
1440      * The format of the content to decode is not supported.
1441      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1442      * @atomicservice
1443      * @since 13
1444      */
1445     ERR_CODE_CAST_CONTROL_DECODING_FORMAT_UNSUPPORTED = 6614005,
1446 
1447     /**
1448      * Unspecified errors related to the audio renderer.
1449      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1450      * @atomicservice
1451      * @since 13
1452      */
1453     ERR_CODE_CAST_CONTROL_AUDIO_RENDERER_UNSPECIFIED = 6615000,
1454 
1455     /**
1456      * Initializing the audio renderer failed.
1457      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1458      * @atomicservice
1459      * @since 13
1460      */
1461     ERR_CODE_CAST_CONTROL_AUDIO_RENDERER_INIT_FAILED = 6615001,
1462 
1463     /**
1464      * The audio renderer fails to write data.
1465      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1466      * @atomicservice
1467      * @since 13
1468      */
1469     ERR_CODE_CAST_CONTROL_AUDIO_RENDERER_WRITE_FAILED = 6615002,
1470 
1471     /**
1472      * Unspecified error related to DRM.
1473      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1474      * @atomicservice
1475      * @since 13
1476      */
1477     ERR_CODE_CAST_CONTROL_DRM_UNSPECIFIED = 6616000,
1478 
1479     /**
1480      * The chosen DRM protection scheme is not supported by the device.
1481      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1482      * @atomicservice
1483      * @since 13
1484      */
1485     ERR_CODE_CAST_CONTROL_DRM_SCHEME_UNSUPPORTED = 6616001,
1486 
1487     /**
1488      * Device provisioning failed.
1489      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1490      * @atomicservice
1491      * @since 13
1492      */
1493     ERR_CODE_CAST_CONTROL_DRM_PROVISIONING_FAILED = 6616002,
1494 
1495     /**
1496      * The DRM-protected content to play is incompatible.
1497      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1498      * @atomicservice
1499      * @since 13
1500      */
1501     ERR_CODE_CAST_CONTROL_DRM_CONTENT_ERROR = 6616003,
1502 
1503     /**
1504      * Failed to obtain a license.
1505      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1506      * @atomicservice
1507      * @since 13
1508      */
1509     ERR_CODE_CAST_CONTROL_DRM_LICENSE_ACQUISITION_FAILED = 6616004,
1510 
1511     /**
1512      * The operation is disallowed by the license policy.
1513      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1514      * @atomicservice
1515      * @since 13
1516      */
1517     ERR_CODE_CAST_CONTROL_DRM_DISALLOWED_OPERATION = 6616005,
1518 
1519     /**
1520      * An error occurs in the DRM system.
1521      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1522      * @atomicservice
1523      * @since 13
1524      */
1525     ERR_CODE_CAST_CONTROL_DRM_SYSTEM_ERROR = 6616006,
1526 
1527     /**
1528      * The device has revoked DRM privileges.
1529      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1530      * @atomicservice
1531      * @since 13
1532      */
1533     ERR_CODE_CAST_CONTROL_DRM_DEVICE_REVOKED = 6616007,
1534 
1535     /**
1536      * The DRM license being loaded into the open DRM session has expired.
1537      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1538      * @atomicservice
1539      * @since 13
1540      */
1541     ERR_CODE_CAST_CONTROL_DRM_LICENSE_EXPIRED = 6616008,
1542 
1543     /**
1544      * An error occurs when the DRM processes the key response.
1545      * @syscap SystemCapability.Multimedia.AVSession.AVCast
1546      * @atomicservice
1547      * @since 13
1548      */
1549     ERR_CODE_CAST_CONTROL_DRM_PROVIDE_KEY_RESPONSE_ERROR = 6616100,
1550 };
1551 } // namespace OHOS::AVSession
1552 #endif // OHOS_AVSESSION_INFO_H
1553