• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023-2023 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  * Description: Cast engine related common data stucture definitions.
15  * Author: zhangge
16  * Create: 2022-06-15
17  */
18 
19 #ifndef CAST_ENGINE_COMMON_H
20 #define CAST_ENGINE_COMMON_H
21 
22 #include <array>
23 #include <map>
24 #include <string>
25 #include "cast_data_source.h"
26 
27 #include <message_parcel.h>
28 #define EXPORT __attribute__((visibility("default")))
29 
30 namespace OHOS {
31 namespace CastEngine {
32 enum class EXPORT DeviceType {
33     DEVICE_OTHERS = 0,
34     DEVICE_SCREEN_PLAYER = 1,
35     DEVICE_HW_TV = 2,
36     DEVICE_SOUND_BOX = 3,
37     DEVICE_HICAR = 4,
38     DEVICE_MATEBOOK = 5,
39     DEVICE_PAD = 6,
40     DEVICE_CAST_PLUS = 7,
41     DEVICE_TYPE_2IN1 = 8,
42     DEVICE_SMART_SCREEN_UNF = 9,
43     DEVICE_PAD_IN_CAR = 10,
44     DEVICE_SUPER_LAUNCHER = 11,
45     DEVICE_CAR_MULTI_SCREEN_PLAY = 12,
46     DEVICE_MIRACAST = 13,
47     DEVICE_MAX, // add deviceType before this
48 };
49 
50 inline constexpr int EXPORT INVALID_ID = -1;
51 
IsDeviceType(int32_t type)52 inline bool EXPORT IsDeviceType(int32_t type)
53 {
54     return (type >= static_cast<int32_t>(DeviceType::DEVICE_OTHERS)) &&
55         (type <= static_cast<int32_t>(DeviceType::DEVICE_MIRACAST));
56 }
57 
58 enum class EXPORT SubDeviceType {
59     SUB_DEVICE_DEFAULT = 0,
60     SUB_DEVICE_MATEBOOK_PAD = 51,
61     SUB_DEVICE_CAST_PLUS_WHITEBOARD = 0x00B2
62 };
63 
IsSubDeviceType(int32_t type)64 inline bool EXPORT IsSubDeviceType(int32_t type)
65 {
66     return (type == static_cast<int32_t>(SubDeviceType::SUB_DEVICE_DEFAULT)) ||
67         (type == static_cast<int32_t>(SubDeviceType::SUB_DEVICE_MATEBOOK_PAD)) ||
68         (type == static_cast<int32_t>(SubDeviceType::SUB_DEVICE_CAST_PLUS_WHITEBOARD));
69 }
70 
71 enum class EXPORT TriggerType {
72     UNSPEC_TAG = 0,
73     PASSIVE_MATCH_TAG = 1,
74     ACTIVE_MATCH_TAG = 2,
75     PASSIVE_BIND_TAG = 3,
76 };
77 
IsTriggerType(int32_t type)78 inline bool EXPORT IsTriggerType(int32_t type)
79 {
80     return (type >= static_cast<int32_t>(TriggerType::UNSPEC_TAG)) &&
81         (type <= static_cast<int32_t>(TriggerType::PASSIVE_BIND_TAG));
82 }
83 
84 enum class EXPORT DeviceState {
85     CONNECTING,
86     CONNECTED,
87     PAUSED,
88     PLAYING,
89     DISCONNECTING,
90     DISCONNECTED,
91     STREAM,
92     MIRROR_TO_UI,
93     UI_TO_MIRROR,
94     UICAST,
95     AUTHING,
96     MIRROR_TO_STREAM,
97     STREAM_TO_MIRROR,
98     DEVICE_STATE_MAX,
99 };
100 
101 enum EXPORT DeviceRemoveAction {
102     // device remove and stop playing.
103     ACTION_DISCONNECT = 0,
104     // device remove and keep playing.
105     ACTION_CONTINUE_PLAY = 1,
106 };
107 
108 enum class EXPORT DeviceGrabState {
109     GRAB_ALLOWED,
110     GRAB_NOT_ALLOWED,
111     GRABING,
112     NO_GRAB,
113 };
114 
115 enum ConnectStageResult : int32_t {
116     AUTHING,
117     AUTH_SUCCESS,
118     AUTH_FAILED,
119     CONNECT_START,
120     CONNECT_FAIL,
121     CONNECT_SUCCESS,
122     DISCONNECT_START,
123 };
124 
125 /*
126  * reason code for right process or user action
127  */
128 enum EXPORT ReasonCode {
129     REASON_DEFAULT = 0,
130     // Peer of sink click "TRUST", both permanently and temporarily.
131     REASON_TRUST_BY_SINK = 10000,
132     // Peer of source click "CANCEL pin code input".
133     REASON_CANCEL_BY_SOURCE = 10001,
134     // Peer of source input correct pin code and  click "CONFIRM".
135     REASON_BIND_COMPLETED = 10002,
136     // Start to show THREE-STATE window.
137     REASON_SHOW_TRUST_SELECT_UI = 10003,
138     // Process of bind is interrupted by user.
139     REASON_STOP_BIND_BY_SOURCE = 10004,
140     // Peer of source input wrong pin code over 3 times.
141     REASON_PIN_CODE_OVER_RETRY = 10005,
142     // Peer of sink click "CANCEL" during peer of source input pin code.
143     REASON_CANCEL_BY_SINK = 10006,
144     // Peer of sink click "DISTRUST" in THREE-STATE window.
145     REASON_DISTRUST_BY_SINK = 10007,
146     // user no action, so timeout
147     REASON_USER_TIMEOUT = 10008,
148     // Peer device is busy
149     REASON_DEVICE_IS_BUSY = 10009,
150 };
151 
152 const EXPORT std::array<std::string, static_cast<size_t>(DeviceState::DEVICE_STATE_MAX)> DEVICE_STATE_STRING = {
153     "CONNECTING", "CONNECTED", "PAUSED", "PLAYING", "DISCONNECTING", "DISCONNECTED", "STREAM",
154     "MIRROR_TO_UI", "UI_TO_MIRROR", "UICAST", "AUTHING",
155 };
156 
IsDeviceState(int32_t state)157 inline bool EXPORT IsDeviceState(int32_t state)
158 {
159     return (state >= static_cast<int32_t>(DeviceState::CONNECTING)) &&
160         (state < static_cast<int32_t>(DeviceState::DEVICE_STATE_MAX));
161 }
162 
163 enum class EXPORT ServiceStatus {
164     DISCONNECTED,
165     DISCONNECTING,
166     CONNECTING,
167     CONNECTED,
168 };
169 
IsServiceStatus(int32_t status)170 inline bool EXPORT IsServiceStatus(int32_t status)
171 {
172     return (status >= static_cast<int32_t>(ServiceStatus::DISCONNECTED)) &&
173         (status <= static_cast<int32_t>(ServiceStatus::CONNECTED));
174 }
175 
176 enum class EXPORT DeviceStatusState {
177     DEVICE_AVAILABLE,
178     DEVICE_CONNECTED,
179     DEVICE_DISCONNECTED,
180     DEVICE_CONNECT_REQ,
181 };
182 
IsDeviceStatus(int32_t status)183 inline bool EXPORT IsDeviceStatus(int32_t status)
184 {
185     return (status >= static_cast<int32_t>(DeviceStatusState::DEVICE_AVAILABLE)) &&
186         (status <= static_cast<int32_t>(DeviceStatusState::DEVICE_CONNECT_REQ));
187 }
188 
189 enum class EXPORT PropertyType {
190     VIDEO_SIZE,
191     VIDEO_FPS,
192     WINDOW_SIZE,
193 };
194 
IsPropertyType(int32_t type)195 inline bool EXPORT IsPropertyType(int32_t type)
196 {
197     return (type >= static_cast<int32_t>(PropertyType::VIDEO_SIZE)) &&
198         (type <= static_cast<int32_t>(PropertyType::WINDOW_SIZE));
199 }
200 
201 enum class EXPORT ChannelType {
202     SOFT_BUS,
203     LEGACY_CHANNEL,
204 };
205 
IsChannelType(int32_t type)206 inline bool EXPORT IsChannelType(int32_t type)
207 {
208     return (type == static_cast<int32_t>(ChannelType::SOFT_BUS)) ||
209         (type == static_cast<int32_t>(ChannelType::LEGACY_CHANNEL));
210 }
211 
212 enum class EXPORT CapabilityType {
213     CAST_PLUS,
214     DLNA,
215     CAST_AND_DLNA,
216 };
217 
IsCapabilityType(int32_t type)218 inline bool EXPORT IsCapabilityType(int32_t type)
219 {
220     return (type == static_cast<int32_t>(CapabilityType::CAST_PLUS)) ||
221         (type == static_cast<int32_t>(CapabilityType::DLNA)) ||
222         (type == static_cast<int32_t>(CapabilityType::CAST_AND_DLNA));
223 }
224 
225 enum class EXPORT ProtocolType {
226     CAST_PLUS_MIRROR = 1 << 0,
227     CAST_PLUS_STREAM = 1 << 1,
228     DLNA = 1 << 2,
229     MIRACAST = 1 << 3,
230     COOPERATION = 1 << 5,
231     HICAR = 1 << 6,
232     SUPER_LAUNCHER = 1 << 7,
233     CAST_PLUS_AUDIO = 1 << 10,
234 };
235 
IsProtocolType(int32_t type)236 inline bool EXPORT IsProtocolType(int32_t type)
237 {
238     return (static_cast<uint32_t>(type) & (static_cast<uint32_t>(ProtocolType::CAST_PLUS_MIRROR) |
239         static_cast<uint32_t>(ProtocolType::CAST_PLUS_STREAM) |
240         static_cast<uint32_t>(ProtocolType::MIRACAST) |
241         static_cast<uint32_t>(ProtocolType::DLNA) |
242         static_cast<uint32_t>(ProtocolType::COOPERATION) |
243         static_cast<uint32_t>(ProtocolType::HICAR) |
244         static_cast<uint32_t>(ProtocolType::SUPER_LAUNCHER) |
245         static_cast<uint32_t>(ProtocolType::CAST_PLUS_AUDIO))) != 0;
246 }
247 
248 enum class EXPORT EndType {
249     CAST_SINK = 0x10,
250     CAST_SOURCE = 0x11,
251 };
252 
IsEndType(int32_t type)253 inline bool EXPORT IsEndType(int32_t type)
254 {
255     return (type == static_cast<int32_t>(EndType::CAST_SINK)) || (type == static_cast<int32_t>(EndType::CAST_SOURCE));
256 }
257 
258 struct EXPORT DeviceStateInfo {
259     DeviceState deviceState{ DeviceState::DISCONNECTED };
260     std::string deviceId{};
261     ReasonCode reasonCode{ ReasonCode::REASON_DEFAULT };
262 };
263 
264 struct EXPORT VideoSize {
265     uint32_t width;
266     uint32_t height;
267 };
268 
269 struct EXPORT WindowProperty {
270     uint32_t startX;
271     uint32_t startY;
272     uint32_t width;
273     uint32_t height;
274 };
275 
276 struct EXPORT PropertyContainer {
277     PropertyType type;
278     union {
279         VideoSize videoSize;
280         uint32_t videoFps;
281         WindowProperty windowProperty;
282     };
283 };
284 
285 enum class EXPORT ColorStandard {
286     BT709 = 1,
287     BT601_PAL = 2,
288     BT601_NTSC = 3,
289     BT2020 = 6,
290 };
291 
IsColorStandard(int32_t color)292 inline bool EXPORT IsColorStandard(int32_t color)
293 {
294     return (color == static_cast<int32_t>(ColorStandard::BT709)) ||
295         (color == static_cast<int32_t>(ColorStandard::BT601_PAL)) ||
296         (color == static_cast<int32_t>(ColorStandard::BT601_NTSC)) ||
297         (color == static_cast<int32_t>(ColorStandard::BT2020));
298 }
299 
300 enum class EXPORT VideoCodecType {
301     H264 = 1,
302     H265 = 2,
303 };
304 
IsVideoCodecType(int32_t type)305 inline bool EXPORT IsVideoCodecType(int32_t type)
306 {
307     return (type == static_cast<int32_t>(VideoCodecType::H264)) || type == static_cast<int32_t>(VideoCodecType::H265);
308 }
309 
310 struct EXPORT AudioProperty {
311     uint32_t sampleRate{ 0 };
312     uint8_t sampleBitWidth{ 0 };
313     uint32_t channelConfig{ 0 };
314     uint32_t bitrate{ 0 };
315     uint32_t codec{ 0 };
316 };
317 
318 struct EXPORT VideoProperty {
319     uint32_t videoWidth{ 0 };
320     uint32_t videoHeight{ 0 };
321     uint32_t fps{ 0 };
322     VideoCodecType codecType{ VideoCodecType::H264 };
323     int gop{ 0 };
324     uint32_t bitrate{ 0 };
325     uint32_t minBitrate{ 0 };
326     uint32_t maxBitrate{ 0 };
327     uint32_t dpi{ 0 };
328     ColorStandard colorStandard{ ColorStandard::BT709 };
329     uint32_t screenWidth{ 0 };
330     uint32_t screenHeight{ 0 };
331     uint32_t profile{ 0 };
332     uint32_t level{ 0 };
333 };
334 
335 typedef struct EXPORT {
336     int32_t uicastMainVersion;
337     int32_t uicastSubVersion;
338     int32_t appApiVersion;
339     uint32_t capability;
340     uint8_t featureEnable;
341 } UICastCapability;
342 
343 struct EXPORT CastSessionProperty {
344     ProtocolType protocolType{ ProtocolType::CAST_PLUS_MIRROR };
345     EndType endType{ EndType::CAST_SINK };
346     AudioProperty audioProperty;
347     VideoProperty videoProperty;
348     WindowProperty windowProperty;
349 };
350 
351 struct EXPORT CastLocalDevice {
352     std::string deviceId;
353     std::string deviceName;
354     DeviceType deviceType;
355     SubDeviceType subDeviceType;
356     std::string ipAddress;
357     TriggerType triggerType;
358     std::string authData;
359 };
360 
361 struct EXPORT AuthInfo {
362     int authMode;
363     uint32_t authCode;
364     std::string deviceId;
365 };
366 
367 const uint32_t CH_MODE_OFFSET = 44;
368 const uint32_t CH_HOA_ORDNUM_OFFSET = 0;
369 const uint32_t CH_HOA_COMORD_OFFSET = 8;
370 const uint32_t CH_HOA_NOR_OFFSET = 12;
371 
372 // sampling rate
373 enum AudioSamplingRate {
374     SAMPLE_RATE_8000 = 8000,
375     SAMPLE_RATE_11025 = 11025,
376     SAMPLE_RATE_12000 = 12000,
377     SAMPLE_RATE_16000 = 16000,
378     SAMPLE_RATE_22050 = 22050,
379     SAMPLE_RATE_24000 = 24000,
380     SAMPLE_RATE_32000 = 32000,
381     SAMPLE_RATE_44100 = 44100,
382     SAMPLE_RATE_48000 = 48000,
383     SAMPLE_RATE_64000 = 64000,
384     SAMPLE_RATE_88200 = 88200,
385     SAMPLE_RATE_96000 = 96000,
386     SAMPLE_RATE_176400 = 176400,
387     SAMPLE_RATE_192000 = 192000
388 };
389 
390 enum AudioEncodingType {
391     ENCODING_INVALID = -1,
392     ENCODING_PCM = 0,
393     ENCODING_AUDIOVIVID = 1
394 };
395 
396 
397 // format
398 enum AudioSampleFormat : uint8_t {
399     SAMPLE_U8 = 0,
400     SAMPLE_S16LE = 1,
401     SAMPLE_S24LE = 2,
402     SAMPLE_S32LE = 3,
403     SAMPLE_F32LE = 4,
404     INVALID_WIDTH = -1
405 };
406 
407 // channel
408 enum AudioChannel : uint8_t {
409     CHANNEL_UNKNOW = 0,
410     MONO = 1,
411     STEREO = 2,
412     CHANNEL_3 = 3,
413     CHANNEL_4 = 4,
414     CHANNEL_5 = 5,
415     CHANNEL_6 = 6,
416     CHANNEL_7 = 7,
417     CHANNEL_8 = 8,
418     CHANNEL_9 = 9,
419     CHANNEL_10 = 10,
420     CHANNEL_11 = 11,
421     CHANNEL_12 = 12,
422     CHANNEL_13 = 13,
423     CHANNEL_14 = 14,
424     CHANNEL_15 = 15,
425     CHANNEL_16 = 16
426 };
427 
428 enum AudioChannelSet: uint64_t {
429     FRONT_LEFT = 1ULL << 0U, FRONT_RIGHT = 1ULL << 1U, FRONT_CENTER = 1ULL << 2U,
430     LOW_FREQUENCY = 1ULL << 3U,
431     BACK_LEFT = 1ULL << 4U, BACK_RIGHT = 1ULL << 5U,
432     FRONT_LEFT_OF_CENTER = 1ULL << 6U, FRONT_RIGHT_OF_CENTER = 1ULL << 7U,
433     BACK_CENTER = 1ULL << 8U,
434     SIDE_LEFT = 1ULL << 9U, SIDE_RIGHT = 1ULL << 10U,
435     TOP_CENTER = 1ULL << 11U,
436     TOP_FRONT_LEFT = 1ULL << 12U, TOP_FRONT_CENTER = 1ULL << 13U, TOP_FRONT_RIGHT = 1ULL << 14U,
437     TOP_BACK_LEFT = 1ULL << 15U, TOP_BACK_CENTER = 1ULL << 16U, TOP_BACK_RIGHT = 1ULL << 17U,
438     STEREO_LEFT = 1ULL << 29U, STEREO_RIGHT = 1ULL << 30U,
439     WIDE_LEFT = 1ULL << 31U, WIDE_RIGHT = 1ULL << 32U,
440     SURROUND_DIRECT_LEFT = 1ULL << 33U, SURROUND_DIRECT_RIGHT = 1ULL << 34U,
441     LOW_FREQUENCY_2 = 1ULL << 35U,
442     TOP_SIDE_LEFT = 1ULL << 36U, TOP_SIDE_RIGHT = 1ULL << 37U,
443     BOTTOM_FRONT_CENTER = 1ULL << 38U, BOTTOM_FRONT_LEFT = 1ULL << 39U, BOTTOM_FRONT_RIGHT = 1ULL << 40U
444 };
445 
446 enum ChannelMode: uint64_t {
447     CHANNEL_MDOE_NORMAL = 0ULL,
448     CHANNEL_MDOE_AMBISONIC = 1ULL,
449     CHANNEL_MDOE_BINAURAL = 2ULL
450 };
451 
452 enum HOAOrderNumber: uint64_t {
453     HOA_ORDNUM_1 = 1ULL,
454     HOA_ORDNUM_2 = 2ULL,
455     HOA_ORDNUM_3 = 3ULL
456 };
457 
458 enum HOAComponentOrdering: uint64_t {
459     HOA_COMORD_ACN = 0ULL,
460     HOA_COMORD_FUMA = 1ULL,
461 };
462 
463 enum HOANormalization: uint64_t {
464     HOA_NOR_N3D = 0ULL,
465     HOA_NOR_SN3D = 1ULL,
466 };
467 
468 enum AudioChannelLayout: uint64_t {
469     CH_LAYOUT_UNKNOWN = 0ULL,
470     /** Channel count: 1*/
471     CH_LAYOUT_MONO = FRONT_CENTER,
472     /** Channel count: 2*/
473     CH_LAYOUT_STEREO = FRONT_LEFT | FRONT_RIGHT,
474     CH_LAYOUT_STEREO_DOWNMIX = STEREO_LEFT | STEREO_RIGHT,
475     /** Channel count: 3*/
476     CH_LAYOUT_2POINT1 = CH_LAYOUT_STEREO | LOW_FREQUENCY,
477     CH_LAYOUT_3POINT0 = CH_LAYOUT_STEREO | BACK_CENTER,
478     CH_LAYOUT_SURROUND = CH_LAYOUT_STEREO | FRONT_CENTER,
479     /** Channel count: 4*/
480     CH_LAYOUT_3POINT1 = CH_LAYOUT_SURROUND | LOW_FREQUENCY,
481     CH_LAYOUT_4POINT0 = CH_LAYOUT_SURROUND | BACK_CENTER,
482     CH_LAYOUT_QUAD_SIDE = CH_LAYOUT_STEREO | SIDE_LEFT | SIDE_RIGHT,
483     CH_LAYOUT_QUAD = CH_LAYOUT_STEREO | BACK_LEFT | BACK_RIGHT,
484     CH_LAYOUT_2POINT0POINT2 = CH_LAYOUT_STEREO | TOP_SIDE_LEFT | TOP_SIDE_RIGHT,
485     /** Channel count: 5*/
486     CH_LAYOUT_4POINT1 = CH_LAYOUT_4POINT0 | LOW_FREQUENCY,
487     CH_LAYOUT_5POINT0 = CH_LAYOUT_SURROUND | SIDE_LEFT | SIDE_RIGHT,
488     CH_LAYOUT_5POINT0_BACK = CH_LAYOUT_SURROUND | BACK_LEFT | BACK_RIGHT,
489     CH_LAYOUT_2POINT1POINT2 = CH_LAYOUT_2POINT0POINT2 | LOW_FREQUENCY,
490     CH_LAYOUT_3POINT0POINT2 = CH_LAYOUT_2POINT0POINT2 | FRONT_CENTER,
491     /** Channel count: 6*/
492     CH_LAYOUT_5POINT1 = CH_LAYOUT_5POINT0 | LOW_FREQUENCY,
493     CH_LAYOUT_5POINT1_BACK = CH_LAYOUT_5POINT0_BACK | LOW_FREQUENCY,
494     CH_LAYOUT_6POINT0 = CH_LAYOUT_5POINT0 | BACK_CENTER,
495     CH_LAYOUT_HEXAGONAL = CH_LAYOUT_5POINT0_BACK | BACK_CENTER,
496     CH_LAYOUT_3POINT1POINT2 = CH_LAYOUT_3POINT1 | TOP_FRONT_LEFT | TOP_FRONT_RIGHT,
497     CH_LAYOUT_6POINT0_FRONT = CH_LAYOUT_QUAD_SIDE | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER,
498     /** Channel count: 7*/
499     CH_LAYOUT_6POINT1 = CH_LAYOUT_5POINT1 | BACK_CENTER,
500     CH_LAYOUT_6POINT1_BACK = CH_LAYOUT_5POINT1_BACK | BACK_CENTER,
501     CH_LAYOUT_6POINT1_FRONT = CH_LAYOUT_6POINT0_FRONT | LOW_FREQUENCY,
502     CH_LAYOUT_7POINT0 = CH_LAYOUT_5POINT0 | BACK_LEFT | BACK_RIGHT,
503     CH_LAYOUT_7POINT0_FRONT = CH_LAYOUT_5POINT0 | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER,
504     /** Channel count: 8*/
505     CH_LAYOUT_7POINT1 = CH_LAYOUT_5POINT1 | BACK_LEFT | BACK_RIGHT,
506     CH_LAYOUT_OCTAGONAL = CH_LAYOUT_5POINT0 | BACK_CENTER | BACK_LEFT | BACK_RIGHT,
507     CH_LAYOUT_5POINT1POINT2 = CH_LAYOUT_5POINT1 | TOP_SIDE_LEFT | TOP_SIDE_RIGHT,
508     CH_LAYOUT_7POINT1_WIDE = CH_LAYOUT_5POINT1 | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER,
509     CH_LAYOUT_7POINT1_WIDE_BACK = CH_LAYOUT_5POINT1_BACK | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER,
510     /** Channel count: 10*/
511     CH_LAYOUT_5POINT1POINT4 = CH_LAYOUT_5POINT1 | TOP_FRONT_LEFT | TOP_FRONT_RIGHT | TOP_BACK_LEFT |TOP_BACK_RIGHT,
512     CH_LAYOUT_7POINT1POINT2 = CH_LAYOUT_7POINT1 | TOP_SIDE_LEFT | TOP_SIDE_RIGHT,
513     /** Channel count: 12*/
514     CH_LAYOUT_7POINT1POINT4 = CH_LAYOUT_7POINT1 | TOP_FRONT_LEFT | TOP_FRONT_RIGHT | TOP_BACK_LEFT | TOP_BACK_RIGHT,
515     CH_LAYOUT_10POINT2 = FRONT_LEFT | FRONT_RIGHT | FRONT_CENTER | TOP_FRONT_LEFT | TOP_FRONT_RIGHT | BACK_LEFT
516         | BACK_RIGHT | BACK_CENTER | SIDE_LEFT | SIDE_RIGHT | WIDE_LEFT | WIDE_RIGHT,
517     /** Channel count: 14*/
518     CH_LAYOUT_9POINT1POINT4 = CH_LAYOUT_7POINT1POINT4 | WIDE_LEFT | WIDE_RIGHT,
519     /** Channel count: 16*/
520     CH_LAYOUT_9POINT1POINT6 = CH_LAYOUT_9POINT1POINT4 | TOP_SIDE_LEFT | TOP_SIDE_RIGHT,
521     CH_LAYOUT_HEXADECAGONAL = CH_LAYOUT_OCTAGONAL | WIDE_LEFT | WIDE_RIGHT | TOP_BACK_LEFT | TOP_BACK_RIGHT
522         | TOP_BACK_CENTER | TOP_FRONT_CENTER | TOP_FRONT_LEFT | TOP_FRONT_RIGHT,
523     /** HOA: fitst order*/
524     CH_LAYOUT_HOA_ORDER1_ACN_N3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_1 << CH_HOA_ORDNUM_OFFSET)
525         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_N3D << CH_HOA_NOR_OFFSET),
526     CH_LAYOUT_HOA_ORDER1_ACN_SN3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_1 << CH_HOA_ORDNUM_OFFSET)
527         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_SN3D << CH_HOA_NOR_OFFSET),
528     CH_LAYOUT_HOA_ORDER1_FUMA = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_1 << CH_HOA_ORDNUM_OFFSET)
529         | (HOA_COMORD_FUMA << CH_HOA_COMORD_OFFSET),
530     /** HOA: second order*/
531     CH_LAYOUT_HOA_ORDER2_ACN_N3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_2 << CH_HOA_ORDNUM_OFFSET)
532         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_N3D << CH_HOA_NOR_OFFSET),
533     CH_LAYOUT_HOA_ORDER2_ACN_SN3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_2 << CH_HOA_ORDNUM_OFFSET)
534         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_SN3D << CH_HOA_NOR_OFFSET),
535     CH_LAYOUT_HOA_ORDER2_FUMA = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_2 << CH_HOA_ORDNUM_OFFSET)
536         | (HOA_COMORD_FUMA << CH_HOA_COMORD_OFFSET),
537     /** HOA: third order*/
538     CH_LAYOUT_HOA_ORDER3_ACN_N3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_3 << CH_HOA_ORDNUM_OFFSET)
539         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_N3D << CH_HOA_NOR_OFFSET),
540     CH_LAYOUT_HOA_ORDER3_ACN_SN3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_3 << CH_HOA_ORDNUM_OFFSET)
541         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_SN3D << CH_HOA_NOR_OFFSET),
542     CH_LAYOUT_HOA_ORDER3_FUMA = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_3 << CH_HOA_ORDNUM_OFFSET)
543         | (HOA_COMORD_FUMA << CH_HOA_COMORD_OFFSET),
544 };
545 
546 class AudioStreamInfo {
547 public:
548     AudioSamplingRate samplingRate;
549     AudioEncodingType encoding = AudioEncodingType::ENCODING_PCM;
550     AudioSampleFormat format = AudioSampleFormat::INVALID_WIDTH;
551     AudioChannel channels;
552     AudioChannelLayout channelLayout  = AudioChannelLayout::CH_LAYOUT_UNKNOWN;
553     constexpr AudioStreamInfo(AudioSamplingRate samplingRate_, AudioEncodingType encoding_, AudioSampleFormat format_,
554         AudioChannel channels_, AudioChannelLayout channelLayout_ = AudioChannelLayout::CH_LAYOUT_UNKNOWN)
samplingRate(samplingRate_)555         : samplingRate(samplingRate_), encoding(encoding_), format(format_), channels(channels_),
556         channelLayout(channelLayout_)
557     {}
558     AudioStreamInfo() = default;
Marshalling(Parcel & parcel)559     bool Marshalling(Parcel &parcel) const
560     {
561         return parcel.WriteInt32(static_cast<int32_t>(samplingRate))
562             && parcel.WriteInt32(static_cast<int32_t>(encoding))
563             && parcel.WriteInt32(static_cast<int32_t>(format))
564             && parcel.WriteInt32(static_cast<int32_t>(channels)
565             && parcel.WriteUint64(channelLayout));
566     }
Unmarshalling(Parcel & parcel)567     void Unmarshalling(Parcel &parcel)
568     {
569         samplingRate = static_cast<AudioSamplingRate>(parcel.ReadInt32());
570         encoding = static_cast<AudioEncodingType>(parcel.ReadInt32());
571         format = static_cast<AudioSampleFormat>(parcel.ReadInt32());
572         channels = static_cast<AudioChannel>(parcel.ReadInt32());
573         channelLayout = static_cast<AudioChannelLayout>(parcel.ReadUint64());
574     }
575 };
576 
577 struct EXPORT CastRemoteDevice {
578     std::string deviceId;
579     std::string deviceName;
580     DeviceType deviceType;
581     SubDeviceType subDeviceType;
582     std::string ipAddress;
583     ChannelType channelType;
584     CapabilityType capability;
585     uint32_t protocolCapabilities{ 0 };
586     std::string networkId{ "" };
587     std::string localIpAddress{ "" };
588     uint32_t sessionKeyLength{ 0 };
589     const uint8_t *sessionKey{ nullptr };
590     bool isLeagacy{ false };
591     int sessionId{ INVALID_ID };
592     std::vector<std::string> drmCapabilities;
593     uint32_t mediumTypes{ 0 };
594     std::string modelName;
595     std::string manufacturerName;
596     bool isTrushed;
597     AudioStreamInfo audioCapability;
598     std::string spid{""}; // stream load sink app
599     std::string streamCapability{""};
600 };
601 
602 enum class EXPORT CastMode {
603     MIRROR_CAST = 1,
604     APP_CAST = 2,
605 };
606 
607 enum class EXPORT NotifyMediumType {
608     BLE = 1 << 0,
609     COAP = 1 << 1,
610 };
611 
612 // Parameters for cast mode
613 const std::string EXPORT KEY_BUNDLE_NAME = "bundleName";
614 const std::string EXPORT KEY_PID = "pid";
615 const std::string EXPORT KEY_UID = "uid";
616 const std::string EXPORT KEY_APP_MIN_COMPATIBLE_VERSION = "minCompatibleVersionCode";
617 const std::string EXPORT KEY_APP_TARGET_VERSION = "targetVersion";
618 const int EXPORT MAX_DEVICE_NUM = 100;
619 const int32_t EXPORT MAX_FILE_NUM = 16 * 1024;
620 
621 enum class EXPORT EventId {
622     EVENT_BEGIN = 1,
623     MIRROR_BEGIN = 1000,
624     MIRROR_SUPER_LAUNCHER_DISPLAY_CREATED,
625     MIRROR_HICAR_DISPLAY_CREATED,
626     MIRROR_HICAR_NOTIFY_SCREEN_PARAM,
627     CAST_CAPABILITY,
628     FIRST_FRAME_RENDER,
629     MIRROR_END = 1999,
630     STREAM_BEGIN = 2000,
631     STEAM_DEVICE_DISCONNECTED,
632     STREAM_END = 2999,
633     UICAST_BEGIN = 3000,
634     UICAST_NOTIFY_SWITCH_TO_UICAST,
635     UICAST_NOTIFY_SWITCH_TO_MIRROR,
636     UICAST_REQUEST_SOURCE_APP_RESOURCE,
637     UICAST_ACE_TRANS_FILES_FINISH,
638     UICAST_FIRST_RENDER_READY,
639     UICAST_SINK_PAGE_READY,
640     UICAST_DELIVER_SOURCE_PACKAGE_NAME,
641     UICAST_APP_TURN_TO_FOREGROUND,
642     UICAST_NOTIFY_UICAST_EXIT,
643     UICAST_EXCEPTION_OCCUR,
644     UICAST_NOTIFY_RESOURCE_PATH,
645     UICAST_RCV_RESOURCE_PATH,
646     UICAST_NOTIFY_DUMP_UITREE,
647     UICAST_END = 3999,
648     EVENT_END = 5000,
649 };
650 
IsEventId(int32_t state)651 inline bool EXPORT IsEventId(int32_t state)
652 {
653     return (state > static_cast<int32_t>(EventId::EVENT_BEGIN)) && (state < static_cast<int32_t>(EventId::EVENT_END));
654 }
655 
656 struct EXPORT MediaInfo {
657     std::string mediaId{ "" };
658     std::string mediaName{ "" };
659     std::string mediaUrl{ "" };
660     std::string mediaType{ "" };
661     size_t mediaSize{ 0 };
662     uint32_t startPosition{ 0 };
663     uint32_t duration{ 0 };
664     uint32_t closingCreditsPosition{ 0 };
665     std::string albumCoverUrl{ "" };
666     std::string albumTitle{ "" };
667     std::string mediaArtist{ "" };
668     std::string lrcUrl{ "" };
669     std::string lrcContent{ "" };
670     std::string appIconUrl{ "" };
671     std::string appName{ "" };
672     uid_t appUid{ 0 };
673     std::string drmType;
674     std::shared_ptr<ICastDataSource> dataSrc;
675     uint32_t spid{ 0 };
676     std::string launchClientData{""};
677 };
678 
679 struct EXPORT MediaInfoHolder {
680     uint32_t currentIndex;
681     std::vector<MediaInfo> mediaInfoList;
682     uint32_t progressRefreshInterval;
683 };
684 
685 struct EXPORT AppInfo {
686     int32_t appUid;
687     uint32_t appTokenId;
688     int32_t appPid;
689 };
690 
691 // <source file, <fd, target file path>>
692 using FileFdMap = std::map<std::string, std::pair<int, std::string>>;
693 
694 // <fd, file path>
695 using RcvFdFileMap = std::map<int, std::string>;
696 
697 enum class EXPORT PlayerStates {
698     PLAYER_STATE_ERROR = 0,
699     PLAYER_IDLE = 1,
700     PLAYER_INITIALIZED = 2,
701     PLAYER_PREPARING = 3,
702     PLAYER_PREPARED = 4,
703     PLAYER_STARTED = 5,
704     PLAYER_PAUSED = 6,
705     PLAYER_STOPPED = 7,
706     PLAYER_PLAYBACK_COMPLETE = 8,
707     PLAYER_RELEASED = 9,
708     PLAYER_BUFFERING = 100,
709 };
710 
711 enum class EXPORT HmosPlayerStates {
712     STATE_IDLE = 1,
713     STATE_BUFFERING = 2,
714     STATE_READY = 3,
715     STATE_ENDED = 4
716 };
717 
718 enum class EXPORT LoopMode {
719     LOOP_MODE_SEQUENCE = 0,
720     LOOP_MODE_SINGLE = 1,
721     LOOP_MODE_LIST = 2,
722     LOOP_MODE_SHUFFLE = 3
723 };
724 
725 struct EXPORT StreamCapability {
726     bool isPlaySupported{ false };
727     bool isPauseSupported{ false };
728     bool isStopSupported{ false };
729     bool isNextSupported{ false };
730     bool isPreviousSupported{ false };
731     bool isSeekSupported{ false };
732     bool isFastForwardSupported{ false };
733     bool isFastRewindSupported{ false };
734     bool isLoopModeSupported{ false };
735     bool isToggleFavoriteSupported{ false };
736     bool isSetVolumeSupported{ false };
737 };
738 
739 enum class EXPORT PlaybackSpeed {
740     SPEED_FORWARD_0_75_X = 0,
741     SPEED_FORWARD_1_00_X = 1,
742     SPEED_FORWARD_1_25_X = 2,
743     SPEED_FORWARD_1_75_X = 3,
744     SPEED_FORWARD_2_00_X = 4,
745     SPEED_FORWARD_0_50_X = 5,
746     SPEED_FORWARD_1_50_X = 6,
747     SPEED_FORWARD_3_00_X = 7,
748 };
749 
750 enum class EXPORT LogCodeId {
751     OK = 0,
752     FULL = 1,
753     WRITE_FAIL = 2,
754     SEEK_FAIL = 3,
755     STOP_INDICATE = 4,
756     STOP_REPEAT = 5,
757     START_REPEAT = 6,
758     NOT_INIT = 7,
759     UID_MISMATCH = 8,
760 };
761 
762 enum class EXPORT DataType {
763     CUSTOM_DATA,
764 };
765 
766 inline constexpr int EXPORT INVALID_PORT = -1;
767 inline constexpr int EXPORT INVALID_VALUE = -1;
768 inline constexpr int EXPORT DECIMALISM = 10;
769 inline constexpr int EXPORT SUBSYS_CASTPLUS_SYS_ABILITY_ID_BEGIN = 0x00010000;
770 inline constexpr int EXPORT CAST_ENGINE_SA_ID = 5526; // cast_engine_service sa_id is 5526
771 inline constexpr int EXPORT SUBSYS_CASTPLUS_SYS_ABILITY_ID_END = 0x0001001f;
772 inline constexpr int EXPORT S_TO_MS = 1000;
773 } // namespace CastEngine
774 } // namespace OHOS
775 
776 #endif
777