• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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  */
15 
16 #include <string>
17 
18 #include "napi/native_common.h"
19 #include "avcontrol_command.h"
20 #include "avcall_state.h"
21 #include "avplayback_state.h"
22 #include "avmeta_data.h"
23 #include "avsession_info.h"
24 #include "napi_avsession_enum.h"
25 
26 namespace OHOS::AVSession {
SetNamedProperty(napi_env env,napi_value & obj,const std::string & name,int32_t value)27 static napi_status SetNamedProperty(napi_env env, napi_value& obj, const std::string& name, int32_t value)
28 {
29     napi_value property = nullptr;
30     napi_status status = napi_create_int32(env, value, &property);
31     if (status != napi_ok) {
32         return status;
33     }
34     status = napi_set_named_property(env, obj, name.c_str(), property);
35     if (status != napi_ok) {
36         return status;
37     }
38     return status;
39 }
40 
SetNamedProperty(napi_env env,napi_value & obj,const std::string & name,const std::string & value)41 static napi_status SetNamedProperty(napi_env env, napi_value& obj, const std::string& name, const std::string& value)
42 {
43     napi_value property = nullptr;
44     napi_status status = napi_create_string_utf8(env, value.c_str(), value.size(), &property);
45     if (status != napi_ok) {
46         return status;
47     }
48     status = napi_set_named_property(env, obj, name.c_str(), property);
49     if (status != napi_ok) {
50         return status;
51     }
52     return status;
53 }
54 
ExportDecoderType(napi_env env)55 static napi_value ExportDecoderType(napi_env env)
56 {
57     napi_value result = nullptr;
58     napi_create_object(env, &result);
59 
60     (void)SetNamedProperty(env, result, "OH_AVCODEC_MIMETYPE_VIDEO_AVC",
61         static_cast<std::string>(DecoderType::OH_AVCODEC_MIMETYPE_VIDEO_AVC));
62     (void)SetNamedProperty(env, result, "OH_AVCODEC_MIMETYPE_VIDEO_HEVC",
63         static_cast<std::string>(DecoderType::OH_AVCODEC_MIMETYPE_VIDEO_HEVC));
64     (void)SetNamedProperty(env, result, "OH_AVCODEC_MIMETYPE_AUDIO_VIVID",
65         static_cast<std::string>(DecoderType::OH_AVCODEC_MIMETYPE_AUDIO_VIVID));
66 
67     napi_object_freeze(env, result);
68     return result;
69 }
70 
ExportResolutionLevel(napi_env env)71 static napi_value ExportResolutionLevel(napi_env env)
72 {
73     napi_value result = nullptr;
74     napi_create_object(env, &result);
75 
76     (void)SetNamedProperty(env, result, "RESOLUTION_480P", static_cast<int32_t>(ResolutionLevel::RESOLUTION_480P));
77     (void)SetNamedProperty(env, result, "RESOLUTION_720P", static_cast<int32_t>(ResolutionLevel::RESOLUTION_720P));
78     (void)SetNamedProperty(env, result, "RESOLUTION_1080P", static_cast<int32_t>(ResolutionLevel::RESOLUTION_1080P));
79     (void)SetNamedProperty(env, result, "RESOLUTION_2K", static_cast<int32_t>(ResolutionLevel::RESOLUTION_2K));
80     (void)SetNamedProperty(env, result, "RESOLUTION_4K", static_cast<int32_t>(ResolutionLevel::RESOLUTION_4K));
81 
82     napi_object_freeze(env, result);
83     return result;
84 }
85 
ExportLoopMode(napi_env env)86 static napi_value ExportLoopMode(napi_env env)
87 {
88     napi_value result = nullptr;
89     napi_create_object(env, &result);
90 
91     (void)SetNamedProperty(env, result, "LOOP_MODE_SEQUENCE", AVPlaybackState::LOOP_MODE_SEQUENCE);
92     (void)SetNamedProperty(env, result, "LOOP_MODE_SINGLE", AVPlaybackState::LOOP_MODE_SINGLE);
93     (void)SetNamedProperty(env, result, "LOOP_MODE_LIST", AVPlaybackState::LOOP_MODE_LIST);
94     (void)SetNamedProperty(env, result, "LOOP_MODE_SHUFFLE", AVPlaybackState::LOOP_MODE_SHUFFLE);
95     (void)SetNamedProperty(env, result, "LOOP_MODE_CUSTOM", AVPlaybackState::LOOP_MODE_CUSTOM);
96 
97     napi_object_freeze(env, result);
98     return result;
99 }
100 
ExportSkipIntervals(napi_env env)101 static napi_value ExportSkipIntervals(napi_env env)
102 {
103     napi_value result = nullptr;
104     napi_create_object(env, &result);
105 
106     (void)SetNamedProperty(env, result, "SECONDS_10", AVMetaData::SECONDS_10);
107     (void)SetNamedProperty(env, result, "SECONDS_15", AVMetaData::SECONDS_15);
108     (void)SetNamedProperty(env, result, "SECONDS_30", AVMetaData::SECONDS_30);
109 
110     napi_object_freeze(env, result);
111     return result;
112 }
113 
ExportAVCastCategory(napi_env env)114 static napi_value ExportAVCastCategory(napi_env env)
115 {
116     napi_value result = nullptr;
117     napi_create_object(env, &result);
118 
119     (void)SetNamedProperty(env, result, "CATEGORY_LOCAL", AVCastCategory::CATEGORY_LOCAL);
120     (void)SetNamedProperty(env, result, "CATEGORY_REMOTE", AVCastCategory::CATEGORY_REMOTE);
121 
122     napi_object_freeze(env, result);
123     return result;
124 }
125 
ExportProtocolType(napi_env env)126 static napi_value ExportProtocolType(napi_env env)
127 {
128     napi_value result = nullptr;
129     napi_create_object(env, &result);
130 
131     (void)SetNamedProperty(env, result, "TYPE_LOCAL", ProtocolType::TYPE_LOCAL);
132     (void)SetNamedProperty(env, result, "TYPE_CAST_PLUS_MIRROR", ProtocolType::TYPE_CAST_PLUS_MIRROR);
133     (void)SetNamedProperty(env, result, "TYPE_CAST_PLUS_STREAM", ProtocolType::TYPE_CAST_PLUS_STREAM);
134     (void)SetNamedProperty(env, result, "TYPE_DLNA", ProtocolType::TYPE_DLNA);
135     (void)SetNamedProperty(env, result, "TYPE_CAST_PLUS_AUDIO", ProtocolType::TYPE_CAST_PLUS_AUDIO);
136 
137     napi_object_freeze(env, result);
138     return result;
139 }
140 
ExportConnectionState(napi_env env)141 static napi_value ExportConnectionState(napi_env env)
142 {
143     napi_value result = nullptr;
144     napi_create_object(env, &result);
145 
146     (void)SetNamedProperty(env, result, "STATE_CONNECTING", static_cast<int32_t>(ConnectionState::STATE_CONNECTING));
147     (void)SetNamedProperty(env, result, "STATE_CONNECTED", static_cast<int32_t>(ConnectionState::STATE_CONNECTED));
148     (void)SetNamedProperty(env, result, "STATE_DISCONNECTED",
149                            static_cast<int32_t>(ConnectionState::STATE_DISCONNECTED));
150 
151     napi_object_freeze(env, result);
152     return result;
153 }
154 
ExportDeviceType(napi_env env)155 static napi_value ExportDeviceType(napi_env env)
156 {
157     napi_value result = nullptr;
158     napi_create_object(env, &result);
159 
160     (void)SetNamedProperty(env, result, "DEVICE_TYPE_LOCAL", DeviceType::DEVICE_TYPE_LOCAL);
161     (void)SetNamedProperty(env, result, "DEVICE_TYPE_TV", DeviceType::DEVICE_TYPE_TV);
162     (void)SetNamedProperty(env, result, "DEVICE_TYPE_SMART_SPEAKER", DeviceType::DEVICE_TYPE_SPEAKER);
163     (void)SetNamedProperty(env, result, "DEVICE_TYPE_BLUETOOTH", DeviceType::DEVICE_TYPE_BLUETOOTH);
164 
165     napi_object_freeze(env, result);
166     return result;
167 }
168 
ExportPlaybackState(napi_env env)169 static napi_value ExportPlaybackState(napi_env env)
170 {
171     napi_value result = nullptr;
172     napi_create_object(env, &result);
173 
174     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_INITIAL", AVPlaybackState::PLAYBACK_STATE_INITIAL);
175     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_PREPARE", AVPlaybackState::PLAYBACK_STATE_PREPARE);
176     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_PLAY", AVPlaybackState::PLAYBACK_STATE_PLAY);
177     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_PAUSE", AVPlaybackState::PLAYBACK_STATE_PAUSE);
178     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_FAST_FORWARD", AVPlaybackState::PLAYBACK_STATE_FAST_FORWARD);
179     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_REWIND", AVPlaybackState::PLAYBACK_STATE_REWIND);
180     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_STOP", AVPlaybackState::PLAYBACK_STATE_STOP);
181     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_COMPLETED", AVPlaybackState::PLAYBACK_STATE_COMPLETED);
182     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_RELEASED", AVPlaybackState::PLAYBACK_STATE_RELEASED);
183     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_ERROR", AVPlaybackState::PLAYBACK_STATE_ERROR);
184     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_IDLE", AVPlaybackState::PLAYBACK_STATE_IDLE);
185     (void)SetNamedProperty(env, result, "PLAYBACK_STATE_BUFFERING", AVPlaybackState::PLAYBACK_STATE_BUFFERING);
186 
187     napi_object_freeze(env, result);
188     return result;
189 }
190 
ExportAVCallState(napi_env env)191 static napi_value ExportAVCallState(napi_env env)
192 {
193     napi_value result = nullptr;
194     napi_create_object(env, &result);
195 
196     (void)SetNamedProperty(env, result, "CALL_STATE_IDLE", AVCallState::AVCALL_STATE_IDLE);
197     (void)SetNamedProperty(env, result, "CALL_STATE_INCOMING", AVCallState::AVCALL_STATE_INCOMING);
198     (void)SetNamedProperty(env, result, "CALL_STATE_ACTIVE", AVCallState::AVCALL_STATE_ACTIVE);
199     (void)SetNamedProperty(env, result, "CALL_STATE_DIALING", AVCallState::AVCALL_STATE_DIALING);
200     (void)SetNamedProperty(env, result, "CALL_STATE_WAITING", AVCallState::AVCALL_STATE_WAITING);
201     (void)SetNamedProperty(env, result, "CALL_STATE_HOLDING", AVCallState::AVCALL_STATE_HOLDING);
202     (void)SetNamedProperty(env, result, "CALL_STATE_DISCONNECTING", AVCallState::AVCALL_STATE_DISCONNECTING);
203 
204     napi_object_freeze(env, result);
205     return result;
206 }
207 
AVSessionControlErrorCode(napi_env env,napi_value result)208 static void AVSessionControlErrorCode(napi_env env, napi_value result)
209 {
210     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_UNSPECIFIED",
211         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_UNSPECIFIED);
212     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_REMOTE_ERROR",
213         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_REMOTE_ERROR);
214     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_BEHIND_LIVE_WINDOW",
215         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_BEHIND_LIVE_WINDOW);
216     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_TIMEOUT",
217         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_TIMEOUT);
218     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_RUNTIME_CHECK_FAILED",
219         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_RUNTIME_CHECK_FAILED);
220     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_PLAYER_NOT_WORKING",
221         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_PLAYER_NOT_WORKING);
222     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_SEEK_MODE_UNSUPPORTED",
223         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_SEEK_MODE_UNSUPPORTED);
224     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_ILLEGAL_SEEK_TARGET",
225         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_ILLEGAL_SEEK_TARGET);
226     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_PLAY_MODE_UNSUPPORTED",
227         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_PLAY_MODE_UNSUPPORTED);
228     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_PLAY_SPEED_UNSUPPORTED",
229         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_PLAY_SPEED_UNSUPPORTED);
230     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DEVICE_MISSING",
231         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DEVICE_MISSING);
232     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_INVALID_PARAM",
233         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_INVALID_PARAM);
234     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_NO_MEMORY",
235         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_NO_MEMORY);
236     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_OPERATION_NOT_ALLOWED",
237         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_OPERATION_NOT_ALLOWED);
238 }
239 
AVSessionIOErrorCode(napi_env env,napi_value result)240 static void AVSessionIOErrorCode(napi_env env, napi_value result)
241 {
242     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_UNSPECIFIED",
243         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_UNSPECIFIED);
244     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_NETWORK_CONNECTION_FAILED",
245         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_NETWORK_CONNECTION_FAILED);
246     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_NETWORK_CONNECTION_TIMEOUT",
247         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_NETWORK_CONNECTION_TIMEOUT);
248     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_INVALID_HTTP_CONTENT_TYPE",
249         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_INVALID_HTTP_CONTENT_TYPE);
250     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_BAD_HTTP_STATUS",
251         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_BAD_HTTP_STATUS);
252     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_FILE_NOT_FOUND",
253         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_FILE_NOT_FOUND);
254     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_NO_PERMISSION",
255         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_NO_PERMISSION);
256     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_CLEARTEXT_NOT_PERMITTED",
257         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_CLEARTEXT_NOT_PERMITTED);
258     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_READ_POSITION_OUT_OF_RANGE",
259         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_READ_POSITION_OUT_OF_RANGE);
260     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_NO_CONTENTS",
261         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_NO_CONTENTS);
262     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_READ_ERROR",
263         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_READ_ERROR);
264     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_CONTENT_BUSY",
265         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_CONTENT_BUSY);
266     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_CONTENT_EXPIRED",
267         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_CONTENT_EXPIRED);
268     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_USE_FORBIDDEN",
269         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_USE_FORBIDDEN);
270     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_NOT_VERIFIED",
271         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_NOT_VERIFIED);
272     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_EXHAUSTED_ALLOWED_USES",
273         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_EXHAUSTED_ALLOWED_USES);
274     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_IO_NETWORK_PACKET_SENDING_FAILED",
275         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_IO_NETWORK_PACKET_SENDING_FAILED);
276 }
277 
AVSessionParsingErrorCode(napi_env env,napi_value result)278 static void AVSessionParsingErrorCode(napi_env env, napi_value result)
279 {
280     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_PARSING_UNSPECIFIED",
281         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_PARSING_UNSPECIFIED);
282     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_PARSING_CONTAINER_MALFORMED",
283         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_PARSING_CONTAINER_MALFORMED);
284     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_PARSING_MANIFEST_MALFORMED",
285         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_PARSING_MANIFEST_MALFORMED);
286     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_PARSING_CONTAINER_UNSUPPORTED",
287         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_PARSING_CONTAINER_UNSUPPORTED);
288     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_PARSING_MANIFEST_UNSUPPORTED",
289         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_PARSING_MANIFEST_UNSUPPORTED);
290 }
291 
AVSessionDecodingErrorCode(napi_env env,napi_value result)292 static void AVSessionDecodingErrorCode(napi_env env, napi_value result)
293 {
294     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DECODING_UNSPECIFIED",
295         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DECODING_UNSPECIFIED);
296     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DECODING_INIT_FAILED",
297         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DECODING_INIT_FAILED);
298     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DECODING_QUERY_FAILED",
299         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DECODING_QUERY_FAILED);
300     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DECODING_FAILED",
301         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DECODING_FAILED);
302     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DECODING_FORMAT_EXCEEDS_CAPABILITIES",
303         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DECODING_FORMAT_EXCEEDS_CAPABILITIES);
304     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DECODING_FORMAT_UNSUPPORTED",
305         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DECODING_FORMAT_UNSUPPORTED);
306 }
307 
AVSessionAudioRenderErrorCode(napi_env env,napi_value result)308 static void AVSessionAudioRenderErrorCode(napi_env env, napi_value result)
309 {
310     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_AUDIO_RENDERER_UNSPECIFIED",
311         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_AUDIO_RENDERER_UNSPECIFIED);
312     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_AUDIO_RENDERER_INIT_FAILED",
313         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_AUDIO_RENDERER_INIT_FAILED);
314     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_AUDIO_RENDERER_WRITE_FAILED",
315         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_AUDIO_RENDERER_WRITE_FAILED);
316 }
317 
AVSessionDRMErrorCode(napi_env env,napi_value result)318 static void AVSessionDRMErrorCode(napi_env env, napi_value result)
319 {
320     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DRM_UNSPECIFIED",
321         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DRM_UNSPECIFIED);
322     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DRM_SCHEME_UNSUPPORTED",
323         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DRM_SCHEME_UNSUPPORTED);
324     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DRM_PROVISIONING_FAILED",
325         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DRM_PROVISIONING_FAILED);
326     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DRM_CONTENT_ERROR",
327         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DRM_CONTENT_ERROR);
328     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DRM_LICENSE_ACQUISITION_FAILED",
329         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DRM_LICENSE_ACQUISITION_FAILED);
330     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DRM_DISALLOWED_OPERATION",
331         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DRM_DISALLOWED_OPERATION);
332     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DRM_SYSTEM_ERROR",
333         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DRM_SYSTEM_ERROR);
334     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DRM_DEVICE_REVOKED",
335         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DRM_DEVICE_REVOKED);
336     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DRM_LICENSE_EXPIRED",
337         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DRM_LICENSE_EXPIRED);
338     (void)SetNamedProperty(env, result, "ERR_CODE_CAST_CONTROL_DRM_PROVIDE_KEY_RESPONSE_ERROR",
339         AVSessionErrorCode::ERR_CODE_CAST_CONTROL_DRM_PROVIDE_KEY_RESPONSE_ERROR);
340 }
341 
ExportAVSessionErrorCode(napi_env env)342 static napi_value ExportAVSessionErrorCode(napi_env env)
343 {
344     napi_value result = nullptr;
345     napi_create_object(env, &result);
346 
347     (void)SetNamedProperty(env, result, "ERR_CODE_SERVICE_EXCEPTION", AVSessionErrorCode::ERR_CODE_SERVICE_EXCEPTION);
348     (void)SetNamedProperty(env, result, "ERR_CODE_SESSION_NOT_EXIST", AVSessionErrorCode::ERR_CODE_SESSION_NOT_EXIST);
349     (void)SetNamedProperty(env, result, "ERR_CODE_CONTROLLER_NOT_EXIST",
350         AVSessionErrorCode::ERR_CODE_CONTROLLER_NOT_EXIST);
351     (void)SetNamedProperty(env, result, "ERR_CODE_REMOTE_CONNECTION_ERR",
352         AVSessionErrorCode::ERR_CODE_REMOTE_CONNECTION_ERR);
353     (void)SetNamedProperty(env, result, "ERR_CODE_COMMAND_INVALID", AVSessionErrorCode::ERR_CODE_COMMAND_INVALID);
354     (void)SetNamedProperty(env, result, "ERR_CODE_SESSION_INACTIVE", AVSessionErrorCode::ERR_CODE_SESSION_INACTIVE);
355     (void)SetNamedProperty(env, result, "ERR_CODE_MESSAGE_OVERLOAD", AVSessionErrorCode::ERR_CODE_MESSAGE_OVERLOAD);
356     (void)SetNamedProperty(env, result, "ERR_CODE_DEVICE_CONNECTION_FAILED",
357         AVSessionErrorCode::ERR_CODE_DEVICE_CONNECTION_FAILED);
358     (void)SetNamedProperty(env, result, "ERR_CODE_REMOTE_CONNECTION_NOT_EXIST",
359         AVSessionErrorCode::ERR_CODE_REMOTE_CONNECTION_NOT_EXIST);
360     AVSessionControlErrorCode(env, result);
361     AVSessionIOErrorCode(env, result);
362     AVSessionParsingErrorCode(env, result);
363     AVSessionDecodingErrorCode(env, result);
364     AVSessionAudioRenderErrorCode(env, result);
365     AVSessionDRMErrorCode(env, result);
366     napi_object_freeze(env, result);
367     return result;
368 }
369 
ExportDisplayTag(napi_env env)370 static napi_value ExportDisplayTag(napi_env env)
371 {
372     napi_value result = nullptr;
373     napi_create_object(env, &result);
374 
375     (void)SetNamedProperty(env, result, "TAG_AUDIO_VIVID", AVMetaData::DISPLAY_TAG_AUDIO_VIVID);
376 
377     napi_object_freeze(env, result);
378     return result;
379 }
380 
ExportCastDisplayState(napi_env env)381 static napi_value ExportCastDisplayState(napi_env env)
382 {
383     napi_value result = nullptr;
384     napi_create_object(env, &result);
385 
386     (void)SetNamedProperty(env, result, "STATE_OFF", static_cast<int32_t>(CastDisplayState::STATE_OFF));
387     (void)SetNamedProperty(env, result, "STATE_ON", static_cast<int32_t>(CastDisplayState::STATE_ON));
388 
389     napi_object_freeze(env, result);
390     return result;
391 }
392 
ExportDeviceLogEventCode(napi_env env)393 static napi_value ExportDeviceLogEventCode(napi_env env)
394 {
395     napi_value result = nullptr;
396     napi_create_object(env, &result);
397 
398     (void)SetNamedProperty(env, result, "DEVICE_LOG_FULL",
399         static_cast<int32_t>(DeviceLogEventCode::DEVICE_LOG_FULL));
400     (void)SetNamedProperty(env, result, "DEVICE_LOG_EXCEPTION",
401         static_cast<int32_t>(DeviceLogEventCode::DEVICE_LOG_EXCEPTION));
402 
403     napi_object_freeze(env, result);
404     return result;
405 }
406 
ExportDistributedSessionType(napi_env env)407 static napi_value ExportDistributedSessionType(napi_env env)
408 {
409     napi_value result = nullptr;
410     napi_create_object(env, &result);
411 
412     (void)SetNamedProperty(env, result, "TYPE_SESSION_REMOTE",
413         static_cast<int32_t>(DistributedSessionType::TYPE_SESSION_REMOTE));
414     (void)SetNamedProperty(env, result, "TYPE_SESSION_MIGRATE_IN",
415         static_cast<int32_t>(DistributedSessionType::TYPE_SESSION_MIGRATE_IN));
416     (void)SetNamedProperty(env, result, "TYPE_SESSION_MIGRATE_OUT",
417         static_cast<int32_t>(DistributedSessionType::TYPE_SESSION_MIGRATE_OUT));
418 
419     napi_object_freeze(env, result);
420     return result;
421 }
422 
InitEnums(napi_env env,napi_value exports)423 napi_status InitEnums(napi_env env, napi_value exports)
424 {
425     const napi_property_descriptor properties[] = {
426         DECLARE_NAPI_PROPERTY("AVCastCategory", ExportAVCastCategory(env)),
427         DECLARE_NAPI_PROPERTY("ProtocolType", ExportProtocolType(env)),
428         DECLARE_NAPI_PROPERTY("ConnectionState", ExportConnectionState(env)),
429         DECLARE_NAPI_PROPERTY("DeviceType", ExportDeviceType(env)),
430         DECLARE_NAPI_PROPERTY("LoopMode", ExportLoopMode(env)),
431         DECLARE_NAPI_PROPERTY("SkipIntervals", ExportSkipIntervals(env)),
432         DECLARE_NAPI_PROPERTY("PlaybackState", ExportPlaybackState(env)),
433         DECLARE_NAPI_PROPERTY("CallState", ExportAVCallState(env)),
434         DECLARE_NAPI_PROPERTY("AVSessionErrorCode", ExportAVSessionErrorCode(env)),
435         DECLARE_NAPI_PROPERTY("DisplayTag", ExportDisplayTag(env)),
436         DECLARE_NAPI_PROPERTY("CastDisplayState", ExportCastDisplayState(env)),
437         DECLARE_NAPI_PROPERTY("DeviceLogEventCode", ExportDeviceLogEventCode(env)),
438         DECLARE_NAPI_PROPERTY("DistributedSessionType", ExportDistributedSessionType(env)),
439         DECLARE_NAPI_PROPERTY("DecoderType", ExportDecoderType(env)),
440         DECLARE_NAPI_PROPERTY("ResolutionLevel", ExportResolutionLevel(env)),
441     };
442 
443     size_t count = sizeof(properties) / sizeof(napi_property_descriptor);
444     return napi_define_properties(env, exports, count, properties);
445 }
446 }