1 /*
2 * Copyright (c) 2023-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 #include "napi_media_description.h"
17 #include "avsession_log.h"
18 #include "avsession_pixel_map_adapter.h"
19 #include "napi_utils.h"
20 #include "pixel_map_napi.h"
21
22 namespace OHOS::AVSession {
23 std::map<std::string, NapiMediaDescription::GetterType> NapiMediaDescription::getterMap_ = {
24 { "mediaId", GetMediaId },
25 { "assetId", GetAssetId },
26 { "title", GetTitle },
27 { "subtitle", GetSubtitle },
28 { "description", GetDescription },
29 { "icon", GetIcon },
30 { "iconUri", GetIconUri },
31 { "mediaImage", GetMediaImage },
32 { "extras", GetExtras },
33 { "mediaType", GetMediaType },
34 { "mediaSize", GetMediaSize },
35 { "albumTitle", GetAlbumTitle },
36 { "albumCoverUri", GetAlbumCoverUri },
37 { "lyricContent", GetLyricContent },
38 { "lyricUri", GetLyricUri },
39 { "artist", GetArtist },
40 { "mediaUri", GetMediaUri },
41 { "fdSrc", GetFdSrc },
42 { "duration", GetDuration },
43 { "startPosition", GetStartPosition },
44 { "creditsPosition", GetCreditsPosition },
45 { "appName", GetAppName },
46 { "drmScheme", GetDrmScheme },
47 { "dataSrc", GetDataSrc },
48 { "pcmSrc", GetPcmSrc },
49 { "launchClientData", GetLaunchClientData },
50 };
51
52 std::map<int32_t, NapiMediaDescription::SetterType> NapiMediaDescription::setterMap_ = {
53 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_MEDIA_ID, SetMediaId },
54 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_TITLE, SetTitle },
55 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_SUBTITLE, SetSubtitle },
56 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_DESCRIPTION, SetDescription },
57 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_ICON, SetIcon },
58 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_ICON_URI, SetIconUri },
59 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_EXTRAS, SetExtras },
60 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_MEDIA_TYPE, SetMediaType },
61 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_MEDIA_SIZE, SetMediaSize },
62 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_ALBUM_TITLE, SetAlbumTitle },
63 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_ALBUM_COVER_URI, SetAlbumCoverUri },
64 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_LYRIC_CONTENT, SetLyricContent },
65 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_LYRIC_URI, SetLyricUri },
66 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_ARTIST, SetArtist },
67 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_MEDIA_URI, SetMediaUri },
68 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_FD_SRC, SetFdSrc },
69 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_DURATION, SetDuration },
70 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_START_POSITION, SetStartPosition },
71 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_CREDITS_POSITION, SetCreditsPosition },
72 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_APP_NAME, SetAppName },
73 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_DRM_SCHEME, SetDrmScheme },
74 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_DATA_SRC, SetDataSrc },
75 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_PCM_SRC, SetPcmSrc },
76 { AVMediaDescription::MEDIA_DESCRIPTION_KEY_LAUNCH_CLIENT_DATA, SetLaunchClientData },
77 };
78
GetValue(napi_env env,napi_value in,AVMediaDescription & out)79 napi_status NapiMediaDescription::GetValue(napi_env env, napi_value in, AVMediaDescription& out)
80 {
81 std::vector<std::string> propertyNames;
82 auto status = NapiUtils::GetPropertyNames(env, in, propertyNames);
83 CHECK_RETURN(status == napi_ok, "get property name failed", status);
84
85 for (const auto& name : propertyNames) {
86 auto it = getterMap_.find(name);
87 if (it == getterMap_.end()) {
88 SLOGW("property %{public}s is not of mediadescription", name.c_str());
89 continue;
90 }
91 auto getter = it->second;
92 if (getter(env, in, out) != napi_ok) {
93 SLOGE("get property %{public}s failed", name.c_str());
94 return napi_generic_failure;
95 }
96 }
97
98 return napi_ok;
99 }
100
SetValue(napi_env env,const AVMediaDescription & in,napi_value & out)101 napi_status NapiMediaDescription::SetValue(napi_env env, const AVMediaDescription& in, napi_value& out)
102 {
103 napi_status status = napi_create_object(env, &out);
104 CHECK_RETURN((status == napi_ok) && (out != nullptr), "create object failed", status);
105
106 for (int i = 0; i < AVMediaDescription::MEDIA_DESCRIPTION_KEY_MAX; ++i) {
107 auto setter = setterMap_[i];
108 if (setter(env, in, out) != napi_ok) {
109 SLOGE("set property %{public}d failed", i);
110 return napi_generic_failure;
111 }
112 }
113 return napi_ok;
114 }
115
CheckAndSetDefaultString(napi_status status,std::string & defaultStr)116 void NapiMediaDescription::CheckAndSetDefaultString(napi_status status, std::string& defaultStr)
117 {
118 if (status != napi_ok) {
119 SLOGW("Get value from napi_value failed, use default value");
120 defaultStr = "";
121 }
122 }
123
CheckAndSetDefaultInt(napi_status status,int32_t & defaultInt)124 void NapiMediaDescription::CheckAndSetDefaultInt(napi_status status, int32_t& defaultInt)
125 {
126 if (status != napi_ok) {
127 SLOGW("Get value from napi_value failed, use default value");
128 defaultInt = -1;
129 }
130 }
131
GetMediaId(napi_env env,napi_value in,AVMediaDescription & out)132 napi_status NapiMediaDescription::GetMediaId(napi_env env, napi_value in, AVMediaDescription& out)
133 {
134 std::string property;
135 auto status = NapiUtils::GetNamedProperty(env, in, "mediaId", property);
136 if (status != napi_ok) {
137 status = NapiUtils::GetNamedProperty(env, in, "assetId", property);
138 CHECK_RETURN(status == napi_ok, "get property failed", status);
139 }
140 out.SetMediaId(property);
141 return status;
142 }
143
SetMediaId(napi_env env,const AVMediaDescription & in,napi_value & out)144 napi_status NapiMediaDescription::SetMediaId(napi_env env, const AVMediaDescription& in, napi_value& out)
145 {
146 napi_value property {};
147 auto status = NapiUtils::SetValue(env, in.GetMediaId(), property);
148 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
149 status = napi_set_named_property(env, out, "mediaId", property);
150 CHECK_RETURN(status == napi_ok, "set property mediaId failed", status);
151 status = napi_set_named_property(env, out, "assetId", property);
152 CHECK_RETURN(status == napi_ok, "set property assetId failed", status);
153 return status;
154 }
155
GetAssetId(napi_env env,napi_value in,AVMediaDescription & out)156 napi_status NapiMediaDescription::GetAssetId(napi_env env, napi_value in, AVMediaDescription& out)
157 {
158 SLOGD("Start get assetId");
159 std::string property;
160 auto status = NapiUtils::GetNamedProperty(env, in, "assetId", property);
161 if (status == napi_ok) {
162 SLOGI("MediaDescription has assetId");
163 out.SetMediaId(property);
164 }
165 return status;
166 }
167
GetTitle(napi_env env,napi_value in,AVMediaDescription & out)168 napi_status NapiMediaDescription::GetTitle(napi_env env, napi_value in, AVMediaDescription& out)
169 {
170 std::string property;
171 auto status = NapiUtils::GetNamedProperty(env, in, "title", property);
172 CheckAndSetDefaultString(status, property);
173 out.SetTitle(property);
174 return napi_ok;
175 }
176
SetTitle(napi_env env,const AVMediaDescription & in,napi_value & out)177 napi_status NapiMediaDescription::SetTitle(napi_env env, const AVMediaDescription& in, napi_value& out)
178 {
179 napi_value property {};
180 auto status = NapiUtils::SetValue(env, in.GetTitle(), property);
181 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
182 status = napi_set_named_property(env, out, "title", property);
183 CHECK_RETURN(status == napi_ok, "set property failed", status);
184 return status;
185 }
186
GetSubtitle(napi_env env,napi_value in,AVMediaDescription & out)187 napi_status NapiMediaDescription::GetSubtitle(napi_env env, napi_value in, AVMediaDescription& out)
188 {
189 std::string property;
190 auto status = NapiUtils::GetNamedProperty(env, in, "subtitle", property);
191 CheckAndSetDefaultString(status, property);
192 out.SetSubtitle(property);
193 return napi_ok;
194 }
195
SetSubtitle(napi_env env,const AVMediaDescription & in,napi_value & out)196 napi_status NapiMediaDescription::SetSubtitle(napi_env env, const AVMediaDescription& in, napi_value& out)
197 {
198 napi_value property {};
199 auto status = NapiUtils::SetValue(env, in.GetSubtitle(), property);
200 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
201 status = napi_set_named_property(env, out, "subtitle", property);
202 CHECK_RETURN(status == napi_ok, "set property failed", status);
203 return status;
204 }
205
GetDescription(napi_env env,napi_value in,AVMediaDescription & out)206 napi_status NapiMediaDescription::GetDescription(napi_env env, napi_value in, AVMediaDescription& out)
207 {
208 std::string property;
209 auto status = NapiUtils::GetNamedProperty(env, in, "description", property);
210 CheckAndSetDefaultString(status, property);
211 out.SetDescription(property);
212 return napi_ok;
213 }
214
SetDescription(napi_env env,const AVMediaDescription & in,napi_value & out)215 napi_status NapiMediaDescription::SetDescription(napi_env env, const AVMediaDescription& in, napi_value& out)
216 {
217 napi_value property {};
218 auto status = NapiUtils::SetValue(env, in.GetDescription(), property);
219 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
220 status = napi_set_named_property(env, out, "description", property);
221 CHECK_RETURN(status == napi_ok, "set property failed", status);
222 return status;
223 }
224
GetIcon(napi_env env,napi_value in,AVMediaDescription & out)225 napi_status NapiMediaDescription::GetIcon(napi_env env, napi_value in, AVMediaDescription& out)
226 {
227 napi_value property {};
228 auto status = napi_get_named_property(env, in, "icon", &property);
229 CHECK_RETURN((status == napi_ok) && (property != nullptr), "get property icon failed", napi_ok);
230 auto pixelMap = Media::PixelMapNapi::GetPixelMap(env, property);
231 if (pixelMap == nullptr) {
232 SLOGE("unwrap failed");
233 return napi_invalid_arg;
234 }
235 out.SetIcon(AVSessionPixelMapAdapter::ConvertToInnerWithLimitedSize(pixelMap));
236 return status;
237 }
238
SetIcon(napi_env env,const AVMediaDescription & in,napi_value & out)239 napi_status NapiMediaDescription::SetIcon(napi_env env, const AVMediaDescription& in, napi_value& out)
240 {
241 auto pixelMap = in.GetIcon();
242 if (pixelMap == nullptr) {
243 SLOGI("media image is null");
244 return napi_ok;
245 }
246 napi_value property = Media::PixelMapNapi::CreatePixelMap(env,
247 AVSessionPixelMapAdapter::ConvertFromInner(pixelMap));
248 auto status = napi_set_named_property(env, out, "icon", property);
249 if (status != napi_ok) {
250 SLOGW("check icon with no property");
251 }
252 status = napi_set_named_property(env, out, "mediaImage", property);
253 if (status != napi_ok) {
254 SLOGW("check mediaImage with no property");
255 }
256 CHECK_RETURN(status == napi_ok, "set property failed", status);
257 return status;
258 }
259
GetIconUri(napi_env env,napi_value in,AVMediaDescription & out)260 napi_status NapiMediaDescription::GetIconUri(napi_env env, napi_value in, AVMediaDescription& out)
261 {
262 std::string property;
263 auto status = NapiUtils::GetNamedProperty(env, in, "iconUri", property);
264 if (status == napi_ok) {
265 SLOGD("Get icon uri succeed");
266 out.SetIconUri(property);
267 } else {
268 out.SetIconUri("");
269 SLOGW("GetIconUri failed, set icon uri to null");
270 }
271 return napi_ok;
272 }
273
SetIconUri(napi_env env,const AVMediaDescription & in,napi_value & out)274 napi_status NapiMediaDescription::SetIconUri(napi_env env, const AVMediaDescription& in, napi_value& out)
275 {
276 napi_value property {};
277 auto status = NapiUtils::SetValue(env, in.GetIconUri(), property);
278 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
279 if (in.GetIconUri().length() <= 0 || in.GetIcon() != nullptr) {
280 status = napi_set_named_property(env, out, "iconUri", property);
281 } else {
282 status = napi_set_named_property(env, out, "iconUri", property);
283 if (status != napi_ok) {
284 SLOGW("check iconUri with no property");
285 }
286 status = napi_set_named_property(env, out, "mediaImage", property);
287 if (status != napi_ok) {
288 SLOGW("check mediaImage with no property");
289 }
290 }
291
292 CHECK_RETURN(status == napi_ok, "set property failed", status);
293 return status;
294 }
295
GetMediaImage(napi_env env,napi_value in,AVMediaDescription & out)296 napi_status NapiMediaDescription::GetMediaImage(napi_env env, napi_value in, AVMediaDescription& out)
297 {
298 napi_value property {};
299 auto status = napi_get_named_property(env, in, "mediaImage", &property);
300 CHECK_RETURN((status == napi_ok) && (property != nullptr), "get mediaImage property failed", napi_ok);
301 napi_valuetype type = napi_undefined;
302 status = napi_typeof(env, property, &type);
303 CHECK_RETURN(status == napi_ok, "get napi_value type failed", status);
304 if (type == napi_string) {
305 std::string uri;
306 status = NapiUtils::GetValue(env, property, uri);
307 if (status != napi_ok) {
308 SLOGW("GetMediaImage failed, set media image uri to null");
309 out.SetIconUri("");
310 return napi_ok;
311 }
312 SLOGD("Get media image, set icon uri");
313 out.SetIconUri(uri);
314 } else if (type == napi_object) {
315 auto pixelMap = Media::PixelMapNapi::GetPixelMap(env, property);
316 if (pixelMap == nullptr) {
317 SLOGE("unwrap failed");
318 return napi_invalid_arg;
319 }
320 out.SetIcon(AVSessionPixelMapAdapter::ConvertToInnerWithLimitedSize(pixelMap));
321 } else {
322 SLOGE("mediaImage property value type invalid");
323 out.SetIconUri("");
324 }
325
326 return status;
327 }
328
GetExtras(napi_env env,napi_value in,AVMediaDescription & out)329 napi_status NapiMediaDescription::GetExtras(napi_env env, napi_value in, AVMediaDescription& out)
330 {
331 AAFwk::WantParams property {};
332 auto status = NapiUtils::GetNamedProperty(env, in, "extras", property);
333 if (status != napi_ok) {
334 SLOGD("extras is null");
335 return napi_ok;
336 }
337 out.SetExtras(std::make_shared<AAFwk::WantParams>(property));
338 return status;
339 }
340
SetExtras(napi_env env,const AVMediaDescription & in,napi_value & out)341 napi_status NapiMediaDescription::SetExtras(napi_env env, const AVMediaDescription& in, napi_value& out)
342 {
343 napi_value property {};
344 auto extras = in.GetExtras();
345 if (extras == nullptr) {
346 SLOGD("extras is null");
347 return napi_ok;
348 }
349 AAFwk::WantParams params = *extras;
350 auto status = NapiUtils::SetValue(env, params, property);
351 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
352 status = napi_set_named_property(env, out, "extras", property);
353 CHECK_RETURN(status == napi_ok, "set property failed", status);
354 return status;
355 }
356
GetMediaType(napi_env env,napi_value in,AVMediaDescription & out)357 napi_status NapiMediaDescription::GetMediaType(napi_env env, napi_value in, AVMediaDescription& out)
358 {
359 std::string property;
360 auto status = NapiUtils::GetNamedProperty(env, in, "mediaType", property);
361 CheckAndSetDefaultString(status, property);
362 out.SetMediaType(property);
363 return napi_ok;
364 }
365
SetMediaType(napi_env env,const AVMediaDescription & in,napi_value & out)366 napi_status NapiMediaDescription::SetMediaType(napi_env env, const AVMediaDescription& in, napi_value& out)
367 {
368 napi_value property {};
369 auto status = NapiUtils::SetValue(env, in.GetMediaType(), property);
370 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
371 status = napi_set_named_property(env, out, "mediaType", property);
372 CHECK_RETURN(status == napi_ok, "set property failed", status);
373 return status;
374 }
375
GetMediaSize(napi_env env,napi_value in,AVMediaDescription & out)376 napi_status NapiMediaDescription::GetMediaSize(napi_env env, napi_value in, AVMediaDescription& out)
377 {
378 int32_t property {};
379 auto status = NapiUtils::GetNamedProperty(env, in, "mediaSize", property);
380 CheckAndSetDefaultInt(status, property);
381 out.SetMediaSize(property);
382 return napi_ok;
383 }
384
SetMediaSize(napi_env env,const AVMediaDescription & in,napi_value & out)385 napi_status NapiMediaDescription::SetMediaSize(napi_env env, const AVMediaDescription& in, napi_value& out)
386 {
387 napi_value property {};
388 auto status = NapiUtils::SetValue(env, in.GetMediaSize(), property);
389 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
390 status = napi_set_named_property(env, out, "mediaSize", property);
391 CHECK_RETURN(status == napi_ok, "set property failed", status);
392 return status;
393 }
394
GetAlbumTitle(napi_env env,napi_value in,AVMediaDescription & out)395 napi_status NapiMediaDescription::GetAlbumTitle(napi_env env, napi_value in, AVMediaDescription& out)
396 {
397 std::string property;
398 auto status = NapiUtils::GetNamedProperty(env, in, "albumTitle", property);
399 CheckAndSetDefaultString(status, property);
400 out.SetAlbumTitle(property);
401 return napi_ok;
402 }
403
SetAlbumTitle(napi_env env,const AVMediaDescription & in,napi_value & out)404 napi_status NapiMediaDescription::SetAlbumTitle(napi_env env, const AVMediaDescription& in, napi_value& out)
405 {
406 napi_value property {};
407 auto status = NapiUtils::SetValue(env, in.GetAlbumTitle(), property);
408 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
409 status = napi_set_named_property(env, out, "albumTitle", property);
410 CHECK_RETURN(status == napi_ok, "set property failed", status);
411 return status;
412 }
413
GetAlbumCoverUri(napi_env env,napi_value in,AVMediaDescription & out)414 napi_status NapiMediaDescription::GetAlbumCoverUri(napi_env env, napi_value in, AVMediaDescription& out)
415 {
416 std::string property;
417 auto status = NapiUtils::GetNamedProperty(env, in, "albumCoverUri", property);
418 CheckAndSetDefaultString(status, property);
419 out.SetAlbumCoverUri(property);
420 return napi_ok;
421 }
422
SetAlbumCoverUri(napi_env env,const AVMediaDescription & in,napi_value & out)423 napi_status NapiMediaDescription::SetAlbumCoverUri(napi_env env, const AVMediaDescription& in, napi_value& out)
424 {
425 napi_value property {};
426 auto status = NapiUtils::SetValue(env, in.GetAlbumCoverUri(), property);
427 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
428 status = napi_set_named_property(env, out, "albumCoverUri", property);
429 CHECK_RETURN(status == napi_ok, "set property failed", status);
430 return status;
431 }
432
GetLyricContent(napi_env env,napi_value in,AVMediaDescription & out)433 napi_status NapiMediaDescription::GetLyricContent(napi_env env, napi_value in, AVMediaDescription& out)
434 {
435 std::string property;
436 auto status = NapiUtils::GetNamedProperty(env, in, "lyricContent", property);
437 CheckAndSetDefaultString(status, property);
438 out.SetLyricContent(property);
439 return napi_ok;
440 }
441
SetLyricContent(napi_env env,const AVMediaDescription & in,napi_value & out)442 napi_status NapiMediaDescription::SetLyricContent(napi_env env, const AVMediaDescription& in, napi_value& out)
443 {
444 napi_value property {};
445 auto status = NapiUtils::SetValue(env, in.GetLyricContent(), property);
446 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
447 status = napi_set_named_property(env, out, "lyricContent", property);
448 CHECK_RETURN(status == napi_ok, "set property failed", status);
449 return status;
450 }
451
GetLyricUri(napi_env env,napi_value in,AVMediaDescription & out)452 napi_status NapiMediaDescription::GetLyricUri(napi_env env, napi_value in, AVMediaDescription& out)
453 {
454 SLOGD("Start get LyricUri from napi_value");
455 std::string property;
456 auto status = NapiUtils::GetNamedProperty(env, in, "lyricUri", property);
457 CheckAndSetDefaultString(status, property);
458 out.SetLyricUri(property);
459 return napi_ok;
460 }
461
SetLyricUri(napi_env env,const AVMediaDescription & in,napi_value & out)462 napi_status NapiMediaDescription::SetLyricUri(napi_env env, const AVMediaDescription& in, napi_value& out)
463 {
464 SLOGD("Start set LyricUri from napi_value");
465 napi_value property {};
466 auto status = NapiUtils::SetValue(env, in.GetLyricUri(), property);
467 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
468 status = napi_set_named_property(env, out, "lyricUri", property);
469 CHECK_RETURN(status == napi_ok, "set property failed", status);
470 return status;
471 }
472
GetArtist(napi_env env,napi_value in,AVMediaDescription & out)473 napi_status NapiMediaDescription::GetArtist(napi_env env, napi_value in, AVMediaDescription& out)
474 {
475 SLOGD("Start get Artist from napi_value");
476 std::string property;
477 auto status = NapiUtils::GetNamedProperty(env, in, "artist", property);
478 CheckAndSetDefaultString(status, property);
479 out.SetArtist(property);
480 return napi_ok;
481 }
482
SetArtist(napi_env env,const AVMediaDescription & in,napi_value & out)483 napi_status NapiMediaDescription::SetArtist(napi_env env, const AVMediaDescription& in, napi_value& out)
484 {
485 SLOGD("Start set Artist from napi_value");
486 napi_value property {};
487 auto status = NapiUtils::SetValue(env, in.GetArtist(), property);
488 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
489 status = napi_set_named_property(env, out, "artist", property);
490 CHECK_RETURN(status == napi_ok, "set property failed", status);
491 return status;
492 }
493
GetMediaUri(napi_env env,napi_value in,AVMediaDescription & out)494 napi_status NapiMediaDescription::GetMediaUri(napi_env env, napi_value in, AVMediaDescription& out)
495 {
496 SLOGD("Start get MediaUri from napi_value");
497 std::string property;
498 auto status = NapiUtils::GetNamedProperty(env, in, "mediaUri", property);
499 CheckAndSetDefaultString(status, property);
500 out.SetMediaUri(property);
501 return napi_ok;
502 }
503
SetMediaUri(napi_env env,const AVMediaDescription & in,napi_value & out)504 napi_status NapiMediaDescription::SetMediaUri(napi_env env, const AVMediaDescription& in, napi_value& out)
505 {
506 SLOGD("Start set MediaUri from napi_value");
507 napi_value property {};
508 auto status = NapiUtils::SetValue(env, in.GetMediaUri(), property);
509 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
510 status = napi_set_named_property(env, out, "mediaUri", property);
511 CHECK_RETURN(status == napi_ok, "set property failed", status);
512 return status;
513 }
514
GetFdSrc(napi_env env,napi_value in,AVMediaDescription & out)515 napi_status NapiMediaDescription::GetFdSrc(napi_env env, napi_value in, AVMediaDescription& out)
516 {
517 SLOGD("Start get FdSrc from napi_value");
518 AVFileDescriptor property;
519 auto status = NapiUtils::GetNamedProperty(env, in, "fdSrc", property);
520 CHECK_RETURN(status == napi_ok, "get property failed", status);
521 out.SetFdSrc(property);
522 return status;
523 }
524
SetFdSrc(napi_env env,const AVMediaDescription & in,napi_value & out)525 napi_status NapiMediaDescription::SetFdSrc(napi_env env, const AVMediaDescription& in, napi_value& out)
526 {
527 SLOGD("Start set FdSrc from napi_value");
528 napi_value property {};
529 auto status = NapiUtils::SetValue(env, in.GetFdSrc(), property);
530 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
531 status = napi_set_named_property(env, out, "fdSrc", property);
532 CHECK_RETURN(status == napi_ok, "set property failed", status);
533 return status;
534 }
535
GetDuration(napi_env env,napi_value in,AVMediaDescription & out)536 napi_status NapiMediaDescription::GetDuration(napi_env env, napi_value in, AVMediaDescription& out)
537 {
538 SLOGD("Start get Duration from napi_value");
539 int32_t property {};
540 auto status = NapiUtils::GetNamedProperty(env, in, "duration", property);
541 CheckAndSetDefaultInt(status, property);
542 out.SetDuration(property);
543 return napi_ok;
544 }
545
SetDuration(napi_env env,const AVMediaDescription & in,napi_value & out)546 napi_status NapiMediaDescription::SetDuration(napi_env env, const AVMediaDescription& in, napi_value& out)
547 {
548 SLOGD("Start set Duration from napi_value");
549 napi_value property {};
550 auto status = NapiUtils::SetValue(env, in.GetDuration(), property);
551 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
552 status = napi_set_named_property(env, out, "duration", property);
553 CHECK_RETURN(status == napi_ok, "set property failed", status);
554 return status;
555 }
556
GetStartPosition(napi_env env,napi_value in,AVMediaDescription & out)557 napi_status NapiMediaDescription::GetStartPosition(napi_env env, napi_value in, AVMediaDescription& out)
558 {
559 SLOGD("Start get StartPosition from napi_value");
560 int32_t property {};
561 auto status = NapiUtils::GetNamedProperty(env, in, "startPosition", property);
562 CheckAndSetDefaultInt(status, property);
563 out.SetStartPosition(property);
564 return napi_ok;
565 }
566
SetStartPosition(napi_env env,const AVMediaDescription & in,napi_value & out)567 napi_status NapiMediaDescription::SetStartPosition(napi_env env, const AVMediaDescription& in, napi_value& out)
568 {
569 SLOGD("Start set StartPosition from napi_value");
570 napi_value property {};
571 auto status = NapiUtils::SetValue(env, in.GetStartPosition(), property);
572 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
573 status = napi_set_named_property(env, out, "startPosition", property);
574 CHECK_RETURN(status == napi_ok, "set property failed", status);
575 return status;
576 }
577
GetCreditsPosition(napi_env env,napi_value in,AVMediaDescription & out)578 napi_status NapiMediaDescription::GetCreditsPosition(napi_env env, napi_value in, AVMediaDescription& out)
579 {
580 SLOGD("Start get CreditsPosition from napi_value");
581 int32_t property {};
582 auto status = NapiUtils::GetNamedProperty(env, in, "creditsPosition", property);
583 CheckAndSetDefaultInt(status, property);
584 out.SetCreditsPosition(property);
585 return napi_ok;
586 }
587
SetCreditsPosition(napi_env env,const AVMediaDescription & in,napi_value & out)588 napi_status NapiMediaDescription::SetCreditsPosition(napi_env env, const AVMediaDescription& in, napi_value& out)
589 {
590 SLOGD("Start set CreditsPosition from napi_value");
591 napi_value property {};
592 auto status = NapiUtils::SetValue(env, in.GetCreditsPosition(), property);
593 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
594 status = napi_set_named_property(env, out, "creditsPosition", property);
595 CHECK_RETURN(status == napi_ok, "set property failed", status);
596 return status;
597 }
598
GetAppName(napi_env env,napi_value in,AVMediaDescription & out)599 napi_status NapiMediaDescription::GetAppName(napi_env env, napi_value in, AVMediaDescription& out)
600 {
601 SLOGD("Start get app name from napi_value");
602 std::string property;
603 auto status = NapiUtils::GetNamedProperty(env, in, "appName", property);
604 CheckAndSetDefaultString(status, property);
605 out.SetAppName(property);
606 return napi_ok;
607 }
608
SetAppName(napi_env env,const AVMediaDescription & in,napi_value & out)609 napi_status NapiMediaDescription::SetAppName(napi_env env, const AVMediaDescription& in, napi_value& out)
610 {
611 SLOGD("Start set app name from napi_value");
612 napi_value property {};
613 auto status = NapiUtils::SetValue(env, in.GetAppName(), property);
614 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
615 status = napi_set_named_property(env, out, "appName", property);
616 CHECK_RETURN(status == napi_ok, "set property failed", status);
617 return status;
618 }
619
GetLaunchClientData(napi_env env,napi_value in,AVMediaDescription & out)620 napi_status NapiMediaDescription::GetLaunchClientData(napi_env env, napi_value in, AVMediaDescription& out)
621 {
622 SLOGD("Start get launchClientData from napi_value");
623 std::string property;
624 auto status = NapiUtils::GetNamedProperty(env, in, "launchClientData", property);
625 CheckAndSetDefaultString(status, property);
626 out.SetLaunchClientData(property);
627 return status;
628 }
629
SetLaunchClientData(napi_env env,const AVMediaDescription & in,napi_value & out)630 napi_status NapiMediaDescription::SetLaunchClientData(napi_env env, const AVMediaDescription& in, napi_value& out)
631 {
632 SLOGD("Start set launchClientData from napi_value");
633 napi_value property {};
634 auto status = NapiUtils::SetValue(env, in.GetLaunchClientData(), property);
635 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
636 status = napi_set_named_property(env, out, "launchClientData", property);
637 CHECK_RETURN(status == napi_ok, "set property failed", status);
638
639 return status;
640 }
641
GetDrmScheme(napi_env env,napi_value in,AVMediaDescription & out)642 napi_status NapiMediaDescription::GetDrmScheme(napi_env env, napi_value in, AVMediaDescription& out)
643 {
644 SLOGD("Start get drm type from napi_value");
645 std::string property;
646 auto status = NapiUtils::GetNamedProperty(env, in, "drmScheme", property);
647 CheckAndSetDefaultString(status, property);
648 out.SetDrmScheme(property);
649 return napi_ok;
650 }
651
SetDrmScheme(napi_env env,const AVMediaDescription & in,napi_value & out)652 napi_status NapiMediaDescription::SetDrmScheme(napi_env env, const AVMediaDescription& in, napi_value& out)
653 {
654 SLOGD("Start set drm type from napi_value");
655 napi_value property {};
656 auto status = NapiUtils::SetValue(env, in.GetDrmScheme(), property);
657 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
658 status = napi_set_named_property(env, out, "drmScheme", property);
659 CHECK_RETURN(status == napi_ok, "set property failed", status);
660 return status;
661 }
662
GetDataSrc(napi_env env,napi_value in,AVMediaDescription & out)663 napi_status NapiMediaDescription::GetDataSrc(napi_env env, napi_value in, AVMediaDescription& out)
664 {
665 SLOGD("Start get data src from napi_value");
666 AVDataSrcDescriptor property;
667 auto status = NapiUtils::GetNamedProperty(env, in, "dataSrc", property);
668 if (status == napi_ok) {
669 out.SetDataSrc(property);
670 } else {
671 SLOGI("GetDataSrc no datasrc");
672 }
673
674 return napi_ok;
675 }
676
SetDataSrc(napi_env env,const AVMediaDescription & in,napi_value & out)677 napi_status NapiMediaDescription::SetDataSrc(napi_env env, const AVMediaDescription& in, napi_value& out)
678 {
679 SLOGD("Start set data src from napi_value");
680 napi_value property {};
681 auto status = NapiUtils::SetValue(env, in.GetDataSrc(), property);
682 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
683 status = napi_set_named_property(env, out, "dataSrc", property);
684 CHECK_RETURN(status == napi_ok, "set property failed", status);
685 return status;
686 }
687
GetPcmSrc(napi_env env,napi_value in,AVMediaDescription & out)688 napi_status NapiMediaDescription::GetPcmSrc(napi_env env, napi_value in, AVMediaDescription& out)
689 {
690 SLOGD("Start get pcm src from napi_value");
691 bool property;
692 auto status = NapiUtils::GetNamedProperty(env, in, "pcmSrc", property);
693 if (status == napi_ok) {
694 out.SetPcmSrc(property);
695 }
696 return napi_ok;
697 }
698
SetPcmSrc(napi_env env,const AVMediaDescription & in,napi_value & out)699 napi_status NapiMediaDescription::SetPcmSrc(napi_env env, const AVMediaDescription& in, napi_value& out)
700 {
701 SLOGD("Start set pcm src from napi_value");
702 napi_value property {};
703 auto status = NapiUtils::SetValue(env, in.GetPcmSrc(), property);
704 CHECK_RETURN((status == napi_ok) && (property != nullptr), "create property failed", status);
705 status = napi_set_named_property(env, out, "pcmSrc", property);
706 CHECK_RETURN(status == napi_ok, "set property failed", status);
707 return status;
708 }
709 }