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