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