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