• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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