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