/* * 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 "gtest/gtest.h" #include "native_avcodec_base.h" #include "native_avdemuxer.h" #include "native_avformat.h" #include "native_avsource.h" #include "native_avmemory.h" #include #include #include #include #include #include namespace OHOS { namespace Media { class DemuxerFuncNdkTest : public testing::Test { public: // SetUpTestCase: Called before all test cases static void SetUpTestCase(void); // TearDownTestCase: Called after all test case static void TearDownTestCase(void); // SetUp: Called before each test cases void SetUp(void); // TearDown: Called after each test cases void TearDown(void); }; static OH_AVMemory *memory = nullptr; static OH_AVSource *source = nullptr; static OH_AVErrCode ret = AV_ERR_OK; static OH_AVDemuxer *demuxer = nullptr; static OH_AVFormat *sourceFormat = nullptr; static OH_AVFormat *trackFormat = nullptr; static OH_AVBuffer *avBuffer = nullptr; static OH_AVFormat *format = nullptr; static int32_t g_trackCount; static int32_t g_width = 3840; static int32_t g_height = 2160; const std::string HEVC_LIB_PATH = std::string(AV_CODEC_PATH) + "/libav_codec_hevc_parser.z.so"; void DemuxerFuncNdkTest::SetUpTestCase() {} void DemuxerFuncNdkTest::TearDownTestCase() {} void DemuxerFuncNdkTest::SetUp() { memory = OH_AVMemory_Create(g_width * g_height); g_trackCount = 0; } void DemuxerFuncNdkTest::TearDown() { if (trackFormat != nullptr) { OH_AVFormat_Destroy(trackFormat); trackFormat = nullptr; } if (sourceFormat != nullptr) { OH_AVFormat_Destroy(sourceFormat); sourceFormat = nullptr; } if (format != nullptr) { OH_AVFormat_Destroy(format); format = nullptr; } if (memory != nullptr) { OH_AVMemory_Destroy(memory); memory = nullptr; } if (source != nullptr) { OH_AVSource_Destroy(source); source = nullptr; } if (demuxer != nullptr) { OH_AVDemuxer_Destroy(demuxer); demuxer = nullptr; } if (avBuffer != nullptr) { OH_AVBuffer_Destroy(avBuffer); avBuffer = nullptr; } } } // namespace Media } // namespace OHOS using namespace std; using namespace OHOS; using namespace OHOS::Media; using namespace testing::ext; static int64_t GetFileSize(const char *fileName) { int64_t fileSize = 0; if (fileName != nullptr) { struct stat fileStatus {}; if (stat(fileName, &fileStatus) == 0) { fileSize = static_cast(fileStatus.st_size); } } return fileSize; } static void SetAudioValue(OH_AVCodecBufferAttr attr, bool &audioIsEnd, int &audioFrame, int &aKeyCount) { if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { audioIsEnd = true; cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; } else { audioFrame++; if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { aKeyCount++; } } } static void SetVideoValue(OH_AVCodecBufferAttr attr, bool &videoIsEnd, int &videoFrame, int &vKeyCount) { if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { videoIsEnd = true; cout << videoFrame << " video is end !!!!!!!!!!!!!!!" << endl; } else { videoFrame++; cout << "video track !!!!!" << endl; if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { vKeyCount++; } } } static void SetVarValue(OH_AVCodecBufferAttr attr, const int &tarckType, bool &audioIsEnd, bool &videoIsEnd) { if (tarckType == MEDIA_TYPE_AUD && (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) { audioIsEnd = true; cout << "audio is end !!!!!!!!!!!!!!!" << endl; } if (tarckType == MEDIA_TYPE_VID && (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) { videoIsEnd = true; cout << "video is end !!!!!!!!!!!!!!!" << endl; } } static void SetFirstFrameFlag(bool &isFirstFrame) { if (isFirstFrame) { isFirstFrame = false; } } static void SetEndFlag(bool &audioIsEnd, bool &videoIsEnd) { audioIsEnd = true; videoIsEnd = true; } /** * @tc.number : DEMUXER_FUNCTION_0200 * @tc.name : create source with no permission URI * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0200, TestSize.Level0) { const char *uri = "http://10.174.172.228:8080/share/audio/AAC_48000_1.aac"; source = OH_AVSource_CreateWithURI(const_cast(uri)); ASSERT_EQ(nullptr, source); } /** * @tc.number : DEMUXER_FUNCTION_0300 * @tc.name : create source with invalid uri * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0300, TestSize.Level1) { const char *uri = "http://invalidPath/invalid.mp4"; source = OH_AVSource_CreateWithURI(const_cast(uri)); ASSERT_EQ(nullptr, source); } /** * @tc.number : DEMUXER_FUNCTION_0400 * @tc.name : create source with fd but no permission * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0400, TestSize.Level1) { const char *file = "/data/media/noPermission.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; cout << file << "------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_EQ(demuxer, nullptr); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_0500 * @tc.name : create source with invalid fd * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0500, TestSize.Level1) { const char *file = "/data/test/media/invalid.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_EQ(source, nullptr); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_0700 * @tc.name : create source with fd, mp4 * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0700, TestSize.Level0) { int tarckType = 0; OH_AVCodecBufferAttr attr; bool audioIsEnd = false; bool videoIsEnd = false; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int64_t starttime = 0; while (!audioIsEnd || !videoIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { trackFormat = OH_AVSource_GetTrackFormat(source, index); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetLongValue(trackFormat, OH_MD_KEY_TRACK_START_TIME, &starttime)); ASSERT_EQ(0, starttime); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); OH_AVFormat_Destroy(trackFormat); trackFormat = nullptr; if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) { continue; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); SetVarValue(attr, tarckType, audioIsEnd, videoIsEnd); } } close(fd); } /** * @tc.number : DEMUXER_FUNCTION_0800 * @tc.name : create source with fd,avcc mp4 * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0800, TestSize.Level0) { int tarckType = 0; OH_AVCodecBufferAttr attr; bool audioIsEnd = false; bool videoIsEnd = false; int audioFrame = 0; int videoFrame = 0; const char *file = "/data/test/media/avcc_10sec.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int aKeyCount = 0; int vKeyCount = 0; while (!audioIsEnd || !videoIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { trackFormat = OH_AVSource_GetTrackFormat(source, index); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); OH_AVFormat_Destroy(trackFormat); trackFormat = nullptr; if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) { continue; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (tarckType == MEDIA_TYPE_AUD) { SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); } else if (tarckType == MEDIA_TYPE_VID) { SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); } } } ASSERT_EQ(audioFrame, 431); ASSERT_EQ(videoFrame, 600); ASSERT_EQ(aKeyCount, 431); ASSERT_EQ(vKeyCount, 10); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_0900 * @tc.name : create source with fd,hvcc mp4 * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0900, TestSize.Level0) { int tarckType = 0; OH_AVCodecBufferAttr attr; bool audioIsEnd = false; bool videoIsEnd = false; int audioFrame = 0; int videoFrame = 0; const char *file = "/data/test/media/hvcc.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int aKeyCount = 0; int vKeyCount = 0; while (!audioIsEnd || !videoIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { trackFormat = OH_AVSource_GetTrackFormat(source, index); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); OH_AVFormat_Destroy(trackFormat); trackFormat = nullptr; if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) { continue; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (tarckType == MEDIA_TYPE_AUD) { SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); } else if (tarckType == MEDIA_TYPE_VID) { SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); } } } ASSERT_EQ(audioFrame, 433); ASSERT_EQ(videoFrame, 602); ASSERT_EQ(aKeyCount, 433); ASSERT_EQ(vKeyCount, 3); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_1000 * @tc.name : create source with fd,mpeg mp4 * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1000, TestSize.Level0) { int tarckType = 0; OH_AVCodecBufferAttr attr; bool audioIsEnd = false; bool videoIsEnd = false; int audioFrame = 0; int videoFrame = 0; const char *file = "/data/test/media/mpeg2.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int aKeyCount = 0; int vKeyCount = 0; while (!audioIsEnd || !videoIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { trackFormat = OH_AVSource_GetTrackFormat(source, index); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); OH_AVFormat_Destroy(trackFormat); trackFormat = nullptr; if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) { continue; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (tarckType == MEDIA_TYPE_AUD) { SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); } else if (tarckType == MEDIA_TYPE_VID) { SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); } } } ASSERT_EQ(audioFrame, 433); ASSERT_EQ(videoFrame, 303); ASSERT_EQ(aKeyCount, 433); ASSERT_EQ(vKeyCount, 26); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_1100 * @tc.name : demux m4a * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1100, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; int audioFrame = 0; const char *file = "/data/test/media/audio/M4A_48000_1.m4a"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(1, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int keyCount = 0; while (!audioIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { audioIsEnd = true; cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; continue; } audioFrame++; if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { keyCount++; } } } ASSERT_EQ(audioFrame, 10293); ASSERT_EQ(keyCount, 10293); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_1200 * @tc.name : demux aac * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1200, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; int audioFrame = 0; const char *file = "/data/test/media/audio/AAC_48000_1.aac"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(1, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int keyCount = 0; while (!audioIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { audioIsEnd = true; cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; continue; } audioFrame++; if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { keyCount++; } } } ASSERT_EQ(audioFrame, 9457); ASSERT_EQ(keyCount, 9457); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_1300 * @tc.name : demux mp3 * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1300, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; int audioFrame = 0; const char *file = "/data/test/media/audio/MP3_48000_1.mp3"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(1, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int keyCount = 0; while (!audioIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { audioIsEnd = true; cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; continue; } audioFrame++; if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { keyCount++; } } } ASSERT_EQ(audioFrame, 9150); ASSERT_EQ(keyCount, 9150); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_1400 * @tc.name : demux ogg * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1400, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; int audioFrame = 0; const char *file = "/data/test/media/audio/OGG_48000_1.ogg"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(1, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int keyCount = 0; while (!audioIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { audioIsEnd = true; cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; continue; } audioFrame++; if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { keyCount++; } } } ASSERT_EQ(audioFrame, 11439); ASSERT_EQ(keyCount, 11439); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_1500 * @tc.name : demux flac * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1500, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; int audioFrame = 0; const char *file = "/data/test/media/audio/FLAC_48000_1.flac"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(1, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int keyCount = 0; while (!audioIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { audioIsEnd = true; cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; continue; } audioFrame++; if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { keyCount++; } } } ASSERT_EQ(audioFrame, 2288); ASSERT_EQ(keyCount, 2288); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_1600 * @tc.name : demux wav * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1600, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; int audioFrame = 0; const char *file = "/data/test/media/audio/wav_48000_1.wav"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(1, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int keyCount = 0; while (!audioIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { audioIsEnd = true; cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; continue; } audioFrame++; if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { keyCount++; } } } ASSERT_EQ(audioFrame, 5146); ASSERT_EQ(keyCount, 5146); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_1700 * @tc.name : demux mpeg-ts * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1700, TestSize.Level0) { int tarckType = 0; OH_AVCodecBufferAttr attr; bool audioIsEnd = false; bool videoIsEnd = false; int audioFrame = 0; int videoFrame = 0; const char *file = "/data/test/media/ts_video.ts"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int vKeyCount = 0; int aKeyCount = 0; while (!audioIsEnd || !videoIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { trackFormat = OH_AVSource_GetTrackFormat(source, index); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); OH_AVFormat_Destroy(trackFormat); trackFormat = nullptr; if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) { continue; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (tarckType == MEDIA_TYPE_AUD) { SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); } else if (tarckType == MEDIA_TYPE_VID) { SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); } } } ASSERT_EQ(audioFrame, 384); ASSERT_EQ(aKeyCount, 384); ASSERT_EQ(videoFrame, 602); ASSERT_EQ(vKeyCount, 51); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_1800 * @tc.name : demux unsupported source * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1800, TestSize.Level2) { const char *file = "/data/test/media/mkv.mkv"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_1900 * @tc.name : demux mp4, zero track * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1900, TestSize.Level1) { const char *file = "/data/test/media/zero_track.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(g_trackCount, 0); ASSERT_EQ(AV_ERR_INVALID_VAL, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_2000 * @tc.name : OH_AVSource_CreateWithFD test * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2000, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; int audioFrame = 0; const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3"; int64_t size1 = GetFileSize(file1); const char *file = "/data/test/media/MP3_avcc_10sec.bin"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size1); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(1, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int keyCount = 0; while (!audioIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { audioIsEnd = true; cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; continue; } audioFrame++; if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { keyCount++; } } } ASSERT_EQ(audioFrame, 9150); ASSERT_EQ(keyCount, 9150); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_2100 * @tc.name : OH_AVSource_CreateWithFD test * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2100, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; bool videoIsEnd = false; int audioFrame = 0; int videoFrame = 0; const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3"; int64_t size1 = GetFileSize(file1); const char *file2 = "/data/test/media/avcc_10sec.mp4"; int64_t size2 = GetFileSize(file2); const char *file = "/data/test/media/MP3_avcc_10sec.bin"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, size1, size2); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int tarckType = 0; int aKeyCount = 0; int vKeyCount = 0; while (!audioIsEnd || !videoIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { trackFormat = OH_AVSource_GetTrackFormat(source, index); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); OH_AVFormat_Destroy(trackFormat); trackFormat = nullptr; if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) { continue; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (tarckType == MEDIA_TYPE_AUD) { SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); } else if (tarckType == MEDIA_TYPE_VID) { SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); } } } ASSERT_EQ(audioFrame, 431); ASSERT_EQ(videoFrame, 600); ASSERT_EQ(aKeyCount, 431); ASSERT_EQ(vKeyCount, 10); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_2200 * @tc.name : OH_AVSource_CreateWithFD test * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2200, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; int audioFrame = 0; const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3"; int64_t size1 = GetFileSize(file1); const char *file = "/data/test/media/MP3_OGG_48000_1.bin"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size1); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(1, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int keyCount = 0; while (!audioIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { audioIsEnd = true; cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; continue; } audioFrame++; if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { keyCount++; } } } ASSERT_EQ(audioFrame, 9150); ASSERT_EQ(keyCount, 9150); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_2300 * @tc.name : OH_AVSource_CreateWithFD test * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2300, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; int audioFrame = 0; const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3"; int64_t size1 = GetFileSize(file1); const char *file2 = "/data/test/media/audio/OGG_48000_1.ogg"; int64_t size2 = GetFileSize(file2); const char *file = "/data/test/media/MP3_OGG_48000_1.bin"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, size1, size2); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(1, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int keyCount = 0; while (!audioIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { audioIsEnd = true; cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; continue; } audioFrame++; if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { keyCount++; } } } ASSERT_EQ(audioFrame, 11439); ASSERT_EQ(keyCount, 11439); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_2400 * @tc.name : OH_AVSource_CreateWithFD test * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2400, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; bool videoIsEnd = false; int audioFrame = 0; int videoFrame = 0; const char *file1 = "/data/test/media/ts_video.ts"; int64_t size1 = GetFileSize(file1); const char *file = "/data/test/media/test_video_avcc_10sec.bin"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size1); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int tarckType = 0; int aKeyCount = 0; int vKeyCount = 0; while (!audioIsEnd || !videoIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { trackFormat = OH_AVSource_GetTrackFormat(source, index); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); OH_AVFormat_Destroy(trackFormat); trackFormat = nullptr; if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) { continue; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (tarckType == MEDIA_TYPE_AUD) { SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); } else if (tarckType == MEDIA_TYPE_VID) { SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); } } } ASSERT_EQ(audioFrame, 384); ASSERT_EQ(videoFrame, 602); ASSERT_EQ(aKeyCount, 384); ASSERT_EQ(vKeyCount, 51); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_3100 * @tc.name : seek to the start time, previous mode * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3100, TestSize.Level1) { uint32_t trackIndex = 0; OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; int count = 0; srand(time(nullptr)); int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); int pos = rand() % 250; int64_t startPts = 0; bool isFirstFrame = true; bool isEnd = false; sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); cout << g_trackCount << "####################" << endl; for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } while (!isEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (isFirstFrame) { startPts = attr.pts; isFirstFrame = false; } if (count == pos) { isEnd = true; cout << pos << " =====curr_pts = attr.pts" << endl; break; } if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { isEnd = true; cout << "is end!!!!!!!!" << endl; } count++; } cout << "count: " << count << endl; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, startPts / 1000, SEEK_MODE_PREVIOUS_SYNC)); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); ASSERT_EQ(attr.pts, startPts); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_3200 * @tc.name : seek to the start time, next mode * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3200, TestSize.Level1) { bool isEnd = false; uint32_t trackIndex = 0; OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; int count = 0; srand(time(nullptr)); int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); int pos = rand() % 250; int64_t startPts = 0; bool isFirstFrame = true; sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } while (!isEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (isFirstFrame) { startPts = attr.pts; isFirstFrame = false; } if (count == pos) { isEnd = true; cout << "curr_pts = attr.pts" << endl; break; } if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { isEnd = true; cout << "is end!!!!!!!!" << endl; } count++; } cout << "count: " << count << endl; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, startPts / 1000, SEEK_MODE_NEXT_SYNC)); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); ASSERT_EQ(attr.pts, startPts); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_3300 * @tc.name : seek to the start time, closest mode * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3300, TestSize.Level1) { bool isEnd = false; uint32_t trackIndex = 0; OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; int count = 0; srand(time(nullptr)); int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); int pos = rand() % 250; int64_t startPts = 0; bool isFirstFrame = true; sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } while (!isEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (isFirstFrame) { startPts = attr.pts; isFirstFrame = false; } if (count == pos) { isEnd = true; cout << "curr_pts = attr.pts" << endl; break; } if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { isEnd = true; cout << "is end!!!!!!!!" << endl; } count++; } cout << "count: " << count << endl; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, startPts / 1000, SEEK_MODE_CLOSEST_SYNC)); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); ASSERT_EQ(attr.pts, startPts); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_3400 * @tc.name : seek to the end time, previous mode * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3400, TestSize.Level1) { bool isEnd = false; uint32_t trackIndex = 1; OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; int count = 0; srand(time(nullptr)); int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); cout << g_trackCount << "####################" << endl; for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int64_t endPts = 0; while (!isEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (static_cast(index) != trackIndex) { continue; } if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { isEnd = true; cout << "is end!!!!!!!!" << endl; } else { endPts = attr.pts; } count++; } cout << "count: " << count << endl; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_PREVIOUS_SYNC)); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); ASSERT_EQ(attr.pts, endPts); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_3500 * @tc.name : seek to the end time, next mode * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3500, TestSize.Level1) { bool isEnd = false; uint32_t trackIndex = 1; OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; int count = 0; srand(time(nullptr)); int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); cout << g_trackCount << "####################" << endl; for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int64_t endPts = 0; while (!isEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (static_cast(index) != trackIndex) { continue; } if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { isEnd = true; cout << "is end!!!!!!!!" << endl; } else { endPts = attr.pts; } count++; } cout << "count: " << count << endl; } // end I ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_NEXT_SYNC)); endPts += 1000; ASSERT_EQ(AV_ERR_UNKNOWN, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_NEXT_SYNC)); endPts += 1000000; ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_NEXT_SYNC)); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_3600 * @tc.name : seek to the end time, closest mode * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3600, TestSize.Level1) { bool isEnd = false; uint32_t trackIndex = 1; OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; int count = 0; srand(time(nullptr)); int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); cout << g_trackCount << "####################" << endl; for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int64_t endPts = 0; while (!isEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (static_cast(index) != trackIndex) { continue; } if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { isEnd = true; cout << "is end!!!!!!!!" << endl; } else { endPts = attr.pts; } count++; } cout << "count: " << count << endl; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_CLOSEST_SYNC)); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); ASSERT_EQ(attr.pts, endPts); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_3700 * @tc.name : seek to a random time, previous mode * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3700, TestSize.Level0) { bool isFirstFrame = true; uint32_t trackIndex = 1; int count = 0; srand(time(nullptr)); int pos = rand() % 250; int posTo = rand() % 250; int64_t toMs = posTo * 40000; int tarckType = 0; OH_AVCodecBufferAttr attr; bool audioIsEnd = false; bool videoIsEnd = false; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); cout << file << "pos: " << pos << "toMs: " << toMs << " fd:" << fd << " size:" << GetFileSize(file) << endl; source = OH_AVSource_CreateWithFD(fd, 0, GetFileSize(file)); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } while (!audioIsEnd || !videoIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { trackFormat = OH_AVSource_GetTrackFormat(source, index); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); OH_AVFormat_Destroy(trackFormat); trackFormat = nullptr; if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) { continue; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); SetFirstFrameFlag(isFirstFrame); if (count == pos) { SetEndFlag(audioIsEnd, videoIsEnd); break; } SetVarValue(attr, tarckType, audioIsEnd, videoIsEnd); } count++; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, toMs / 1000, SEEK_MODE_PREVIOUS_SYNC)); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); bool ans = abs(toMs - attr.pts) < 40000 ? true : false; ASSERT_EQ(ans, true); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_3800 * @tc.name : seek to a random time, next mode * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3800, TestSize.Level0) { bool isEnd = false; bool isFirstFrame = true; uint32_t trackIndex = 1; OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; int count = 0; srand(time(nullptr)); int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int pos = rand() % 250; int posTo = rand() % 250; int64_t toMs = posTo * 40000; while (!isEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (isFirstFrame) { isFirstFrame = false; } if (count == pos) { isEnd = true; break; } if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { isEnd = true; } count++; } } int64_t nextIdrPts = toMs; ret = OH_AVDemuxer_SeekToTime(demuxer, toMs / 1000, SEEK_MODE_NEXT_SYNC); ASSERT_EQ(ret, AV_ERR_OK); ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); ASSERT_EQ(ret, AV_ERR_OK); bool ans = abs(nextIdrPts - attr.pts) < 40000 ? true : false; ASSERT_EQ(ans, true); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_3900 * @tc.name : seek to a random time, closest mode * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3900, TestSize.Level0) { bool isEnd = false; bool isFirstFrame = true; uint32_t trackIndex = 1; OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; int count = 0; srand(time(nullptr)); int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int pos = rand() % 250; int posTo = rand() % 250; int64_t toMs = posTo * 40000; while (!isEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (isFirstFrame) { isFirstFrame = false; } if (count == pos) { isEnd = true; cout << "curr_pts = attr.pts" << endl; break; } if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { isEnd = true; } count++; } } int64_t closestIdrPts = toMs; ret = OH_AVDemuxer_SeekToTime(demuxer, toMs / 1000, SEEK_MODE_CLOSEST_SYNC); ASSERT_EQ(ret, AV_ERR_OK); ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); ASSERT_EQ(ret, AV_ERR_OK); bool ans = abs(closestIdrPts - attr.pts) < 40000 ? true : false; ASSERT_EQ(ans, true); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_4000 * @tc.name : seek to a invalid time, closest mode * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4000, TestSize.Level2) { const char *file = "/data/test/media/01_video_audio.mp4"; srand(time(nullptr)); int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); ASSERT_NE(demuxer, nullptr); int64_t invalidPts = 12000 * 16666; ret = OH_AVDemuxer_SeekToTime(demuxer, invalidPts, SEEK_MODE_CLOSEST_SYNC); ASSERT_NE(ret, AV_ERR_OK); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_4100 * @tc.name : remove track before add track * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4100, TestSize.Level2) { const char *file = "/data/test/media/01_video_audio.mp4"; srand(time(nullptr)); int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); ret = OH_AVDemuxer_UnselectTrackByID(demuxer, 0); ASSERT_EQ(ret, AV_ERR_OK); ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); ASSERT_EQ(ret, AV_ERR_OK); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_4200 * @tc.name : remove all tracks after demux finish * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4200, TestSize.Level1) { OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; bool isEnd = false; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } while (!isEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { isEnd = true; cout << "is end !!!!!!!!!!!!!!!" << endl; } } } for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, index)); } int32_t memorySize = OH_AVMemory_GetSize(memory); ASSERT_NE(0, memorySize); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_4300 * @tc.name : remove all tracks before demux finish * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4300, TestSize.Level1) { OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; bool isEnd = false; int count = 0; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } srand(time(nullptr)); int pos = rand() % 250; cout << " pos= " << pos << endl; while (!isEnd) { for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (count == pos) { cout << count << " count == pos!!!!!!!!!" << endl; ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, 0)); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, 1)); ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); isEnd = true; break; } if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { isEnd = true; cout << "is end !!!!!!!!!!!!!!!" << endl; } if (index == MEDIA_TYPE_AUD) { count++; } } } close(fd); } /** * @tc.number : DEMUXER_FUNCTION_4400 * @tc.name : remove audio track before demux finish * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4400, TestSize.Level1) { OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; int audioCount = 0; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } srand(time(nullptr)); int pos = rand() % 250; cout << " pos= " << pos << endl; while (true) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 1, memory, &attr)); if (audioCount == pos) { cout << audioCount << " audioCount == pos remove audio track!!!!!!!!!" << endl; ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, 1)); ASSERT_NE(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 1, memory, &attr)); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); break; } audioCount++; } while (true) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { cout << "is end !!!!!!!!!!!!!!!" << endl; break; } } close(fd); } /** * @tc.number : DEMUXER_FUNCTION_4500 * @tc.name : start demux bufore add track * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4500, TestSize.Level2) { uint32_t trackIndex = 0; OH_AVCodecBufferAttr attr; const char *file = "/data/test/media/01_video_audio.mp4"; srand(time(nullptr)); int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); ASSERT_EQ(ret, AV_ERR_OPERATE_NOT_PERMIT); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_7000 * @tc.name : demuxer MP4 ,GetSourceFormat,OH_MD_KEY_TRACK_COUNT * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7000, TestSize.Level0) { OH_AVFormat *trackFormat2 = nullptr; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); cout << OH_AVFormat_DumpInfo(sourceFormat) << "sourceFormat" << endl; trackFormat = OH_AVSource_GetTrackFormat(source, 1); ASSERT_NE(trackFormat, nullptr); cout << OH_AVFormat_DumpInfo(trackFormat) << "trackformat1" << endl; trackFormat2 = OH_AVSource_GetTrackFormat(source, 0); cout << OH_AVFormat_DumpInfo(trackFormat2) << "trackformat0" << endl; OH_AVFormat_Destroy(trackFormat2); trackFormat2 = nullptr; close(fd); } /** * @tc.number : DEMUXER_FUNCTION_7100 * @tc.name : demuxer MP4 ,GetSourceFormat,OH_MD_KEY_TRACK_COUNT * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7100, TestSize.Level0) { const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(g_trackCount, 2); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_7200 * @tc.name : demuxer MP4 ,GetAudioTrackFormat,MD_KEY_AAC_IS_ADTS * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7200, TestSize.Level0) { const char *stringVal; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); trackFormat = OH_AVSource_GetTrackFormat(source, 0); ASSERT_NE(trackFormat, nullptr); ASSERT_FALSE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_AAC_IS_ADTS, &stringVal)); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_7300 * @tc.name : demuxer MP4 ,GetAudioTrackFormat ,MD_KEY_BITRATE * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7300, TestSize.Level0) { int64_t br = 0; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); trackFormat = OH_AVSource_GetTrackFormat(source, 0); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetLongValue(trackFormat, OH_MD_KEY_BITRATE, &br)); ASSERT_EQ(br, 319999); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_7400 * @tc.name : demuxer MP4 ,GetAudioTrackFormat,MD_KEY_CHANNEL_COUNT * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7400, TestSize.Level0) { int32_t cc = 0; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); trackFormat = OH_AVSource_GetTrackFormat(source, 0); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_AUD_CHANNEL_COUNT, &cc)); ASSERT_EQ(cc, 2); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_7500 * @tc.name : demuxer MP4 ,GetAudioTrackFormat,MD_KEY_SAMPLE_RATE * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7500, TestSize.Level0) { int32_t sr = 0; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); trackFormat = OH_AVSource_GetTrackFormat(source, 0); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_AUD_SAMPLE_RATE, &sr)); ASSERT_EQ(sr, 44100); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_7600 * @tc.name : demuxer MP4 ,GetVideoTrackFormat,MD_KEY_HEIGHT * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7600, TestSize.Level0) { int32_t height = 0; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); trackFormat = OH_AVSource_GetTrackFormat(source, 1); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_HEIGHT, &height)); ASSERT_EQ(height, 0); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_7700 * @tc.name : demuxer MP4 ,GetVideoTrackFormat,MD_KEY_WIDTH * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7700, TestSize.Level0) { int32_t weight = 0; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); trackFormat = OH_AVSource_GetTrackFormat(source, 1); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_WIDTH, &weight)); ASSERT_EQ(weight, 0); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_7800 * @tc.name : demuxer MP4 GetPublicTrackFormat,MD_KEY_CODEC_MIME * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7800, TestSize.Level0) { const char *stringVal; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); trackFormat = OH_AVSource_GetTrackFormat(source, 1); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &stringVal)); ASSERT_EQ(0, strcmp(stringVal, OH_AVCODEC_MIMETYPE_VIDEO_MPEG4)); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_7900 * @tc.name : demuxer MP4 ,GetPublicTrackFormat,MD_KEY_TRACK_TYPE * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7900, TestSize.Level0) { int32_t type = 0; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); trackFormat = OH_AVSource_GetTrackFormat(source, 0); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &type)); ASSERT_EQ(type, MEDIA_TYPE_AUD); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_8000 * @tc.name : demuxer MP4 ,check source format,OH_MD_KEY_TITLE * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8000, TestSize.Level0) { const char *stringVal; const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_TITLE, &stringVal)); ASSERT_EQ(0, strcmp(stringVal, "title")); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_8100 * @tc.name : demuxer MP4 ,check source format,OH_MD_KEY_ALBUM * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8100, TestSize.Level0) { const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); const char *stringVal; ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_ALBUM, &stringVal)); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_8200 * @tc.name : demuxer MP4 ,check source format,OH_MD_KEY_ALBUM_ARTIST * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8200, TestSize.Level0) { const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); const char *stringVal; ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_ALBUM_ARTIST, &stringVal)); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_8300 * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_DATE * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8300, TestSize.Level0) { const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); const char *stringVal; ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_DATE, &stringVal)); ASSERT_EQ(0, strcmp(stringVal, "2023")); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_8400 * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_COMMENT * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8400, TestSize.Level0) { const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); const char *stringVal; ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_COMMENT, &stringVal)); ASSERT_EQ(0, strcmp(stringVal, "COMMENT")); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_8500 * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_GENRE * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8500, TestSize.Level0) { const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); const char *stringVal; ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_GENRE, &stringVal)); ASSERT_EQ(0, strcmp(stringVal, "Classical")); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_8600 * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_COPYRIGHT * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8600, TestSize.Level0) { const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); const char *stringVal; ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_COPYRIGHT, &stringVal)); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_8700 * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_LANGUAGE * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8700, TestSize.Level0) { const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); const char *stringVal; ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_LANGUAGE, &stringVal)); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_8800 * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_DESCRIPTION * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8800, TestSize.Level0) { const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); const char *stringVal; ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_DESCRIPTION, &stringVal)); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_8800 * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_LYRICS * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8900, TestSize.Level0) { const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); const char *stringVal; ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_LYRICS, &stringVal)); close(fd); } /** * @tc.number : DEMUXER_FUNCTION_9000 * @tc.name : demuxer MP4 ,check source format,OH_MD_KEY_ARTIST * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_9000, TestSize.Level0) { const char *file = "/data/test/media/01_video_audio.mp4"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_NE(sourceFormat, nullptr); const char *stringVal; ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_ARTIST, &stringVal)); ASSERT_EQ(0, strcmp(stringVal, "sam")); close(fd); } /** * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_0200 * @tc.name : demuxer video amr nb * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_0200, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; int audioFrame = 0; const char *file = "/data/test/media/audio/amr_nb_8000_1.amr"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(1, g_trackCount); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); int aKeyCount = 0; while (!audioIsEnd) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); } cout << file << "audioFrame " << audioFrame << " aKeyCount " << aKeyCount << endl; ASSERT_EQ(audioFrame, 1501); ASSERT_EQ(aKeyCount, 1501); close(fd); } /** * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_0300 * @tc.name : demuxer video amr wb * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_0300, TestSize.Level0) { OH_AVCodecBufferAttr attr; bool audioIsEnd = false; int audioFrame = 0; const char *file = "/data/test/media/audio/amr_wb_16000_1.amr"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(1, g_trackCount); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); int aKeyCount = 0; while (!audioIsEnd) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); } cout << file << "audioFrame " << audioFrame << " aKeyCount " << aKeyCount << endl; ASSERT_EQ(audioFrame, 1500); ASSERT_EQ(aKeyCount, 1500); close(fd); } /** * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_1000 * @tc.name : demuxer amr_nb format * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1000, TestSize.Level2) { const char *file = "/data/test/media/audio/amr_nb_8000_1.amr"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); trackFormat = OH_AVSource_GetTrackFormat(source, 0); ASSERT_NE(trackFormat, nullptr); const char *codecMime = ""; ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &codecMime)); cout << "codecMime" << codecMime << endl; ASSERT_EQ(0, strcmp(codecMime, OH_AVCODEC_MIMETYPE_AUDIO_AMR_NB)); close(fd); } /** * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_1100 * @tc.name : demuxer amr_wb format * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1100, TestSize.Level2) { const char *file = "/data/test/media/audio/amr_wb_16000_1.amr"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); trackFormat = OH_AVSource_GetTrackFormat(source, 0); ASSERT_NE(trackFormat, nullptr); const char *codecMime = ""; ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &codecMime)); cout << "codecMime" << codecMime << endl; ASSERT_EQ(0, strcmp(codecMime, OH_AVCODEC_MIMETYPE_AUDIO_AMR_WB)); close(fd); } /** * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_1200 * @tc.name : demux hevc ts video and audio * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1200, TestSize.Level0) { if (access(HEVC_LIB_PATH.c_str(), F_OK) != 0) { return; } int tarckType = 0; OH_AVCodecBufferAttr attr; bool audioIsEnd = false; bool videoIsEnd = false; int audioFrame = 0; int videoFrame = 0; const char *file = "/data/test/media/hevc_v_a.ts"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); sourceFormat = OH_AVSource_GetSourceFormat(source); ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); ASSERT_EQ(2, g_trackCount); for (int32_t index = 0; index < g_trackCount; index++) { ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); } int vKeyCount = 0; int aKeyCount = 0; while (!audioIsEnd || !videoIsEnd) { for (int32_t index = 0; index < g_trackCount; index++) { trackFormat = OH_AVSource_GetTrackFormat(source, index); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); OH_AVFormat_Destroy(trackFormat); trackFormat = nullptr; if ((audioIsEnd && (tarckType == MEDIA_TYPE_AUD)) || (videoIsEnd && (tarckType == MEDIA_TYPE_VID))) { continue; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); if (tarckType == MEDIA_TYPE_AUD) { SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); } else if (tarckType == MEDIA_TYPE_VID) { SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); } } } ASSERT_EQ(audioFrame, 384); ASSERT_EQ(aKeyCount, 384); ASSERT_EQ(videoFrame, 602); ASSERT_EQ(vKeyCount, 3); close(fd); } /** * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_1300 * @tc.name : demux hevc ts video * @tc.desc : function test */ HWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1300, TestSize.Level0) { if (access(HEVC_LIB_PATH.c_str(), F_OK) != 0) { return; } int tarckType = 0; OH_AVCodecBufferAttr attr; bool videoIsEnd = false; int videoFrame = 0; const char *file = "/data/test/media/hevc_v.ts"; int fd = open(file, O_RDONLY); int64_t size = GetFileSize(file); cout << file << "----------------------" << fd << "---------" << size << endl; source = OH_AVSource_CreateWithFD(fd, 0, size); ASSERT_NE(source, nullptr); demuxer = OH_AVDemuxer_CreateWithSource(source); ASSERT_NE(demuxer, nullptr); ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); int vKeyCount = 0; while (!videoIsEnd) { trackFormat = OH_AVSource_GetTrackFormat(source, 0); ASSERT_NE(trackFormat, nullptr); ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); OH_AVFormat_Destroy(trackFormat); trackFormat = nullptr; if (videoIsEnd && (tarckType == MEDIA_TYPE_VID)) { continue; } ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); } ASSERT_EQ(videoFrame, 602); ASSERT_EQ(vKeyCount, 3); close(fd); }