• 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     { "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 }