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