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