/* * Copyright (C) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include #include #include "gtest/gtest.h" #include "avcodec_errors.h" #include "media_description.h" #include "file_server_demo.h" #include "demuxer_unit_test.h" #define LOCAL true using namespace OHOS; using namespace OHOS::Media; using namespace OHOS::MediaAVCodec; using namespace testing::ext; using namespace std; namespace { unique_ptr server = nullptr; static const string TEST_FILE_PATH = "/data/test/media/"; static const string TEST_URI_PATH = "http://127.0.0.1:46666/"; static const std::string_view OH_MD_KEY_COMMENT = "comment"; int32_t g_width = 3840; int32_t g_height = 2160; list seekModes = {SeekMode::SEEK_NEXT_SYNC, SeekMode::SEEK_PREVIOUS_SYNC, SeekMode::SEEK_CLOSEST_SYNC}; static const string AIGC_TEST_STR1 = "{Label:value1,ContentProducer:value2,ProduceID:value3,ReservedCode1:value4,"\ "ContentPropagator:value5,PropagateID:value6,ReservedCode2:value7}"; static const string AIGC_TEST_STR2 = "'{Label:value1,ContentProducer:value2,ProduceID:value3,ReservedCode1:value4,"\ "ContentPropagator:value5,PropagateID:value6,ReservedCode2:value7}'"; static const string AIGC_TEST_STR3 = "{\"Label\":\"value1\",\"ContentProducer\":\"value2\",\"ProduceID\":\"value3\","\ "\"ReservedCode1\":\"value4\",\"ContentPropagator\":\"value5\",\"PropagateID\":\"value6\",\"ReservedCode2\":"\ "\"value7\"}"; string g_mp4Path = TEST_FILE_PATH + string("test_264_B_Gop25_4sec_cover.mp4"); string g_mp4Path2 = TEST_FILE_PATH + string("test_mpeg2_B_Gop25_4sec.mp4"); string g_mp4Path3 = TEST_FILE_PATH + string("test_mpeg2_B_Gop25_4sec_attachment.mkv"); string g_mp4Path4 = TEST_FILE_PATH + string("zero_track.mp4"); string g_mp4Path5 = TEST_FILE_PATH + string("timed_metadata_track.mp4"); string g_mkvPath2 = TEST_FILE_PATH + string("h264_opus_4sec.mkv"); string g_tsPath = TEST_FILE_PATH + string("test_mpeg2_Gop25_4sec.ts"); string g_aacPath = TEST_FILE_PATH + string("audio/aac_44100_1.aac"); string g_flacPath = TEST_FILE_PATH + string("audio/flac_48000_1_cover.flac"); string g_m4aPath = TEST_FILE_PATH + string("audio/m4a_48000_1.m4a"); string g_mp3Path = TEST_FILE_PATH + string("audio/mp3_48000_1_cover.mp3"); string g_oggPath = TEST_FILE_PATH + string("audio/ogg_48000_1.ogg"); string g_wavPath = TEST_FILE_PATH + string("audio/wav_48000_1.wav"); string g_amrPath = TEST_FILE_PATH + string("audio/amr_nb_8000_1.amr"); string g_amrPath2 = TEST_FILE_PATH + string("audio/amr_wb_16000_1.amr"); string g_audioVividPath = TEST_FILE_PATH + string("2obj_44100Hz_16bit_32k.mp4"); string g_audioVividPath1 = TEST_FILE_PATH + string("2obj_44100Hz_16bit_32k_noftyp.mp4"); string g_audioVividPath2 = TEST_FILE_PATH + string("2obj_44100Hz_16bit_32k.ts"); string g_multiSoundTrackMp4Path = TEST_FILE_PATH + string("avcc_aac_mp3.mp4"); string g_flvPath = TEST_FILE_PATH + string("h264.flv"); string g_apePath = TEST_FILE_PATH + string("ape_test.ape"); string g_fmp4AvcPath = TEST_FILE_PATH + string("h264_fmp4.mp4"); string g_fmp4m4vPath = TEST_FILE_PATH + string("h264_fmp4.m4v"); string g_fmp4m4aPath = TEST_FILE_PATH + string("audio/h264_fmp4.m4a"); string g_srt = TEST_FILE_PATH + string("subtitle.srt"); string g_drmSm4cPath = TEST_FILE_PATH + string("drm/sm4c.ts"); string g_vttPath = TEST_FILE_PATH + string("webvtt_test.vtt"); string g_vttPath2 = TEST_FILE_PATH + string("webvtt_test2.vtt"); string g_vttMp4Path = TEST_FILE_PATH + string("webvtt.mp4"); string g_ptsConversionPath = TEST_FILE_PATH + string("camera_info_parser.mp4"); string g_mp4VvcPath = TEST_FILE_PATH + string("vvc.mp4"); string g_rmvbPath = TEST_FILE_PATH + string("rv40_cook.rmvb"); string g_ac3Path = TEST_FILE_PATH + string("audio/ac3_test.ac3"); string g_webmPath = TEST_FILE_PATH + string("vp8_vorbis.webm"); string g_mtsPath = TEST_FILE_PATH + string("h264_ac3.mts"); string g_vobPath = TEST_FILE_PATH + string("mpeg2_ac3.vob"); string g_m2tsPath = TEST_FILE_PATH + string("mpeg2_ac3.m2ts"); string g_trpPath = TEST_FILE_PATH + string("mpeg2_ac3.trp"); string g_lrcPath = TEST_FILE_PATH + string("lrc_test.lrc"); string g_samiPath = TEST_FILE_PATH + string("sami_test.smi"); string g_assPath = TEST_FILE_PATH + string("ass_test.ssa"); string g_commentTest1000Path = TEST_FILE_PATH + string("audio/Muxer_SetFormat_Comment_1000.mp4"); string g_commentTest1100Path = TEST_FILE_PATH + string("audio/Muxer_SetFormat_Comment_1100.mp4"); string g_commentTest1200Path = TEST_FILE_PATH + string("audio/Muxer_SetFormat_Comment_1200.mp4"); string g_commentTest1300Path = TEST_FILE_PATH + string("audio/Muxer_SetFormat_Comment_1300.mp4"); string g_wavAlawPath = TEST_FILE_PATH + string("audio/wav_48000_1_pcm_alaw.wav"); string g_reservedMp4Path = TEST_FILE_PATH + string("reserved_buffer_test.mp4"); string g_aigcStrMp4Path = TEST_FILE_PATH + string("aigc_str.mp4"); string g_aigcStrM4aPath = TEST_FILE_PATH + string("aigc_str.m4a"); string g_aigcStrM4vPath = TEST_FILE_PATH + string("aigc_str.m4v"); string g_aigcStrMovPath = TEST_FILE_PATH + string("aigc_str.mov"); string g_aigcStrFlvPath = TEST_FILE_PATH + string("aigc_str.flv"); string g_aigcStrMkvPath = TEST_FILE_PATH + string("aigc_str.mkv"); string g_aigcStrAviPath = TEST_FILE_PATH + string("aigc_str.avi"); } // namespace void DemuxerUnitTest::SetUpTestCase(void) { server = make_unique(); server->StartServer(); cout << "start" << endl; } void DemuxerUnitTest::TearDownTestCase(void) { server->StopServer(); } void DemuxerUnitTest::SetUp(void) { bufferSize_ = g_width * g_height; } void DemuxerUnitTest::TearDown(void) { if (source_ != nullptr) { source_->Destroy(); source_ = nullptr; } if (demuxer_ != nullptr) { demuxer_->Destroy(); demuxer_ = nullptr; } if (format_ != nullptr) { format_->Destroy(); format_ = nullptr; } if (sharedMem_ != nullptr) { sharedMem_->Destory(); sharedMem_ = nullptr; } if (fd_ > 0) { close(fd_); fd_ = -1; } bufferSize_ = 0; nbStreams_ = 0; numbers_ = 0; ret_ = AV_ERR_OK; info_.presentationTimeUs = 0; info_.offset = 0; info_.size = 0; initStatus_ = false; selectedTrackIds_.clear(); } int64_t DemuxerUnitTest::GetFileSize(const string &fileName) { int64_t fileSize = 0; if (!fileName.empty()) { struct stat fileStatus {}; if (stat(fileName.c_str(), &fileStatus) == 0) { fileSize = static_cast(fileStatus.st_size); } } return fileSize; } int32_t DemuxerUnitTest::OpenFile(const string &fileName) { int32_t fd = open(fileName.c_str(), O_RDONLY); return fd; } bool DemuxerUnitTest::isEOS(map& countFlag) { for (auto iter = countFlag.begin(); iter != countFlag.end(); ++iter) { if (!iter->second) { return false; } } return true; } bool DemuxerUnitTest::SetInitValue() { if (source_ == nullptr) { printf("source_ is nullptr\n"); return false; } for (int i = 0; i < nbStreams_; i++) { string codecMime = ""; int32_t trackType = -1; if (format_ != nullptr) { format_->Destroy(); format_ = nullptr; } format_ = source_->GetTrackFormat(i); if (format_ == nullptr) { return false; } format_->GetStringValue(MediaDescriptionKey::MD_KEY_CODEC_MIME, codecMime); format_->GetIntValue(MediaDescriptionKey::MD_KEY_TRACK_TYPE, trackType); if (codecMime.find("image/") != std::string::npos) { continue; } if (trackType == OH_MediaType::MEDIA_TYPE_VID || trackType == OH_MediaType::MEDIA_TYPE_AUD || trackType == OH_MediaType::MEDIA_TYPE_SUBTITLE || trackType == OH_MediaType::MEDIA_TYPE_TIMED_METADATA || trackType == OH_MediaType::MEDIA_TYPE_AUXILIARY) { selectedTrackIds_.push_back(static_cast(i)); frames_[i] = 0; keyFrames_[i] = 0; eosFlag_[i] = false; } } return true; } void DemuxerUnitTest::RemoveValue() { if (!frames_.empty()) { frames_.clear(); } if (!keyFrames_.empty()) { keyFrames_.clear(); } if (!eosFlag_.empty()) { eosFlag_.clear(); } } void DemuxerUnitTest::SetEosValue() { for (int i = 0; i < nbStreams_; i++) { eosFlag_[i] = true; } } void DemuxerUnitTest::CountFrames(uint32_t index) { if (flag_ & AVCodecBufferFlag::AVCODEC_BUFFER_FLAG_EOS) { eosFlag_[index] = true; return; } if (flag_ & AVCodecBufferFlag::AVCODEC_BUFFER_FLAG_SYNC_FRAME) { keyFrames_[index]++; frames_[index]++; } else if ((flag_ & AVCodecBufferFlag::AVCODEC_BUFFER_FLAG_NONE) == AVCodecBufferFlag::AVCODEC_BUFFER_FLAG_NONE) { frames_[index]++; } else { SetEosValue(); printf("flag is unknown, read sample break"); } } bool DemuxerUnitTest::CheckKeyFrameIndex( std::vector keyFrameIndexList, const uint32_t frameIndex, const bool isKeyFrame) { bool contaionIndex = (std::count(keyFrameIndexList.begin(), keyFrameIndexList.end(), frameIndex) > 0); return isKeyFrame ? contaionIndex : !contaionIndex; } void DemuxerUnitTest::ReadData() { ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { demuxer_->ReadSample(idx, sharedMem_, &info_, flag_); if (ret_ != AV_ERR_OK) { break; } CountFrames(idx); } if (ret_ != AV_ERR_OK) { break; } } } void DemuxerUnitTest::ReadData(int readNum, int64_t &seekTime) { int num = 0; ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ret_ = demuxer_->ReadSample(idx, sharedMem_, &info_, flag_); if (ret_ != AV_ERR_OK) { break; } CountFrames(idx); } if (ret_ != AV_ERR_OK) { break; } if (num == readNum) { seekTime = info_.presentationTimeUs; break; } } } void DemuxerUnitTest::SeekTest(const std::list &toPtsList, const std::list &sm, const std::vector> &ExpVals) { seekTestFlag_ = false; for (auto &toPts : toPtsList) { for (auto &mode : sm) { ret_ = demuxer_->SeekToTime(toPts, mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", toPts, ret_); continue; } ReadData(); for (size_t i = 0; i < ExpVals.size(); i++) { printf("time = %" PRId64 " | frames_[%d]=%d\n", toPts, static_cast(i), frames_[i]); ASSERT_EQ(frames_[i], ExpVals[i][numbers_]); } numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } seekTestFlag_ = true; } void DemuxerUnitTest::ReadAllSampleWithCheck(std::vector &keyFrameIndex) { readFlag_ = false; while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); if (idx == 0) { ASSERT_TRUE(CheckKeyFrameIndex( keyFrameIndex, frames_[0], flag_ & AVCodecBufferFlag::AVCODEC_BUFFER_FLAG_SYNC_FRAME)); } CountFrames(idx); } } readFlag_ = true; } /**********************************demuxer fd**************************************/ namespace { /** * @tc.name: Demuxer_CreateDemuxer_1000 * @tc.desc: create demuxer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_CreateDemuxer_1000, TestSize.Level1) { InitResource(g_mp4Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); } /** * @tc.name: Demuxer_CreateDemuxer_1001 * @tc.desc: create demuxer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_CreateDemuxer_1001, TestSize.Level1) { InitResource(g_mp4Path3, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(2), AV_ERR_OK); } /** * @tc.name: Demuxer_CreateDemuxer_1010 * @tc.desc: create demuxer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_CreateDemuxer_1010, TestSize.Level1) { source_ = nullptr; demuxer_ = AVDemuxerMockFactory::CreateDemuxer(source_); ASSERT_EQ(demuxer_, nullptr); demuxer_ = nullptr; } /** * @tc.name: Demuxer_CreateDemuxer_1020 * @tc.desc: repeatedly create demuxer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_CreateDemuxer_1020, TestSize.Level1) { InitResource(g_mp4Path, LOCAL); ASSERT_TRUE(initStatus_); demuxer_ = AVDemuxerMockFactory::CreateDemuxer(source_); ASSERT_NE(demuxer_, nullptr); } /** * @tc.name: Demuxer_CreateDemuxer_1030 * @tc.desc: create demuxer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_CreateDemuxer_1030, TestSize.Level1) { InitResource(g_tsPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); } /** * @tc.name: Demuxer_CreateDemuxer_1040 * @tc.desc: create demuxer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_CreateDemuxer_1040, TestSize.Level1) { InitResource(g_mp4Path4, LOCAL); ASSERT_TRUE(initStatus_); } /** * @tc.name: Demuxer_UnselectTrackByID_1000 * @tc.desc: select and remove track by ID * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_UnselectTrackByID_1000, TestSize.Level1) { InitResource(g_mp4Path4, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_NE(demuxer_->SelectTrackByID(0), AV_ERR_OK); } /** * @tc.name: Demuxer_UnselectTrackByID_1010 * @tc.desc: select and remove track by ID * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_UnselectTrackByID_1010, TestSize.Level1) { InitResource(g_aacPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); } /** * @tc.name: Demuxer_UnselectTrackByID_1020 * @tc.desc: select and remove track by ID * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_UnselectTrackByID_1020, TestSize.Level1) { InitResource(g_flacPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); } /** * @tc.name: Demuxer_UnselectTrackByID_1030 * @tc.desc: select and remove track by ID * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_UnselectTrackByID_1030, TestSize.Level1) { InitResource(g_m4aPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); } /** * @tc.name: Demuxer_UnselectTrackByID_1060 * @tc.desc: select and remove track by ID * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_UnselectTrackByID_1060, TestSize.Level1) { InitResource(g_mp3Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); } /** * @tc.name: Demuxer_UnselectTrackByID_1070 * @tc.desc: select and remove track by ID * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_UnselectTrackByID_1070, TestSize.Level1) { InitResource(g_oggPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); } /** * @tc.name: Demuxer_UnselectTrackByID_1080 * @tc.desc: select and remove track by ID * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_UnselectTrackByID_1080, TestSize.Level1) { InitResource(g_wavPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); } /** * @tc.name: Demuxer_UnselectTrackByID_1090 * @tc.desc: select and remove track by ID * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_UnselectTrackByID_1090, TestSize.Level1) { InitResource(g_mkvPath2, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); } /** * @tc.name: Demuxer_UnselectTrackByID_1100 * @tc.desc: select and remove track by ID * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_UnselectTrackByID_1100, TestSize.Level1) { InitResource(g_amrPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); } /** * @tc.name: Demuxer_ReadSample_1000 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1000, TestSize.Level1) { InitResource(g_mp4Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 103); ASSERT_EQ(frames_[1], 174); ASSERT_EQ(keyFrames_[0], 5); ASSERT_EQ(keyFrames_[1], 174); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1050 * @tc.desc: Read sample test for timed metadata track * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1050, TestSize.Level1) { InitResource(g_mp4Path5, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 601); ASSERT_EQ(frames_[1], 601); ASSERT_EQ(keyFrames_[0], 3); ASSERT_EQ(keyFrames_[1], 601); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1010 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1010, TestSize.Level1) { InitResource(g_mp4Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); uint32_t idx = 4; ASSERT_NE(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); } /** * @tc.name: Demuxer_ReadSample_1020 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1020, TestSize.Level1) { InitResource(g_mp4Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); uint32_t idx = -1; ASSERT_NE(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); } /** * @tc.name: Demuxer_ReadSample_1030 * @tc.desc: copy current sample to buffer(only video track) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1030, TestSize.Level1) { InitResource(g_mp4Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); int32_t vkeyFrames = 0; int32_t vframes = 0; flag_ = AVCodecBufferFlag::AVCODEC_BUFFER_FLAG_NONE; while (!(flag_ & AVCodecBufferFlag::AVCODEC_BUFFER_FLAG_EOS)) { ASSERT_EQ(demuxer_->ReadSample(0, sharedMem_, &info_, flag_), AV_ERR_OK); if (flag_ & AVCodecBufferFlag::AVCODEC_BUFFER_FLAG_EOS) { break; } if (flag_ & AVCodecBufferFlag::AVCODEC_BUFFER_FLAG_SYNC_FRAME) { vkeyFrames++; vframes++; } else if ((flag_ & AVCodecBufferFlag::AVCODEC_BUFFER_FLAG_NONE) == 0) { vframes++; } } printf("vframes=%d | vkFrames=%d\n", vframes, vkeyFrames); ASSERT_EQ(vframes, 103); ASSERT_EQ(vkeyFrames, 5); } /** * @tc.name: Demuxer_ReadSample_1040 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1040, TestSize.Level1) { InitResource(g_mp4Path2, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 103); ASSERT_EQ(frames_[1], 174); ASSERT_EQ(keyFrames_[0], 5); ASSERT_EQ(keyFrames_[1], 174); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1070 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1070, TestSize.Level1) { InitResource(g_mkvPath2, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 240); ASSERT_EQ(frames_[1], 199); ASSERT_EQ(keyFrames_[0], 4); ASSERT_EQ(keyFrames_[1], 199); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1090 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1090, TestSize.Level1) { InitResource(g_tsPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 103); ASSERT_EQ(frames_[1], 174); ASSERT_EQ(keyFrames_[0], 5); ASSERT_EQ(keyFrames_[1], 174); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1100 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1100, TestSize.Level1) { InitResource(g_aacPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 1293); ASSERT_EQ(keyFrames_[0], 1293); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1110 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1110, TestSize.Level1) { InitResource(g_flacPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 313); ASSERT_EQ(keyFrames_[0], 313); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1120 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1120, TestSize.Level1) { InitResource(g_m4aPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 1408); ASSERT_EQ(keyFrames_[0], 1408); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1130 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1130, TestSize.Level1) { InitResource(g_mp3Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 1251); ASSERT_EQ(keyFrames_[0], 1251); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1140 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1140, TestSize.Level1) { InitResource(g_oggPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 1598); ASSERT_EQ(keyFrames_[0], 1598); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1150 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1150, TestSize.Level1) { InitResource(g_wavPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 704); ASSERT_EQ(keyFrames_[0], 704); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1160 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1160, TestSize.Level1) { InitResource(g_amrPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 1501); ASSERT_EQ(keyFrames_[0], 1501); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1170 * @tc.desc: copy current sample to buffer * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1170, TestSize.Level1) { InitResource(g_amrPath2, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 1500); ASSERT_EQ(keyFrames_[0], 1500); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1180 * @tc.desc: copy current sample to buffer(av3a mp4) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1180, TestSize.Level1) { InitResource(g_audioVividPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 1380); ASSERT_EQ(keyFrames_[0], 1380); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1181 * @tc.desc: copy current sample to buffer(av3a mp4) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1181, TestSize.Level1) { InitResource(g_audioVividPath1, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 1380); ASSERT_EQ(keyFrames_[0], 1380); RemoveValue(); } /** * @tc.name: Demuxer_SeekToTime_1000 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1000, TestSize.Level1) { InitResource(g_mp4Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); list toPtsList = {0, 2000, 1920, 2160, 2200, 2440, 2600, 2700, 4080, 4100}; // ms vector audioVals = {174, 174, 174, 90, 91, 91, 90, 134, 90, 47, 91, 91, 47, 91, 91, 47, 91, 47, 47, 91, 47, 47, 91, 47, 5, 5, 5, 5}; vector videoVals = {103, 103, 103, 53, 53, 53, 53, 78, 53, 28, 53, 53, 28, 53, 53, 28, 53, 28, 28, 53, 28, 28, 53, 28, 3, 3, 3, 3}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); printf("time = %" PRId64 " | frames_[1]=%d | kFrames[1]=%d\n", *toPts, frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1001 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1001, TestSize.Level1) { InitResource(g_mp4Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); list toPtsList = {-100, 1000000}; // ms sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { ret_ = demuxer_->SeekToTime(*toPts, SeekMode::SEEK_NEXT_SYNC); ASSERT_NE(ret_, AV_ERR_OK); ret_ = demuxer_->SeekToTime(*toPts, SeekMode::SEEK_PREVIOUS_SYNC); ASSERT_NE(ret_, AV_ERR_OK); ret_ = demuxer_->SeekToTime(*toPts, SeekMode::SEEK_CLOSEST_SYNC); ASSERT_NE(ret_, AV_ERR_OK); } } /** * @tc.name: Demuxer_SeekToTime_1002 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1002, TestSize.Level1) { InitResource(g_mp4Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); int readNum = 121; int64_t seekTime = 0; ReadData(readNum, seekTime); seekTime = (seekTime / 1000) + 500; ASSERT_EQ(demuxer_->SeekToTime(seekTime, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_EQ(demuxer_->ReadSample(0, sharedMem_, &info_, flag_), AV_ERR_OK); printf("time = %" PRId64 " | pts = %" PRId64 "\n", seekTime, info_.presentationTimeUs); } /** * @tc.name: Demuxer_SeekToTime_1010 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1010, TestSize.Level1) { InitResource(g_mp4Path2, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); list toPtsList = {0, 3000, 2040, 1880, 1960, 2400, 2720, 2830, 4040, 4100}; // ms vector audioVals = {174, 174, 174, 7, 49, 49, 48, 91, 91, 90, 132, 90, 90, 91, 91, 48, 91, 91, 48, 91, 48, 48, 91, 48, 8, 8, 8, 8}; vector videoVals = {103, 103, 103, 6, 30, 30, 30, 54, 54, 54, 78, 54, 54, 54, 54, 30, 54, 54, 30, 54, 30, 30, 54, 30, 6, 6, 6, 6}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); printf("time = %" PRId64 " | frames_[1]=%d | kFrames[1]=%d\n", *toPts, frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1040 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1040, TestSize.Level1) { InitResource(g_mkvPath2, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); list toPtsList = {0, 1000, 1017, 1500, 1700, 1940, 3983, 1983, 3990}; // ms vector audioVals = {199, 199, 199, 149, 149, 149, 99, 149, 149, 99, 149, 149, 99, 149, 99, 99, 149, 99, 49, 49, 99, 149, 99, 49, 49}; vector videoVals = {240, 240, 240, 180, 180, 180, 120, 180, 180, 120, 180, 180, 120, 180, 120, 120, 180, 120, 60, 60, 120, 180, 120, 60, 60}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); printf("time = %" PRId64 " | frames_[1]=%d | kFrames[1]=%d\n", *toPts, frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1060 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1060, TestSize.Level1) { InitResource(g_tsPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); list toPtsList = {0, 3480, 3640, 3320, 3000, 3100, 4120, 5520}; // ms vector videoVals = {103, 103, 103, 15, 15, 15, 11, 11, 11, 19, 19, 19, 27, 27, 27, 24, 25, 25, 1, 1, 1}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], videoVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1070 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1070, TestSize.Level1) { InitResource(g_aacPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); list toPtsList = {0, 10240, 10230, 10220, 30000, 30010}; // ms vector audioVals = {1293, 1293, 1293, 852, 852, 852, 852, 853, 853, 852, 853, 853, 2, 2, 2, 1, 1, 1}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1080 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1080, TestSize.Level1) { InitResource(g_flacPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); list toPtsList = {0, 3072, 4031, 4035, 29952, 29953}; // ms vector audioVals = {313, 313, 313, 281, 281, 281, 271, 271, 271, 270, 270, 270, 1, 1, 1, 2, 2, 2}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1090 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1090, TestSize.Level1) { InitResource(g_m4aPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); list toPtsList = {0, 14592, 15297, 15290, 29994, 29998}; // ms vector audioVals = {1407, 1407, 1407, 723, 723, 723, 689, 690, 690, 690, 691, 691, 2, 2, 2, 1, 1, 1}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1100 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1100, TestSize.Level1) { InitResource(g_mp3Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); list toPtsList = {0, 4128, 11980, 11990, 30000, 30010}; // ms vector audioVals = {1251, 1251, 1251, 1077, 1078, 1078, 750, 751, 751, 750, 751, 751, 1, 1, 1, 1, 1, 1}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1110 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1110, TestSize.Level1) { InitResource(g_oggPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); list toPtsList = {0, 5868, 5548, 5292, 29992, 29999}; // ms vector audioVals = {1598, 1598, 1598, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 46, 46, 46, 46, 46, 46}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1120 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1120, TestSize.Level1) { InitResource(g_wavPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); list toPtsList = {0, 8576, 8566, 8578, 29994, 30000}; // ms vector audioVals = {704, 704, 704, 503, 503, 503, 504, 504, 504, 503, 503, 503, 2, 2, 2, 1, 1, 1}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1130 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1130, TestSize.Level1) { InitResource(g_amrPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); list toPtsList = {0, 8560, 8550, 8570, 30000, 30900}; // ms vector audioVals = {1501, 1501, 1501, 1073, 1073, 1073, 1073, 1074, 1074, 1072, 1073, 1073, 1, 1, 1, 1, 1, 1}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1140 * @tc.desc: seek to the specified time * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1140, TestSize.Level1) { InitResource(g_amrPath2, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); list toPtsList = {0, 11920, 11910, 11930, 29980, 30800}; // ms vector audioVals = {1500, 1500, 1500, 904, 904, 904, 904, 905, 905, 903, 904, 904, 1, 1, 1, 1, 1, 1}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_1150 * @tc.desc: seek to the specified time(audioVivid mp4) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1150, TestSize.Level1) { InitResource(g_audioVividPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); list toPtsList = {0, 10000, 8000, 12300, 25000, 29000, 30800, 33000}; // ms vector audioVals = {1380, 1380, 1380, 949, 950, 950, 1035, 1036, 1036, 850, 851, 851, 303, 304, 304, 131, 132, 132, 53, 54, 54}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1160 * @tc.desc: seek to the specified time(audioVivid ts) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1160, TestSize.Level1) { InitResource(g_audioVividPath2, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); list toPtsList = {0, 10000, 8000, 12300, 25000, 29000, 30800, 32000}; // ms vector audioVals = {92, 92, 92, 63, 64, 64, 69, 70, 70, 56, 57, 57, 20, 21, 21, 8, 9, 9, 4, 4, 4}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SelectTrackByID(3), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1200 * @tc.desc: read first and then seek * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1200, TestSize.Level1) { InitResource(g_mp4Path2, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); for (int i = 0; i < 50; i++) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); } } int64_t seekTime = info_.presentationTimeUs / 1000 + 2000; ASSERT_EQ(demuxer_->SeekToTime(seekTime, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_EQ(demuxer_->ReadSample(0, sharedMem_, &info_, flag_), AV_ERR_OK); ASSERT_EQ(info_.presentationTimeUs, 3960000); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1219 * @tc.desc: copy current sample to buffer(two sound track mp4) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1219, TestSize.Level1) { InitResource(g_multiSoundTrackMp4Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(2), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); printf("frames_[2]=%d | kFrames[2]=%d\n", frames_[2], keyFrames_[2]); ASSERT_EQ(frames_[0], 602); ASSERT_EQ(frames_[1], 433); ASSERT_EQ(frames_[2], 417); ASSERT_EQ(keyFrames_[0], 3); ASSERT_EQ(keyFrames_[1], 433); ASSERT_EQ(keyFrames_[2], 417); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1228 * @tc.desc: copy current sample to buffer, local * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1228, TestSize.Level1) { InitResource(g_fmp4AvcPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 602); ASSERT_EQ(frames_[1], 433); ASSERT_EQ(keyFrames_[0], 3); ASSERT_EQ(keyFrames_[1], 433); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1234 * @tc.desc: copy current sample to buffer, local * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1234, TestSize.Level1) { InitResource(g_fmp4m4vPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 602); ASSERT_EQ(keyFrames_[0], 3); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_1236 * @tc.desc: copy current sample to buffer, local * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1236, TestSize.Level1) { InitResource(g_fmp4m4aPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 433); ASSERT_EQ(keyFrames_[0], 433); RemoveValue(); } /** * @tc.name: Demuxer_SeekToTime_1194 * @tc.desc: seek to the specified time(two sound track mp4 local) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1194, TestSize.Level1) { InitResource(g_multiSoundTrackMp4Path, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(2), AV_ERR_OK); list toPtsList = {0, 4500, 7000, 2000, 10000}; // ms vector videoVals = {602, 602, 602, 102, 352, 352, 102, 352, 102, 352, 602, 602, 102, 102}; vector audioVals = {433, 433, 433, 74, 254, 254, 74, 254, 74, 253, 433, 433, 75, 75}; vector audioVals2 = {417, 417, 417, 71, 245, 245, 71, 245, 71, 244, 417, 417, 72, 72}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); printf("time = %" PRId64 " | frames_[1]=%d | kFrames[1]=%d\n", *toPts, frames_[1], keyFrames_[1]); printf("time = %" PRId64 " | frames_[2]=%d | kFrames[2]=%d\n", *toPts, frames_[2], keyFrames_[2]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); ASSERT_EQ(frames_[2], audioVals2[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(11000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_ReadSample_1222 * @tc.desc: copy current sample to buffer(ape) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1222, TestSize.Level1) { InitResource(g_apePath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 7); ASSERT_EQ(keyFrames_[0], 7); RemoveValue(); } /** * @tc.name: Demuxer_SeekToTime_1224 * @tc.desc: seek to the specified time(two sound track ape local) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1224, TestSize.Level1) { InitResource(g_apePath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); list toPtsList = {0, 4500, 7000, 2000, 10000}; // ms vector audioVals = {7, 7, 7, 4, 5, 5, 2, 3, 3, 5, 6, 6, 1, 2, 2}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d | kFrames[0]=%d\n", *toPts, frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(12000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_ReadSample_1400 * @tc.desc: copy current sample to buffer(flv) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1400, TestSize.Level1) { InitResource(g_flvPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); std::vector keyFrameIndex = {0}; while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); if (idx == 0) { ASSERT_TRUE(CheckKeyFrameIndex( keyFrameIndex, frames_[0], flag_ & AVCodecBufferFlag::AVCODEC_BUFFER_FLAG_SYNC_FRAME)); } CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 76); ASSERT_EQ(frames_[1], 113); ASSERT_EQ(keyFrames_[0], 1); ASSERT_EQ(keyFrames_[1], 113); RemoveValue(); } /** * @tc.name: Demuxer_SeekToTime_1206 * @tc.desc: seek to the specified time(h264 flv local) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1206, TestSize.Level1) { InitResource(g_flvPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 1500, 1000, 1740, 1970, 2100}; // ms vector videoVals = {76, 76, 76, 0, 76, 0, 0, 76, 76, 0, 76, 0, 0, 76, 0, 0, 76, 0}; vector audioVals = {107, 107, 107, 0, 107, 0, 0, 107, 107, 0, 107, 0, 0, 107, 0, 0, 107, 0}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); printf("time = %" PRId64 " | frames_[1]=%d\n", *toPts, frames_[1]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(11000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1229 * @tc.desc: seek to the specified time(h264 fmp4 fd) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1229, TestSize.Level1) { InitResource(g_fmp4AvcPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 4500, 7000, 2000}; // ms vector videoVals = {602, 602, 602, 102, 352, 352, 102, 352, 102, 352, 602, 602}; vector audioVals = {433, 433, 433, 74, 254, 254, 74, 254, 74, 253, 433, 433}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); printf("time = %" PRId64 " | frames_[1]=%d\n", *toPts, frames_[1]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(11000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1238 * @tc.desc: seek to the specified time(fmp4 m4v fd) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1238, TestSize.Level1) { InitResource(g_fmp4m4vPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 4500, 7000, 2000}; // ms vector videoVals = {602, 602, 602, 102, 352, 352, 102, 352, 102, 352, 602, 602}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); ASSERT_EQ(frames_[0], videoVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(11000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1239 * @tc.desc: seek to the specified time(fmp4 m4a fd) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1239, TestSize.Level1) { InitResource(g_fmp4m4aPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 4500, 7000, 2000}; // ms vector audioVals = {433, 433, 433, 239, 240, 240, 131, 132, 132, 347, 348, 348}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(11000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_ReadSample_3000 * @tc.desc: copy current sample to buffer(srt) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_3000, TestSize.Level1) { InitResource(g_srt, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 5); RemoveValue(); } #ifndef DEMUXER_CAPI_BUFFER_UNIT_TEST /** * @tc.name: Demuxer_ReadSample_3002 * @tc.desc: copy current sample to buffer(vtt, en) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_3002, TestSize.Level1) { InitResource(g_vttPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); int32_t vttIndex = 0; while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); char *vttStr = static_cast(malloc(info_.size * sizeof(char) + 1)); memcpy_s(vttStr, info_.size, sharedMem_->GetAddr(), info_.size); *(vttStr + info_.size) = '\0'; switch (vttIndex) { case 0: ASSERT_EQ(strcmp(vttStr, "testA"), 0); ASSERT_EQ(info_.presentationTimeUs, 500000); ASSERT_EQ(info_.size, 5); break; case 1: ASSERT_EQ(strcmp(vttStr, "testBB"), 0); ASSERT_EQ(info_.presentationTimeUs, 1001000); ASSERT_EQ(info_.size, 6); break; case 2: ASSERT_EQ(strcmp(vttStr, "testCCC"), 0); ASSERT_EQ(info_.presentationTimeUs, 2003000); ASSERT_EQ(info_.size, 7); break; case 3: ASSERT_EQ(strcmp(vttStr, "testDDDD"), 0); ASSERT_EQ(info_.presentationTimeUs, 2100000); ASSERT_EQ(info_.size, 8); break; default: break; } CountFrames(idx); free(vttStr); } vttIndex++; } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 4); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_3003 * @tc.desc: copy current sample to buffer(vtt, zh) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_3003, TestSize.Level1) { InitResource(g_vttPath2, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); int32_t vttIndex = 0; while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); char *vttStr = static_cast(malloc(info_.size * sizeof(char) + 1)); memcpy_s(vttStr, info_.size, sharedMem_->GetAddr(), info_.size); *(vttStr + info_.size) = '\0'; switch (vttIndex) { case 0: ASSERT_EQ(strcmp(vttStr, "第1帧"), 0); ASSERT_EQ(info_.presentationTimeUs, 30000); ASSERT_EQ(info_.size, 7); break; case 1: ASSERT_EQ(strcmp(vttStr, "第2帧"), 0); ASSERT_EQ(info_.presentationTimeUs, 2030000); ASSERT_EQ(info_.size, 7); break; case 2: ASSERT_EQ(strcmp(vttStr, "第3帧"), 0); ASSERT_EQ(info_.presentationTimeUs, 2900000); ASSERT_EQ(info_.size, 7); break; case 3: ASSERT_EQ(strcmp(vttStr, "第4帧"), 0); ASSERT_EQ(info_.presentationTimeUs, 3000000); ASSERT_EQ(info_.size, 7); break; default: break; } CountFrames(idx); free(vttStr); } vttIndex++; } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 10); RemoveValue(); } /** * @tc.name: Demuxer_ReadSample_3013 * @tc.desc: copy current sample to buffer(vtt, zh) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_3013, TestSize.Level1) { InitResource(g_vttMp4Path, LOCAL); ASSERT_TRUE(initStatus_); for (int i = 0; i < nbStreams_; i++) { ASSERT_EQ(demuxer_->SelectTrackByID(i), AV_ERR_OK); } sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 604); ASSERT_EQ(keyFrames_[0], 61); ASSERT_EQ(frames_[1], 434); ASSERT_EQ(keyFrames_[1], 434); ASSERT_EQ(frames_[2], 9); ASSERT_EQ(keyFrames_[2], 9); RemoveValue(); } #endif #ifdef SUPPORT_DEMUXER_LRC /** * @tc.name: Demuxer_ReadSample_3004 * @tc.desc: copy current sample to buffer(lrc) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_3004, TestSize.Level1) { InitResource(g_lrcPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 5); RemoveValue(); } #endif #ifdef SUPPORT_DEMUXER_SAMI /** * @tc.name: Demuxer_ReadSample_3005 * @tc.desc: copy current sample to buffer(sami) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_3005, TestSize.Level1) { InitResource(g_samiPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 10); RemoveValue(); } #endif #ifdef SUPPORT_DEMUXER_ASS /** * @tc.name: Demuxer_ReadSample_3006 * @tc.desc: copy current sample to buffer(ass) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_3006, TestSize.Level1) { InitResource(g_assPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 5); RemoveValue(); } #endif /** * @tc.name: Demuxer_SeekToTime_3000 * @tc.desc: seek to the specified time(srt) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_3000, TestSize.Level1) { InitResource(g_srt, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 160, 2000, 4000, 7000}; // ms vector subVals = {5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 2, 2, 2}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); ASSERT_EQ(frames_[0], subVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } #ifndef DEMUXER_CAPI_BUFFER_UNIT_TEST /** * @tc.name: Demuxer_SeekToTime_3002 * @tc.desc: seek to the specified time(vtt, en) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_3002, TestSize.Level1) { InitResource(g_vttPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {500, 1000, 2000, 3000}; // ms vector subVals = {4, 4, 4, 4, 4, 4, 3, 3, 3, 1, 1, 1}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); ASSERT_EQ(frames_[0], subVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } /** * @tc.name: Demuxer_SeekToTime_3003 * @tc.desc: seek to the specified time(vtt, zh) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_3003, TestSize.Level1) { InitResource(TEST_FILE_PATH + string("webvtt_test2.vtt"), LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {100, 1000, 1200, 61000, 65000}; // ms vector subVals = {10, 10, 10, 10, 10, 10, 9, 9, 9, 1, 1, 1, 1, 1, 1}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); ASSERT_EQ(frames_[0], subVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } #endif #ifdef SUPPORT_DEMUXER_LRC /** * @tc.name: Demuxer_SeekToTime_3004 * @tc.desc: seek to the specified time(lrc) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_3004, TestSize.Level1) { InitResource(g_lrcPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 160, 2000, 4000, 7000}; // ms vector subVals = {5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 2, 2, 2}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); ASSERT_EQ(frames_[0], subVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } #endif #ifdef SUPPORT_DEMUXER_SAMI /** * @tc.name: Demuxer_SeekToTime_3005 * @tc.desc: seek to the specified time(sami) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_3005, TestSize.Level1) { InitResource(g_samiPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 160, 2000, 4000, 7000}; // ms vector subVals = {10, 10, 10, 10, 10, 10, 10, 10, 10, 8, 8, 8, 4, 4, 4}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); ASSERT_EQ(frames_[0], subVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } #endif #ifdef SUPPORT_DEMUXER_ASS /** * @tc.name: Demuxer_SeekToTime_3006 * @tc.desc: seek to the specified time(ass) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_3006, TestSize.Level1) { InitResource(g_assPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 160, 2000, 4000, 7000}; // ms vector subVals = {5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 2, 2, 2}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); ASSERT_EQ(frames_[0], subVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } #endif /** * @tc.name: Demuxer_SetMediaKeySystemInfoCallback_4000 * @tc.desc: set normal drm callback * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SetMediaKeySystemInfoCallback_4000, TestSize.Level1) { InitResource(g_drmSm4cPath, LOCAL); ASSERT_TRUE(initStatus_); bool isNullCallback = false; int32_t ret = demuxer_->SetMediaKeySystemInfoCallback(isNullCallback); ASSERT_EQ(ret, AV_ERR_OK); } /** * @tc.name: Demuxer_SetMediaKeySystemInfoCallback_4001 * @tc.desc: set null drm callback * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SetMediaKeySystemInfoCallback_4001, TestSize.Level1) { InitResource(g_drmSm4cPath, LOCAL); ASSERT_TRUE(initStatus_); bool isNullCallback = true; int32_t ret = demuxer_->SetMediaKeySystemInfoCallback(isNullCallback); ASSERT_EQ(ret, AV_ERR_OK); } /** * @tc.name: Demuxer_SetDemuxerMediaKeySystemInfoCallback_4002 * @tc.desc: set normal drm callback * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SetDemuxerMediaKeySystemInfoCallback_4002, TestSize.Level1) { InitResource(g_drmSm4cPath, LOCAL); ASSERT_TRUE(initStatus_); bool isNullCallback = false; int32_t ret = demuxer_->SetDemuxerMediaKeySystemInfoCallback(isNullCallback); ASSERT_EQ(ret, AV_ERR_OK); } /** * @tc.name: Demuxer_SetDemuxerMediaKeySystemInfoCallback_4003 * @tc.desc: set null drm callback * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SetDemuxerMediaKeySystemInfoCallback_4003, TestSize.Level1) { InitResource(g_drmSm4cPath, LOCAL); ASSERT_TRUE(initStatus_); bool isNullCallback = true; int32_t ret = demuxer_->SetDemuxerMediaKeySystemInfoCallback(isNullCallback); ASSERT_EQ(ret, AV_ERR_OK); } /** * @tc.name: Demuxer_GetMediaKeySystemInfo_4004 * @tc.desc: get drm info when play drm * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_GetMediaKeySystemInfo_4004, TestSize.Level1) { InitResource(g_drmSm4cPath, LOCAL); ASSERT_TRUE(initStatus_); int32_t ret = demuxer_->GetMediaKeySystemInfo(); ASSERT_EQ(ret, AV_ERR_OK); } #ifndef DEMUXER_CAPI_UNIT_TEST /** * @tc.name: Demuxer_GetIndexByRelativePresentationTimeUs_1000 * @tc.desc: Get index by pts(audio track) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_GetIndexByRelativePresentationTimeUs_1000, TestSize.Level1) { InitResource(g_ptsConversionPath, LOCAL); ASSERT_TRUE(initStatus_); uint32_t trackIndex = 0; uint64_t relativePresentationTimeUs = 69659; uint32_t index = 0; int32_t ret = demuxer_->GetIndexByRelativePresentationTimeUs(trackIndex, relativePresentationTimeUs, index); ASSERT_EQ(ret, AV_ERR_OK); ASSERT_EQ(index, 3); } /** * @tc.name: Demuxer_GetIndexByRelativePresentationTimeUs_1001 * @tc.desc: Get index by pts(video track) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_GetIndexByRelativePresentationTimeUs_1001, TestSize.Level1) { InitResource(g_ptsConversionPath, LOCAL); ASSERT_TRUE(initStatus_); uint32_t trackIndex = 1; uint64_t relativePresentationTimeUs = 66666; uint32_t index = 0; int32_t ret = demuxer_->GetIndexByRelativePresentationTimeUs(trackIndex, relativePresentationTimeUs, index); ASSERT_EQ(ret, AV_ERR_OK); ASSERT_EQ(index, 4); } /** * @tc.name: Demuxer_GetIndexByRelativePresentationTimeUs_1002 * @tc.desc: Get index by pts(not MP4) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_GetIndexByRelativePresentationTimeUs_1002, TestSize.Level1) { InitResource(g_flvPath, LOCAL); ASSERT_TRUE(initStatus_); uint32_t trackIndex = 0; uint64_t relativePresentationTimeUs = 69659; uint32_t index = 0; int32_t ret = demuxer_->GetIndexByRelativePresentationTimeUs(trackIndex, relativePresentationTimeUs, index); ASSERT_NE(ret, AV_ERR_OK); ASSERT_EQ(index, 0); } /** * @tc.name: Demuxer_GetIndexByRelativePresentationTimeUs_1003 * @tc.desc: Get index by pts(non-standard pts & different track) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_GetIndexByRelativePresentationTimeUs_1003, TestSize.Level1) { InitResource(g_ptsConversionPath, LOCAL); ASSERT_TRUE(initStatus_); // standard pts & video track uint32_t trackIndex = 1; uint64_t relativePresentationTimeUs = 166666; uint32_t index = 0; int32_t ret = demuxer_->GetIndexByRelativePresentationTimeUs(trackIndex, relativePresentationTimeUs, index); ASSERT_EQ(ret, AV_ERR_OK); ASSERT_EQ(index, 10); } /** * @tc.name: Demuxer_GetRelativePresentationTimeUsByIndex_1000 * @tc.desc: get pts by frameIndex(audio track) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_GetRelativePresentationTimeUsByIndex_1000, TestSize.Level1) { InitResource(g_ptsConversionPath, LOCAL); ASSERT_TRUE(initStatus_); uint32_t trackIndex = 0; uint64_t relativePresentationTimeUs = 0; uint32_t index = 2; int32_t ret = demuxer_->GetRelativePresentationTimeUsByIndex(trackIndex, index, relativePresentationTimeUs); ASSERT_EQ(ret, AV_ERR_OK); ASSERT_EQ(relativePresentationTimeUs, 46439); } /** * @tc.name: Demuxer_GetRelativePresentationTimeUsByIndex_1001 * @tc.desc: get pts by frameIndex(video track) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_GetRelativePresentationTimeUsByIndex_1001, TestSize.Level1) { InitResource(g_ptsConversionPath, LOCAL); ASSERT_TRUE(initStatus_); uint32_t trackIndex = 1; uint64_t relativePresentationTimeUs = 0; uint32_t index = 2; int32_t ret = demuxer_->GetRelativePresentationTimeUsByIndex(trackIndex, index, relativePresentationTimeUs); ASSERT_EQ(ret, AV_ERR_OK); ASSERT_EQ(relativePresentationTimeUs, 33333); } /** * @tc.name: Demuxer_GetRelativePresentationTimeUsByIndex_1002 * @tc.desc: get pts by frameIndex(not MP4) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_GetRelativePresentationTimeUsByIndex_1002, TestSize.Level1) { InitResource(g_flvPath, LOCAL); ASSERT_TRUE(initStatus_); uint32_t trackIndex = 0; uint64_t relativePresentationTimeUs = 0; uint32_t index = 10; int32_t ret = demuxer_->GetRelativePresentationTimeUsByIndex(trackIndex, index, relativePresentationTimeUs); ASSERT_NE(ret, AV_ERR_OK); ASSERT_EQ(relativePresentationTimeUs, 0); } /** * @tc.name: Demuxer_PtsAndFrameIndexConversion_1000 * @tc.desc: pts and frameIndex convertion test(pts -> frameIndex -> pts) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_PtsAndFrameIndexConversion_1000, TestSize.Level1) { InitResource(g_ptsConversionPath, LOCAL); ASSERT_TRUE(initStatus_); uint32_t trackIndex = 0; uint64_t relativePresentationTimeUs = 92879; uint32_t index = 0; int32_t ret = demuxer_->GetIndexByRelativePresentationTimeUs(trackIndex, relativePresentationTimeUs, index); ASSERT_EQ(ret, AV_ERR_OK); ASSERT_EQ(index, 4); uint64_t relativePresentationTimeUs1 = 0; ret = demuxer_->GetRelativePresentationTimeUsByIndex(trackIndex, index, relativePresentationTimeUs1); ASSERT_EQ(ret, AV_ERR_OK); ASSERT_EQ(relativePresentationTimeUs1, 92879); } /** * @tc.name: Demuxer_PtsAndFrameIndexConversion_1001 * @tc.desc: pts and frameIndex convertion test(frameIndex -> pts -> frameIndex) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_PtsAndFrameIndexConversion_1001, TestSize.Level1) { InitResource(g_ptsConversionPath, LOCAL); ASSERT_TRUE(initStatus_); uint32_t trackIndex = 0; uint64_t relativePresentationTimeUs = 0; uint32_t index = 4; int32_t ret = demuxer_->GetRelativePresentationTimeUsByIndex(trackIndex, index, relativePresentationTimeUs); ASSERT_EQ(ret, AV_ERR_OK); ASSERT_EQ(relativePresentationTimeUs, 92879); uint32_t index1 = 0; ret = demuxer_->GetIndexByRelativePresentationTimeUs(trackIndex, relativePresentationTimeUs, index1); ASSERT_EQ(ret, AV_ERR_OK); ASSERT_EQ(index1, 4); } /** * @tc.name: Demuxer_PTSOutOfRange_1000 * @tc.desc: pts out of range * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_PTSOutOfRange_1000, TestSize.Level1) { InitResource(g_ptsConversionPath, LOCAL); ASSERT_TRUE(initStatus_); uint32_t trackIndex = 0; uint64_t relativePresentationTimeUs = 999999999; uint32_t index = 0; int32_t ret = demuxer_->GetIndexByRelativePresentationTimeUs(trackIndex, relativePresentationTimeUs, index); ASSERT_NE(ret, AV_ERR_OK); } /** * @tc.name: Demuxer_IndexOutOfRange_1000 * @tc.desc: Index out of range * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_IndexOutOfRange_1000, TestSize.Level1) { InitResource(g_ptsConversionPath, LOCAL); ASSERT_TRUE(initStatus_); uint32_t trackIndex = 0; uint64_t relativePresentationTimeUs = 0; uint32_t index = 9999999; int32_t ret = demuxer_->GetRelativePresentationTimeUsByIndex(trackIndex, index, relativePresentationTimeUs); ASSERT_NE(ret, AV_ERR_OK); } /** * @tc.name: Demuxer_TrackOutOfRange_1000 * @tc.desc: Track out of range * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_TrackOutOfRange_1000, TestSize.Level1) { InitResource(g_ptsConversionPath, LOCAL); ASSERT_TRUE(initStatus_); uint32_t trackIndex = 99; uint64_t relativePresentationTimeUs = 0; uint32_t index = 0; int32_t ret = demuxer_->GetRelativePresentationTimeUsByIndex(trackIndex, index, relativePresentationTimeUs); ASSERT_NE(ret, AV_ERR_OK); } #endif /** * @tc.name: Demuxer_ReadSample_1601 * @tc.desc: copy current sample to buffer(mp4 vvc) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1601, TestSize.Level1) { if (access(g_mp4VvcPath.c_str(), F_OK) == 0) { InitResource(g_mp4VvcPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); uint32_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 600); ASSERT_EQ(keyFrames_[0], 10); RemoveValue(); } } /** * @tc.name: Demuxer_SeekToTime_1601 * @tc.desc: seek to the specified time(mp4 vvc fd) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1601, TestSize.Level1) { if (access(g_mp4VvcPath.c_str(), F_OK) == 0) { InitResource(g_mp4VvcPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 4500, 7000, 2000}; // ms vector audioVals = {433, 433, 433, 240, 240, 240, 132, 132, 132, 348, 348, 348}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); SeekTest(toPtsList, seekModes, {audioVals}); ASSERT_TRUE(seekTestFlag_); ASSERT_NE(demuxer_->SeekToTime(11000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } } /** * @tc.number : Demuxer_GetCommentData_1000 * @tc.name : demux MP4 muxed by avmuxer,check track format,OH_MD_KEY_COMMENT * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetCommentData_1000, TestSize.Level0) { InitResource(g_commentTest1000Path, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; ASSERT_TRUE(format_->GetStringValue(OH_MD_KEY_COMMENT, stringVal)); ASSERT_EQ(stringVal, "comment_test_str"); } /** * @tc.number : Demuxer_GetCommentData_1100 * @tc.name : demux MP4 muxed by avmuxer,check track format,OH_MD_KEY_COMMENT * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetCommentData_1100, TestSize.Level0) { InitResource(g_commentTest1100Path, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; ASSERT_FALSE(format_->GetStringValue(OH_MD_KEY_COMMENT, stringVal)); ASSERT_EQ(stringVal, ""); } /** * @tc.number : Demuxer_GetCommentData_1200 * @tc.name : demux MP4 muxed by avmuxer,check track format,OH_MD_KEY_COMMENT * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetCommentData_1200, TestSize.Level0) { InitResource(g_commentTest1200Path, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; ASSERT_TRUE(format_->GetStringValue(OH_MD_KEY_COMMENT, stringVal)); ASSERT_EQ(stringVal, "中文测试字符串"); } /** * @tc.number : Demuxer_GetCommentData_1300 * @tc.name : demux MP4 muxed by avmuxer,check track format,OH_MD_KEY_COMMENT * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetCommentData_1300, TestSize.Level0) { InitResource(g_commentTest1300Path, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; ASSERT_TRUE(format_->GetStringValue(OH_MD_KEY_COMMENT, stringVal)); ASSERT_EQ(stringVal, "comment_test_strcomment_test_strcomment_test_str" "comment_test_strcomment_test_strcomment_test_strcomment_test_strcomment_test_str" "comment_test_strcomment_test_strcomment_test_strcomment_test_strcomment_test_str" "comment_test_strcomment_test_strcomment_test_str"); } /** * @tc.name: Demuxer_ReadSample_WavAlaw_0001 * @tc.desc: copy current sample to buffer(wav alaw) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_WavAlaw_0001, TestSize.Level1) { ASSERT_TRUE(!access(g_wavAlawPath.c_str(), F_OK)); InitResource(g_wavAlawPath, LOCAL); ASSERT_TRUE(initStatus_); int trackIndex = 0; ASSERT_EQ(demuxer_->SelectTrackByID(trackIndex), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); std::vector expPtsVec = {0, 85333, 170666, 256000, 341333, 426666, 512000}; std::vector expSizeVec = {4096, 4096, 4096, 4096, 4096, 4096, 4096}; size_t idx = 0; while (!isEOS(eosFlag_)) { ASSERT_EQ(demuxer_->ReadSample(trackIndex, sharedMem_, &info_, flag_), AV_ERR_OK); if (idx < expPtsVec.size()) { ASSERT_EQ(expPtsVec[idx], info_.presentationTimeUs); ASSERT_EQ(expSizeVec[idx], info_.size); } CountFrames(trackIndex); idx++; } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[trackIndex], keyFrames_[trackIndex]); ASSERT_EQ(frames_[trackIndex], 352); ASSERT_EQ(keyFrames_[trackIndex], 352); RemoveValue(); } /** * @tc.name: Demuxer_SeekToTime_WavAlaw_0001 * @tc.desc: seek to the specified time(wav alaw) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_WavAlaw_0001, TestSize.Level1) { ASSERT_TRUE(!access(g_wavAlawPath.c_str(), F_OK)); InitResource(g_wavAlawPath, LOCAL); ASSERT_TRUE(initStatus_); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 100, 500, 900}; // ms vector audioVals = {352, 352, 352, 351, 351, 351, 347, 347, 347, 342, 342, 342}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } } #ifdef SUPPORT_CODEC_RM /** * @tc.name: Demuxer_ReadSample_1800 * @tc.desc: copy current sample to buffer(rmvb) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1800, TestSize.Level1) { InitResource(g_rmvbPath, LOCAL); ASSERT_NE(source_, nullptr); ASSERT_NE(format_, nullptr); ASSERT_NE(demuxer_, nullptr); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 251); ASSERT_EQ(frames_[1], 480); ASSERT_EQ(keyFrames_[0], 2); ASSERT_EQ(keyFrames_[1], 480); RemoveValue(); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->Destroy(), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1800 * @tc.desc: seek to the specified time(rmvb) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1800, TestSize.Level1) { InitResource(g_rmvbPath, LOCAL); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 4500, 7000, 2000, 10000, 8000}; // ms vector videoVals = {251, 251, 251, 2, 251, 251, 2, 251, 2, 2, 251, 251, 2, 2, 2, 2, 251, 2}; vector audioVals = {480, 480, 480, 0, 480, 480, 0, 480, 0, 80, 480, 480, 0, 80, 0, 80, 480, 0}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); printf("time = %" PRId64 " | frames_[1]=%d\n", *toPts, frames_[1]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(12000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } #endif /** * @tc.name: Demuxer_ReadSample_1801 * @tc.desc: copy current sample to buffer(ac3) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1801, TestSize.Level1) { InitResource(g_ac3Path, LOCAL); ASSERT_NE(source_, nullptr); ASSERT_NE(format_, nullptr); ASSERT_NE(demuxer_, nullptr); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); ASSERT_EQ(frames_[0], 317); ASSERT_EQ(keyFrames_[0], 317); RemoveValue(); ASSERT_EQ(demuxer_->Destroy(), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1801 * @tc.desc: seek to the specified time(ac3) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1801, TestSize.Level1) { InitResource(g_ac3Path, LOCAL); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 4500, 7000, 2000, 10000, 8000}; // ms vector audioVals = {317, 317, 317, 187, 188, 188, 115, 116, 116, 259, 260, 260, 29, 30, 30, 87, 88, 88}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); ASSERT_EQ(frames_[0], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(12000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_ReadSample_1802 * @tc.desc: copy current sample to buffer(webm) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1802, TestSize.Level1) { InitResource(g_webmPath, LOCAL); ASSERT_NE(source_, nullptr); ASSERT_NE(format_, nullptr); ASSERT_NE(demuxer_, nullptr); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 602); ASSERT_EQ(frames_[1], 594); ASSERT_EQ(keyFrames_[0], 5); ASSERT_EQ(keyFrames_[1], 594); RemoveValue(); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->Destroy(), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1802 * @tc.desc: seek to the specified time(webm) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1802, TestSize.Level1) { InitResource(g_webmPath, LOCAL); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 4500, 7000, 2000, 6000}; // ms vector videoVals = {602, 602, 602, 218, 346, 346, 90, 218, 218, 474, 602, 474, 218, 346, 218}; vector audioVals = {593, 593, 593, 224, 351, 351, 96, 224, 224, 472, 593, 472, 224, 351, 224}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); printf("time = %" PRId64 " | frames_[1]=%d\n", *toPts, frames_[1]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(12000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_ReadSample_1803 * @tc.desc: copy current sample to buffer(mts) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1803, TestSize.Level1) { InitResource(g_mtsPath, LOCAL); ASSERT_NE(source_, nullptr); ASSERT_NE(format_, nullptr); ASSERT_NE(demuxer_, nullptr); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 602); ASSERT_EQ(frames_[1], 314); ASSERT_EQ(keyFrames_[0], 3); ASSERT_EQ(keyFrames_[1], 314); RemoveValue(); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->Destroy(), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1803 * @tc.desc: seek to the specified time(mts) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1803, TestSize.Level1) { InitResource(g_mtsPath, LOCAL); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 4500, 7000, 2000, 6000}; // ms vector videoVals = {602, 602, 602, 330, 330, 330, 180, 180, 180, 480, 480, 480, 240, 240, 240}; vector audioVals = {314, 314, 314, 174, 174, 174, 96, 96, 96, 252, 252, 252, 127, 127, 127}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); printf("time = %" PRId64 " | frames_[1]=%d\n", *toPts, frames_[1]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(12000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_ReadSample_1804 * @tc.desc: copy current sample to buffer(vob) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1804, TestSize.Level1) { InitResource(g_vobPath, LOCAL); ASSERT_NE(source_, nullptr); ASSERT_NE(format_, nullptr); ASSERT_NE(demuxer_, nullptr); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 602); ASSERT_EQ(frames_[1], 314); ASSERT_EQ(keyFrames_[0], 51); ASSERT_EQ(keyFrames_[1], 314); RemoveValue(); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->Destroy(), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1804 * @tc.desc: seek to the specified time(vob) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1804, TestSize.Level1) { InitResource(g_vobPath, LOCAL); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 4500, 7000, 2000, 6000}; // ms vector videoVals = {602, 602, 602, 331, 334, 331, 182, 182, 182, 482, 482, 482, 242, 242, 242}; vector audioVals = {313, 313, 313, 194, 195, 194, 115, 115, 115, 271, 271, 271, 147, 147, 147}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); printf("time = %" PRId64 " | frames_[1]=%d\n", *toPts, frames_[1]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(12000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_ReadSample_1805 * @tc.desc: copy current sample to buffer(m2ts) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1805, TestSize.Level1) { InitResource(g_m2tsPath, LOCAL); ASSERT_NE(source_, nullptr); ASSERT_NE(format_, nullptr); ASSERT_NE(demuxer_, nullptr); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 602); ASSERT_EQ(frames_[1], 314); ASSERT_EQ(keyFrames_[0], 51); ASSERT_EQ(keyFrames_[1], 314); RemoveValue(); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->Destroy(), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1805 * @tc.desc: seek to the specified time(m2ts) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1805, TestSize.Level1) { InitResource(g_m2tsPath, LOCAL); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 4500, 7000, 2000, 6000}; // ms vector videoVals = {602, 602, 602, 331, 331, 331, 181, 181, 181, 481, 481, 481, 241, 241, 241}; vector audioVals = {314, 314, 314, 174, 174, 174, 96, 96, 96, 252, 252, 252, 127, 127, 127}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); printf("time = %" PRId64 " | frames_[1]=%d\n", *toPts, frames_[1]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(12000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_ReadSample_1806 * @tc.desc: copy current sample to buffer(trp) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_ReadSample_1806, TestSize.Level1) { InitResource(g_trpPath, LOCAL); ASSERT_NE(source_, nullptr); ASSERT_NE(format_, nullptr); ASSERT_NE(demuxer_, nullptr); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->SelectTrackByID(0), AV_ERR_OK); ASSERT_NE(demuxer_->SelectTrackByID(-1), AV_ERR_OK); sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); ASSERT_TRUE(SetInitValue()); while (!isEOS(eosFlag_)) { for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->ReadSample(idx, sharedMem_, &info_, flag_), AV_ERR_OK); CountFrames(idx); } } printf("frames_[0]=%d | kFrames[0]=%d\n", frames_[0], keyFrames_[0]); printf("frames_[1]=%d | kFrames[1]=%d\n", frames_[1], keyFrames_[1]); ASSERT_EQ(frames_[0], 242); ASSERT_EQ(frames_[1], 315); ASSERT_EQ(keyFrames_[0], 11); ASSERT_EQ(keyFrames_[1], 315); RemoveValue(); ASSERT_EQ(demuxer_->UnselectTrackByID(0), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(1), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(3), AV_ERR_OK); ASSERT_EQ(demuxer_->UnselectTrackByID(-1), AV_ERR_OK); ASSERT_EQ(demuxer_->Destroy(), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1806 * @tc.desc: seek to the specified time(trp) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1806, TestSize.Level1) { InitResource(g_trpPath, LOCAL); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 4500, 7000, 2000, 6000}; // ms vector videoVals = {242, 242, 242, 133, 133, 133, 73, 73, 73, 193, 193, 193, 97, 97, 97}; vector audioVals = {315, 315, 315, 175, 175, 175, 97, 97, 97, 253, 253, 253, 128, 128, 128}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); for (auto toPts = toPtsList.begin(); toPts != toPtsList.end(); toPts++) { for (auto mode = seekModes.begin(); mode != seekModes.end(); mode++) { ret_ = demuxer_->SeekToTime(*toPts, *mode); if (ret_ != AV_ERR_OK) { printf("seek failed, time = %" PRId64 " | ret = %d\n", *toPts, ret_); continue; } ReadData(); printf("time = %" PRId64 " | frames_[0]=%d\n", *toPts, frames_[0]); printf("time = %" PRId64 " | frames_[1]=%d\n", *toPts, frames_[1]); ASSERT_EQ(frames_[0], videoVals[numbers_]); ASSERT_EQ(frames_[1], audioVals[numbers_]); numbers_ += 1; RemoveValue(); selectedTrackIds_.clear(); } } ASSERT_NE(demuxer_->SeekToTime(12000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); ASSERT_NE(demuxer_->SeekToTime(-1000, SeekMode::SEEK_NEXT_SYNC), AV_ERR_OK); } /** * @tc.name: Demuxer_SeekToTime_1806 * @tc.desc: seek to the specified time(trp) * @tc.type: FUNC */ HWTEST_F(DemuxerUnitTest, Demuxer_SeekToTime_1807, TestSize.Level1) { InitResource(g_flvPath, LOCAL); ASSERT_TRUE(SetInitValue()); for (auto idx : selectedTrackIds_) { ASSERT_EQ(demuxer_->SelectTrackByID(idx), AV_ERR_OK); } list toPtsList = {0, 2466}; // ms vector videoVals = {76, 76, 76, 0, 76, 0}; vector audioVals = {107, 107, 107, 0, 107, 0}; sharedMem_ = AVMemoryMockFactory::CreateAVMemoryMock(bufferSize_); ASSERT_NE(sharedMem_, nullptr); SeekTest(toPtsList, seekModes, {videoVals, audioVals}); ASSERT_TRUE(seekTestFlag_); } /** * @tc.number : Demuxer_GetReservedBuffer_1000 * @tc.name : demux MP4 muxed by avmuxer,check user reserved buffer * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetReservedBuffer_1000, TestSize.Level0) { InitResource(g_reservedMp4Path, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; uint8_t *metaBuffer = nullptr; size_t bufferLen = 0; auto userformat = source_->GetUserData(); ASSERT_TRUE(userformat->GetBuffer("com.openharmony.test", &metaBuffer, bufferLen)); std::vector metaVec(metaBuffer, metaBuffer + bufferLen); std::vector expVec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 16, 17, 18, 19, 20, 100, 200, 255}; ASSERT_TRUE(metaVec == expVec); } /** * @tc.number : Demuxer_GetAIGCString_1000 * @tc.name : check AIGC info * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetAIGCString_1000, TestSize.Level0) { InitResource(g_aigcStrMp4Path, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; auto userformat = source_->GetSourceFormat(); ASSERT_TRUE(userformat->GetStringValue(MediaDescriptionKey::MD_KEY_AIGC, stringVal)); printf("AIGC key:%s\nvalue:%s\n", MediaDescriptionKey::MD_KEY_AIGC.data(), stringVal.c_str()); ASSERT_TRUE(AIGC_TEST_STR2 == stringVal); } /** * @tc.number : Demuxer_GetAIGCString_1100 * @tc.name : check AIGC info * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetAIGCString_1100, TestSize.Level0) { InitResource(g_aigcStrM4aPath, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; auto userformat = source_->GetSourceFormat(); ASSERT_TRUE(userformat->GetStringValue(MediaDescriptionKey::MD_KEY_AIGC, stringVal)); printf("AIGC key:%s\nvalue:%s\n", MediaDescriptionKey::MD_KEY_AIGC.data(), stringVal.c_str()); ASSERT_TRUE(AIGC_TEST_STR1 == stringVal); } /** * @tc.number : Demuxer_GetAIGCString_1200 * @tc.name : check AIGC info * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetAIGCString_1200, TestSize.Level0) { InitResource(g_aigcStrM4vPath, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; auto userformat = source_->GetSourceFormat(); ASSERT_TRUE(userformat->GetStringValue(MediaDescriptionKey::MD_KEY_AIGC, stringVal)); printf("AIGC key:%s\nvalue:%s\n", MediaDescriptionKey::MD_KEY_AIGC.data(), stringVal.c_str()); ASSERT_TRUE(AIGC_TEST_STR1 == stringVal); } /** * @tc.number : Demuxer_GetAIGCString_1300 * @tc.name : check AIGC info * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetAIGCString_1300, TestSize.Level0) { InitResource(g_aigcStrMovPath, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; auto userformat = source_->GetSourceFormat(); ASSERT_TRUE(userformat->GetStringValue(MediaDescriptionKey::MD_KEY_AIGC, stringVal)); printf("AIGC key:%s\nvalue:%s\n", MediaDescriptionKey::MD_KEY_AIGC.data(), stringVal.c_str()); ASSERT_TRUE(AIGC_TEST_STR1 == stringVal); } /** * @tc.number : Demuxer_GetAIGCString_1400 * @tc.name : check AIGC info * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetAIGCString_1400, TestSize.Level0) { InitResource(g_aigcStrFlvPath, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; auto userformat = source_->GetSourceFormat(); ASSERT_TRUE(userformat->GetStringValue(MediaDescriptionKey::MD_KEY_AIGC, stringVal)); printf("AIGC key:%s\nvalue:%s\n", MediaDescriptionKey::MD_KEY_AIGC.data(), stringVal.c_str()); ASSERT_TRUE(AIGC_TEST_STR2 == stringVal); } /** * @tc.number : Demuxer_GetAIGCString_1500 * @tc.name : check AIGC info * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetAIGCString_1500, TestSize.Level0) { InitResource(g_aigcStrMkvPath, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; auto userformat = source_->GetSourceFormat(); ASSERT_TRUE(userformat->GetStringValue(MediaDescriptionKey::MD_KEY_AIGC, stringVal)); printf("AIGC key:%s\nvalue:%s\n", MediaDescriptionKey::MD_KEY_AIGC.data(), stringVal.c_str()); ASSERT_TRUE(AIGC_TEST_STR2 == stringVal); } /** * @tc.number : Demuxer_GetAIGCString_1600 * @tc.name : check AIGC info * @tc.desc : function test */ HWTEST_F(DemuxerUnitTest, Demuxer_GetAIGCString_1600, TestSize.Level0) { InitResource(g_aigcStrAviPath, LOCAL); ASSERT_TRUE(initStatus_); std::string stringVal = ""; auto userformat = source_->GetSourceFormat(); ASSERT_TRUE(userformat->GetStringValue(MediaDescriptionKey::MD_KEY_AIGC, stringVal)); printf("AIGC key:%s\nvalue:%s\n", MediaDescriptionKey::MD_KEY_AIGC.data(), stringVal.c_str()); ASSERT_TRUE(AIGC_TEST_STR3 == stringVal); } } // namespace