1 /*
2 * Copyright (c) 2022 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 <gtest/gtest.h>
17
18 #include "avmeta_data.h"
19 #include "avsession_log.h"
20 #include "avsession_manager.h"
21 #include "av_session.h"
22 #include "avsession_errors.h"
23 #include "avsession_pixel_map_adapter.h"
24
25 using namespace testing::ext;
26 using namespace OHOS::Media;
27
28 namespace OHOS {
29 namespace AVSession {
30 namespace {
31 constexpr int64_t DURATION = 40000;
32 constexpr int64_t DURATION_PLAYBACK_SCENE_LIVE = -1;
33 constexpr int64_t DURATION_PLAYBACK_SCENE_INVALID = -2;
34 constexpr double PUBLISHDATE = 886291200000;
35 constexpr double PUBLISHDATE_INVALID_DATE = -1;
36 }
37
38 static AVMetaData g_metaDataCloneTest;
39 static AVMetaData g_metaData;
40 static OHOS::Parcel g_parcel;
41
42 class AVMetaDataTest : public testing::Test {
43 public:
44 static void SetUpTestCase();
45 static void TearDownTestCase();
46 void SetUp() override;
47 void TearDown() override;
48 std::shared_ptr<OHOS::Media::PixelMap> CreatePixelMap();
49 };
50
SetUpTestCase()51 void AVMetaDataTest::SetUpTestCase()
52 {
53 }
54
TearDownTestCase()55 void AVMetaDataTest::TearDownTestCase()
56 {
57 }
58
SetUp()59 void AVMetaDataTest::SetUp()
60 {
61 g_metaData.Reset();
62 g_metaData.SetAssetId("123");
63 g_metaData.SetTitle("Black Humor");
64 g_metaData.SetArtist("zhoujielun");
65 g_metaData.SetAuthor("zhoujielun");
66 g_metaData.SetAlbum("Jay");
67 g_metaData.SetWriter("zhoujielun");
68 g_metaData.SetComposer("zhoujielun");
69 g_metaData.SetDuration(DURATION);
70 g_metaData.SetMediaImage(AVSessionPixelMapAdapter::ConvertToInner(CreatePixelMap()));
71 g_metaData.SetMediaImageUri("xxxxx");
72 g_metaData.SetPublishDate(PUBLISHDATE);
73 g_metaData.SetSubTitle("fac");
74 g_metaData.SetDescription("for friends");
75 g_metaData.SetLyric("xxxxx");
76 }
77
TearDown()78 void AVMetaDataTest::TearDown()
79 {
80 }
81
CreatePixelMap()82 std::shared_ptr<OHOS::Media::PixelMap> AVMetaDataTest::CreatePixelMap()
83 {
84 int32_t pixelMapWidth = 4;
85 int32_t pixelMapHeight = 3;
86 const std::shared_ptr<OHOS::Media::PixelMap>& pixelMap = std::make_shared<OHOS::Media::PixelMap>();
87 ImageInfo info;
88 info.size.width = pixelMapWidth;
89 info.size.height = pixelMapHeight;
90 info.pixelFormat = PixelFormat::RGB_888;
91 info.colorSpace = ColorSpace::SRGB;
92 pixelMap->SetImageInfo(info);
93 int32_t rowDataSize = pixelMapWidth;
94 uint32_t bufferSize = rowDataSize * pixelMapHeight;
95 if (bufferSize <= 0) {
96 return pixelMap;
97 }
98
99 std::vector<std::uint8_t> buffer(bufferSize, 0x03);
100 pixelMap->SetPixelsAddr(buffer.data(), nullptr, bufferSize, AllocatorType::CUSTOM_ALLOC, nullptr);
101
102 return pixelMap;
103 }
104
105 /**
106 * @tc.name: SetAVMetaData001
107 * @tc.desc: set av meta data
108 * @tc.type: FUNC
109 * @tc.require: AR000H31JO
110 */
111 HWTEST_F(AVMetaDataTest, SetAVMetaData001, TestSize.Level1)
112 {
113 SLOGI("SetAVMetaData001 Begin");
114 AVMetaData metaData;
115 metaData.Reset();
116 metaData.SetAssetId("123");
117 metaData.SetTitle("Black Humor");
118 metaData.SetArtist("zhoujielun");
119 metaData.SetAuthor("zhoujielun");
120 metaData.SetAlbum("Jay");
121 metaData.SetWriter("zhoujielun");
122 metaData.SetComposer("zhoujielun");
123 metaData.SetDuration(DURATION);
124 metaData.SetMediaImage(AVSessionPixelMapAdapter::ConvertToInner(CreatePixelMap()));
125 metaData.SetMediaImageUri("xxxxx");
126 metaData.SetPublishDate(PUBLISHDATE);
127 metaData.SetSubTitle("fac");
128 metaData.SetDescription("for friends");
129 metaData.SetLyric("xxxxx");
130
131 EXPECT_EQ("123", metaData.GetAssetId());
132 EXPECT_EQ("Black Humor", metaData.GetTitle());
133 EXPECT_EQ("zhoujielun", metaData.GetArtist());
134 EXPECT_EQ("zhoujielun", metaData.GetAuthor());
135 EXPECT_EQ("Jay", metaData.GetAlbum());
136 EXPECT_EQ("zhoujielun", metaData.GetWriter());
137 EXPECT_EQ("zhoujielun", metaData.GetComposer());
138 EXPECT_EQ("xxxxx", metaData.GetMediaImageUri());
139
140 EXPECT_EQ(DURATION, metaData.GetDuration());
141 EXPECT_EQ(PUBLISHDATE, metaData.GetPublishDate());
142
143 EXPECT_NE(nullptr, metaData.GetMediaImage());
144
145 EXPECT_EQ("fac", metaData.GetSubTitle());
146 EXPECT_EQ("for friends", metaData.GetDescription());
147 EXPECT_EQ("xxxxx", metaData.GetLyric());
148
149 SLOGI("SetAVMetaData001 End");
150 }
151
152 /**
153 * @tc.name: SetAVMetaData002
154 * @tc.desc: set av meta data boundary duration
155 * @tc.type: FUNC
156 * @tc.require: AR000H31JO
157 */
158 HWTEST_F(AVMetaDataTest, SetAVMetaData002, TestSize.Level1)
159 {
160 SLOGI("SetAVMetaData002 Begin");
161 AVMetaData metaData;
162 metaData.Reset();
163 metaData.SetAssetId("123");
164 metaData.SetDuration(DURATION_PLAYBACK_SCENE_LIVE);
165 EXPECT_EQ(DURATION_PLAYBACK_SCENE_LIVE, metaData.GetDuration());
166 SLOGI("SetAVMetaData002 End");
167 }
168
169 /**
170 * @tc.name: SetAVMetaData003
171 * @tc.desc: set av meta data error duration
172 * @tc.type: FUNC
173 * @tc.require: AR000H31JO
174 */
175 HWTEST_F(AVMetaDataTest, SetAVMetaData003, TestSize.Level1)
176 {
177 SLOGI("SetAVMetaData003 Begin");
178 AVMetaData metaData;
179 metaData.Reset();
180 metaData.SetAssetId("123");
181 metaData.SetDuration(DURATION_PLAYBACK_SCENE_INVALID);
182 EXPECT_EQ(DURATION_PLAYBACK_SCENE_INVALID, metaData.GetDuration());
183 SLOGI("SetAVMetaData003 End");
184 }
185
186 /**
187 * @tc.name: SetAVMetaData004
188 * @tc.desc: set av meta data error publish date
189 * @tc.type: FUNC
190 * @tc.require: AR000H31JO
191 */
192 HWTEST_F(AVMetaDataTest, SetAVMetaData004, TestSize.Level1)
193 {
194 SLOGI("SetAVMetaData004 Begin");
195 AVMetaData metaData;
196 metaData.Reset();
197 metaData.SetAssetId("123");
198 metaData.SetPublishDate(PUBLISHDATE_INVALID_DATE);
199 EXPECT_EQ(PUBLISHDATE_INVALID_DATE, metaData.GetPublishDate());
200 SLOGI("SetAVMetaData004 End");
201 }
202 /**
203 * @tc.name: GetAVMetaData001
204 * @tc.desc: get av meta data result
205 * @tc.type: FUNC
206 * @tc.require: AR000H31JO
207 */
208 HWTEST_F(AVMetaDataTest, GetAVMetaData001, TestSize.Level1)
209 {
210 SLOGI("GetAVMetaData001 Begin");
211 AVMetaData metaData;
212 metaData.Reset();
213 metaData.CopyFrom(g_metaData);
214 EXPECT_EQ(metaData.GetAssetId(), g_metaData.GetAssetId());
215 std::string title1 = metaData.GetTitle();
216 SLOGI("title1 %{public}s", title1.c_str());
217 std::string title2 = g_metaData.GetTitle();
218 SLOGI("title2 %{public}s", title2.c_str());
219 EXPECT_EQ(title1, title2);
220 EXPECT_EQ(metaData.GetTitle(), g_metaData.GetTitle());
221 EXPECT_EQ(metaData.GetArtist(), g_metaData.GetArtist());
222 EXPECT_EQ(metaData.GetAuthor(), g_metaData.GetAuthor());
223 EXPECT_EQ(metaData.GetAlbum(), g_metaData.GetAlbum());
224 EXPECT_EQ(metaData.GetWriter(), g_metaData.GetWriter());
225 EXPECT_EQ(metaData.GetComposer(), g_metaData.GetComposer());
226 EXPECT_EQ(metaData.GetDuration(), g_metaData.GetDuration());
227 EXPECT_EQ(metaData.GetMediaImage(), g_metaData.GetMediaImage());
228 EXPECT_EQ(metaData.GetMediaImageUri(), g_metaData.GetMediaImageUri());
229 EXPECT_EQ(metaData.GetPublishDate(), g_metaData.GetPublishDate());
230 EXPECT_EQ(metaData.GetSubTitle(), g_metaData.GetSubTitle());
231 EXPECT_EQ(metaData.GetDescription(), g_metaData.GetDescription());
232 EXPECT_EQ(metaData.GetLyric(), g_metaData.GetLyric());
233 SLOGI("GetAVMetaData001 End");
234 }
235
236 /**
237 * @tc.name: AVMetaDataMarshalling001
238 * @tc.desc: metadata marshalling test
239 * @tc.type: FUNC
240 * @tc.require:AR000H31JO
241 */
242 HWTEST_F(AVMetaDataTest, AVMetaDataMarshalling001, TestSize.Level1)
243 {
244 SLOGI("AVMetaDataMarshalling001 Begin");
245 OHOS::Parcel& parcel = g_parcel;
246 auto ret = g_metaData.Marshalling(parcel);
247 EXPECT_EQ(ret, true);
248 SLOGI("AVMetaDataMarshalling001 End");
249 }
250
251 /**
252 * @tc.name: AVMetaDataUnmarshalling001
253 * @tc.desc: metadata unmarshalling test
254 * @tc.type: FUNC
255 * @tc.require:AR000H31JO
256 */
257 HWTEST_F(AVMetaDataTest, AVMetaDataUnmarshalling001, TestSize.Level1)
258 {
259 SLOGI("AVMetaDataUnmarshalling001 Begin");
260 OHOS::Parcel& parcel = g_parcel;
261 auto unmarshallingPtr = g_metaData.Unmarshalling(parcel);
262 EXPECT_NE(unmarshallingPtr, nullptr);
263 SLOGI("AVMetaDataUnmarshalling001 End");
264 }
265
266 /**
267 * @tc.name: AVMetaDataGetMask001
268 * @tc.desc: get meta mask
269 * @tc.type: FUNC
270 * @tc.require:AR000H31JO
271 */
272 HWTEST_F(AVMetaDataTest, AVMetaDataGetMask001, TestSize.Level1)
273 {
274 SLOGI("AVMetaDataGetMask001 Begin");
275 AVMetaData metaData;
276 metaData.Reset();
277 metaData.SetAssetId("123");
278 EXPECT_NE(metaData.GetMetaMask().to_string(), "");
279 SLOGI("AVMetaDataGetMask001 End");
280 }
281
282 /**
283 * @tc.name: AVMetaDataCopyDataFrom001
284 * @tc.desc: copy meta item from @metaIn according to set bit of @metaIn meta mask
285 * @tc.type: FUNC
286 * @tc.require:AR000H31JO
287 */
288 HWTEST_F(AVMetaDataTest, AVMetaDataCopyDataFromMetaIn001, TestSize.Level1)
289 {
290 SLOGI("AVMetaDataCopyDataFromMetaIn001 Begin");
291 AVMetaData metaData;
292 g_metaDataCloneTest.SetAssetId("1118");
293 g_metaDataCloneTest.SetWriter("Jay Chou");
294 g_metaDataCloneTest.SetDuration(DURATION);
295 auto ret = metaData.CopyFrom(g_metaDataCloneTest);
296
297 EXPECT_EQ(ret, true);
298 EXPECT_EQ(metaData.GetAssetId(), g_metaDataCloneTest.GetAssetId());
299 EXPECT_EQ(metaData.GetWriter(), g_metaDataCloneTest.GetWriter());
300 EXPECT_EQ(metaData.GetDuration(), g_metaDataCloneTest.GetDuration());
301 SLOGI("AVMetaDataCopyDataFromMetaIn001 End");
302 }
303
304 /**
305 * @tc.name: AVMetaDataCopyDataByMask001
306 * @tc.desc: copy meta item to @metaOut according to intersection of meta mask.
307 * @tc.type: FUNC
308 * @tc.require:AR000H31JO
309 */
310 HWTEST_F(AVMetaDataTest, AVMetaDataCopyDataByMask001, TestSize.Level1)
311 {
312 SLOGI("AVMetaDataCopyDataByMask001 Begin");
313 AVMetaData metaOut;
314 metaOut.SetAssetId("a");
315 metaOut.SetWriter("b");
316 metaOut.SetDuration(0);
317 AVMetaData::MetaMaskType mask = metaOut.GetMetaMask();
318
319 auto ret = g_metaDataCloneTest.CopyToByMask(mask, metaOut);
320 EXPECT_EQ(ret, true);
321
322 EXPECT_EQ(metaOut.GetAssetId(), g_metaDataCloneTest.GetAssetId());
323 EXPECT_EQ(metaOut.GetWriter(), g_metaDataCloneTest.GetWriter());
324 EXPECT_EQ(metaOut.GetDuration(), g_metaDataCloneTest.GetDuration());
325 SLOGI("AVMetaDataCopyDataByMask001 End");
326 }
327
328 /**
329 * @tc.name: SetPreviousAssetId001
330 * @tc.desc: set previous asset id.
331 * @tc.type: FUNC
332 * @tc.require: I5YMXD
333 */
334 HWTEST_F(AVMetaDataTest, SetPreviousAssetId001, TestSize.Level1)
335 {
336 SLOGI("SetPreviousAssetId001 Begin");
337 AVMetaData metaOut;
338 metaOut.SetPreviousAssetId("123");
339
340 EXPECT_EQ("123", metaOut.GetPreviousAssetId());
341 SLOGI("SetPreviousAssetId001 End");
342 }
343
344 /**
345 * @tc.name: SetNextAssetId001
346 * @tc.desc: set next asset id.
347 * @tc.type: FUNC
348 * @tc.require: I5YMXD
349 */
350 HWTEST_F(AVMetaDataTest, SetNextAssetId001, TestSize.Level1)
351 {
352 SLOGI("SetNextAssetId001 Begin");
353 AVMetaData metaOut;
354 metaOut.SetNextAssetId("123");
355
356 EXPECT_EQ("123", metaOut.GetNextAssetId());
357 SLOGI("SetNextAssetId001 End");
358 }
359
360 /**
361 * @tc.name: IsValid001
362 * @tc.desc: Return is avmetadata IsValid success
363 * @tc.type: FUNC
364 * @tc.require: I5YMXD
365 */
366 HWTEST_F(AVMetaDataTest, IsValid001, TestSize.Level1)
367 {
368 SLOGI("IsValid001 Begin");
369 AVMetaData metaOut;
370 metaOut.SetAssetId("a");
371 metaOut.SetWriter("b");
372 metaOut.SetDuration(0);
373 metaOut.SetPublishDate(0);
374
375 EXPECT_EQ(metaOut.IsValid(), true);
376 SLOGI("IsValid001 End");
377 }
378
379 /**
380 * @tc.name: IsValid002
381 * @tc.desc: Return is avmetadata IsValid failed
382 * @tc.type: FUNC
383 * @tc.require: I5YMXD
384 */
385 HWTEST_F(AVMetaDataTest, IsValid002, TestSize.Level1)
386 {
387 SLOGI("IsValid002 Begin");
388 AVMetaData metaOut;
389 metaOut.SetAssetId("a");
390 metaOut.SetWriter("b");
391 metaOut.SetDuration(-2);
392 metaOut.SetPublishDate(0);
393
394 EXPECT_EQ(metaOut.IsValid(), false);
395 SLOGI("IsValid002 End");
396 }
397 } // namespace AVSession
398 } // namespace OHOS
399