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