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