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