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 <string>
17 #include <sys/stat.h>
18 #include <fcntl.h>
19 #include <cinttypes>
20 #include <fstream>
21 #include "meta/meta_key.h"
22 #include "meta/meta.h"
23 #include "gtest/gtest.h"
24 #include "avcodec_errors.h"
25 #include "avcodec_audio_common.h"
26 #include "avcodec_info.h"
27 #include "media_description.h"
28 #include "file_server_demo.h"
29 #include "avsource_unit_test.h"
30 #include "media_data_source.h"
31 #include "native_avsource.h"
32 
33 #define LOCAL true
34 #define URI false
35 
36 using namespace OHOS;
37 using namespace OHOS::MediaAVCodec;
38 using namespace testing::ext;
39 using namespace std;
40 
41 namespace {
42 unique_ptr<FileServerDemo> server = nullptr;
43 static const string TEST_FILE_PATH = "/data/test/media/";
44 static const string TEST_URI_PATH = "http://127.0.0.1:46666/";
45 static const string TEST_TIMED_METADATA = "com.openharmony.timed_metadata.test";
46 const int64_t SOURCE_OFFSET = 0;
47 
48 string g_mp4Path = TEST_FILE_PATH + string("test_264_B_Gop25_4sec_cover.mp4");
49 string g_mp4Path3 = TEST_FILE_PATH + string("test_mpeg2_B_Gop25_4sec.mp4");
50 string g_mp4Path5 = TEST_FILE_PATH + string("test_suffix_mismatch.mp4");
51 string g_mp4Path6 = TEST_FILE_PATH + string("test_empty_file.mp4");
52 string g_mp4Path7 = TEST_FILE_PATH + string("test_error.mp4");
53 string g_mp4Path8 = TEST_FILE_PATH + string("zero_track.mp4");
54 string g_mp4Path9 = TEST_FILE_PATH + string("timed_metadata_track.mp4");
55 string g_mkvPath2 = TEST_FILE_PATH + string("h264_opus_4sec.mkv");
56 string g_tsPath = TEST_FILE_PATH + string("test_mpeg2_Gop25_4sec.ts");
57 string g_aacPath = TEST_FILE_PATH + string("audio/aac_44100_1.aac");
58 string g_flacPath = TEST_FILE_PATH + string("audio/flac_48000_1_cover.flac");
59 string g_m4aPath = TEST_FILE_PATH + string("audio/m4a_48000_1.m4a");
60 string g_mp3Path = TEST_FILE_PATH + string("audio/mp3_48000_1_cover.mp3");
61 string g_oggPath = TEST_FILE_PATH + string("audio/ogg_48000_1.ogg");
62 string g_wavPath = TEST_FILE_PATH + string("audio/wav_48000_1.wav");
63 string g_wavPath2 = TEST_FILE_PATH + string("wav_audio_test_202406290859.wav");
64 string g_amrPath = TEST_FILE_PATH + string("audio/amr_nb_8000_1.amr");
65 string g_amrPath2 = TEST_FILE_PATH + string("audio/amr_wb_16000_1.amr");
66 string g_audioVividPath = TEST_FILE_PATH + string("2obj_44100Hz_16bit_32k.mp4");
67 string g_audioVividPath2 = TEST_FILE_PATH + string("2obj_44100Hz_16bit_32k.ts");
68 string g_flvPath = TEST_FILE_PATH + string("h264.flv");
69 string g_filePath;
70 string g_mp4InfoPath = TEST_FILE_PATH + string("camera_info_parser.mp4");
71 string g_apePath = TEST_FILE_PATH + string("ape_test.ape");
72 string g_apeUri = TEST_URI_PATH + string("ape_test.ape");
73 string g_fmp4AvcPath = TEST_FILE_PATH + string("h264_fmp4.mp4");
74 string g_fmp4m4vPath = TEST_FILE_PATH + string("h264_fmp4.m4v");
75 string g_fmp4m4aPath = TEST_FILE_PATH + string("audio/h264_fmp4.m4a");
76 string g_srt = TEST_FILE_PATH + string("subtitle.srt");
77 string g_nonStandardBomPath = TEST_FILE_PATH + string("nonstandard_bom.mp3");
78 string g_vttPath = TEST_FILE_PATH + string("webvtt_test.vtt");
79 string g_mp4VvcPath = TEST_FILE_PATH + string("vvc.mp4");
80 string g_mp4RotationNone = TEST_FILE_PATH + string("ROTATE_NONE.mp4");
81 string g_mp4Rotation270 = TEST_FILE_PATH + string("ROTATE_270.mp4");
82 string g_mp4FLIPV = TEST_FILE_PATH + string("FLIP_V.mp4");
83 string g_mp4FLIPV90 = TEST_FILE_PATH + string("FLIP_V_90.mp4");
84 } // namespace
85 
SetUpTestCase(void)86 void AVSourceUnitTest::SetUpTestCase(void)
87 {
88     server = make_unique<FileServerDemo>();
89     server->StartServer();
90 }
91 
TearDownTestCase(void)92 void AVSourceUnitTest::TearDownTestCase(void)
93 {
94     server->StopServer();
95 }
96 
SetUp(void)97 void AVSourceUnitTest::SetUp(void) {}
98 
TearDown(void)99 void AVSourceUnitTest::TearDown(void)
100 {
101     if (source_ != nullptr) {
102         source_->Destroy();
103         source_ = nullptr;
104     }
105     if (fd_ > 0) {
106         close(fd_);
107         fd_ = -1;
108     }
109     if (format_ != nullptr) {
110         format_->Destroy();
111         format_ = nullptr;
112     }
113     trackIndex_ = 0;
114     size_ = 0;
115     addr_ = nullptr;
116     buffSize_ = 0;
117     initStatus_ = false;
118     ResetFormatValue();
119 }
120 
GetFileSize(const string &fileName)121 int64_t AVSourceUnitTest::GetFileSize(const string &fileName)
122 {
123     int64_t fileSize = 0;
124     if (!fileName.empty()) {
125         struct stat fileStatus {};
126         if (stat(fileName.c_str(), &fileStatus) == 0) {
127             fileSize = static_cast<int64_t>(fileStatus.st_size);
128         }
129     }
130     return fileSize;
131 }
132 
OpenFile(const string &fileName)133 int32_t AVSourceUnitTest::OpenFile(const string &fileName)
134 {
135     int32_t fd = open(fileName.c_str(), O_RDONLY);
136     return fd;
137 }
138 
ResetFormatValue()139 void AVSourceUnitTest::ResetFormatValue()
140 {
141     formatVal_.title = "";
142     formatVal_.artist = "";
143     formatVal_.album = "";
144     formatVal_.albumArtist = "";
145     formatVal_.date = "";
146     formatVal_.comment = "";
147     formatVal_.genre = "";
148     formatVal_.copyright = "";
149     formatVal_.description = "";
150     formatVal_.language = "";
151     formatVal_.lyrics = "";
152     formatVal_.duration = 0;
153     formatVal_.trackCount = 0;
154     formatVal_.author = "";
155     formatVal_.composer = "";
156     formatVal_.hasVideo = -1;
157     formatVal_.hasAudio = -1;
158     formatVal_.fileType = 0;
159     formatVal_.codecMime = "";
160     formatVal_.trackType = 0;
161     formatVal_.width = 0;
162     formatVal_.height = 0;
163     formatVal_.aacIsAdts = -1;
164     formatVal_.sampleRate = 0;
165     formatVal_.channelCount = 0;
166     formatVal_.bitRate = 0;
167     formatVal_.audioSampleFormat = 0;
168     formatVal_.frameRate = 0;
169     formatVal_.rotationAngle = 0;
170     formatVal_.orientationType = 0;
171     formatVal_.channelLayout = 0;
172     formatVal_.hdrType = 0;
173     formatVal_.codecProfile = 0;
174     formatVal_.codecLevel = 0;
175     formatVal_.colorPrimaries = 0;
176     formatVal_.transferCharacteristics = 0;
177     formatVal_.rangeFlag = 0;
178     formatVal_.matrixCoefficients = 0;
179     formatVal_.chromaLocation = 0;
180     formatVal_.profile = 0;
181     formatVal_.level = 0;
182     formatVal_.colorPri = 0;
183     formatVal_.colorTrans = 0;
184     formatVal_.colorMatrix = 0;
185     formatVal_.colorRange = 0;
186     formatVal_.chromaLoc = 0;
187     formatVal_.isHdrVivid = 0;
188 }
189 
AVSourceReadAt(OH_AVBuffer *data, int32_t length, int64_t pos)190 static int32_t AVSourceReadAt(OH_AVBuffer *data, int32_t length, int64_t pos)
191 {
192     if (data == nullptr) {
193         printf("AVSourceReadAt : data is nullptr!\n");
194         return OHOS::Media::MediaDataSourceError::SOURCE_ERROR_IO;
195     }
196 
197     std::ifstream infile(g_filePath, std::ofstream::binary);
198     if (!infile.is_open()) {
199         printf("AVSourceReadAt : open file failed! file:%s\n", g_filePath.c_str());
200         return OHOS::Media::MediaDataSourceError::SOURCE_ERROR_IO;  // 打开文件失败
201     }
202 
203     infile.seekg(0, std::ios::end);
204     int64_t fileSize = infile.tellg();
205     if (pos >= fileSize) {
206         printf("AVSourceReadAt : pos over or equals file size!\n");
207         return OHOS::Media::MediaDataSourceError::SOURCE_ERROR_EOF;  // pos已经是文件末尾位置,无法读取
208     }
209 
210     if (pos + length > fileSize) {
211         length = fileSize - pos;    // pos+length长度超过文件大小时,读取从pos到文件末尾的数据
212     }
213 
214     infile.seekg(pos, std::ios::beg);
215     if (length <= 0) {
216         printf("AVSourceReadAt : raed length less than zero!\n");
217         return OHOS::Media::MediaDataSourceError::SOURCE_ERROR_IO;
218     }
219     char* buffer = new char[length];
220     infile.read(buffer, length);
221     infile.close();
222 
223     errno_t result = memcpy_s(reinterpret_cast<char *>(OH_AVBuffer_GetAddr(data)),
224         OH_AVBuffer_GetCapacity(data), buffer, length);
225     delete[] buffer;
226     if (result != 0) {
227         printf("memcpy_s failed!");
228         return OHOS::Media::MediaDataSourceError::SOURCE_ERROR_IO;
229     }
230 
231     return length;
232 }
233 
234 /**********************************source FD**************************************/
235 namespace {
236 /**
237  * @tc.name: AVSource_CreateSourceWithFD_1000
238  * @tc.desc: create source with fd, mp4
239  * @tc.type: FUNC
240  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1000, TestSize.Level1)241 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1000, TestSize.Level1)
242 {
243     printf("---- %s ----\n", g_mp4Path.c_str());
244     fd_ = OpenFile(g_mp4Path);
245     size_ = GetFileSize(g_mp4Path);
246     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
247     ASSERT_NE(source_, nullptr);
248     size_ += 1000;
249     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
250     ASSERT_NE(source_, nullptr);
251     size_ = 1000;
252     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
253     ASSERT_EQ(source_, nullptr);
254     size_ = 0;
255     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
256     ASSERT_EQ(source_, nullptr);
257     size_ = -1;
258     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
259     ASSERT_EQ(source_, nullptr);
260 }
261 
262 /**
263  * @tc.name: AVSource_CreateSourceWithFD_1010
264  * @tc.desc: create source with fd, ts
265  * @tc.type: FUNC
266  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1010, TestSize.Level1)267 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1010, TestSize.Level1)
268 {
269     printf("---- %s ----\n", g_tsPath.c_str());
270     fd_ = OpenFile(g_tsPath);
271     size_ = GetFileSize(g_tsPath);
272     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
273     ASSERT_NE(source_, nullptr);
274 }
275 
276 /**
277  * @tc.name: AVSource_CreateSourceWithFD_1020
278  * @tc.desc: create source with fd, but file is abnormal
279  * @tc.type: FUNC
280  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1020, TestSize.Level1)281 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1020, TestSize.Level1)
282 {
283     printf("---- %s ----\n", g_mp4Path5.c_str());
284     fd_ = OpenFile(g_mp4Path5);
285     size_ = GetFileSize(g_mp4Path5);
286     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
287     ASSERT_EQ(source_, nullptr);
288 }
289 
290 /**
291  * @tc.name: AVSource_CreateSourceWithFD_1030
292  * @tc.desc: create source with fd, but file is empty
293  * @tc.type: FUNC
294  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1030, TestSize.Level1)295 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1030, TestSize.Level1)
296 {
297     printf("---- %s ----\n", g_mp4Path6.c_str());
298     fd_ = OpenFile(g_mp4Path6);
299     size_ = GetFileSize(g_mp4Path6);
300     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
301     ASSERT_EQ(source_, nullptr);
302 }
303 
304 /**
305  * @tc.name: AVSource_CreateSourceWithFD_1040
306  * @tc.desc: create source with fd, but file is error
307  * @tc.type: FUNC
308  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1040, TestSize.Level1)309 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1040, TestSize.Level1)
310 {
311     printf("---- %s ----\n", g_mp4Path7.c_str());
312     fd_ = OpenFile(g_mp4Path7);
313     size_ = GetFileSize(g_mp4Path7);
314     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
315     ASSERT_EQ(source_, nullptr);
316 }
317 
318 /**
319  * @tc.name: AVSource_CreateSourceWithFD_1050
320  * @tc.desc: create source with fd, but track is zero
321  * @tc.type: FUNC
322  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1050, TestSize.Level1)323 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1050, TestSize.Level1)
324 {
325     printf("---- %s ----\n", g_mp4Path8.c_str());
326     fd_ = OpenFile(g_mp4Path8);
327     size_ = GetFileSize(g_mp4Path8);
328     cout << "---fd: " << fd_ << "---size: " << size_ << endl;
329     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
330     ASSERT_NE(source_, nullptr);
331 }
332 
333 /**
334  * @tc.name: AVSource_CreateSourceWithFD_1060
335  * @tc.desc: create source with fd, the values of fd is abnormal;
336  * @tc.type: FUNC
337  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1060, TestSize.Level1)338 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1060, TestSize.Level1)
339 {
340     size_ = 1000;
341     fd_ = 0;
342     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
343     ASSERT_EQ(source_, nullptr);
344     fd_ = 1;
345     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
346     ASSERT_EQ(source_, nullptr);
347     fd_ = 2;
348     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
349     ASSERT_EQ(source_, nullptr);
350     fd_ = -1;
351     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
352     ASSERT_EQ(source_, nullptr);
353 }
354 
355 /**
356  * @tc.name: AVSource_CreateSourceWithFD_1070
357  * @tc.desc: create source with fd, offset is exception value;
358  * @tc.type: FUNC
359  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1070, TestSize.Level1)360 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1070, TestSize.Level1)
361 {
362     printf("---- %s ----\n", g_mp4Path.c_str());
363     fd_ = OpenFile(g_mp4Path);
364     size_ = GetFileSize(g_mp4Path);
365     int64_t offset = 5000;
366     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, offset, size_);
367     ASSERT_EQ(source_, nullptr);
368     offset = -10;
369     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, offset, size_);
370     ASSERT_EQ(source_, nullptr);
371     offset = size_;
372     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, offset, size_);
373     ASSERT_EQ(source_, nullptr);
374     offset = size_ + 1000;
375     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, offset, size_);
376     ASSERT_EQ(source_, nullptr);
377 }
378 
379 /**
380  * @tc.name: AVSource_CreateSourceWithFD_1080
381  * @tc.desc: Create source repeatedly
382  * @tc.type: FUNC
383  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1080, TestSize.Level1)384 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1080, TestSize.Level1)
385 {
386     printf("---- %s ----\n", g_mp4Path.c_str());
387     fd_ = OpenFile(g_mp4Path);
388     size_ = GetFileSize(g_mp4Path);
389     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
390     ASSERT_NE(source_, nullptr);
391     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
392     ASSERT_NE(source_, nullptr);
393 }
394 
395 /**
396  * @tc.name: AVSource_CreateSourceWithFD_1090
397  * @tc.desc: destroy source
398  * @tc.type: FUNC
399  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1090, TestSize.Level1)400 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithFD_1090, TestSize.Level1)
401 {
402     printf("---- %s ----\n", g_mp4Path.c_str());
403     fd_ = OpenFile(g_mp4Path);
404     size_ = GetFileSize(g_mp4Path);
405     int32_t fd2 = OpenFile(g_mp3Path);
406     int64_t size2 = GetFileSize(g_mp3Path);
407     printf("---- %s ----\n", g_mp3Path.c_str());
408     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
409     ASSERT_NE(source_, nullptr);
410     shared_ptr<AVSourceMock> source2 = AVSourceMockFactory::CreateSourceWithFD(fd2, SOURCE_OFFSET, size2);
411     ASSERT_NE(source2, nullptr);
412     ASSERT_EQ(source_->Destroy(), AV_ERR_OK);
413     ASSERT_EQ(source2->Destroy(), AV_ERR_OK);
414     source_ = nullptr;
415     source2 = nullptr;
416     close(fd2);
417 }
418 
419 /**
420  * @tc.name: AVSource_CreateSourceWithDataSource_Compare_Fd_1000
421  * @tc.desc: destroy source
422  * @tc.type: FUNC
423  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithDataSource_Compare_Fd_1000, TestSize.Level1)424 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithDataSource_Compare_Fd_1000, TestSize.Level1)
425 {
426     printf("---- %s ----\n", g_mp4Path.c_str());
427     fd_ = OpenFile(g_mp4Path);
428     size_ = GetFileSize(g_mp4Path);
429     g_filePath = g_mp4Path;
430     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
431     OH_AVDataSource dataSource = {size_, AVSourceReadAt};
432     std::shared_ptr<NativeAVDataSource> source;
433     std::shared_ptr<AVSourceMock> dataSource_;
434 #ifndef AVSOURCE_INNER_UNIT_TEST
435     dataSource_ = AVSourceMockFactory::CreateWithDataSource(&dataSource);
436 #else
437     source = std::make_shared<NativeAVDataSource>(&dataSource);
438     dataSource_ = AVSourceMockFactory::CreateWithDataSource(source);
439 #endif
440     ASSERT_NE(source_, nullptr);
441     ASSERT_NE(dataSource_, nullptr);
442     ASSERT_EQ(source_->Destroy(), AV_ERR_OK);
443     ASSERT_EQ(dataSource_->Destroy(), AV_ERR_OK);
444     source_ = nullptr;
445     dataSource_ = nullptr;
446 }
447 
448 /**
449  * @tc.name: AVSource_CreateSourceWithDataSource_Compare_Fd_1010
450  * @tc.desc: destroy source (test_error.mp4)
451  * @tc.type: FUNC
452  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithDataSource_Compare_Fd_1010, TestSize.Level1)453 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithDataSource_Compare_Fd_1010, TestSize.Level1)
454 {
455     printf("---- %s ----\n", g_mp4Path7.c_str());
456     fd_ = OpenFile(g_mp4Path7);
457     size_ = GetFileSize(g_mp4Path7);
458     g_filePath = g_mp4Path7;
459     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
460     OH_AVDataSource dataSource = {size_, AVSourceReadAt};
461     std::shared_ptr<NativeAVDataSource> source;
462     std::shared_ptr<AVSourceMock> dataSource_;
463 #ifndef AVSOURCE_INNER_UNIT_TEST
464     dataSource_ = AVSourceMockFactory::CreateWithDataSource(&dataSource);
465 #else
466     source = std::make_shared<NativeAVDataSource>(&dataSource);
467     dataSource_ = AVSourceMockFactory::CreateWithDataSource(source);
468 #endif
469     ASSERT_EQ(source_, nullptr);
470     ASSERT_EQ(dataSource_, source_);
471 }
472 
473 /**
474  * @tc.name: AVSource_CreateSourceWithDataSource_Compare_Fd_1020
475  * @tc.desc: destroy source (test_empty_file.mp4)
476  * @tc.type: FUNC
477  */
HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithDataSource_Compare_Fd_1020, TestSize.Level1)478 HWTEST_F(AVSourceUnitTest, AVSource_CreateSourceWithDataSource_Compare_Fd_1020, TestSize.Level1)
479 {
480     printf("---- %s ----\n", g_mp4Path6.c_str());
481     fd_ = OpenFile(g_mp4Path6);
482     size_ = GetFileSize(g_mp4Path6);
483     g_filePath = g_mp4Path6;
484     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
485     OH_AVDataSource dataSource = {size_, AVSourceReadAt};
486     std::shared_ptr<NativeAVDataSource> source;
487     std::shared_ptr<AVSourceMock> dataSource_;
488 #ifndef AVSOURCE_INNER_UNIT_TEST
489     dataSource_ = AVSourceMockFactory::CreateWithDataSource(&dataSource);
490 #else
491     source = std::make_shared<NativeAVDataSource>(&dataSource);
492     dataSource_ = AVSourceMockFactory::CreateWithDataSource(source);
493 #endif
494     ASSERT_EQ(source_, nullptr);
495     ASSERT_EQ(dataSource_, source_);
496 }
497 
498 /**
499  * @tc.name: AVSource_Compare_DumpInfo_1000
500  * @tc.desc: Compare the dumpInfo of dataSource and fd (mp4)
501  * @tc.type: FUNC
502  */
HWTEST_F(AVSourceUnitTest, AVSource_Compare_DumpInfo_1000, TestSize.Level1)503 HWTEST_F(AVSourceUnitTest, AVSource_Compare_DumpInfo_1000, TestSize.Level1)
504 {
505     printf("---- %s ----\n", g_mp4Path.c_str());
506     fd_ = OpenFile(g_mp4Path);
507     size_ = GetFileSize(g_mp4Path);
508     g_filePath = g_mp4Path;
509     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
510     OH_AVDataSource dataSource = {size_, AVSourceReadAt};
511     std::shared_ptr<NativeAVDataSource> source;
512     std::shared_ptr<AVSourceMock> dataSource_;
513 #ifndef AVSOURCE_INNER_UNIT_TEST
514     dataSource_ = AVSourceMockFactory::CreateWithDataSource(&dataSource);
515 #else
516     source = std::make_shared<NativeAVDataSource>(&dataSource);
517     dataSource_ = AVSourceMockFactory::CreateWithDataSource(source);
518 #endif
519     ASSERT_NE(source_, nullptr);
520     ASSERT_NE(dataSource_, nullptr);
521     format_ = source_->GetSourceFormat();
522     std::shared_ptr<FormatMock> dsFormat_ = dataSource_->GetSourceFormat();
523     ASSERT_NE(format_, nullptr);
524     ASSERT_NE(dsFormat_, nullptr);
525     std::string str1(format_->DumpInfo());
526     std::string str2(dsFormat_->DumpInfo());
527     printf("[ sourceFormat ]: %s\n", str1.c_str());
528     printf("[ dataSourceFormat ]: %s\n", str2.c_str());
529     ASSERT_EQ(str1, str2);
530 #ifdef AVSOURCE_INNER_UNIT_TEST
531     ASSERT_EQ(str1, str2);
532 #endif
533     ASSERT_NE(source_, nullptr);
534     ASSERT_NE(dataSource_, nullptr);
535     ASSERT_EQ(source_->Destroy(), AV_ERR_OK);
536     ASSERT_EQ(dataSource_->Destroy(), AV_ERR_OK);
537     source_ = nullptr;
538     dataSource_ = nullptr;
539 }
540 
541 /**
542  * @tc.name: AVSource_Compare_DumpInfo_1010
543  * @tc.desc: Compare the dumpInfo of dataSource and fd (zero_track.mp4)
544  * @tc.type: FUNC
545  */
HWTEST_F(AVSourceUnitTest, AVSource_Compare_DumpInfo_1010, TestSize.Level1)546 HWTEST_F(AVSourceUnitTest, AVSource_Compare_DumpInfo_1010, TestSize.Level1)
547 {
548     printf("---- %s ----\n", g_mp4Path8.c_str());
549     fd_ = OpenFile(g_mp4Path8);
550     size_ = GetFileSize(g_mp4Path8);
551     g_filePath = g_mp4Path8;
552     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
553     OH_AVDataSource dataSource = {size_, AVSourceReadAt};
554     std::shared_ptr<NativeAVDataSource> source;
555     std::shared_ptr<AVSourceMock> dataSource_;
556 #ifndef AVSOURCE_INNER_UNIT_TEST
557     dataSource_ = AVSourceMockFactory::CreateWithDataSource(&dataSource);
558 #else
559     source = std::make_shared<NativeAVDataSource>(&dataSource);
560     dataSource_ = AVSourceMockFactory::CreateWithDataSource(source);
561 #endif
562     ASSERT_NE(source_, nullptr);
563     ASSERT_NE(dataSource_, nullptr);
564     format_ = source_->GetSourceFormat();
565     std::shared_ptr<FormatMock> dsFormat_ = dataSource_->GetSourceFormat();
566     ASSERT_NE(format_, nullptr);
567     ASSERT_NE(dsFormat_, nullptr);
568     std::string str1(format_->DumpInfo());
569     std::string str2(dsFormat_->DumpInfo());
570     printf("[ sourceFormat ]: %s\n", str1.c_str());
571     printf("[ dataSourceFormat ]: %s\n", str2.c_str());
572     ASSERT_EQ(str1, str2);
573 #ifdef AVSOURCE_INNER_UNIT_TEST
574     ASSERT_EQ(str1, str2);
575 #endif
576     ASSERT_NE(source_, nullptr);
577     ASSERT_NE(dataSource_, nullptr);
578     ASSERT_EQ(source_->Destroy(), AV_ERR_OK);
579     ASSERT_EQ(dataSource_->Destroy(), AV_ERR_OK);
580     source_ = nullptr;
581     dataSource_ = nullptr;
582 }
583 
584 /**
585  * @tc.name: AVSource_GetFormat_1000
586  * @tc.desc: get source format(mp4)
587  * @tc.type: FUNC
588  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1000, TestSize.Level1)589 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1000, TestSize.Level1)
590 {
591     fd_ = OpenFile(g_mp4Path);
592     size_ = GetFileSize(g_mp4Path);
593     printf("---- %s ----\n", g_mp4Path.c_str());
594     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
595     ASSERT_NE(source_, nullptr);
596     format_ = source_->GetSourceFormat();
597     ASSERT_NE(format_, nullptr);
598     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
599     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_TITLE, formatVal_.title));
600     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ARTIST, formatVal_.artist));
601     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ALBUM, formatVal_.album));
602     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ALBUM_ARTIST, formatVal_.albumArtist));
603     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_DATE, formatVal_.date));
604     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COMMENT, formatVal_.comment));
605     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_GENRE, formatVal_.genre));
606     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COPYRIGHT, formatVal_.copyright));
607     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_DESCRIPTION, formatVal_.description));
608     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LYRICS, formatVal_.lyrics));
609     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
610     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
611     ASSERT_EQ(formatVal_.title, "title");
612     ASSERT_EQ(formatVal_.artist, "artist");
613     ASSERT_EQ(formatVal_.album, "album");
614     ASSERT_EQ(formatVal_.albumArtist, "album artist");
615     ASSERT_EQ(formatVal_.date, "2023");
616     ASSERT_EQ(formatVal_.comment, "comment");
617     ASSERT_EQ(formatVal_.genre, "genre");
618     ASSERT_EQ(formatVal_.copyright, "Copyright");
619     ASSERT_EQ(formatVal_.lyrics, "lyrics");
620     ASSERT_EQ(formatVal_.description, "description");
621     ASSERT_EQ(formatVal_.duration, 4120000);
622     ASSERT_EQ(formatVal_.trackCount, 3);
623 #ifdef AVSOURCE_INNER_UNIT_TEST
624     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
625     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
626     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
627     ASSERT_EQ(formatVal_.hasVideo, 1);
628     ASSERT_EQ(formatVal_.hasAudio, 1);
629     ASSERT_EQ(formatVal_.fileType, 101);
630 #endif
631 }
632 
633 /**
634  * @tc.name: AVSource_GetFormat_1010
635  * @tc.desc: get track format (mp4)
636  * @tc.type: FUNC
637  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1010, TestSize.Level1)638 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1010, TestSize.Level1)
639 {
640     fd_ = OpenFile(g_mp4Path);
641     size_ = GetFileSize(g_mp4Path);
642     printf("---- %s ------\n", g_mp4Path.c_str());
643     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
644     ASSERT_NE(source_, nullptr);
645     trackIndex_ = 0;
646     format_ = source_->GetTrackFormat(trackIndex_);
647     ASSERT_NE(format_, nullptr);
648     printf("[ trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
649     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
650     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
651     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_WIDTH, formatVal_.width));
652     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_HEIGHT, formatVal_.height));
653     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
654     ASSERT_TRUE(format_->GetDoubleValue(MediaDescriptionKey::MD_KEY_FRAME_RATE, formatVal_.frameRate));
655     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_VID);
656     ASSERT_EQ(formatVal_.codecMime, "video/avc");
657     ASSERT_EQ(formatVal_.width, 1920);
658     ASSERT_EQ(formatVal_.height, 1080);
659     ASSERT_EQ(formatVal_.bitRate, 7782407);
660     ASSERT_DOUBLE_EQ(formatVal_.frameRate, 25.000000);
661     trackIndex_ = 1;
662     format_ = source_->GetTrackFormat(trackIndex_);
663     ASSERT_NE(format_, nullptr);
664     printf("[ trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
665     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
666     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
667     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
668     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
669     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, formatVal_.aacIsAdts));
670     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
671     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
672     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
673     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
674     ASSERT_EQ(formatVal_.sampleRate, 44100);
675     ASSERT_EQ(formatVal_.channelCount, 2);
676     ASSERT_EQ(formatVal_.bitRate, 128563);
677     ASSERT_EQ(formatVal_.aacIsAdts, 1);
678     ASSERT_EQ(formatVal_.codecMime, "audio/mp4a-latm");
679     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
680     ASSERT_EQ(formatVal_.channelLayout, 3);
681 }
682 
683 /**
684  * @tc.name: AVSource_GetFormat_1011
685  * @tc.desc: get track format(mp4, cover)
686  * @tc.type: FUNC
687  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1011, TestSize.Level1)688 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1011, TestSize.Level1)
689 {
690     fd_ = OpenFile(g_mp4Path);
691     size_ = GetFileSize(g_mp4Path);
692     printf("---- %s ------\n", g_mp4Path.c_str());
693     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
694     ASSERT_NE(source_, nullptr);
695     trackIndex_ = 2;
696     format_ = source_->GetTrackFormat(trackIndex_);
697     ASSERT_NE(format_, nullptr);
698 #ifdef AVSOURCE_INNER_UNIT_TEST
699     const char* outFile = "/data/test/test_264_B_Gop25_4sec_cover.bin";
700     FILE* saveFile = fopen(outFile, "wb");
701     ASSERT_TRUE(format_->GetBuffer(MediaDescriptionKey::MD_KEY_COVER, &addr_, buffSize_));
702     fwrite(addr_, sizeof(uint8_t), buffSize_, saveFile);
703     fclose(saveFile);
704 #endif
705 }
706 
707 /**
708  * @tc.name: AVSource_GetFormat_1020
709  * @tc.desc: get source format when the file is ts(mpeg2, aac)
710  * @tc.type: FUNC
711  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1020, TestSize.Level1)712 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1020, TestSize.Level1)
713 {
714     fd_ = OpenFile(g_tsPath);
715     size_ = GetFileSize(g_tsPath);
716     printf("---- %s ----\n", g_tsPath.c_str());
717     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
718     ASSERT_NE(source_, nullptr);
719     format_ = source_->GetSourceFormat();
720     ASSERT_NE(format_, nullptr);
721     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
722     trackIndex_ = 0;
723     format_ = source_->GetTrackFormat(trackIndex_);
724     ASSERT_NE(format_, nullptr);
725     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
726     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
727     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
728     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_WIDTH, formatVal_.width));
729     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_HEIGHT, formatVal_.height));
730     ASSERT_TRUE(format_->GetDoubleValue(MediaDescriptionKey::MD_KEY_FRAME_RATE, formatVal_.frameRate));
731     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_VID);
732     ASSERT_EQ(formatVal_.codecMime, "video/mpeg2");
733     ASSERT_EQ(formatVal_.width, 1920);
734     ASSERT_EQ(formatVal_.height, 1080);
735     ASSERT_DOUBLE_EQ(formatVal_.frameRate, 25.000000);
736     trackIndex_ = 1;
737     format_ = source_->GetTrackFormat(trackIndex_);
738     ASSERT_NE(format_, nullptr);
739     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
740     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
741     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
742     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
743     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
744     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
745     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
746     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
747     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
748     ASSERT_EQ(formatVal_.sampleRate, 44100);
749     ASSERT_EQ(formatVal_.channelCount, 2);
750     ASSERT_EQ(formatVal_.bitRate, 127103);
751     ASSERT_EQ(formatVal_.codecMime, "audio/mp4a-latm");
752     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
753     ASSERT_EQ(formatVal_.channelLayout, 3);
754 }
755 
756 /**
757  * @tc.name: AVSource_GetFormat_1030
758  * @tc.desc: get source format when the file is mp4(mpeg2 aac)
759  * @tc.type: FUNC
760  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1030, TestSize.Level1)761 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1030, TestSize.Level1)
762 {
763     fd_ = OpenFile(g_mp4Path3);
764     size_ = GetFileSize(g_mp4Path3);
765     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
766     ASSERT_NE(source_, nullptr);
767     format_ = source_->GetSourceFormat();
768     ASSERT_NE(format_, nullptr);
769 #ifdef AVSOURCE_INNER_UNIT_TEST
770     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
771     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
772     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
773     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
774     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COMPOSER, formatVal_.composer));
775     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_AUTHOR, formatVal_.author));
776     ASSERT_EQ(formatVal_.hasVideo, 1);
777     ASSERT_EQ(formatVal_.hasAudio, 1);
778     ASSERT_EQ(formatVal_.fileType, 101);
779     ASSERT_EQ(formatVal_.composer, "composer");
780     ASSERT_EQ(formatVal_.author, "author");
781 #endif
782     trackIndex_ = 0;
783     format_ = source_->GetTrackFormat(trackIndex_);
784     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
785     ASSERT_NE(format_, nullptr);
786     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
787     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
788     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
789     ASSERT_TRUE(format_->GetDoubleValue(MediaDescriptionKey::MD_KEY_FRAME_RATE, formatVal_.frameRate));
790     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_VID);
791     ASSERT_EQ(formatVal_.codecMime, "video/mpeg2");
792     ASSERT_EQ(formatVal_.bitRate, 3889231);
793     ASSERT_DOUBLE_EQ(formatVal_.frameRate, 25.000000);
794     trackIndex_ = 1;
795     format_ = source_->GetTrackFormat(trackIndex_);
796     ASSERT_NE(format_, nullptr);
797     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
798     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
799     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
800     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
801     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
802     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
803     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
804     ASSERT_EQ(formatVal_.sampleRate, 44100);
805     ASSERT_EQ(formatVal_.channelCount, 2);
806     ASSERT_EQ(formatVal_.bitRate, 128563);
807     ASSERT_EQ(formatVal_.codecMime, "audio/mp4a-latm");
808     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
809     ASSERT_EQ(formatVal_.channelLayout, 3);
810 }
811 
812 /**
813  * @tc.name: AVSource_GetFormat_1050
814  * @tc.desc: get format when the file is mkv (video: h264, audio: opus)
815  * @tc.type: FUNC
816  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1050, TestSize.Level1)817 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1050, TestSize.Level1)
818 {
819     fd_ = OpenFile(g_mkvPath2);
820     size_ = GetFileSize(g_mkvPath2);
821     printf("---- %s ----\n", g_mkvPath2.c_str());
822     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
823     ASSERT_NE(source_, nullptr);
824     format_ = source_->GetSourceFormat();
825     ASSERT_NE(format_, nullptr);
826     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
827     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_TITLE, formatVal_.title));
828     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ARTIST, formatVal_.artist));
829     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ALBUM_ARTIST, formatVal_.albumArtist));
830     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_DATE, formatVal_.date));
831     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COMMENT, formatVal_.comment));
832     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_GENRE, formatVal_.genre));
833     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COPYRIGHT, formatVal_.copyright));
834     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_DESCRIPTION, formatVal_.description));
835     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LYRICS, formatVal_.lyrics));
836     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
837     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
838     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LANGUAGE, formatVal_.language));
839     ASSERT_EQ(formatVal_.title, "title");
840     ASSERT_EQ(formatVal_.artist, "artist");
841     ASSERT_EQ(formatVal_.albumArtist, "album_artist");
842     ASSERT_EQ(formatVal_.date, "2023");
843     ASSERT_EQ(formatVal_.comment, "comment");
844     ASSERT_EQ(formatVal_.genre, "genre");
845     ASSERT_EQ(formatVal_.copyright, "copyRight");
846     ASSERT_EQ(formatVal_.lyrics, "lyrics");
847     ASSERT_EQ(formatVal_.description, "description");
848     ASSERT_EQ(formatVal_.duration, 4001000);
849     ASSERT_EQ(formatVal_.trackCount, 2);
850     ASSERT_EQ(formatVal_.language, "language");
851 #ifdef AVSOURCE_INNER_UNIT_TEST
852     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COMPOSER, formatVal_.composer));
853     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
854     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
855     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
856     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_AUTHOR, formatVal_.author));
857     ASSERT_EQ(formatVal_.hasVideo, 1);
858     ASSERT_EQ(formatVal_.hasAudio, 1);
859     ASSERT_EQ(formatVal_.fileType, 103);
860     ASSERT_EQ(formatVal_.author, "author");
861     ASSERT_EQ(formatVal_.composer, "composer");
862 #endif
863 }
864 
865 /**
866  * @tc.name: AVSource_GetFormat_1060
867  * @tc.desc: get format when the file is mkv (video: h264, audio: opus)
868  * @tc.type: FUNC
869  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1060, TestSize.Level1)870 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1060, TestSize.Level1)
871 {
872     fd_ = OpenFile(g_mkvPath2);
873     size_ = GetFileSize(g_mkvPath2);
874     printf("---- %s ----\n", g_mkvPath2.c_str());
875     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
876     ASSERT_NE(source_, nullptr);
877     trackIndex_ = 0;
878     format_ = source_->GetTrackFormat(trackIndex_);
879     ASSERT_NE(format_, nullptr);
880     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
881     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
882     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_WIDTH, formatVal_.width));
883     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_HEIGHT, formatVal_.height));
884     ASSERT_TRUE(format_->GetDoubleValue(MediaDescriptionKey::MD_KEY_FRAME_RATE, formatVal_.frameRate));
885     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
886     ASSERT_EQ(formatVal_.codecMime, "video/avc");
887     ASSERT_EQ(formatVal_.width, 1920);
888     ASSERT_EQ(formatVal_.height, 1080);
889     ASSERT_EQ(formatVal_.frameRate, 60.000000);
890     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_VID);
891     trackIndex_ = 1;
892     format_ = source_->GetTrackFormat(trackIndex_);
893     ASSERT_NE(format_, nullptr);
894     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
895     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
896     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
897     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
898     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
899     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
900     ASSERT_EQ(formatVal_.channelLayout, 4);
901     ASSERT_EQ(formatVal_.sampleRate, 48000);
902     ASSERT_EQ(formatVal_.codecMime, "audio/opus");
903     ASSERT_EQ(formatVal_.channelCount, 1);
904     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
905 }
906 
907 /**
908  * @tc.name: AVSource_GetFormat_1100
909  * @tc.desc: get format when the file is aac
910  * @tc.type: FUNC
911  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1100, TestSize.Level1)912 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1100, TestSize.Level1)
913 {
914     fd_ = OpenFile(g_aacPath);
915     size_ = GetFileSize(g_aacPath);
916     printf("---- %s ----\n", g_aacPath.c_str());
917     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
918     ASSERT_NE(source_, nullptr);
919     format_ = source_->GetSourceFormat();
920     ASSERT_NE(format_, nullptr);
921     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
922     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
923     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
924     ASSERT_EQ(formatVal_.duration, 30023469);
925     ASSERT_EQ(formatVal_.trackCount, 1);
926 #ifdef AVSOURCE_INNER_UNIT_TEST
927     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
928     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
929     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
930     ASSERT_EQ(formatVal_.fileType, 202);
931     ASSERT_EQ(formatVal_.hasAudio, 1);
932     ASSERT_EQ(formatVal_.hasVideo, 0);
933 #endif
934     trackIndex_ = 0;
935     format_ = source_->GetTrackFormat(trackIndex_);
936     ASSERT_NE(format_, nullptr);
937     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
938     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
939     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
940     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
941     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
942     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, formatVal_.aacIsAdts));
943     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
944     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
945     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
946     ASSERT_EQ(formatVal_.channelLayout, 3);
947     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
948     ASSERT_EQ(formatVal_.sampleRate, 44100);
949     ASSERT_EQ(formatVal_.channelCount, 2);
950     ASSERT_EQ(formatVal_.bitRate, 126800);
951     ASSERT_EQ(formatVal_.aacIsAdts, 1);
952     ASSERT_EQ(formatVal_.codecMime, "audio/mp4a-latm");
953     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
954 }
955 
956 /**
957  * @tc.name: AVSource_GetFormat_1110
958  * @tc.desc: get format when the file is flac
959  * @tc.type: FUNC
960  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1110, TestSize.Level1)961 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1110, TestSize.Level1)
962 {
963     fd_ = OpenFile(g_flacPath);
964     size_ = GetFileSize(g_flacPath);
965     printf("---- %s ----\n", g_flacPath.c_str());
966     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
967     ASSERT_NE(source_, nullptr);
968     format_ = source_->GetSourceFormat();
969     ASSERT_NE(format_, nullptr);
970     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
971     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_TITLE, formatVal_.title));
972     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ARTIST, formatVal_.artist));
973     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ALBUM, formatVal_.album));
974     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ALBUM_ARTIST, formatVal_.albumArtist));
975     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_DATE, formatVal_.date));
976     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COMMENT, formatVal_.comment));
977     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_GENRE, formatVal_.genre));
978     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COPYRIGHT, formatVal_.copyright));
979     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LYRICS, formatVal_.lyrics));
980     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LANGUAGE, formatVal_.language));
981     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
982     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
983     ASSERT_EQ(formatVal_.title, "title");
984     ASSERT_EQ(formatVal_.artist, "artist");
985     ASSERT_EQ(formatVal_.album, "album");
986     ASSERT_EQ(formatVal_.albumArtist, "album artist");
987     ASSERT_EQ(formatVal_.date, "2023");
988     ASSERT_EQ(formatVal_.comment, "comment");
989     ASSERT_EQ(formatVal_.genre, "genre");
990     ASSERT_EQ(formatVal_.copyright, "Copyright");
991     ASSERT_EQ(formatVal_.lyrics, "lyrics");
992     ASSERT_EQ(formatVal_.duration, 30000000);
993     ASSERT_EQ(formatVal_.trackCount, 2);
994 #ifdef AVSOURCE_INNER_UNIT_TEST
995     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COMPOSER, formatVal_.composer));
996     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_AUTHOR, formatVal_.author));
997     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
998     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
999     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1000     ASSERT_EQ(formatVal_.composer, "composer");
1001     ASSERT_EQ(formatVal_.author, "author");
1002     ASSERT_EQ(formatVal_.fileType, 204);
1003     ASSERT_EQ(formatVal_.hasAudio, 1);
1004     ASSERT_EQ(formatVal_.hasVideo, 0);
1005 #endif
1006 }
1007 
1008 /**
1009  * @tc.name: AVSource_GetFormat_1111
1010  * @tc.desc: get format when the file is flac
1011  * @tc.type: FUNC
1012  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1111, TestSize.Level1)1013 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1111, TestSize.Level1)
1014 {
1015     fd_ = OpenFile(g_flacPath);
1016     size_ = GetFileSize(g_flacPath);
1017     printf("---- %s ----\n", g_flacPath.c_str());
1018     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1019     ASSERT_NE(source_, nullptr);
1020     trackIndex_ = 0;
1021     format_ = source_->GetTrackFormat(trackIndex_);
1022     ASSERT_NE(format_, nullptr);
1023     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1024     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1025     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1026     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1027     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1028     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1029     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1030     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1031     ASSERT_EQ(formatVal_.channelLayout, 4);
1032     ASSERT_EQ(formatVal_.sampleRate, 48000);
1033     ASSERT_EQ(formatVal_.channelCount, 1);
1034     ASSERT_EQ(formatVal_.codecMime, "audio/flac");
1035     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_S32LE);
1036 #ifdef AVSOURCE_INNER_UNIT_TEST
1037     trackIndex_ = 1;
1038     format_ = source_->GetTrackFormat(trackIndex_);
1039     ASSERT_NE(format_, nullptr);
1040     printf("[ trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1041     const char* outFile = "/data/test/flac_48000_1_cover.bin";
1042     FILE* saveFile = fopen(outFile, "wb");
1043     ASSERT_TRUE(format_->GetBuffer(MediaDescriptionKey::MD_KEY_COVER, &addr_, buffSize_));
1044     fwrite(addr_, sizeof(uint8_t), buffSize_, saveFile);
1045     fclose(saveFile);
1046 #endif
1047 }
1048 
1049 /**
1050  * @tc.name: AVSource_GetFormat_11201
1051  * @tc.desc: get format when the file is m4a
1052  * @tc.type: FUNC
1053  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_11201, TestSize.Level1)1054 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_11201, TestSize.Level1)
1055 {
1056     fd_ = OpenFile(g_m4aPath);
1057     size_ = GetFileSize(g_m4aPath);
1058     printf("---- %s ----\n", g_m4aPath.c_str());
1059     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1060     ASSERT_NE(source_, nullptr);
1061     format_ = source_->GetSourceFormat();
1062     ASSERT_NE(format_, nullptr);
1063     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1064     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_TITLE, formatVal_.title));
1065     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ARTIST, formatVal_.artist));
1066     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ALBUM, formatVal_.album));
1067     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ALBUM_ARTIST, formatVal_.albumArtist));
1068     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_DATE, formatVal_.date));
1069     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COMMENT, formatVal_.comment));
1070     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_GENRE, formatVal_.genre));
1071     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COPYRIGHT, formatVal_.copyright));
1072     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LYRICS, formatVal_.lyrics));
1073     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_DESCRIPTION, formatVal_.description));
1074     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1075     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1076     ASSERT_EQ(formatVal_.title, "title");
1077     ASSERT_EQ(formatVal_.artist, "artist");
1078     ASSERT_EQ(formatVal_.album, "album");
1079     ASSERT_EQ(formatVal_.albumArtist, "album artist");
1080     ASSERT_EQ(formatVal_.date, "2023");
1081     ASSERT_EQ(formatVal_.comment, "comment");
1082     ASSERT_EQ(formatVal_.genre, "genre");
1083     ASSERT_EQ(formatVal_.copyright, "Copyright");
1084     ASSERT_EQ(formatVal_.lyrics, "lyrics");
1085     ASSERT_EQ(formatVal_.description, "description");
1086     ASSERT_EQ(formatVal_.duration, 30016000);
1087     ASSERT_EQ(formatVal_.trackCount, 1);
1088 #ifdef AVSOURCE_INNER_UNIT_TEST
1089     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COMPOSER, formatVal_.composer));
1090     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1091     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1092     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1093     ASSERT_EQ(formatVal_.composer, "composer");
1094     ASSERT_EQ(formatVal_.fileType, 206);
1095     ASSERT_EQ(formatVal_.hasAudio, 1);
1096     ASSERT_EQ(formatVal_.hasVideo, 0);
1097 #endif
1098 }
1099 
1100 /**
1101  * @tc.name: AVSource_GetFormat_1121
1102  * @tc.desc: get format when the file is m4a
1103  * @tc.type: FUNC
1104  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1121, TestSize.Level1)1105 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1121, TestSize.Level1)
1106 {
1107     fd_ = OpenFile(g_m4aPath);
1108     size_ = GetFileSize(g_m4aPath);
1109     printf("---- %s ----\n", g_m4aPath.c_str());
1110     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1111     ASSERT_NE(source_, nullptr);
1112     format_ = source_->GetTrackFormat(trackIndex_);
1113     ASSERT_NE(format_, nullptr);
1114     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1115     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1116     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1117     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1118     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1119     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1120     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
1121     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1122     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1123     ASSERT_EQ(formatVal_.channelLayout, 4);
1124     ASSERT_EQ(formatVal_.sampleRate, 48000);
1125     ASSERT_EQ(formatVal_.channelCount, 1);
1126     ASSERT_EQ(formatVal_.codecMime, "audio/mp4a-latm");
1127     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
1128     ASSERT_EQ(formatVal_.bitRate, 69594);
1129 }
1130 
1131 /**
1132  * @tc.name: AVSource_GetFormat_1130
1133  * @tc.desc: get format when the file is mp3
1134  * @tc.type: FUNC
1135  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1130, TestSize.Level1)1136 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1130, TestSize.Level1)
1137 {
1138     fd_ = OpenFile(g_mp3Path);
1139     size_ = GetFileSize(g_mp3Path);
1140     printf("---- %s ----\n", g_mp3Path.c_str());
1141     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1142     ASSERT_NE(source_, nullptr);
1143     format_ = source_->GetSourceFormat();
1144     ASSERT_NE(format_, nullptr);
1145     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1146     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_TITLE, formatVal_.title));
1147     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ARTIST, formatVal_.artist));
1148     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ALBUM, formatVal_.album));
1149     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ALBUM_ARTIST, formatVal_.albumArtist));
1150     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_DATE, formatVal_.date));
1151     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COMMENT, formatVal_.comment));
1152     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_GENRE, formatVal_.genre));
1153     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COPYRIGHT, formatVal_.copyright));
1154     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LYRICS, formatVal_.lyrics));
1155     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LANGUAGE, formatVal_.language));
1156     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_DESCRIPTION, formatVal_.description));
1157     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1158     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1159     ASSERT_EQ(formatVal_.title, "title");
1160     ASSERT_EQ(formatVal_.artist, "artist");
1161     ASSERT_EQ(formatVal_.album, "album");
1162     ASSERT_EQ(formatVal_.albumArtist, "album artist");
1163     ASSERT_EQ(formatVal_.date, "2023");
1164     ASSERT_EQ(formatVal_.comment, "comment");
1165     ASSERT_EQ(formatVal_.genre, "genre");
1166     ASSERT_EQ(formatVal_.copyright, "Copyright");
1167     ASSERT_EQ(formatVal_.lyrics, "SLT");
1168     ASSERT_EQ(formatVal_.description, "description");
1169     ASSERT_EQ(formatVal_.language, "language");
1170     ASSERT_EQ(formatVal_.duration, 30024000);
1171     ASSERT_EQ(formatVal_.trackCount, 2);
1172 #ifdef AVSOURCE_INNER_UNIT_TEST
1173     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COMPOSER, formatVal_.composer));
1174     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_AUTHOR, formatVal_.author));
1175     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1176     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1177     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1178     ASSERT_EQ(formatVal_.author, "author");
1179     ASSERT_EQ(formatVal_.composer, "composer");
1180     ASSERT_EQ(formatVal_.fileType, 203);
1181     ASSERT_EQ(formatVal_.hasAudio, 1);
1182     ASSERT_EQ(formatVal_.hasVideo, 0);
1183 #endif
1184 }
1185 
1186 /**
1187  * @tc.name: AVSource_GetFormat_1131
1188  * @tc.desc: get format when the file is mp3
1189  * @tc.type: FUNC
1190  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1131, TestSize.Level1)1191 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1131, TestSize.Level1)
1192 {
1193     fd_ = OpenFile(g_mp3Path);
1194     size_ = GetFileSize(g_mp3Path);
1195     printf("---- %s ----\n", g_mp3Path.c_str());
1196     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1197     ASSERT_NE(source_, nullptr);
1198     trackIndex_ = 0;
1199     format_ = source_->GetTrackFormat(trackIndex_);
1200     ASSERT_NE(format_, nullptr);
1201     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1202     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1203     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1204     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1205     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1206     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1207     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
1208     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1209     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1210     ASSERT_EQ(formatVal_.channelLayout, 4);
1211     ASSERT_EQ(formatVal_.sampleRate, 48000);
1212     ASSERT_EQ(formatVal_.channelCount, 1);
1213     ASSERT_EQ(formatVal_.codecMime, "audio/mpeg");
1214     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
1215     ASSERT_EQ(formatVal_.bitRate, 64000);
1216 #ifdef AVSOURCE_INNER_UNIT_TEST
1217     trackIndex_ = 1;
1218     format_ = source_->GetTrackFormat(trackIndex_);
1219     ASSERT_NE(format_, nullptr);
1220     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1221     const char* outFile = "/data/test/mp3_48000_1_cover.bin";
1222     FILE* saveFile = fopen(outFile, "wb");
1223     ASSERT_TRUE(format_->GetBuffer(MediaDescriptionKey::MD_KEY_COVER, &addr_, buffSize_));
1224     fwrite(addr_, sizeof(uint8_t), buffSize_, saveFile);
1225     fclose(saveFile);
1226 #endif
1227 }
1228 
1229 /**
1230  * @tc.name: AVSource_GetFormat_1140
1231  * @tc.desc: get format when the file is ogg
1232  * @tc.type: FUNC
1233  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1140, TestSize.Level1)1234 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1140, TestSize.Level1)
1235 {
1236     fd_ = OpenFile(g_oggPath);
1237     size_ = GetFileSize(g_oggPath);
1238     printf("---- %s ----\n", g_oggPath.c_str());
1239     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1240     ASSERT_NE(source_, nullptr);
1241     format_ = source_->GetSourceFormat();
1242     ASSERT_NE(format_, nullptr);
1243     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1244     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1245     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1246     ASSERT_EQ(formatVal_.duration, 30000000);
1247     ASSERT_EQ(formatVal_.trackCount, 1);
1248     format_ = source_->GetTrackFormat(trackIndex_);
1249     ASSERT_NE(format_, nullptr);
1250     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1251     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1252     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1253     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1254     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1255     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1256     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
1257     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1258     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1259     ASSERT_EQ(formatVal_.channelLayout, 4);
1260     ASSERT_EQ(formatVal_.sampleRate, 48000);
1261     ASSERT_EQ(formatVal_.channelCount, 1);
1262     ASSERT_EQ(formatVal_.codecMime, "audio/vorbis");
1263     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
1264     ASSERT_EQ(formatVal_.bitRate, 80000);
1265 }
1266 
1267 /**
1268  * @tc.name: AVSource_GetFormat_1150
1269  * @tc.desc: get format when the file is wav
1270  * @tc.type: FUNC
1271  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1150, TestSize.Level1)1272 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1150, TestSize.Level1)
1273 {
1274     fd_ = OpenFile(g_wavPath);
1275     size_ = GetFileSize(g_wavPath);
1276     printf("---- %s ----\n", g_wavPath.c_str());
1277     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1278     ASSERT_NE(source_, nullptr);
1279     format_ = source_->GetSourceFormat();
1280     ASSERT_NE(format_, nullptr);
1281     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1282     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_TITLE, formatVal_.title));
1283     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ARTIST, formatVal_.artist));
1284     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ALBUM, formatVal_.album));
1285     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_DATE, formatVal_.date));
1286     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COMMENT, formatVal_.comment));
1287     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_GENRE, formatVal_.genre));
1288     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_COPYRIGHT, formatVal_.copyright));
1289     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LANGUAGE, formatVal_.language));
1290     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1291     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1292     ASSERT_EQ(formatVal_.title, "title");
1293     ASSERT_EQ(formatVal_.artist, "artist");
1294     ASSERT_EQ(formatVal_.album, "album");
1295     ASSERT_EQ(formatVal_.date, "2023");
1296     ASSERT_EQ(formatVal_.comment, "comment");
1297     ASSERT_EQ(formatVal_.genre, "genre");
1298     ASSERT_EQ(formatVal_.copyright, "Copyright");
1299     ASSERT_EQ(formatVal_.language, "language");
1300     ASSERT_EQ(formatVal_.duration, 30037333);
1301     ASSERT_EQ(formatVal_.trackCount, 1);
1302 #ifdef AVSOURCE_INNER_UNIT_TEST
1303     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1304     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1305     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1306     ASSERT_EQ(formatVal_.fileType, 207);
1307     ASSERT_EQ(formatVal_.hasAudio, 1);
1308     ASSERT_EQ(formatVal_.hasVideo, 0);
1309 #endif
1310 }
1311 
1312 /**
1313  * @tc.name: AVSource_GetFormat_1151
1314  * @tc.desc: get format when the file is wav
1315  * @tc.type: FUNC
1316  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1151, TestSize.Level1)1317 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1151, TestSize.Level1)
1318 {
1319     fd_ = OpenFile(g_wavPath);
1320     size_ = GetFileSize(g_wavPath);
1321     printf("---- %s ----\n", g_wavPath.c_str());
1322     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1323     ASSERT_NE(source_, nullptr);
1324     format_ = source_->GetTrackFormat(trackIndex_);
1325     ASSERT_NE(format_, nullptr);
1326     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1327     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1328     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1329     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1330     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1331     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1332     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
1333     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1334     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1335     ASSERT_EQ(formatVal_.channelLayout, 4);
1336     ASSERT_EQ(formatVal_.sampleRate, 48000);
1337     ASSERT_EQ(formatVal_.channelCount, 1);
1338     ASSERT_EQ(formatVal_.codecMime, "audio/raw");
1339     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_S16LE);
1340     ASSERT_EQ(formatVal_.bitRate, 768000);
1341 }
1342 
1343 /**
1344  * @tc.name: AVSource_GetFormat_1160
1345  * @tc.desc: get format when the file is amr (amr_nb)
1346  * @tc.type: FUNC
1347  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1160, TestSize.Level1)1348 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1160, TestSize.Level1)
1349 {
1350     fd_ = OpenFile(g_amrPath);
1351     size_ = GetFileSize(g_amrPath);
1352     printf("---- %s ----\n", g_amrPath.c_str());
1353     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1354     ASSERT_NE(source_, nullptr);
1355     format_ = source_->GetSourceFormat();
1356     ASSERT_NE(format_, nullptr);
1357     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1358     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1359     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1360     ASSERT_EQ(formatVal_.duration, 30988375);
1361     ASSERT_EQ(formatVal_.trackCount, 1);
1362 #ifdef AVSOURCE_INNER_UNIT_TEST
1363     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1364     ASSERT_EQ(formatVal_.fileType, 201);
1365 #endif
1366     format_ = source_->GetTrackFormat(trackIndex_);
1367     ASSERT_NE(format_, nullptr);
1368     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1369     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1370     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1371     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1372     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1373     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1374     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1375     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1376     ASSERT_EQ(formatVal_.channelLayout, 4);
1377     ASSERT_EQ(formatVal_.sampleRate, 8000);
1378     ASSERT_EQ(formatVal_.channelCount, 1);
1379     ASSERT_EQ(formatVal_.codecMime, "audio/3gpp");
1380     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
1381 }
1382 
1383 /**
1384  * @tc.name: AVSource_GetFormat_1170
1385  * @tc.desc: get format when the file is amr (amr_wb)
1386  * @tc.type: FUNC
1387  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1170, TestSize.Level1)1388 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1170, TestSize.Level1)
1389 {
1390     fd_ = OpenFile(g_amrPath2);
1391     size_ = GetFileSize(g_amrPath2);
1392     printf("---- %s ----\n", g_amrPath2.c_str());
1393     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1394     ASSERT_NE(source_, nullptr);
1395     format_ = source_->GetSourceFormat();
1396     ASSERT_NE(format_, nullptr);
1397     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1398     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1399     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1400     ASSERT_EQ(formatVal_.duration, 30937500);
1401     ASSERT_EQ(formatVal_.trackCount, 1);
1402 #ifdef AVSOURCE_INNER_UNIT_TEST
1403     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1404     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1405     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1406     ASSERT_EQ(formatVal_.fileType, 201);
1407     ASSERT_EQ(formatVal_.hasAudio, 1);
1408     ASSERT_EQ(formatVal_.hasVideo, 0);
1409 #endif
1410     format_ = source_->GetTrackFormat(trackIndex_);
1411     ASSERT_NE(format_, nullptr);
1412     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1413     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1414     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1415     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1416     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1417     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1418     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1419     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1420     ASSERT_EQ(formatVal_.channelLayout, 4);
1421     ASSERT_EQ(formatVal_.sampleRate, 16000);
1422     ASSERT_EQ(formatVal_.channelCount, 1);
1423     ASSERT_EQ(formatVal_.codecMime, "audio/amr-wb");
1424     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
1425 }
1426 
1427 /**
1428  * @tc.name: AVSource_GetFormat_1180
1429  * @tc.desc: get format when the file is audio vivid (mp4)
1430  * @tc.type: FUNC
1431  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1180, TestSize.Level1)1432 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1180, TestSize.Level1)
1433 {
1434     fd_ = OpenFile(g_audioVividPath);
1435     size_ = GetFileSize(g_audioVividPath);
1436     printf("---- %s ----\n", g_audioVividPath.c_str());
1437     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1438     ASSERT_NE(source_, nullptr);
1439     format_ = source_->GetSourceFormat();
1440     ASSERT_NE(format_, nullptr);
1441     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1442     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1443     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1444     ASSERT_EQ(formatVal_.duration, 32044000);
1445     ASSERT_EQ(formatVal_.trackCount, 1);
1446 #ifdef AVSOURCE_INNER_UNIT_TEST
1447     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1448     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1449     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1450     ASSERT_EQ(formatVal_.fileType, 101);
1451     ASSERT_EQ(formatVal_.hasVideo, 0);
1452     ASSERT_EQ(formatVal_.hasAudio, 1);
1453 #endif
1454     format_ = source_->GetTrackFormat(trackIndex_);
1455     ASSERT_NE(format_, nullptr);
1456     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1457     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1458     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1459     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1460     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1461     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1462     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
1463     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1464     ASSERT_EQ(formatVal_.channelLayout, 3);
1465     ASSERT_EQ(formatVal_.sampleRate, 44100);
1466     ASSERT_EQ(formatVal_.channelCount, 2);
1467     ASSERT_EQ(formatVal_.codecMime, CodecMimeType::AUDIO_AVS3DA);
1468     ASSERT_EQ(formatVal_.bitRate, 64082);
1469 }
1470 
1471 /**
1472  * @tc.name: AVSource_GetFormat_11901
1473  * @tc.desc: get format when the file is audio vivid (ts)
1474  * @tc.type: FUNC
1475  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_11901, TestSize.Level1)1476 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_11901, TestSize.Level1)
1477 {
1478     fd_ = OpenFile(g_audioVividPath2);
1479     size_ = GetFileSize(g_audioVividPath2);
1480     printf("---- %s ----\n", g_audioVividPath2.c_str());
1481     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1482     ASSERT_NE(source_, nullptr);
1483     format_ = source_->GetSourceFormat();
1484     ASSERT_NE(format_, nullptr);
1485     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1486     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1487     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1488     ASSERT_EQ(formatVal_.duration, 31718456);
1489     ASSERT_EQ(formatVal_.trackCount, 1);
1490 #ifdef AVSOURCE_INNER_UNIT_TEST
1491     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1492     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1493     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1494     ASSERT_EQ(formatVal_.fileType, 102);
1495     ASSERT_EQ(formatVal_.hasVideo, 0);
1496     ASSERT_EQ(formatVal_.hasAudio, 1);
1497 #endif
1498     format_ = source_->GetTrackFormat(trackIndex_);
1499     ASSERT_NE(format_, nullptr);
1500     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1501     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1502     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1503     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1504     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1505     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
1506     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1507     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1508     ASSERT_EQ(formatVal_.channelLayout, 3);
1509     ASSERT_EQ(formatVal_.sampleRate, 44100);
1510     ASSERT_EQ(formatVal_.channelCount, 2);
1511     ASSERT_EQ(formatVal_.codecMime, CodecMimeType::AUDIO_AVS3DA);
1512     ASSERT_EQ(formatVal_.bitRate, 64000);
1513 }
1514 
1515 /**
1516  * @tc.name: AVSource_GetFormat_1308
1517  * @tc.desc: get source format(two sound track mp4)
1518  * @tc.type: FUNC
1519  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1308, TestSize.Level1)1520 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1308, TestSize.Level1)
1521 {
1522     string path = TEST_FILE_PATH + string("avcc_aac_mp3.mp4");
1523     fd_ = OpenFile(path);
1524     size_ = GetFileSize(path);
1525     printf("---- %s ----\n", path.c_str());
1526     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1527     ASSERT_NE(source_, nullptr);
1528     format_ = source_->GetSourceFormat();
1529     ASSERT_NE(format_, nullptr);
1530     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1531     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_TITLE, formatVal_.title));
1532     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1533     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1534     ASSERT_EQ(formatVal_.title, "test");
1535     ASSERT_EQ(formatVal_.duration, 10034000);
1536     ASSERT_EQ(formatVal_.trackCount, 3);
1537     format_ = source_->GetTrackFormat(trackIndex_);
1538     ASSERT_NE(format_, nullptr);
1539     printf("[trackFormat idx=%d]: %s\n", trackIndex_, format_->DumpInfo());
1540     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1541     ASSERT_EQ(formatVal_.codecMime, CodecMimeType::VIDEO_AVC);
1542     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LANGUAGE, formatVal_.language));
1543     ASSERT_EQ(formatVal_.language, "eng");
1544     formatVal_.language = "";
1545     trackIndex_ = 1;
1546     format_ = source_->GetTrackFormat(trackIndex_);
1547     ASSERT_NE(format_, nullptr);
1548     printf("[trackFormat idx=%d]: %s\n", trackIndex_, format_->DumpInfo());
1549     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1550     ASSERT_EQ(formatVal_.codecMime, CodecMimeType::AUDIO_AAC);
1551     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LANGUAGE, formatVal_.language));
1552     ASSERT_EQ(formatVal_.language, "chi");
1553     formatVal_.language = "";
1554     trackIndex_ = 2;
1555     format_ = source_->GetTrackFormat(trackIndex_);
1556     ASSERT_NE(format_, nullptr);
1557     printf("[trackFormat idx=%d]: %s\n", trackIndex_, format_->DumpInfo());
1558     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1559     ASSERT_EQ(formatVal_.codecMime, CodecMimeType::AUDIO_MPEG);
1560     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_LANGUAGE, formatVal_.language));
1561     ASSERT_EQ(formatVal_.language, "eng");
1562 }
1563 
1564 /**
1565  * @tc.name: AVSource_GetFormat_1309
1566  * @tc.desc: get format when the file is ape
1567  * @tc.type: FUNC
1568  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1309, TestSize.Level1)1569 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1309, TestSize.Level1)
1570 {
1571     fd_ = OpenFile(g_apePath);
1572     size_ = GetFileSize(g_apePath);
1573     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1574     ASSERT_NE(source_, nullptr);
1575     format_ = source_->GetSourceFormat();
1576     ASSERT_NE(format_, nullptr);
1577     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1578     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1579     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1580     ASSERT_EQ(formatVal_.duration, 11006984);
1581     ASSERT_EQ(formatVal_.trackCount, 1);
1582 #ifdef AVSOURCE_INNER_UNIT_TEST
1583     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1584     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1585     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1586     ASSERT_EQ(formatVal_.fileType, 208);
1587     ASSERT_EQ(formatVal_.hasVideo, 0);
1588     ASSERT_EQ(formatVal_.hasAudio, 1);
1589 #endif
1590 
1591     printf("---- %s ----\n", g_apePath.c_str());
1592     trackIndex_ = 0;
1593     format_ = source_->GetTrackFormat(trackIndex_);
1594     ASSERT_NE(format_, nullptr);
1595     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1596     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1597     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1598     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1599     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1600     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1601     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1602     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1603     ASSERT_EQ(formatVal_.channelLayout, 3);
1604     ASSERT_EQ(formatVal_.channelCount, 2);
1605     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_S16P);
1606     ASSERT_EQ(formatVal_.sampleRate, 44100);
1607     ASSERT_EQ(formatVal_.codecMime, "audio/x-ape");
1608 }
1609 
1610 /**
1611  * @tc.name: AVSource_GetFormat_1404
1612  * @tc.desc: get format when the file is ape
1613  * @tc.type: FUNC
1614  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1310, TestSize.Level1)1615 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1310, TestSize.Level1)
1616 {
1617     InitResource(g_apeUri, URI);
1618     ASSERT_TRUE(initStatus_);
1619     format_ = source_->GetSourceFormat();
1620     ASSERT_NE(format_, nullptr);
1621     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1622     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1623     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1624     ASSERT_EQ(formatVal_.duration, 11006984);
1625     ASSERT_EQ(formatVal_.trackCount, 1);
1626 #ifdef AVSOURCE_INNER_UNIT_TEST
1627     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1628     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1629     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1630     ASSERT_EQ(formatVal_.fileType, 208);
1631     ASSERT_EQ(formatVal_.hasVideo, 0);
1632     ASSERT_EQ(formatVal_.hasAudio, 1);
1633 #endif
1634 
1635     trackIndex_ = vTrackIdx_;
1636     format_ = source_->GetTrackFormat(trackIndex_);
1637     ASSERT_NE(format_, nullptr);
1638     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1639     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1640     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1641     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1642     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1643     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1644     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1645     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1646     ASSERT_EQ(formatVal_.channelLayout, 3);
1647     ASSERT_EQ(formatVal_.channelCount, 2);
1648     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_S16P);
1649     ASSERT_EQ(formatVal_.sampleRate, 44100);
1650     ASSERT_EQ(formatVal_.codecMime, "audio/x-ape");
1651 }
1652 
1653 /**
1654  * @tc.name: AVSource_GetFormat_1316
1655  * @tc.desc: get fmp4 264 mp4 format, local
1656  * @tc.type: FUNC
1657  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1316, TestSize.Level1)1658 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1316, TestSize.Level1)
1659 {
1660     fd_ = OpenFile(g_fmp4AvcPath);
1661     size_ = GetFileSize(g_fmp4AvcPath);
1662     printf("---- %s ------\n", g_fmp4AvcPath.c_str());
1663     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1664     ASSERT_NE(source_, nullptr);
1665     format_ = source_->GetSourceFormat();
1666     ASSERT_NE(format_, nullptr);
1667     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1668     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1669     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1670     ASSERT_EQ(formatVal_.duration, 10066666);
1671     ASSERT_EQ(formatVal_.trackCount, 2);
1672 #ifdef AVSOURCE_INNER_UNIT_TEST
1673     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1674     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1675     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1676     ASSERT_EQ(formatVal_.hasVideo, 1);
1677     ASSERT_EQ(formatVal_.hasAudio, 1);
1678     ASSERT_EQ(formatVal_.fileType, 101);
1679 #endif
1680     format_ = source_->GetTrackFormat(trackIndex_);
1681     ASSERT_NE(format_, nullptr);
1682     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1683     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1684     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_WIDTH, formatVal_.width));
1685     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_HEIGHT, formatVal_.height));
1686     ASSERT_TRUE(format_->GetDoubleValue(MediaDescriptionKey::MD_KEY_FRAME_RATE, formatVal_.frameRate));
1687     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1688     ASSERT_EQ(formatVal_.codecMime, "video/avc");
1689     ASSERT_EQ(formatVal_.width, 720);
1690     ASSERT_EQ(formatVal_.height, 480);
1691     ASSERT_EQ(formatVal_.frameRate, 60.000000);
1692     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_VID);
1693     trackIndex_ = 1;
1694     format_ = source_->GetTrackFormat(trackIndex_);
1695     ASSERT_NE(format_, nullptr);
1696     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1697     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1698     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1699     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1700     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1701     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1702     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1703     ASSERT_EQ(formatVal_.channelLayout, 3);
1704     ASSERT_EQ(formatVal_.sampleRate, 44100);
1705     ASSERT_EQ(formatVal_.codecMime, "audio/mp4a-latm");
1706     ASSERT_EQ(formatVal_.channelCount, 2);
1707     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
1708     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1709 }
1710 
1711 /**
1712  * @tc.name: AVSource_GetFormat_1318
1713  * @tc.desc: get fmp4 m4v format, local
1714  * @tc.type: FUNC
1715  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1318, TestSize.Level1)1716 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1318, TestSize.Level1)
1717 {
1718     fd_ = OpenFile(g_fmp4m4vPath);
1719     size_ = GetFileSize(g_fmp4m4vPath);
1720     printf("---- %s ------\n", g_fmp4m4vPath.c_str());
1721     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1722     ASSERT_NE(source_, nullptr);
1723     format_ = source_->GetSourceFormat();
1724     ASSERT_NE(format_, nullptr);
1725     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1726     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1727     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1728     ASSERT_EQ(formatVal_.duration, 10033333);
1729     ASSERT_EQ(formatVal_.trackCount, 1);
1730 #ifdef AVSOURCE_INNER_UNIT_TEST
1731     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1732     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1733     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1734     ASSERT_EQ(formatVal_.hasVideo, 1);
1735     ASSERT_EQ(formatVal_.hasAudio, 0);
1736     ASSERT_EQ(formatVal_.fileType, 206);
1737 #endif
1738     format_ = source_->GetTrackFormat(trackIndex_);
1739     ASSERT_NE(format_, nullptr);
1740     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1741     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1742     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_WIDTH, formatVal_.width));
1743     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_HEIGHT, formatVal_.height));
1744     ASSERT_TRUE(format_->GetDoubleValue(MediaDescriptionKey::MD_KEY_FRAME_RATE, formatVal_.frameRate));
1745     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1746     ASSERT_EQ(formatVal_.codecMime, "video/avc");
1747     ASSERT_EQ(formatVal_.width, 720);
1748     ASSERT_EQ(formatVal_.height, 480);
1749     ASSERT_EQ(formatVal_.frameRate, 60.000000);
1750     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_VID);
1751 }
1752 
1753 /**
1754  * @tc.name: AVSource_GetFormat_1319
1755  * @tc.desc: get fmp4 m4a format, local
1756  * @tc.type: FUNC
1757  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1319, TestSize.Level1)1758 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1319, TestSize.Level1)
1759 {
1760     fd_ = OpenFile(g_fmp4m4aPath);
1761     size_ = GetFileSize(g_fmp4m4aPath);
1762     printf("---- %s ------\n", g_fmp4m4aPath.c_str());
1763     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1764     ASSERT_NE(source_, nullptr);
1765     format_ = source_->GetSourceFormat();
1766     ASSERT_NE(format_, nullptr);
1767     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1768     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
1769     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1770     ASSERT_EQ(formatVal_.duration, 10064354);
1771     ASSERT_EQ(formatVal_.trackCount, 1);
1772 #ifdef AVSOURCE_INNER_UNIT_TEST
1773     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1774     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1775     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1776     ASSERT_EQ(formatVal_.hasVideo, 0);
1777     ASSERT_EQ(formatVal_.hasAudio, 1);
1778     ASSERT_EQ(formatVal_.fileType, 206);
1779 #endif
1780     format_ = source_->GetTrackFormat(trackIndex_);
1781     ASSERT_NE(format_, nullptr);
1782     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1783     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1784     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1785     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1786     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1787     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1788     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1789     ASSERT_EQ(formatVal_.channelLayout, 3);
1790     ASSERT_EQ(formatVal_.sampleRate, 44100);
1791     ASSERT_EQ(formatVal_.codecMime, "audio/mp4a-latm");
1792     ASSERT_EQ(formatVal_.channelCount, 2);
1793     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
1794     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1795 }
1796 
1797 /**
1798  * @tc.name: AVSource_GetFormat_1400
1799  * @tc.desc: get source format(flv)
1800  * @tc.type: FUNC
1801  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1400, TestSize.Level1)1802 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1400, TestSize.Level1)
1803 {
1804     fd_ = OpenFile(g_flvPath);
1805     size_ = GetFileSize(g_flvPath);
1806     printf("---- %s ----\n", g_flvPath.c_str());
1807     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1808     ASSERT_NE(source_, nullptr);
1809     format_ = source_->GetSourceFormat();
1810     ASSERT_NE(format_, nullptr);
1811     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1812     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1813     ASSERT_EQ(formatVal_.trackCount, 2);
1814 #ifdef AVSOURCE_INNER_UNIT_TEST
1815     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1816     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1817     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1818     ASSERT_EQ(formatVal_.hasVideo, 1);
1819     ASSERT_EQ(formatVal_.hasAudio, 1);
1820     ASSERT_EQ(formatVal_.fileType, 104);
1821 #endif
1822 }
1823 
1824 /**
1825  * @tc.name: AVSource_GetFormat_1401
1826  * @tc.desc: get format when the file is flv
1827  * @tc.type: FUNC
1828  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1401, TestSize.Level1)1829 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1401, TestSize.Level1)
1830 {
1831     fd_ = OpenFile(g_flvPath);
1832     size_ = GetFileSize(g_flvPath);
1833     printf("---- %s ------\n", g_flvPath.c_str());
1834     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1835     ASSERT_NE(source_, nullptr);
1836     trackIndex_ = 0;
1837     format_ = source_->GetTrackFormat(trackIndex_);
1838     ASSERT_NE(format_, nullptr);
1839     printf("[ trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1840     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1841     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1842     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_WIDTH, formatVal_.width));
1843     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_HEIGHT, formatVal_.height));
1844     ASSERT_TRUE(format_->GetDoubleValue(MediaDescriptionKey::MD_KEY_FRAME_RATE, formatVal_.frameRate));
1845     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_VID);
1846     ASSERT_EQ(formatVal_.codecMime, "video/avc");
1847     ASSERT_EQ(formatVal_.width, 720);
1848     ASSERT_EQ(formatVal_.height, 1280);
1849     ASSERT_DOUBLE_EQ(formatVal_.frameRate, 30.000000);
1850     trackIndex_ = 1;
1851     format_ = source_->GetTrackFormat(trackIndex_);
1852     ASSERT_NE(format_, nullptr);
1853     printf("[ trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1854     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1855     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
1856     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
1857     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
1858     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1859     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, formatVal_.audioSampleFormat));
1860     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
1861     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
1862     ASSERT_EQ(formatVal_.sampleRate, 48000);
1863     ASSERT_EQ(formatVal_.channelCount, 2);
1864     ASSERT_EQ(formatVal_.bitRate, 128000);
1865     ASSERT_EQ(formatVal_.codecMime, "audio/mpeg");
1866     ASSERT_EQ(formatVal_.audioSampleFormat, AudioSampleFormat::SAMPLE_F32P);
1867     ASSERT_EQ(formatVal_.channelLayout, 3);
1868 }
1869 
1870 /**
1871  * @tc.name: AVSource_GetFormat_1501
1872  * @tc.desc: get camera info
1873  * @tc.type: FUNC
1874  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1501, TestSize.Level1)1875 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1501, TestSize.Level1)
1876 {
1877 #ifdef AVSOURCE_INNER_UNIT_TEST
1878     fd_ = OpenFile(g_mp4InfoPath);
1879     size_ = GetFileSize(g_mp4InfoPath);
1880     printf("---- %s ------\n", g_mp4InfoPath.c_str());
1881     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1882     ASSERT_NE(source_, nullptr);
1883     format_ = source_->GetSourceFormat();
1884     ASSERT_NE(format_, nullptr);
1885     printf("[source Format]: %s\n", format_->DumpInfo());
1886 
1887     float longitude = 0.0;
1888     ASSERT_TRUE(format_->GetFloatValue(Media::Tag::MEDIA_LONGITUDE, longitude));
1889     ASSERT_EQ(longitude, float(22.670000)); // longitude test
1890 
1891     float latitude = 0.0;
1892     ASSERT_TRUE(format_->GetFloatValue(Media::Tag::MEDIA_LATITUDE, latitude));
1893     ASSERT_EQ(latitude, float(114.059998)); // latitude test
1894 
1895     string genre;
1896     ASSERT_TRUE(format_->GetStringValue(Media::Tag::MEDIA_GENRE, genre));
1897     ASSERT_EQ(genre, "{marketing-name:\"HW P60\"}");
1898 
1899     std::shared_ptr<FormatMock> format = source_->GetUserData();
1900     ASSERT_NE(format, nullptr);
1901     printf("[User Meta]: %s\n", format->DumpInfo());
1902 
1903     float fps = 0;
1904     ASSERT_TRUE(format->GetFloatValue("com.os.capture.fps", fps));
1905     ASSERT_EQ(fps, float(30.0)); // test user float data fps
1906     int32_t version = 0;
1907     ASSERT_TRUE(format->GetIntValue("com.os.version", version));
1908     ASSERT_EQ(version, int(5)); // test user int data version
1909     std::string manufacturer;
1910     ASSERT_TRUE(format->GetStringValue("com.os.manufacturer", manufacturer));
1911     ASSERT_EQ(manufacturer, "HW"); // test user string data manufacturer
1912 #endif
1913 }
1914 
1915 /**
1916  * @tc.name: AVSource_GetFormat_3000
1917  * @tc.desc: get format when the file is srt
1918  * @tc.type: FUNC
1919  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_3000, TestSize.Level1)1920 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_3000, TestSize.Level1)
1921 {
1922     fd_ = OpenFile(g_srt);
1923     size_ = GetFileSize(g_srt);
1924     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1925     ASSERT_NE(source_, nullptr);
1926     format_ = source_->GetSourceFormat();
1927     ASSERT_NE(format_, nullptr);
1928     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1929     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1930     ASSERT_EQ(formatVal_.trackCount, 1);
1931 #ifdef AVSOURCE_INNER_UNIT_TEST
1932     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1933     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1934     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1935     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_SUBTITLE, formatVal_.hasSubtitle));
1936     ASSERT_EQ(formatVal_.fileType, 301);
1937     ASSERT_EQ(formatVal_.hasVideo, 0);
1938     ASSERT_EQ(formatVal_.hasAudio, 0);
1939     ASSERT_EQ(formatVal_.hasSubtitle, 1);
1940 #endif
1941 
1942     printf("---- %s ----\n", g_srt.c_str());
1943     trackIndex_ = 0;
1944     format_ = source_->GetTrackFormat(trackIndex_);
1945     ASSERT_NE(format_, nullptr);
1946     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1947     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1948     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1949     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_SUBTITLE);
1950     ASSERT_EQ(formatVal_.codecMime, "application/x-subrip");
1951 }
1952 
1953 /**
1954  * @tc.name: AVSource_GetFormat_3001
1955  * @tc.desc: get format when the file has timed metadata track
1956  * @tc.type: FUNC
1957  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_3001, TestSize.Level1)1958 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_3001, TestSize.Level1)
1959 {
1960     fd_ = OpenFile(g_mp4Path9);
1961     size_ = GetFileSize(g_mp4Path9);
1962     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
1963     ASSERT_NE(source_, nullptr);
1964     format_ = source_->GetSourceFormat();
1965     ASSERT_NE(format_, nullptr);
1966     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
1967     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
1968     ASSERT_EQ(formatVal_.trackCount, 2);
1969 #ifdef AVSOURCE_INNER_UNIT_TEST
1970     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
1971     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
1972     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
1973     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_TIMEDMETA, formatVal_.hasTimedMeta));
1974     ASSERT_EQ(formatVal_.fileType, 101);
1975     ASSERT_EQ(formatVal_.hasVideo, 1);
1976     ASSERT_EQ(formatVal_.hasAudio, 0);
1977     ASSERT_EQ(formatVal_.hasTimedMeta, 1);
1978 #endif
1979 
1980     trackIndex_ = 1;
1981     format_ = source_->GetTrackFormat(trackIndex_);
1982     ASSERT_NE(format_, nullptr);
1983     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
1984     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
1985     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
1986     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_TIMED_METADATA_KEY, formatVal_.timedMetadataKey));
1987     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TIMED_METADATA_SRC_TRACK_ID, formatVal_.srcTrackID));
1988     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_TIMED_METADATA);
1989     ASSERT_EQ(formatVal_.codecMime, "meta/timed-metadata");
1990     ASSERT_EQ(formatVal_.timedMetadataKey, TEST_TIMED_METADATA.c_str());
1991     ASSERT_EQ(formatVal_.srcTrackID, 0);
1992 }
1993 
1994 /**
1995  * @tc.name: AVSource_GetFormat_3002
1996  * @tc.desc: get format when the file is vtt
1997  * @tc.type: FUNC
1998  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_3002, TestSize.Level1)1999 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_3002, TestSize.Level1)
2000 {
2001     fd_ = OpenFile(g_vttPath);
2002     size_ = GetFileSize(g_vttPath);
2003     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
2004     ASSERT_NE(source_, nullptr);
2005     format_ = source_->GetSourceFormat();
2006     ASSERT_NE(format_, nullptr);
2007     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
2008     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
2009     ASSERT_EQ(formatVal_.trackCount, 1);
2010 #ifdef AVSOURCE_INNER_UNIT_TEST
2011     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
2012     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
2013     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
2014     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_SUBTITLE, formatVal_.hasSubtitle));
2015     ASSERT_EQ(formatVal_.fileType, 302);
2016     ASSERT_EQ(formatVal_.hasVideo, 0);
2017     ASSERT_EQ(formatVal_.hasAudio, 0);
2018     ASSERT_EQ(formatVal_.hasSubtitle, 1);
2019 #endif
2020 
2021     printf("---- %s ----\n", g_vttPath.c_str());
2022     trackIndex_ = 0;
2023     format_ = source_->GetTrackFormat(trackIndex_);
2024     ASSERT_NE(format_, nullptr);
2025     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
2026     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
2027     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
2028     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_SUBTITLE);
2029     ASSERT_EQ(formatVal_.codecMime, "text/vtt");
2030 }
2031 
2032 /**
2033  * @tc.name: AVSource_GetFormat_4000
2034  * @tc.desc: get format when the file is nonstandard BOM
2035  * @tc.type: FUNC
2036  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_4000, TestSize.Level1)2037 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_4000, TestSize.Level1)
2038 {
2039     fd_ = OpenFile(g_nonStandardBomPath);
2040     size_ = GetFileSize(g_nonStandardBomPath);
2041     printf("---- %s ----\n", g_nonStandardBomPath.c_str());
2042     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
2043     ASSERT_NE(source_, nullptr);
2044     format_ = source_->GetSourceFormat();
2045     ASSERT_NE(format_, nullptr);
2046     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
2047 
2048     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_TITLE, formatVal_.title));
2049     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ARTIST, formatVal_.artist));
2050     ASSERT_TRUE(format_->GetStringValue(AVSourceFormat::SOURCE_ALBUM, formatVal_.album));
2051 
2052     ASSERT_EQ(formatVal_.title, "bom");
2053     ASSERT_EQ(formatVal_.artist, "张三");
2054     ASSERT_EQ(formatVal_.album, "a");
2055 }
2056 
2057 /**
2058  * @tc.name: AVSource_GetFormat_1601
2059  * @tc.desc: get format when the file is mp4 vvc
2060  * @tc.type: FUNC
2061  */
HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1601, TestSize.Level1)2062 HWTEST_F(AVSourceUnitTest, AVSource_GetFormat_1601, TestSize.Level1)
2063 {
2064     if (access(g_mp4VvcPath.c_str(), F_OK) != 0) {
2065         return;
2066     }
2067     fd_ = OpenFile(g_mp4VvcPath);
2068     size_ = GetFileSize(g_mp4VvcPath);
2069     printf("---- %s ------\n", g_mp4VvcPath.c_str());
2070     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
2071     ASSERT_NE(source_, nullptr);
2072     format_ = source_->GetSourceFormat();
2073     ASSERT_NE(format_, nullptr);
2074     printf("[ sourceFormat ]: %s\n", format_->DumpInfo());
2075     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_DURATION, formatVal_.duration));
2076     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_COUNT, formatVal_.trackCount));
2077     ASSERT_EQ(formatVal_.duration, 10000000);
2078     ASSERT_EQ(formatVal_.trackCount, 1);
2079 #ifdef AVSOURCE_INNER_UNIT_TEST
2080     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_VIDEO, formatVal_.hasVideo));
2081     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_HAS_AUDIO, formatVal_.hasAudio));
2082     ASSERT_TRUE(format_->GetIntValue(AVSourceFormat::SOURCE_FILE_TYPE, formatVal_.fileType));
2083     ASSERT_EQ(formatVal_.hasVideo, 1);
2084     ASSERT_EQ(formatVal_.hasAudio, 0);
2085     ASSERT_EQ(formatVal_.fileType, 101);
2086 #endif
2087     trackIndex_ = 0;
2088     format_ = source_->GetTrackFormat(trackIndex_);
2089     ASSERT_NE(format_, nullptr);
2090     printf("[ trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
2091     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
2092     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
2093     ASSERT_TRUE(format_->GetDoubleValue(MediaDescriptionKey::MD_KEY_FRAME_RATE, formatVal_.frameRate));
2094     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
2095     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_WIDTH, formatVal_.width));
2096     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_HEIGHT, formatVal_.height));
2097     ASSERT_EQ(formatVal_.bitRate, 506976);
2098     ASSERT_EQ(formatVal_.codecMime, "video/vvc");
2099     ASSERT_DOUBLE_EQ(formatVal_.frameRate, 60.000000);
2100     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_VID);
2101     ASSERT_EQ(formatVal_.width, 640);
2102     ASSERT_EQ(formatVal_.height, 360);
2103 }
2104 
2105 /**
2106  * @tc.name: AVSource_ValidateMimeType_1000
2107  * @tc.desc: validate MimeType when av_codec Type is mulaw
2108  * @tc.type: FUNC
2109  */
HWTEST_F(AVSourceUnitTest, AVSource_ValidateMimeType_1000, TestSize.Level1)2110 HWTEST_F(AVSourceUnitTest, AVSource_ValidateMimeType_1000, TestSize.Level1)
2111 {
2112     fd_ = OpenFile(g_wavPath2);
2113     size_ = GetFileSize(g_wavPath2);
2114     printf("----%s----\n", g_wavPath2.c_str());
2115     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
2116     ASSERT_NE(source_, nullptr);
2117     format_ = source_->GetTrackFormat(trackIndex_);
2118     ASSERT_NE(format_, nullptr);
2119     printf("[trackFormat %d]: %s\n", trackIndex_, format_->DumpInfo());
2120     ASSERT_TRUE(format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, formatVal_.codecMime));
2121     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, formatVal_.trackType));
2122     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, formatVal_.sampleRate));
2123     ASSERT_TRUE(format_->GetIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, formatVal_.channelCount));
2124     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, formatVal_.channelLayout));
2125     ASSERT_TRUE(format_->GetLongValue(MediaDescriptionKey::MD_KEY_BITRATE, formatVal_.bitRate));
2126     ASSERT_EQ(formatVal_.codecMime, "audio/g711mu");
2127     ASSERT_EQ(formatVal_.trackType, MediaType::MEDIA_TYPE_AUD);
2128     ASSERT_EQ(formatVal_.channelLayout, 3);
2129     ASSERT_EQ(formatVal_.sampleRate, 44100);
2130     ASSERT_EQ(formatVal_.channelCount, 2);
2131     ASSERT_EQ(formatVal_.bitRate, 705600);
2132 }
2133 
2134 /**
2135  * @tc.name: AVSourse_OrientationType_1000
2136  * @tc.desc: determine the orientation type of the video ROTATE_NONE.mp4
2137  * @tc.type: FUNC
2138  */
HWTEST_F(AVSourceUnitTest, AVSourse_OrientationType_1000, TestSize.Level1)2139 HWTEST_F(AVSourceUnitTest, AVSourse_OrientationType_1000, TestSize.Level1)
2140 {
2141     fd_ = OpenFile(g_mp4RotationNone);
2142     size_ = GetFileSize(g_mp4RotationNone);
2143     printf("----%s----\n", g_mp4RotationNone.c_str());
2144     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
2145     ASSERT_NE(source_, nullptr);
2146     format_ = source_->GetTrackFormat(trackIndex_);
2147     ASSERT_NE(format_, nullptr);
2148     ASSERT_TRUE(format_->GetIntValue(Media::Tag::VIDEO_ORIENTATION_TYPE, formatVal_.orientationType));
2149     ASSERT_EQ(formatVal_.orientationType, 0);
2150 }
2151 
2152 /**
2153  * @tc.name: AVSourse_OrientationType_1001
2154  * @tc.desc: determine the orientation type of the video ROTATE_270.mp4
2155  * @tc.type: FUNC
2156  */
HWTEST_F(AVSourceUnitTest, AVSourse_OrientationType_1001, TestSize.Level1)2157 HWTEST_F(AVSourceUnitTest, AVSourse_OrientationType_1001, TestSize.Level1)
2158 {
2159     fd_ = OpenFile(g_mp4Rotation270);
2160     size_ = GetFileSize(g_mp4Rotation270);
2161     printf("----%s----\n", g_mp4Rotation270.c_str());
2162     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
2163     ASSERT_NE(source_, nullptr);
2164     format_ = source_->GetTrackFormat(trackIndex_);
2165     ASSERT_NE(format_, nullptr);
2166     ASSERT_TRUE(format_->GetIntValue(Media::Tag::VIDEO_ORIENTATION_TYPE, formatVal_.orientationType));
2167     ASSERT_EQ(formatVal_.orientationType, 3);
2168 }
2169 
2170 /**
2171  * @tc.name: AVSourse_OrientationType_1002
2172  * @tc.desc: determine the orientation type of the video FLIP_V.mp4
2173  * @tc.type: FUNC
2174  */
HWTEST_F(AVSourceUnitTest, AVSourse_OrientationType_1002, TestSize.Level1)2175 HWTEST_F(AVSourceUnitTest, AVSourse_OrientationType_1002, TestSize.Level1)
2176 {
2177     fd_ = OpenFile(g_mp4FLIPV);
2178     size_ = GetFileSize(g_mp4FLIPV);
2179     printf("----%s----\n", g_mp4FLIPV.c_str());
2180     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
2181     ASSERT_NE(source_, nullptr);
2182     format_ = source_->GetTrackFormat(trackIndex_);
2183     ASSERT_NE(format_, nullptr);
2184     ASSERT_TRUE(format_->GetIntValue(Media::Tag::VIDEO_ORIENTATION_TYPE, formatVal_.orientationType));
2185     ASSERT_EQ(formatVal_.orientationType, 5);
2186 }
2187 
2188 /**
2189  * @tc.name: AVSourse_OrientationType_1003
2190  * @tc.desc: determine the orientation type of the video FLIP_V_90.mp4
2191  * @tc.type: FUNC
2192  */
HWTEST_F(AVSourceUnitTest, AVSourse_OrientationType_1003, TestSize.Level1)2193 HWTEST_F(AVSourceUnitTest, AVSourse_OrientationType_1003, TestSize.Level1)
2194 {
2195     fd_ = OpenFile(g_mp4FLIPV90);
2196     size_ = GetFileSize(g_mp4FLIPV90);
2197     printf("----%s----\n", g_mp4FLIPV90.c_str());
2198     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
2199     ASSERT_NE(source_, nullptr);
2200     format_ = source_->GetTrackFormat(trackIndex_);
2201     ASSERT_NE(format_, nullptr);
2202     ASSERT_TRUE(format_->GetIntValue(Media::Tag::VIDEO_ORIENTATION_TYPE, formatVal_.orientationType));
2203     ASSERT_EQ(formatVal_.orientationType, 7);
2204 }
2205 
2206 /**
2207  * @tc.name: AVSourse_OrientationType_1004
2208  * @tc.desc: determine the orientation type of the video flv
2209  * @tc.type: FUNC
2210  */
HWTEST_F(AVSourceUnitTest, AVSourse_OrientationType_1004, TestSize.Level1)2211 HWTEST_F(AVSourceUnitTest, AVSourse_OrientationType_1004, TestSize.Level1)
2212 {
2213     fd_ = OpenFile(g_flvPath);
2214     size_ = GetFileSize(g_flvPath);
2215     printf("----%s----\n", g_flvPath.c_str());
2216     source_ = AVSourceMockFactory::CreateSourceWithFD(fd_, SOURCE_OFFSET, size_);
2217     ASSERT_NE(source_, nullptr);
2218     format_ = source_->GetTrackFormat(trackIndex_);
2219     ASSERT_NE(format_, nullptr);
2220     ASSERT_FALSE(format_->GetIntValue(Media::Tag::VIDEO_ORIENTATION_TYPE, formatVal_.orientationType));
2221 }
2222 } // namespace
2223