1f6603c60Sopenharmony_ci/* 2f6603c60Sopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd. 3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License. 5f6603c60Sopenharmony_ci * You may obtain a copy of the License at 6f6603c60Sopenharmony_ci * 7f6603c60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f6603c60Sopenharmony_ci * 9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and 13f6603c60Sopenharmony_ci * limitations under the License. 14f6603c60Sopenharmony_ci */ 15f6603c60Sopenharmony_ci 16f6603c60Sopenharmony_ci#include "gtest/gtest.h" 17f6603c60Sopenharmony_ci 18f6603c60Sopenharmony_ci#include "native_avcodec_base.h" 19f6603c60Sopenharmony_ci#include "native_avdemuxer.h" 20f6603c60Sopenharmony_ci#include "native_avformat.h" 21f6603c60Sopenharmony_ci#include "native_avsource.h" 22f6603c60Sopenharmony_ci#include "native_avmemory.h" 23f6603c60Sopenharmony_ci 24f6603c60Sopenharmony_ci#include <iostream> 25f6603c60Sopenharmony_ci#include <cstdio> 26f6603c60Sopenharmony_ci#include <string> 27f6603c60Sopenharmony_ci#include <fcntl.h> 28f6603c60Sopenharmony_ci#include <cmath> 29f6603c60Sopenharmony_ci#include <thread> 30f6603c60Sopenharmony_cinamespace OHOS { 31f6603c60Sopenharmony_cinamespace Media { 32f6603c60Sopenharmony_ciclass DemuxerFuncNdkTest : public testing::Test { 33f6603c60Sopenharmony_cipublic: 34f6603c60Sopenharmony_ci // SetUpTestCase: Called before all test cases 35f6603c60Sopenharmony_ci static void SetUpTestCase(void); 36f6603c60Sopenharmony_ci // TearDownTestCase: Called after all test case 37f6603c60Sopenharmony_ci static void TearDownTestCase(void); 38f6603c60Sopenharmony_ci // SetUp: Called before each test cases 39f6603c60Sopenharmony_ci void SetUp(void); 40f6603c60Sopenharmony_ci // TearDown: Called after each test cases 41f6603c60Sopenharmony_ci void TearDown(void); 42f6603c60Sopenharmony_ci}; 43f6603c60Sopenharmony_ci 44f6603c60Sopenharmony_cistatic OH_AVMemory *memory = nullptr; 45f6603c60Sopenharmony_cistatic OH_AVSource *source = nullptr; 46f6603c60Sopenharmony_cistatic OH_AVErrCode ret = AV_ERR_OK; 47f6603c60Sopenharmony_cistatic OH_AVDemuxer *demuxer = nullptr; 48f6603c60Sopenharmony_cistatic OH_AVFormat *sourceFormat = nullptr; 49f6603c60Sopenharmony_cistatic OH_AVFormat *trackFormat = nullptr; 50f6603c60Sopenharmony_cistatic int32_t g_trackCount; 51f6603c60Sopenharmony_cistatic int32_t g_width = 3840; 52f6603c60Sopenharmony_cistatic int32_t g_height = 2160; 53f6603c60Sopenharmony_ciconst std::string HEVC_LIB_PATH = std::string(AV_CODEC_PATH) + "/libav_codec_hevc_parser.z.so"; 54f6603c60Sopenharmony_ci 55f6603c60Sopenharmony_civoid DemuxerFuncNdkTest::SetUpTestCase() {} 56f6603c60Sopenharmony_civoid DemuxerFuncNdkTest::TearDownTestCase() {} 57f6603c60Sopenharmony_civoid DemuxerFuncNdkTest::SetUp() 58f6603c60Sopenharmony_ci{ 59f6603c60Sopenharmony_ci memory = OH_AVMemory_Create(g_width * g_height); 60f6603c60Sopenharmony_ci g_trackCount = 0; 61f6603c60Sopenharmony_ci} 62f6603c60Sopenharmony_civoid DemuxerFuncNdkTest::TearDown() 63f6603c60Sopenharmony_ci{ 64f6603c60Sopenharmony_ci if (trackFormat != nullptr) { 65f6603c60Sopenharmony_ci OH_AVFormat_Destroy(trackFormat); 66f6603c60Sopenharmony_ci trackFormat = nullptr; 67f6603c60Sopenharmony_ci } 68f6603c60Sopenharmony_ci 69f6603c60Sopenharmony_ci if (sourceFormat != nullptr) { 70f6603c60Sopenharmony_ci OH_AVFormat_Destroy(sourceFormat); 71f6603c60Sopenharmony_ci sourceFormat = nullptr; 72f6603c60Sopenharmony_ci } 73f6603c60Sopenharmony_ci 74f6603c60Sopenharmony_ci if (memory != nullptr) { 75f6603c60Sopenharmony_ci OH_AVMemory_Destroy(memory); 76f6603c60Sopenharmony_ci memory = nullptr; 77f6603c60Sopenharmony_ci } 78f6603c60Sopenharmony_ci if (source != nullptr) { 79f6603c60Sopenharmony_ci OH_AVSource_Destroy(source); 80f6603c60Sopenharmony_ci source = nullptr; 81f6603c60Sopenharmony_ci } 82f6603c60Sopenharmony_ci if (demuxer != nullptr) { 83f6603c60Sopenharmony_ci OH_AVDemuxer_Destroy(demuxer); 84f6603c60Sopenharmony_ci demuxer = nullptr; 85f6603c60Sopenharmony_ci } 86f6603c60Sopenharmony_ci} 87f6603c60Sopenharmony_ci} // namespace Media 88f6603c60Sopenharmony_ci} // namespace OHOS 89f6603c60Sopenharmony_ci 90f6603c60Sopenharmony_ciusing namespace std; 91f6603c60Sopenharmony_ciusing namespace OHOS; 92f6603c60Sopenharmony_ciusing namespace OHOS::Media; 93f6603c60Sopenharmony_ciusing namespace testing::ext; 94f6603c60Sopenharmony_ci 95f6603c60Sopenharmony_cistatic int64_t GetFileSize(const char *fileName) 96f6603c60Sopenharmony_ci{ 97f6603c60Sopenharmony_ci int64_t fileSize = 0; 98f6603c60Sopenharmony_ci if (fileName != nullptr) { 99f6603c60Sopenharmony_ci struct stat fileStatus {}; 100f6603c60Sopenharmony_ci if (stat(fileName, &fileStatus) == 0) { 101f6603c60Sopenharmony_ci fileSize = static_cast<int64_t>(fileStatus.st_size); 102f6603c60Sopenharmony_ci } 103f6603c60Sopenharmony_ci } 104f6603c60Sopenharmony_ci return fileSize; 105f6603c60Sopenharmony_ci} 106f6603c60Sopenharmony_ci 107f6603c60Sopenharmony_cistatic void SetAudioValue(OH_AVCodecBufferAttr attr, bool &audioIsEnd, int &audioFrame, int &aKeyCount) 108f6603c60Sopenharmony_ci{ 109f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 110f6603c60Sopenharmony_ci audioIsEnd = true; 111f6603c60Sopenharmony_ci cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; 112f6603c60Sopenharmony_ci } else { 113f6603c60Sopenharmony_ci audioFrame++; 114f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 115f6603c60Sopenharmony_ci aKeyCount++; 116f6603c60Sopenharmony_ci } 117f6603c60Sopenharmony_ci } 118f6603c60Sopenharmony_ci} 119f6603c60Sopenharmony_ci 120f6603c60Sopenharmony_cistatic void SetVideoValue(OH_AVCodecBufferAttr attr, bool &videoIsEnd, int &videoFrame, int &vKeyCount) 121f6603c60Sopenharmony_ci{ 122f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 123f6603c60Sopenharmony_ci videoIsEnd = true; 124f6603c60Sopenharmony_ci cout << videoFrame << " video is end !!!!!!!!!!!!!!!" << endl; 125f6603c60Sopenharmony_ci } else { 126f6603c60Sopenharmony_ci videoFrame++; 127f6603c60Sopenharmony_ci cout << "video track !!!!!" << endl; 128f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 129f6603c60Sopenharmony_ci vKeyCount++; 130f6603c60Sopenharmony_ci } 131f6603c60Sopenharmony_ci } 132f6603c60Sopenharmony_ci} 133f6603c60Sopenharmony_ci 134f6603c60Sopenharmony_cistatic void SetVarValue(OH_AVCodecBufferAttr attr, const int &tarckType, bool &audioIsEnd, bool &videoIsEnd) 135f6603c60Sopenharmony_ci{ 136f6603c60Sopenharmony_ci if (tarckType == 0 && (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) { 137f6603c60Sopenharmony_ci audioIsEnd = true; 138f6603c60Sopenharmony_ci cout << "audio is end !!!!!!!!!!!!!!!" << endl; 139f6603c60Sopenharmony_ci } 140f6603c60Sopenharmony_ci 141f6603c60Sopenharmony_ci if (tarckType == 1 && (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS)) { 142f6603c60Sopenharmony_ci videoIsEnd = true; 143f6603c60Sopenharmony_ci cout << "video is end !!!!!!!!!!!!!!!" << endl; 144f6603c60Sopenharmony_ci } 145f6603c60Sopenharmony_ci} 146f6603c60Sopenharmony_ci 147f6603c60Sopenharmony_cistatic void SetFirstFrameFlag(bool &isFirstFrame) 148f6603c60Sopenharmony_ci{ 149f6603c60Sopenharmony_ci if (isFirstFrame) { 150f6603c60Sopenharmony_ci isFirstFrame = false; 151f6603c60Sopenharmony_ci } 152f6603c60Sopenharmony_ci} 153f6603c60Sopenharmony_ci 154f6603c60Sopenharmony_cistatic void SetEndFlag(bool &audioIsEnd, bool &videoIsEnd) 155f6603c60Sopenharmony_ci{ 156f6603c60Sopenharmony_ci audioIsEnd = true; 157f6603c60Sopenharmony_ci videoIsEnd = true; 158f6603c60Sopenharmony_ci} 159f6603c60Sopenharmony_ci 160f6603c60Sopenharmony_ci/** 161f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_0200 162f6603c60Sopenharmony_ci * @tc.name : create source with no permission URI 163f6603c60Sopenharmony_ci * @tc.desc : function test 164f6603c60Sopenharmony_ci */ 165f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0200, TestSize.Level0) 166f6603c60Sopenharmony_ci{ 167f6603c60Sopenharmony_ci const char *uri = "http://10.174.172.228:8080/share/audio/AAC_48000_1.aac"; 168f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 169f6603c60Sopenharmony_ci ASSERT_EQ(nullptr, source); 170f6603c60Sopenharmony_ci} 171f6603c60Sopenharmony_ci 172f6603c60Sopenharmony_ci/** 173f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_0300 174f6603c60Sopenharmony_ci * @tc.name : create source with invalid uri 175f6603c60Sopenharmony_ci * @tc.desc : function test 176f6603c60Sopenharmony_ci */ 177f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0300, TestSize.Level1) 178f6603c60Sopenharmony_ci{ 179f6603c60Sopenharmony_ci const char *uri = "http://invalidPath/invalid.mp4"; 180f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithURI(const_cast<char *>(uri)); 181f6603c60Sopenharmony_ci ASSERT_EQ(nullptr, source); 182f6603c60Sopenharmony_ci} 183f6603c60Sopenharmony_ci 184f6603c60Sopenharmony_ci/** 185f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_0400 186f6603c60Sopenharmony_ci * @tc.name : create source with fd but no permission 187f6603c60Sopenharmony_ci * @tc.desc : function test 188f6603c60Sopenharmony_ci */ 189f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0400, TestSize.Level1) 190f6603c60Sopenharmony_ci{ 191f6603c60Sopenharmony_ci const char *file = "/data/media/noPermission.mp4"; 192f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 193f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 194f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 195f6603c60Sopenharmony_ci cout << file << "------" << size << endl; 196f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 197f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 198f6603c60Sopenharmony_ci ASSERT_EQ(demuxer, nullptr); 199f6603c60Sopenharmony_ci 200f6603c60Sopenharmony_ci close(fd); 201f6603c60Sopenharmony_ci} 202f6603c60Sopenharmony_ci 203f6603c60Sopenharmony_ci/** 204f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_0500 205f6603c60Sopenharmony_ci * @tc.name : create source with invalid fd 206f6603c60Sopenharmony_ci * @tc.desc : function test 207f6603c60Sopenharmony_ci */ 208f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0500, TestSize.Level1) 209f6603c60Sopenharmony_ci{ 210f6603c60Sopenharmony_ci const char *file = "/data/test/media/invalid.mp4"; 211f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 212f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 213f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 214f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 215f6603c60Sopenharmony_ci ASSERT_EQ(source, nullptr); 216f6603c60Sopenharmony_ci close(fd); 217f6603c60Sopenharmony_ci} 218f6603c60Sopenharmony_ci 219f6603c60Sopenharmony_ci/** 220f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_0700 221f6603c60Sopenharmony_ci * @tc.name : create source with fd, mp4 222f6603c60Sopenharmony_ci * @tc.desc : function test 223f6603c60Sopenharmony_ci */ 224f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0700, TestSize.Level0) 225f6603c60Sopenharmony_ci{ 226f6603c60Sopenharmony_ci int tarckType = 0; 227f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 228f6603c60Sopenharmony_ci bool audioIsEnd = false; 229f6603c60Sopenharmony_ci bool videoIsEnd = false; 230f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 231f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 232f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 233f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 234f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 235f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 236f6603c60Sopenharmony_ci 237f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 238f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 239f6603c60Sopenharmony_ci 240f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 241f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 242f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 243f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 244f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 245f6603c60Sopenharmony_ci } 246f6603c60Sopenharmony_ci 247f6603c60Sopenharmony_ci while (!audioIsEnd || !videoIsEnd) { 248f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 249f6603c60Sopenharmony_ci 250f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, index); 251f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 252f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 253f6603c60Sopenharmony_ci 254f6603c60Sopenharmony_ci if ((audioIsEnd && (tarckType == 0)) || (videoIsEnd && (tarckType == 1))) { 255f6603c60Sopenharmony_ci continue; 256f6603c60Sopenharmony_ci } 257f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 258f6603c60Sopenharmony_ci 259f6603c60Sopenharmony_ci SetVarValue(attr, tarckType, audioIsEnd, videoIsEnd); 260f6603c60Sopenharmony_ci } 261f6603c60Sopenharmony_ci } 262f6603c60Sopenharmony_ci close(fd); 263f6603c60Sopenharmony_ci} 264f6603c60Sopenharmony_ci 265f6603c60Sopenharmony_ci/** 266f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_0800 267f6603c60Sopenharmony_ci * @tc.name : create source with fd,avcc mp4 268f6603c60Sopenharmony_ci * @tc.desc : function test 269f6603c60Sopenharmony_ci */ 270f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0800, TestSize.Level0) 271f6603c60Sopenharmony_ci{ 272f6603c60Sopenharmony_ci int tarckType = 0; 273f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 274f6603c60Sopenharmony_ci bool audioIsEnd = false; 275f6603c60Sopenharmony_ci bool videoIsEnd = false; 276f6603c60Sopenharmony_ci int audioFrame = 0; 277f6603c60Sopenharmony_ci int videoFrame = 0; 278f6603c60Sopenharmony_ci const char *file = "/data/test/media/avcc_10sec.mp4"; 279f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 280f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 281f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 282f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 283f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 284f6603c60Sopenharmony_ci 285f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 286f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 287f6603c60Sopenharmony_ci 288f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 289f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 290f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 291f6603c60Sopenharmony_ci 292f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 293f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 294f6603c60Sopenharmony_ci } 295f6603c60Sopenharmony_ci 296f6603c60Sopenharmony_ci int aKeyCount = 0; 297f6603c60Sopenharmony_ci int vKeyCount = 0; 298f6603c60Sopenharmony_ci while (!audioIsEnd || !videoIsEnd) { 299f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 300f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, index); 301f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 302f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 303f6603c60Sopenharmony_ci 304f6603c60Sopenharmony_ci if ((audioIsEnd && (tarckType == 0)) || (videoIsEnd && (tarckType == 1))) { 305f6603c60Sopenharmony_ci continue; 306f6603c60Sopenharmony_ci } 307f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 308f6603c60Sopenharmony_ci 309f6603c60Sopenharmony_ci if (tarckType == 0) { 310f6603c60Sopenharmony_ci SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); 311f6603c60Sopenharmony_ci } else if (tarckType == 1) { 312f6603c60Sopenharmony_ci SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); 313f6603c60Sopenharmony_ci } 314f6603c60Sopenharmony_ci } 315f6603c60Sopenharmony_ci } 316f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 431); 317f6603c60Sopenharmony_ci ASSERT_EQ(videoFrame, 600); 318f6603c60Sopenharmony_ci ASSERT_EQ(aKeyCount, 431); 319f6603c60Sopenharmony_ci ASSERT_EQ(vKeyCount, 10); 320f6603c60Sopenharmony_ci close(fd); 321f6603c60Sopenharmony_ci} 322f6603c60Sopenharmony_ci 323f6603c60Sopenharmony_ci/** 324f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_0900 325f6603c60Sopenharmony_ci * @tc.name : create source with fd,hvcc mp4 326f6603c60Sopenharmony_ci * @tc.desc : function test 327f6603c60Sopenharmony_ci */ 328f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_0900, TestSize.Level0) 329f6603c60Sopenharmony_ci{ 330f6603c60Sopenharmony_ci int tarckType = 0; 331f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 332f6603c60Sopenharmony_ci bool audioIsEnd = false; 333f6603c60Sopenharmony_ci bool videoIsEnd = false; 334f6603c60Sopenharmony_ci int audioFrame = 0; 335f6603c60Sopenharmony_ci int videoFrame = 0; 336f6603c60Sopenharmony_ci const char *file = "/data/test/media/hvcc.mp4"; 337f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 338f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 339f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 340f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 341f6603c60Sopenharmony_ci 342f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 343f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 344f6603c60Sopenharmony_ci 345f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 346f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 347f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 348f6603c60Sopenharmony_ci 349f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 350f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 351f6603c60Sopenharmony_ci } 352f6603c60Sopenharmony_ci 353f6603c60Sopenharmony_ci int aKeyCount = 0; 354f6603c60Sopenharmony_ci int vKeyCount = 0; 355f6603c60Sopenharmony_ci while (!audioIsEnd || !videoIsEnd) { 356f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 357f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, index); 358f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 359f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 360f6603c60Sopenharmony_ci 361f6603c60Sopenharmony_ci if ((audioIsEnd && (tarckType == 0)) || (videoIsEnd && (tarckType == 1))) { 362f6603c60Sopenharmony_ci continue; 363f6603c60Sopenharmony_ci } 364f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 365f6603c60Sopenharmony_ci 366f6603c60Sopenharmony_ci if (tarckType == 0) { 367f6603c60Sopenharmony_ci SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); 368f6603c60Sopenharmony_ci } else if (tarckType == 1) { 369f6603c60Sopenharmony_ci SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); 370f6603c60Sopenharmony_ci } 371f6603c60Sopenharmony_ci } 372f6603c60Sopenharmony_ci } 373f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 433); 374f6603c60Sopenharmony_ci ASSERT_EQ(videoFrame, 602); 375f6603c60Sopenharmony_ci ASSERT_EQ(aKeyCount, 433); 376f6603c60Sopenharmony_ci ASSERT_EQ(vKeyCount, 3); 377f6603c60Sopenharmony_ci close(fd); 378f6603c60Sopenharmony_ci} 379f6603c60Sopenharmony_ci 380f6603c60Sopenharmony_ci/** 381f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_1000 382f6603c60Sopenharmony_ci * @tc.name : create source with fd,mpeg mp4 383f6603c60Sopenharmony_ci * @tc.desc : function test 384f6603c60Sopenharmony_ci */ 385f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1000, TestSize.Level0) 386f6603c60Sopenharmony_ci{ 387f6603c60Sopenharmony_ci int tarckType = 0; 388f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 389f6603c60Sopenharmony_ci bool audioIsEnd = false; 390f6603c60Sopenharmony_ci bool videoIsEnd = false; 391f6603c60Sopenharmony_ci int audioFrame = 0; 392f6603c60Sopenharmony_ci int videoFrame = 0; 393f6603c60Sopenharmony_ci const char *file = "/data/test/media/mpeg2.mp4"; 394f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 395f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 396f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 397f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 398f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 399f6603c60Sopenharmony_ci 400f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 401f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 402f6603c60Sopenharmony_ci 403f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 404f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 405f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 406f6603c60Sopenharmony_ci 407f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 408f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 409f6603c60Sopenharmony_ci } 410f6603c60Sopenharmony_ci 411f6603c60Sopenharmony_ci int aKeyCount = 0; 412f6603c60Sopenharmony_ci int vKeyCount = 0; 413f6603c60Sopenharmony_ci while (!audioIsEnd || !videoIsEnd) { 414f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 415f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, index); 416f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 417f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 418f6603c60Sopenharmony_ci 419f6603c60Sopenharmony_ci if ((audioIsEnd && (tarckType == 0)) || (videoIsEnd && (tarckType == 1))) { 420f6603c60Sopenharmony_ci continue; 421f6603c60Sopenharmony_ci } 422f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 423f6603c60Sopenharmony_ci 424f6603c60Sopenharmony_ci if (tarckType == 0) { 425f6603c60Sopenharmony_ci SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); 426f6603c60Sopenharmony_ci } else if (tarckType == 1) { 427f6603c60Sopenharmony_ci SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); 428f6603c60Sopenharmony_ci } 429f6603c60Sopenharmony_ci } 430f6603c60Sopenharmony_ci } 431f6603c60Sopenharmony_ci 432f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 433); 433f6603c60Sopenharmony_ci ASSERT_EQ(videoFrame, 303); 434f6603c60Sopenharmony_ci ASSERT_EQ(aKeyCount, 433); 435f6603c60Sopenharmony_ci ASSERT_EQ(vKeyCount, 26); 436f6603c60Sopenharmony_ci close(fd); 437f6603c60Sopenharmony_ci} 438f6603c60Sopenharmony_ci 439f6603c60Sopenharmony_ci/** 440f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_1100 441f6603c60Sopenharmony_ci * @tc.name : demux m4a 442f6603c60Sopenharmony_ci * @tc.desc : function test 443f6603c60Sopenharmony_ci */ 444f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1100, TestSize.Level0) 445f6603c60Sopenharmony_ci{ 446f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 447f6603c60Sopenharmony_ci bool audioIsEnd = false; 448f6603c60Sopenharmony_ci int audioFrame = 0; 449f6603c60Sopenharmony_ci 450f6603c60Sopenharmony_ci const char *file = "/data/test/media/audio/M4A_48000_1.m4a"; 451f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 452f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 453f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 454f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 455f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 456f6603c60Sopenharmony_ci 457f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 458f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 459f6603c60Sopenharmony_ci 460f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 461f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 462f6603c60Sopenharmony_ci ASSERT_EQ(1, g_trackCount); 463f6603c60Sopenharmony_ci 464f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 465f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 466f6603c60Sopenharmony_ci } 467f6603c60Sopenharmony_ci 468f6603c60Sopenharmony_ci int keyCount = 0; 469f6603c60Sopenharmony_ci while (!audioIsEnd) { 470f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 471f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 472f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 473f6603c60Sopenharmony_ci audioIsEnd = true; 474f6603c60Sopenharmony_ci cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; 475f6603c60Sopenharmony_ci continue; 476f6603c60Sopenharmony_ci } 477f6603c60Sopenharmony_ci 478f6603c60Sopenharmony_ci audioFrame++; 479f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 480f6603c60Sopenharmony_ci keyCount++; 481f6603c60Sopenharmony_ci } 482f6603c60Sopenharmony_ci } 483f6603c60Sopenharmony_ci } 484f6603c60Sopenharmony_ci 485f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 10293); 486f6603c60Sopenharmony_ci ASSERT_EQ(keyCount, 10293); 487f6603c60Sopenharmony_ci close(fd); 488f6603c60Sopenharmony_ci} 489f6603c60Sopenharmony_ci 490f6603c60Sopenharmony_ci/** 491f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_1200 492f6603c60Sopenharmony_ci * @tc.name : demux aac 493f6603c60Sopenharmony_ci * @tc.desc : function test 494f6603c60Sopenharmony_ci */ 495f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1200, TestSize.Level0) 496f6603c60Sopenharmony_ci{ 497f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 498f6603c60Sopenharmony_ci bool audioIsEnd = false; 499f6603c60Sopenharmony_ci int audioFrame = 0; 500f6603c60Sopenharmony_ci 501f6603c60Sopenharmony_ci const char *file = "/data/test/media/audio/AAC_48000_1.aac"; 502f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 503f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 504f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 505f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 506f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 507f6603c60Sopenharmony_ci 508f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 509f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 510f6603c60Sopenharmony_ci 511f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 512f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 513f6603c60Sopenharmony_ci ASSERT_EQ(1, g_trackCount); 514f6603c60Sopenharmony_ci 515f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 516f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 517f6603c60Sopenharmony_ci } 518f6603c60Sopenharmony_ci int keyCount = 0; 519f6603c60Sopenharmony_ci while (!audioIsEnd) { 520f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 521f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 522f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 523f6603c60Sopenharmony_ci audioIsEnd = true; 524f6603c60Sopenharmony_ci cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; 525f6603c60Sopenharmony_ci continue; 526f6603c60Sopenharmony_ci } 527f6603c60Sopenharmony_ci 528f6603c60Sopenharmony_ci audioFrame++; 529f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 530f6603c60Sopenharmony_ci keyCount++; 531f6603c60Sopenharmony_ci } 532f6603c60Sopenharmony_ci } 533f6603c60Sopenharmony_ci } 534f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 9457); 535f6603c60Sopenharmony_ci ASSERT_EQ(keyCount, 9457); 536f6603c60Sopenharmony_ci close(fd); 537f6603c60Sopenharmony_ci} 538f6603c60Sopenharmony_ci 539f6603c60Sopenharmony_ci/** 540f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_1300 541f6603c60Sopenharmony_ci * @tc.name : demux mp3 542f6603c60Sopenharmony_ci * @tc.desc : function test 543f6603c60Sopenharmony_ci */ 544f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1300, TestSize.Level0) 545f6603c60Sopenharmony_ci{ 546f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 547f6603c60Sopenharmony_ci bool audioIsEnd = false; 548f6603c60Sopenharmony_ci int audioFrame = 0; 549f6603c60Sopenharmony_ci 550f6603c60Sopenharmony_ci const char *file = "/data/test/media/audio/MP3_48000_1.mp3"; 551f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 552f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 553f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 554f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 555f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 556f6603c60Sopenharmony_ci 557f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 558f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 559f6603c60Sopenharmony_ci 560f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 561f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 562f6603c60Sopenharmony_ci ASSERT_EQ(1, g_trackCount); 563f6603c60Sopenharmony_ci 564f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 565f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 566f6603c60Sopenharmony_ci } 567f6603c60Sopenharmony_ci int keyCount = 0; 568f6603c60Sopenharmony_ci while (!audioIsEnd) { 569f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 570f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 571f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 572f6603c60Sopenharmony_ci audioIsEnd = true; 573f6603c60Sopenharmony_ci cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; 574f6603c60Sopenharmony_ci continue; 575f6603c60Sopenharmony_ci } 576f6603c60Sopenharmony_ci 577f6603c60Sopenharmony_ci audioFrame++; 578f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 579f6603c60Sopenharmony_ci keyCount++; 580f6603c60Sopenharmony_ci } 581f6603c60Sopenharmony_ci } 582f6603c60Sopenharmony_ci } 583f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 9150); 584f6603c60Sopenharmony_ci ASSERT_EQ(keyCount, 9150); 585f6603c60Sopenharmony_ci close(fd); 586f6603c60Sopenharmony_ci} 587f6603c60Sopenharmony_ci 588f6603c60Sopenharmony_ci/** 589f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_1400 590f6603c60Sopenharmony_ci * @tc.name : demux ogg 591f6603c60Sopenharmony_ci * @tc.desc : function test 592f6603c60Sopenharmony_ci */ 593f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1400, TestSize.Level0) 594f6603c60Sopenharmony_ci{ 595f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 596f6603c60Sopenharmony_ci bool audioIsEnd = false; 597f6603c60Sopenharmony_ci int audioFrame = 0; 598f6603c60Sopenharmony_ci 599f6603c60Sopenharmony_ci const char *file = "/data/test/media/audio/OGG_48000_1.ogg"; 600f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 601f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 602f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 603f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 604f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 605f6603c60Sopenharmony_ci 606f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 607f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 608f6603c60Sopenharmony_ci 609f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 610f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 611f6603c60Sopenharmony_ci ASSERT_EQ(1, g_trackCount); 612f6603c60Sopenharmony_ci 613f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 614f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 615f6603c60Sopenharmony_ci } 616f6603c60Sopenharmony_ci int keyCount = 0; 617f6603c60Sopenharmony_ci while (!audioIsEnd) { 618f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 619f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 620f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 621f6603c60Sopenharmony_ci audioIsEnd = true; 622f6603c60Sopenharmony_ci cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; 623f6603c60Sopenharmony_ci continue; 624f6603c60Sopenharmony_ci } 625f6603c60Sopenharmony_ci 626f6603c60Sopenharmony_ci audioFrame++; 627f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 628f6603c60Sopenharmony_ci keyCount++; 629f6603c60Sopenharmony_ci } 630f6603c60Sopenharmony_ci } 631f6603c60Sopenharmony_ci } 632f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 11439); 633f6603c60Sopenharmony_ci ASSERT_EQ(keyCount, 11439); 634f6603c60Sopenharmony_ci close(fd); 635f6603c60Sopenharmony_ci} 636f6603c60Sopenharmony_ci 637f6603c60Sopenharmony_ci/** 638f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_1500 639f6603c60Sopenharmony_ci * @tc.name : demux flac 640f6603c60Sopenharmony_ci * @tc.desc : function test 641f6603c60Sopenharmony_ci */ 642f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1500, TestSize.Level0) 643f6603c60Sopenharmony_ci{ 644f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 645f6603c60Sopenharmony_ci bool audioIsEnd = false; 646f6603c60Sopenharmony_ci int audioFrame = 0; 647f6603c60Sopenharmony_ci 648f6603c60Sopenharmony_ci const char *file = "/data/test/media/audio/FLAC_48000_1.flac"; 649f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 650f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 651f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 652f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 653f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 654f6603c60Sopenharmony_ci 655f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 656f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 657f6603c60Sopenharmony_ci 658f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 659f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 660f6603c60Sopenharmony_ci ASSERT_EQ(1, g_trackCount); 661f6603c60Sopenharmony_ci 662f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 663f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 664f6603c60Sopenharmony_ci } 665f6603c60Sopenharmony_ci 666f6603c60Sopenharmony_ci int keyCount = 0; 667f6603c60Sopenharmony_ci while (!audioIsEnd) { 668f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 669f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 670f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 671f6603c60Sopenharmony_ci audioIsEnd = true; 672f6603c60Sopenharmony_ci cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; 673f6603c60Sopenharmony_ci continue; 674f6603c60Sopenharmony_ci } 675f6603c60Sopenharmony_ci 676f6603c60Sopenharmony_ci audioFrame++; 677f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 678f6603c60Sopenharmony_ci keyCount++; 679f6603c60Sopenharmony_ci } 680f6603c60Sopenharmony_ci } 681f6603c60Sopenharmony_ci } 682f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 2288); 683f6603c60Sopenharmony_ci ASSERT_EQ(keyCount, 2288); 684f6603c60Sopenharmony_ci close(fd); 685f6603c60Sopenharmony_ci} 686f6603c60Sopenharmony_ci 687f6603c60Sopenharmony_ci/** 688f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_1600 689f6603c60Sopenharmony_ci * @tc.name : demux wav 690f6603c60Sopenharmony_ci * @tc.desc : function test 691f6603c60Sopenharmony_ci */ 692f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1600, TestSize.Level0) 693f6603c60Sopenharmony_ci{ 694f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 695f6603c60Sopenharmony_ci bool audioIsEnd = false; 696f6603c60Sopenharmony_ci int audioFrame = 0; 697f6603c60Sopenharmony_ci 698f6603c60Sopenharmony_ci const char *file = "/data/test/media/audio/wav_48000_1.wav"; 699f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 700f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 701f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 702f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 703f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 704f6603c60Sopenharmony_ci 705f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 706f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 707f6603c60Sopenharmony_ci 708f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 709f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 710f6603c60Sopenharmony_ci ASSERT_EQ(1, g_trackCount); 711f6603c60Sopenharmony_ci 712f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 713f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 714f6603c60Sopenharmony_ci } 715f6603c60Sopenharmony_ci 716f6603c60Sopenharmony_ci int keyCount = 0; 717f6603c60Sopenharmony_ci while (!audioIsEnd) { 718f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 719f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 720f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 721f6603c60Sopenharmony_ci audioIsEnd = true; 722f6603c60Sopenharmony_ci cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; 723f6603c60Sopenharmony_ci continue; 724f6603c60Sopenharmony_ci } 725f6603c60Sopenharmony_ci 726f6603c60Sopenharmony_ci audioFrame++; 727f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 728f6603c60Sopenharmony_ci keyCount++; 729f6603c60Sopenharmony_ci } 730f6603c60Sopenharmony_ci } 731f6603c60Sopenharmony_ci } 732f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 5146); 733f6603c60Sopenharmony_ci ASSERT_EQ(keyCount, 5146); 734f6603c60Sopenharmony_ci close(fd); 735f6603c60Sopenharmony_ci} 736f6603c60Sopenharmony_ci 737f6603c60Sopenharmony_ci/** 738f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_1700 739f6603c60Sopenharmony_ci * @tc.name : demux mpeg-ts 740f6603c60Sopenharmony_ci * @tc.desc : function test 741f6603c60Sopenharmony_ci */ 742f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1700, TestSize.Level0) 743f6603c60Sopenharmony_ci{ 744f6603c60Sopenharmony_ci int tarckType = 0; 745f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 746f6603c60Sopenharmony_ci bool audioIsEnd = false; 747f6603c60Sopenharmony_ci bool videoIsEnd = false; 748f6603c60Sopenharmony_ci int audioFrame = 0; 749f6603c60Sopenharmony_ci int videoFrame = 0; 750f6603c60Sopenharmony_ci const char *file = "/data/test/media/ts_video.ts"; 751f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 752f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 753f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 754f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 755f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 756f6603c60Sopenharmony_ci 757f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 758f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 759f6603c60Sopenharmony_ci 760f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 761f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 762f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 763f6603c60Sopenharmony_ci 764f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 765f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 766f6603c60Sopenharmony_ci } 767f6603c60Sopenharmony_ci 768f6603c60Sopenharmony_ci int vKeyCount = 0; 769f6603c60Sopenharmony_ci int aKeyCount = 0; 770f6603c60Sopenharmony_ci while (!audioIsEnd || !videoIsEnd) { 771f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 772f6603c60Sopenharmony_ci 773f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, index); 774f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 775f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 776f6603c60Sopenharmony_ci 777f6603c60Sopenharmony_ci if ((audioIsEnd && (tarckType == 0)) || (videoIsEnd && (tarckType == 1))) { 778f6603c60Sopenharmony_ci continue; 779f6603c60Sopenharmony_ci } 780f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 781f6603c60Sopenharmony_ci 782f6603c60Sopenharmony_ci if (tarckType == 0) { 783f6603c60Sopenharmony_ci SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); 784f6603c60Sopenharmony_ci } else if (tarckType == 1) { 785f6603c60Sopenharmony_ci SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); 786f6603c60Sopenharmony_ci } 787f6603c60Sopenharmony_ci } 788f6603c60Sopenharmony_ci } 789f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 384); 790f6603c60Sopenharmony_ci ASSERT_EQ(aKeyCount, 384); 791f6603c60Sopenharmony_ci ASSERT_EQ(videoFrame, 602); 792f6603c60Sopenharmony_ci ASSERT_EQ(vKeyCount, 51); 793f6603c60Sopenharmony_ci close(fd); 794f6603c60Sopenharmony_ci} 795f6603c60Sopenharmony_ci 796f6603c60Sopenharmony_ci/** 797f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_1800 798f6603c60Sopenharmony_ci * @tc.name : demux unsupported source 799f6603c60Sopenharmony_ci * @tc.desc : function test 800f6603c60Sopenharmony_ci */ 801f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1800, TestSize.Level2) 802f6603c60Sopenharmony_ci{ 803f6603c60Sopenharmony_ci const char *file = "/data/test/media/mkv.mkv"; 804f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 805f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 806f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 807f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 808f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 809f6603c60Sopenharmony_ci close(fd); 810f6603c60Sopenharmony_ci} 811f6603c60Sopenharmony_ci 812f6603c60Sopenharmony_ci/** 813f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_1900 814f6603c60Sopenharmony_ci * @tc.name : demux mp4, zero track 815f6603c60Sopenharmony_ci * @tc.desc : function test 816f6603c60Sopenharmony_ci */ 817f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_1900, TestSize.Level1) 818f6603c60Sopenharmony_ci{ 819f6603c60Sopenharmony_ci const char *file = "/data/test/media/zero_track.mp4"; 820f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 821f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 822f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 823f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 824f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 825f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 826f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 827f6603c60Sopenharmony_ci 828f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 829f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 830f6603c60Sopenharmony_ci ASSERT_EQ(g_trackCount, 0); 831f6603c60Sopenharmony_ci 832f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_INVALID_VAL, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 833f6603c60Sopenharmony_ci close(fd); 834f6603c60Sopenharmony_ci} 835f6603c60Sopenharmony_ci 836f6603c60Sopenharmony_ci/** 837f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_2000 838f6603c60Sopenharmony_ci * @tc.name : OH_AVSource_CreateWithFD test 839f6603c60Sopenharmony_ci * @tc.desc : function test 840f6603c60Sopenharmony_ci */ 841f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2000, TestSize.Level0) 842f6603c60Sopenharmony_ci{ 843f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 844f6603c60Sopenharmony_ci bool audioIsEnd = false; 845f6603c60Sopenharmony_ci int audioFrame = 0; 846f6603c60Sopenharmony_ci 847f6603c60Sopenharmony_ci const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3"; 848f6603c60Sopenharmony_ci int64_t size1 = GetFileSize(file1); 849f6603c60Sopenharmony_ci 850f6603c60Sopenharmony_ci const char *file = "/data/test/media/MP3_avcc_10sec.bin"; 851f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 852f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 853f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 854f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size1); 855f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 856f6603c60Sopenharmony_ci 857f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 858f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 859f6603c60Sopenharmony_ci 860f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 861f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 862f6603c60Sopenharmony_ci ASSERT_EQ(1, g_trackCount); 863f6603c60Sopenharmony_ci 864f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 865f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 866f6603c60Sopenharmony_ci } 867f6603c60Sopenharmony_ci 868f6603c60Sopenharmony_ci int keyCount = 0; 869f6603c60Sopenharmony_ci while (!audioIsEnd) { 870f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 871f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 872f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 873f6603c60Sopenharmony_ci audioIsEnd = true; 874f6603c60Sopenharmony_ci cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; 875f6603c60Sopenharmony_ci continue; 876f6603c60Sopenharmony_ci } 877f6603c60Sopenharmony_ci 878f6603c60Sopenharmony_ci audioFrame++; 879f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 880f6603c60Sopenharmony_ci keyCount++; 881f6603c60Sopenharmony_ci } 882f6603c60Sopenharmony_ci } 883f6603c60Sopenharmony_ci } 884f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 9150); 885f6603c60Sopenharmony_ci ASSERT_EQ(keyCount, 9150); 886f6603c60Sopenharmony_ci close(fd); 887f6603c60Sopenharmony_ci} 888f6603c60Sopenharmony_ci 889f6603c60Sopenharmony_ci/** 890f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_2100 891f6603c60Sopenharmony_ci * @tc.name : OH_AVSource_CreateWithFD test 892f6603c60Sopenharmony_ci * @tc.desc : function test 893f6603c60Sopenharmony_ci */ 894f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2100, TestSize.Level0) 895f6603c60Sopenharmony_ci{ 896f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 897f6603c60Sopenharmony_ci bool audioIsEnd = false; 898f6603c60Sopenharmony_ci bool videoIsEnd = false; 899f6603c60Sopenharmony_ci int audioFrame = 0; 900f6603c60Sopenharmony_ci int videoFrame = 0; 901f6603c60Sopenharmony_ci const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3"; 902f6603c60Sopenharmony_ci int64_t size1 = GetFileSize(file1); 903f6603c60Sopenharmony_ci 904f6603c60Sopenharmony_ci const char *file2 = "/data/test/media/avcc_10sec.mp4"; 905f6603c60Sopenharmony_ci int64_t size2 = GetFileSize(file2); 906f6603c60Sopenharmony_ci 907f6603c60Sopenharmony_ci const char *file = "/data/test/media/MP3_avcc_10sec.bin"; 908f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 909f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 910f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 911f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, size1, size2); 912f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 913f6603c60Sopenharmony_ci 914f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 915f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 916f6603c60Sopenharmony_ci 917f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 918f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 919f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 920f6603c60Sopenharmony_ci 921f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 922f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 923f6603c60Sopenharmony_ci } 924f6603c60Sopenharmony_ci int tarckType = 0; 925f6603c60Sopenharmony_ci int aKeyCount = 0; 926f6603c60Sopenharmony_ci int vKeyCount = 0; 927f6603c60Sopenharmony_ci while (!audioIsEnd || !videoIsEnd) { 928f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 929f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, index); 930f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 931f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 932f6603c60Sopenharmony_ci 933f6603c60Sopenharmony_ci if ((audioIsEnd && (tarckType == 0)) || (videoIsEnd && (tarckType == 1))) { 934f6603c60Sopenharmony_ci continue; 935f6603c60Sopenharmony_ci } 936f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 937f6603c60Sopenharmony_ci 938f6603c60Sopenharmony_ci if (tarckType == 0) { 939f6603c60Sopenharmony_ci SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); 940f6603c60Sopenharmony_ci } else if (tarckType == 1) { 941f6603c60Sopenharmony_ci SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); 942f6603c60Sopenharmony_ci } 943f6603c60Sopenharmony_ci } 944f6603c60Sopenharmony_ci } 945f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 431); 946f6603c60Sopenharmony_ci ASSERT_EQ(videoFrame, 600); 947f6603c60Sopenharmony_ci ASSERT_EQ(aKeyCount, 431); 948f6603c60Sopenharmony_ci ASSERT_EQ(vKeyCount, 10); 949f6603c60Sopenharmony_ci close(fd); 950f6603c60Sopenharmony_ci} 951f6603c60Sopenharmony_ci 952f6603c60Sopenharmony_ci/** 953f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_2200 954f6603c60Sopenharmony_ci * @tc.name : OH_AVSource_CreateWithFD test 955f6603c60Sopenharmony_ci * @tc.desc : function test 956f6603c60Sopenharmony_ci */ 957f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2200, TestSize.Level0) 958f6603c60Sopenharmony_ci{ 959f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 960f6603c60Sopenharmony_ci bool audioIsEnd = false; 961f6603c60Sopenharmony_ci int audioFrame = 0; 962f6603c60Sopenharmony_ci 963f6603c60Sopenharmony_ci const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3"; 964f6603c60Sopenharmony_ci int64_t size1 = GetFileSize(file1); 965f6603c60Sopenharmony_ci 966f6603c60Sopenharmony_ci const char *file = "/data/test/media/MP3_OGG_48000_1.bin"; 967f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 968f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 969f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 970f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size1); 971f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 972f6603c60Sopenharmony_ci 973f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 974f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 975f6603c60Sopenharmony_ci 976f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 977f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 978f6603c60Sopenharmony_ci ASSERT_EQ(1, g_trackCount); 979f6603c60Sopenharmony_ci 980f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 981f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 982f6603c60Sopenharmony_ci } 983f6603c60Sopenharmony_ci 984f6603c60Sopenharmony_ci int keyCount = 0; 985f6603c60Sopenharmony_ci while (!audioIsEnd) { 986f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 987f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 988f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 989f6603c60Sopenharmony_ci audioIsEnd = true; 990f6603c60Sopenharmony_ci cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; 991f6603c60Sopenharmony_ci continue; 992f6603c60Sopenharmony_ci } 993f6603c60Sopenharmony_ci 994f6603c60Sopenharmony_ci audioFrame++; 995f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 996f6603c60Sopenharmony_ci keyCount++; 997f6603c60Sopenharmony_ci } 998f6603c60Sopenharmony_ci } 999f6603c60Sopenharmony_ci } 1000f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 9150); 1001f6603c60Sopenharmony_ci ASSERT_EQ(keyCount, 9150); 1002f6603c60Sopenharmony_ci close(fd); 1003f6603c60Sopenharmony_ci} 1004f6603c60Sopenharmony_ci 1005f6603c60Sopenharmony_ci/** 1006f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_2300 1007f6603c60Sopenharmony_ci * @tc.name : OH_AVSource_CreateWithFD test 1008f6603c60Sopenharmony_ci * @tc.desc : function test 1009f6603c60Sopenharmony_ci */ 1010f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2300, TestSize.Level0) 1011f6603c60Sopenharmony_ci{ 1012f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1013f6603c60Sopenharmony_ci bool audioIsEnd = false; 1014f6603c60Sopenharmony_ci int audioFrame = 0; 1015f6603c60Sopenharmony_ci 1016f6603c60Sopenharmony_ci const char *file1 = "/data/test/media/audio/MP3_48000_1.mp3"; 1017f6603c60Sopenharmony_ci int64_t size1 = GetFileSize(file1); 1018f6603c60Sopenharmony_ci 1019f6603c60Sopenharmony_ci const char *file2 = "/data/test/media/audio/OGG_48000_1.ogg"; 1020f6603c60Sopenharmony_ci int64_t size2 = GetFileSize(file2); 1021f6603c60Sopenharmony_ci 1022f6603c60Sopenharmony_ci const char *file = "/data/test/media/MP3_OGG_48000_1.bin"; 1023f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1024f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1025f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1026f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, size1, size2); 1027f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1028f6603c60Sopenharmony_ci 1029f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1030f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1031f6603c60Sopenharmony_ci 1032f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1033f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1034f6603c60Sopenharmony_ci ASSERT_EQ(1, g_trackCount); 1035f6603c60Sopenharmony_ci 1036f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1037f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1038f6603c60Sopenharmony_ci } 1039f6603c60Sopenharmony_ci 1040f6603c60Sopenharmony_ci int keyCount = 0; 1041f6603c60Sopenharmony_ci while (!audioIsEnd) { 1042f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1043f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1044f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1045f6603c60Sopenharmony_ci audioIsEnd = true; 1046f6603c60Sopenharmony_ci cout << audioFrame << " audio is end !!!!!!!!!!!!!!!" << endl; 1047f6603c60Sopenharmony_ci continue; 1048f6603c60Sopenharmony_ci } 1049f6603c60Sopenharmony_ci 1050f6603c60Sopenharmony_ci audioFrame++; 1051f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_SYNC_FRAME) { 1052f6603c60Sopenharmony_ci keyCount++; 1053f6603c60Sopenharmony_ci } 1054f6603c60Sopenharmony_ci } 1055f6603c60Sopenharmony_ci } 1056f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 11439); 1057f6603c60Sopenharmony_ci ASSERT_EQ(keyCount, 11439); 1058f6603c60Sopenharmony_ci close(fd); 1059f6603c60Sopenharmony_ci} 1060f6603c60Sopenharmony_ci 1061f6603c60Sopenharmony_ci/** 1062f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_2400 1063f6603c60Sopenharmony_ci * @tc.name : OH_AVSource_CreateWithFD test 1064f6603c60Sopenharmony_ci * @tc.desc : function test 1065f6603c60Sopenharmony_ci */ 1066f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_2400, TestSize.Level0) 1067f6603c60Sopenharmony_ci{ 1068f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1069f6603c60Sopenharmony_ci bool audioIsEnd = false; 1070f6603c60Sopenharmony_ci bool videoIsEnd = false; 1071f6603c60Sopenharmony_ci int audioFrame = 0; 1072f6603c60Sopenharmony_ci int videoFrame = 0; 1073f6603c60Sopenharmony_ci const char *file1 = "/data/test/media/ts_video.ts"; 1074f6603c60Sopenharmony_ci int64_t size1 = GetFileSize(file1); 1075f6603c60Sopenharmony_ci 1076f6603c60Sopenharmony_ci const char *file = "/data/test/media/test_video_avcc_10sec.bin"; 1077f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1078f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1079f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1080f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size1); 1081f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1082f6603c60Sopenharmony_ci 1083f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1084f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1085f6603c60Sopenharmony_ci 1086f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1087f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1088f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 1089f6603c60Sopenharmony_ci 1090f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1091f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1092f6603c60Sopenharmony_ci } 1093f6603c60Sopenharmony_ci int tarckType = 0; 1094f6603c60Sopenharmony_ci int aKeyCount = 0; 1095f6603c60Sopenharmony_ci int vKeyCount = 0; 1096f6603c60Sopenharmony_ci while (!audioIsEnd || !videoIsEnd) { 1097f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1098f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, index); 1099f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1100f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1101f6603c60Sopenharmony_ci 1102f6603c60Sopenharmony_ci if ((audioIsEnd && (tarckType == 0)) || (videoIsEnd && (tarckType == 1))) { 1103f6603c60Sopenharmony_ci continue; 1104f6603c60Sopenharmony_ci } 1105f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1106f6603c60Sopenharmony_ci 1107f6603c60Sopenharmony_ci if (tarckType == 0) { 1108f6603c60Sopenharmony_ci SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); 1109f6603c60Sopenharmony_ci } else if (tarckType == 1) { 1110f6603c60Sopenharmony_ci SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); 1111f6603c60Sopenharmony_ci } 1112f6603c60Sopenharmony_ci } 1113f6603c60Sopenharmony_ci } 1114f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 384); 1115f6603c60Sopenharmony_ci ASSERT_EQ(videoFrame, 602); 1116f6603c60Sopenharmony_ci ASSERT_EQ(aKeyCount, 384); 1117f6603c60Sopenharmony_ci ASSERT_EQ(vKeyCount, 51); 1118f6603c60Sopenharmony_ci close(fd); 1119f6603c60Sopenharmony_ci} 1120f6603c60Sopenharmony_ci 1121f6603c60Sopenharmony_ci/** 1122f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_3100 1123f6603c60Sopenharmony_ci * @tc.name : seek to the start time, previous mode 1124f6603c60Sopenharmony_ci * @tc.desc : function test 1125f6603c60Sopenharmony_ci */ 1126f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3100, TestSize.Level1) 1127f6603c60Sopenharmony_ci{ 1128f6603c60Sopenharmony_ci uint32_t trackIndex = 0; 1129f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1130f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1131f6603c60Sopenharmony_ci int count = 0; 1132f6603c60Sopenharmony_ci srand(time(nullptr)); 1133f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1134f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1135f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1136f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1137f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1138f6603c60Sopenharmony_ci 1139f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1140f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1141f6603c60Sopenharmony_ci 1142f6603c60Sopenharmony_ci int pos = rand() % 250; 1143f6603c60Sopenharmony_ci int64_t startPts = 0; 1144f6603c60Sopenharmony_ci bool isFirstFrame = true; 1145f6603c60Sopenharmony_ci bool isEnd = false; 1146f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1147f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 1148f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1149f6603c60Sopenharmony_ci cout << g_trackCount << "####################" << endl; 1150f6603c60Sopenharmony_ci 1151f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1152f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1153f6603c60Sopenharmony_ci } 1154f6603c60Sopenharmony_ci 1155f6603c60Sopenharmony_ci while (!isEnd) { 1156f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1157f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1158f6603c60Sopenharmony_ci 1159f6603c60Sopenharmony_ci if (isFirstFrame) { 1160f6603c60Sopenharmony_ci startPts = attr.pts; 1161f6603c60Sopenharmony_ci isFirstFrame = false; 1162f6603c60Sopenharmony_ci } 1163f6603c60Sopenharmony_ci if (count == pos) { 1164f6603c60Sopenharmony_ci isEnd = true; 1165f6603c60Sopenharmony_ci cout << pos << " =====curr_pts = attr.pts" << endl; 1166f6603c60Sopenharmony_ci break; 1167f6603c60Sopenharmony_ci } 1168f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1169f6603c60Sopenharmony_ci isEnd = true; 1170f6603c60Sopenharmony_ci cout << "is end!!!!!!!!" << endl; 1171f6603c60Sopenharmony_ci } 1172f6603c60Sopenharmony_ci count++; 1173f6603c60Sopenharmony_ci } 1174f6603c60Sopenharmony_ci cout << "count: " << count << endl; 1175f6603c60Sopenharmony_ci } 1176f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, startPts / 1000, SEEK_MODE_PREVIOUS_SYNC)); 1177f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); 1178f6603c60Sopenharmony_ci ASSERT_EQ(attr.pts, startPts); 1179f6603c60Sopenharmony_ci close(fd); 1180f6603c60Sopenharmony_ci} 1181f6603c60Sopenharmony_ci 1182f6603c60Sopenharmony_ci/** 1183f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_3200 1184f6603c60Sopenharmony_ci * @tc.name : seek to the start time, next mode 1185f6603c60Sopenharmony_ci * @tc.desc : function test 1186f6603c60Sopenharmony_ci */ 1187f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3200, TestSize.Level1) 1188f6603c60Sopenharmony_ci{ 1189f6603c60Sopenharmony_ci bool isEnd = false; 1190f6603c60Sopenharmony_ci uint32_t trackIndex = 0; 1191f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1192f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1193f6603c60Sopenharmony_ci int count = 0; 1194f6603c60Sopenharmony_ci srand(time(nullptr)); 1195f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1196f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1197f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1198f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1199f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1200f6603c60Sopenharmony_ci 1201f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1202f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1203f6603c60Sopenharmony_ci 1204f6603c60Sopenharmony_ci int pos = rand() % 250; 1205f6603c60Sopenharmony_ci int64_t startPts = 0; 1206f6603c60Sopenharmony_ci bool isFirstFrame = true; 1207f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1208f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 1209f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1210f6603c60Sopenharmony_ci 1211f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1212f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1213f6603c60Sopenharmony_ci } 1214f6603c60Sopenharmony_ci 1215f6603c60Sopenharmony_ci while (!isEnd) { 1216f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1217f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1218f6603c60Sopenharmony_ci 1219f6603c60Sopenharmony_ci if (isFirstFrame) { 1220f6603c60Sopenharmony_ci startPts = attr.pts; 1221f6603c60Sopenharmony_ci isFirstFrame = false; 1222f6603c60Sopenharmony_ci } 1223f6603c60Sopenharmony_ci if (count == pos) { 1224f6603c60Sopenharmony_ci isEnd = true; 1225f6603c60Sopenharmony_ci cout << "curr_pts = attr.pts" << endl; 1226f6603c60Sopenharmony_ci break; 1227f6603c60Sopenharmony_ci } 1228f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1229f6603c60Sopenharmony_ci isEnd = true; 1230f6603c60Sopenharmony_ci cout << "is end!!!!!!!!" << endl; 1231f6603c60Sopenharmony_ci } 1232f6603c60Sopenharmony_ci count++; 1233f6603c60Sopenharmony_ci } 1234f6603c60Sopenharmony_ci cout << "count: " << count << endl; 1235f6603c60Sopenharmony_ci } 1236f6603c60Sopenharmony_ci 1237f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, startPts / 1000, SEEK_MODE_NEXT_SYNC)); 1238f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); 1239f6603c60Sopenharmony_ci ASSERT_EQ(attr.pts, startPts); 1240f6603c60Sopenharmony_ci close(fd); 1241f6603c60Sopenharmony_ci} 1242f6603c60Sopenharmony_ci 1243f6603c60Sopenharmony_ci/** 1244f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_3300 1245f6603c60Sopenharmony_ci * @tc.name : seek to the start time, closest mode 1246f6603c60Sopenharmony_ci * @tc.desc : function test 1247f6603c60Sopenharmony_ci */ 1248f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3300, TestSize.Level1) 1249f6603c60Sopenharmony_ci{ 1250f6603c60Sopenharmony_ci bool isEnd = false; 1251f6603c60Sopenharmony_ci uint32_t trackIndex = 0; 1252f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1253f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1254f6603c60Sopenharmony_ci int count = 0; 1255f6603c60Sopenharmony_ci srand(time(nullptr)); 1256f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1257f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1258f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1259f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1260f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1261f6603c60Sopenharmony_ci 1262f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1263f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1264f6603c60Sopenharmony_ci 1265f6603c60Sopenharmony_ci int pos = rand() % 250; 1266f6603c60Sopenharmony_ci int64_t startPts = 0; 1267f6603c60Sopenharmony_ci bool isFirstFrame = true; 1268f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1269f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 1270f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1271f6603c60Sopenharmony_ci 1272f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1273f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1274f6603c60Sopenharmony_ci } 1275f6603c60Sopenharmony_ci 1276f6603c60Sopenharmony_ci while (!isEnd) { 1277f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1278f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1279f6603c60Sopenharmony_ci 1280f6603c60Sopenharmony_ci if (isFirstFrame) { 1281f6603c60Sopenharmony_ci startPts = attr.pts; 1282f6603c60Sopenharmony_ci isFirstFrame = false; 1283f6603c60Sopenharmony_ci } 1284f6603c60Sopenharmony_ci if (count == pos) { 1285f6603c60Sopenharmony_ci isEnd = true; 1286f6603c60Sopenharmony_ci cout << "curr_pts = attr.pts" << endl; 1287f6603c60Sopenharmony_ci break; 1288f6603c60Sopenharmony_ci } 1289f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1290f6603c60Sopenharmony_ci isEnd = true; 1291f6603c60Sopenharmony_ci cout << "is end!!!!!!!!" << endl; 1292f6603c60Sopenharmony_ci } 1293f6603c60Sopenharmony_ci count++; 1294f6603c60Sopenharmony_ci } 1295f6603c60Sopenharmony_ci cout << "count: " << count << endl; 1296f6603c60Sopenharmony_ci } 1297f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, startPts / 1000, SEEK_MODE_CLOSEST_SYNC)); 1298f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); 1299f6603c60Sopenharmony_ci ASSERT_EQ(attr.pts, startPts); 1300f6603c60Sopenharmony_ci close(fd); 1301f6603c60Sopenharmony_ci} 1302f6603c60Sopenharmony_ci 1303f6603c60Sopenharmony_ci/** 1304f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_3400 1305f6603c60Sopenharmony_ci * @tc.name : seek to the end time, previous mode 1306f6603c60Sopenharmony_ci * @tc.desc : function test 1307f6603c60Sopenharmony_ci */ 1308f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3400, TestSize.Level1) 1309f6603c60Sopenharmony_ci{ 1310f6603c60Sopenharmony_ci bool isEnd = false; 1311f6603c60Sopenharmony_ci uint32_t trackIndex = 1; 1312f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1313f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1314f6603c60Sopenharmony_ci int count = 0; 1315f6603c60Sopenharmony_ci srand(time(nullptr)); 1316f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1317f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1318f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1319f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1320f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1321f6603c60Sopenharmony_ci 1322f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1323f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1324f6603c60Sopenharmony_ci 1325f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1326f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 1327f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1328f6603c60Sopenharmony_ci cout << g_trackCount << "####################" << endl; 1329f6603c60Sopenharmony_ci 1330f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1331f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1332f6603c60Sopenharmony_ci } 1333f6603c60Sopenharmony_ci 1334f6603c60Sopenharmony_ci int64_t endPts = 0; 1335f6603c60Sopenharmony_ci while (!isEnd) { 1336f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1337f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1338f6603c60Sopenharmony_ci 1339f6603c60Sopenharmony_ci if (static_cast<uint32_t>(index) != trackIndex) { 1340f6603c60Sopenharmony_ci continue; 1341f6603c60Sopenharmony_ci } 1342f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1343f6603c60Sopenharmony_ci isEnd = true; 1344f6603c60Sopenharmony_ci cout << "is end!!!!!!!!" << endl; 1345f6603c60Sopenharmony_ci } else { 1346f6603c60Sopenharmony_ci endPts = attr.pts; 1347f6603c60Sopenharmony_ci } 1348f6603c60Sopenharmony_ci count++; 1349f6603c60Sopenharmony_ci } 1350f6603c60Sopenharmony_ci cout << "count: " << count << endl; 1351f6603c60Sopenharmony_ci } 1352f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_PREVIOUS_SYNC)); 1353f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); 1354f6603c60Sopenharmony_ci ASSERT_EQ(attr.pts, endPts); 1355f6603c60Sopenharmony_ci close(fd); 1356f6603c60Sopenharmony_ci} 1357f6603c60Sopenharmony_ci 1358f6603c60Sopenharmony_ci/** 1359f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_3500 1360f6603c60Sopenharmony_ci * @tc.name : seek to the end time, next mode 1361f6603c60Sopenharmony_ci * @tc.desc : function test 1362f6603c60Sopenharmony_ci */ 1363f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3500, TestSize.Level1) 1364f6603c60Sopenharmony_ci{ 1365f6603c60Sopenharmony_ci bool isEnd = false; 1366f6603c60Sopenharmony_ci uint32_t trackIndex = 1; 1367f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1368f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1369f6603c60Sopenharmony_ci int count = 0; 1370f6603c60Sopenharmony_ci srand(time(nullptr)); 1371f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1372f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1373f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1374f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1375f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1376f6603c60Sopenharmony_ci 1377f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1378f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1379f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1380f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 1381f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1382f6603c60Sopenharmony_ci cout << g_trackCount << "####################" << endl; 1383f6603c60Sopenharmony_ci 1384f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1385f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1386f6603c60Sopenharmony_ci } 1387f6603c60Sopenharmony_ci int64_t endPts = 0; 1388f6603c60Sopenharmony_ci while (!isEnd) { 1389f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1390f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1391f6603c60Sopenharmony_ci if (static_cast<uint32_t>(index) != trackIndex) { 1392f6603c60Sopenharmony_ci continue; 1393f6603c60Sopenharmony_ci } 1394f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1395f6603c60Sopenharmony_ci isEnd = true; 1396f6603c60Sopenharmony_ci cout << "is end!!!!!!!!" << endl; 1397f6603c60Sopenharmony_ci } else { 1398f6603c60Sopenharmony_ci endPts = attr.pts; 1399f6603c60Sopenharmony_ci } 1400f6603c60Sopenharmony_ci count++; 1401f6603c60Sopenharmony_ci } 1402f6603c60Sopenharmony_ci cout << "count: " << count << endl; 1403f6603c60Sopenharmony_ci } 1404f6603c60Sopenharmony_ci // end I 1405f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_NEXT_SYNC)); 1406f6603c60Sopenharmony_ci endPts += 1000; 1407f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_UNKNOWN, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_NEXT_SYNC)); 1408f6603c60Sopenharmony_ci endPts += 1000000; 1409f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_NEXT_SYNC)); 1410f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); 1411f6603c60Sopenharmony_ci close(fd); 1412f6603c60Sopenharmony_ci} 1413f6603c60Sopenharmony_ci 1414f6603c60Sopenharmony_ci/** 1415f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_3600 1416f6603c60Sopenharmony_ci * @tc.name : seek to the end time, closest mode 1417f6603c60Sopenharmony_ci * @tc.desc : function test 1418f6603c60Sopenharmony_ci */ 1419f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3600, TestSize.Level1) 1420f6603c60Sopenharmony_ci{ 1421f6603c60Sopenharmony_ci bool isEnd = false; 1422f6603c60Sopenharmony_ci uint32_t trackIndex = 1; 1423f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1424f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1425f6603c60Sopenharmony_ci int count = 0; 1426f6603c60Sopenharmony_ci srand(time(nullptr)); 1427f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1428f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1429f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1430f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1431f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1432f6603c60Sopenharmony_ci 1433f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1434f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1435f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1436f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 1437f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1438f6603c60Sopenharmony_ci cout << g_trackCount << "####################" << endl; 1439f6603c60Sopenharmony_ci 1440f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1441f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1442f6603c60Sopenharmony_ci } 1443f6603c60Sopenharmony_ci 1444f6603c60Sopenharmony_ci int64_t endPts = 0; 1445f6603c60Sopenharmony_ci while (!isEnd) { 1446f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1447f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1448f6603c60Sopenharmony_ci if (static_cast<uint32_t>(index) != trackIndex) { 1449f6603c60Sopenharmony_ci continue; 1450f6603c60Sopenharmony_ci } 1451f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1452f6603c60Sopenharmony_ci isEnd = true; 1453f6603c60Sopenharmony_ci cout << "is end!!!!!!!!" << endl; 1454f6603c60Sopenharmony_ci } else { 1455f6603c60Sopenharmony_ci endPts = attr.pts; 1456f6603c60Sopenharmony_ci } 1457f6603c60Sopenharmony_ci count++; 1458f6603c60Sopenharmony_ci } 1459f6603c60Sopenharmony_ci cout << "count: " << count << endl; 1460f6603c60Sopenharmony_ci } 1461f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, endPts / 1000, SEEK_MODE_CLOSEST_SYNC)); 1462f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); 1463f6603c60Sopenharmony_ci ASSERT_EQ(attr.pts, endPts); 1464f6603c60Sopenharmony_ci close(fd); 1465f6603c60Sopenharmony_ci} 1466f6603c60Sopenharmony_ci 1467f6603c60Sopenharmony_ci/** 1468f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_3700 1469f6603c60Sopenharmony_ci * @tc.name : seek to a random time, previous mode 1470f6603c60Sopenharmony_ci * @tc.desc : function test 1471f6603c60Sopenharmony_ci */ 1472f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3700, TestSize.Level0) 1473f6603c60Sopenharmony_ci{ 1474f6603c60Sopenharmony_ci bool isFirstFrame = true; 1475f6603c60Sopenharmony_ci uint32_t trackIndex = 1; 1476f6603c60Sopenharmony_ci int count = 0; 1477f6603c60Sopenharmony_ci srand(time(nullptr)); 1478f6603c60Sopenharmony_ci int pos = rand() % 250; 1479f6603c60Sopenharmony_ci int posTo = rand() % 250; 1480f6603c60Sopenharmony_ci int64_t toMs = posTo * 40000; 1481f6603c60Sopenharmony_ci int tarckType = 0; 1482f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1483f6603c60Sopenharmony_ci bool audioIsEnd = false; 1484f6603c60Sopenharmony_ci bool videoIsEnd = false; 1485f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1486f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1487f6603c60Sopenharmony_ci cout << file << "pos: " << pos << "toMs: " << toMs << " fd:" << fd << " size:" << GetFileSize(file) << endl; 1488f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, GetFileSize(file)); 1489f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1490f6603c60Sopenharmony_ci 1491f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1492f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1493f6603c60Sopenharmony_ci 1494f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1495f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1496f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 1497f6603c60Sopenharmony_ci 1498f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1499f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1500f6603c60Sopenharmony_ci } 1501f6603c60Sopenharmony_ci 1502f6603c60Sopenharmony_ci while (!audioIsEnd || !videoIsEnd) { 1503f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1504f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, index); 1505f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1506f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 1507f6603c60Sopenharmony_ci 1508f6603c60Sopenharmony_ci if ((audioIsEnd && (tarckType == 0)) || (videoIsEnd && (tarckType == 1))) { 1509f6603c60Sopenharmony_ci continue; 1510f6603c60Sopenharmony_ci } 1511f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1512f6603c60Sopenharmony_ci 1513f6603c60Sopenharmony_ci SetFirstFrameFlag(isFirstFrame); 1514f6603c60Sopenharmony_ci 1515f6603c60Sopenharmony_ci if (count == pos) { 1516f6603c60Sopenharmony_ci SetEndFlag(audioIsEnd, videoIsEnd); 1517f6603c60Sopenharmony_ci break; 1518f6603c60Sopenharmony_ci } 1519f6603c60Sopenharmony_ci 1520f6603c60Sopenharmony_ci SetVarValue(attr, tarckType, audioIsEnd, videoIsEnd); 1521f6603c60Sopenharmony_ci } 1522f6603c60Sopenharmony_ci count++; 1523f6603c60Sopenharmony_ci } 1524f6603c60Sopenharmony_ci 1525f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SeekToTime(demuxer, toMs / 1000, SEEK_MODE_PREVIOUS_SYNC)); 1526f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr)); 1527f6603c60Sopenharmony_ci bool ans = abs(toMs - attr.pts) < 40000 ? true : false; 1528f6603c60Sopenharmony_ci ASSERT_EQ(ans, true); 1529f6603c60Sopenharmony_ci close(fd); 1530f6603c60Sopenharmony_ci} 1531f6603c60Sopenharmony_ci 1532f6603c60Sopenharmony_ci/** 1533f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_3800 1534f6603c60Sopenharmony_ci * @tc.name : seek to a random time, next mode 1535f6603c60Sopenharmony_ci * @tc.desc : function test 1536f6603c60Sopenharmony_ci */ 1537f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3800, TestSize.Level0) 1538f6603c60Sopenharmony_ci{ 1539f6603c60Sopenharmony_ci bool isEnd = false; 1540f6603c60Sopenharmony_ci bool isFirstFrame = true; 1541f6603c60Sopenharmony_ci uint32_t trackIndex = 1; 1542f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1543f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1544f6603c60Sopenharmony_ci int count = 0; 1545f6603c60Sopenharmony_ci srand(time(nullptr)); 1546f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1547f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1548f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1549f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1550f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1551f6603c60Sopenharmony_ci 1552f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1553f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1554f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1555f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 1556f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1557f6603c60Sopenharmony_ci 1558f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1559f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1560f6603c60Sopenharmony_ci } 1561f6603c60Sopenharmony_ci int pos = rand() % 250; 1562f6603c60Sopenharmony_ci int posTo = rand() % 250; 1563f6603c60Sopenharmony_ci int64_t toMs = posTo * 40000; 1564f6603c60Sopenharmony_ci while (!isEnd) { 1565f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1566f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1567f6603c60Sopenharmony_ci if (isFirstFrame) { 1568f6603c60Sopenharmony_ci isFirstFrame = false; 1569f6603c60Sopenharmony_ci } 1570f6603c60Sopenharmony_ci if (count == pos) { 1571f6603c60Sopenharmony_ci isEnd = true; 1572f6603c60Sopenharmony_ci break; 1573f6603c60Sopenharmony_ci } 1574f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1575f6603c60Sopenharmony_ci isEnd = true; 1576f6603c60Sopenharmony_ci } 1577f6603c60Sopenharmony_ci count++; 1578f6603c60Sopenharmony_ci } 1579f6603c60Sopenharmony_ci } 1580f6603c60Sopenharmony_ci int64_t nextIdrPts = toMs; 1581f6603c60Sopenharmony_ci ret = OH_AVDemuxer_SeekToTime(demuxer, toMs / 1000, SEEK_MODE_NEXT_SYNC); 1582f6603c60Sopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 1583f6603c60Sopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 1584f6603c60Sopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 1585f6603c60Sopenharmony_ci bool ans = abs(nextIdrPts - attr.pts) < 40000 ? true : false; 1586f6603c60Sopenharmony_ci ASSERT_EQ(ans, true); 1587f6603c60Sopenharmony_ci close(fd); 1588f6603c60Sopenharmony_ci} 1589f6603c60Sopenharmony_ci 1590f6603c60Sopenharmony_ci/** 1591f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_3900 1592f6603c60Sopenharmony_ci * @tc.name : seek to a random time, closest mode 1593f6603c60Sopenharmony_ci * @tc.desc : function test 1594f6603c60Sopenharmony_ci */ 1595f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_3900, TestSize.Level0) 1596f6603c60Sopenharmony_ci{ 1597f6603c60Sopenharmony_ci bool isEnd = false; 1598f6603c60Sopenharmony_ci bool isFirstFrame = true; 1599f6603c60Sopenharmony_ci uint32_t trackIndex = 1; 1600f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1601f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1602f6603c60Sopenharmony_ci int count = 0; 1603f6603c60Sopenharmony_ci srand(time(nullptr)); 1604f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1605f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1606f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1607f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1608f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1609f6603c60Sopenharmony_ci 1610f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1611f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1612f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1613f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 1614f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1615f6603c60Sopenharmony_ci 1616f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1617f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1618f6603c60Sopenharmony_ci } 1619f6603c60Sopenharmony_ci int pos = rand() % 250; 1620f6603c60Sopenharmony_ci int posTo = rand() % 250; 1621f6603c60Sopenharmony_ci int64_t toMs = posTo * 40000; 1622f6603c60Sopenharmony_ci while (!isEnd) { 1623f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1624f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1625f6603c60Sopenharmony_ci if (isFirstFrame) { 1626f6603c60Sopenharmony_ci isFirstFrame = false; 1627f6603c60Sopenharmony_ci } 1628f6603c60Sopenharmony_ci if (count == pos) { 1629f6603c60Sopenharmony_ci isEnd = true; 1630f6603c60Sopenharmony_ci cout << "curr_pts = attr.pts" << endl; 1631f6603c60Sopenharmony_ci break; 1632f6603c60Sopenharmony_ci } 1633f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1634f6603c60Sopenharmony_ci isEnd = true; 1635f6603c60Sopenharmony_ci } 1636f6603c60Sopenharmony_ci count++; 1637f6603c60Sopenharmony_ci } 1638f6603c60Sopenharmony_ci } 1639f6603c60Sopenharmony_ci int64_t closestIdrPts = toMs; 1640f6603c60Sopenharmony_ci ret = OH_AVDemuxer_SeekToTime(demuxer, toMs / 1000, SEEK_MODE_CLOSEST_SYNC); 1641f6603c60Sopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 1642f6603c60Sopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 1643f6603c60Sopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 1644f6603c60Sopenharmony_ci bool ans = abs(closestIdrPts - attr.pts) < 40000 ? true : false; 1645f6603c60Sopenharmony_ci ASSERT_EQ(ans, true); 1646f6603c60Sopenharmony_ci close(fd); 1647f6603c60Sopenharmony_ci} 1648f6603c60Sopenharmony_ci 1649f6603c60Sopenharmony_ci/** 1650f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_4000 1651f6603c60Sopenharmony_ci * @tc.name : seek to a invalid time, closest mode 1652f6603c60Sopenharmony_ci * @tc.desc : function test 1653f6603c60Sopenharmony_ci */ 1654f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4000, TestSize.Level2) 1655f6603c60Sopenharmony_ci{ 1656f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1657f6603c60Sopenharmony_ci srand(time(nullptr)); 1658f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1659f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1660f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1661f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1662f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1663f6603c60Sopenharmony_ci 1664f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1665f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 1666f6603c60Sopenharmony_ci 1667f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1668f6603c60Sopenharmony_ci int64_t invalidPts = 12000 * 16666; 1669f6603c60Sopenharmony_ci ret = OH_AVDemuxer_SeekToTime(demuxer, invalidPts, SEEK_MODE_CLOSEST_SYNC); 1670f6603c60Sopenharmony_ci ASSERT_NE(ret, AV_ERR_OK); 1671f6603c60Sopenharmony_ci close(fd); 1672f6603c60Sopenharmony_ci} 1673f6603c60Sopenharmony_ci 1674f6603c60Sopenharmony_ci/** 1675f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_4100 1676f6603c60Sopenharmony_ci * @tc.name : remove track before add track 1677f6603c60Sopenharmony_ci * @tc.desc : function test 1678f6603c60Sopenharmony_ci */ 1679f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4100, TestSize.Level2) 1680f6603c60Sopenharmony_ci{ 1681f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1682f6603c60Sopenharmony_ci srand(time(nullptr)); 1683f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1684f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1685f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1686f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1687f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1688f6603c60Sopenharmony_ci 1689f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1690f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1691f6603c60Sopenharmony_ci ret = OH_AVDemuxer_UnselectTrackByID(demuxer, 0); 1692f6603c60Sopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 1693f6603c60Sopenharmony_ci ret = OH_AVDemuxer_SelectTrackByID(demuxer, 0); 1694f6603c60Sopenharmony_ci ASSERT_EQ(ret, AV_ERR_OK); 1695f6603c60Sopenharmony_ci close(fd); 1696f6603c60Sopenharmony_ci} 1697f6603c60Sopenharmony_ci 1698f6603c60Sopenharmony_ci/** 1699f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_4200 1700f6603c60Sopenharmony_ci * @tc.name : remove all tracks after demux finish 1701f6603c60Sopenharmony_ci * @tc.desc : function test 1702f6603c60Sopenharmony_ci */ 1703f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4200, TestSize.Level1) 1704f6603c60Sopenharmony_ci{ 1705f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1706f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1707f6603c60Sopenharmony_ci bool isEnd = false; 1708f6603c60Sopenharmony_ci 1709f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1710f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1711f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1712f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1713f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1714f6603c60Sopenharmony_ci 1715f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1716f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1717f6603c60Sopenharmony_ci 1718f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1719f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1720f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 1721f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1722f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1723f6603c60Sopenharmony_ci } 1724f6603c60Sopenharmony_ci while (!isEnd) { 1725f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1726f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1727f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1728f6603c60Sopenharmony_ci isEnd = true; 1729f6603c60Sopenharmony_ci cout << "is end !!!!!!!!!!!!!!!" << endl; 1730f6603c60Sopenharmony_ci } 1731f6603c60Sopenharmony_ci } 1732f6603c60Sopenharmony_ci } 1733f6603c60Sopenharmony_ci 1734f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1735f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, index)); 1736f6603c60Sopenharmony_ci } 1737f6603c60Sopenharmony_ci 1738f6603c60Sopenharmony_ci int32_t memorySize = OH_AVMemory_GetSize(memory); 1739f6603c60Sopenharmony_ci ASSERT_NE(0, memorySize); 1740f6603c60Sopenharmony_ci close(fd); 1741f6603c60Sopenharmony_ci} 1742f6603c60Sopenharmony_ci 1743f6603c60Sopenharmony_ci/** 1744f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_4300 1745f6603c60Sopenharmony_ci * @tc.name : remove all tracks before demux finish 1746f6603c60Sopenharmony_ci * @tc.desc : function test 1747f6603c60Sopenharmony_ci */ 1748f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4300, TestSize.Level1) 1749f6603c60Sopenharmony_ci{ 1750f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1751f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1752f6603c60Sopenharmony_ci bool isEnd = false; 1753f6603c60Sopenharmony_ci int count = 0; 1754f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1755f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1756f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1757f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1758f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1759f6603c60Sopenharmony_ci 1760f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1761f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1762f6603c60Sopenharmony_ci 1763f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1764f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1765f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 1766f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1767f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1768f6603c60Sopenharmony_ci } 1769f6603c60Sopenharmony_ci srand(time(nullptr)); 1770f6603c60Sopenharmony_ci int pos = rand() % 250; 1771f6603c60Sopenharmony_ci cout << " pos= " << pos << endl; 1772f6603c60Sopenharmony_ci while (!isEnd) { 1773f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1774f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1775f6603c60Sopenharmony_ci if (count == pos) { 1776f6603c60Sopenharmony_ci cout << count << " count == pos!!!!!!!!!" << endl; 1777f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, 0)); 1778f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, 1)); 1779f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OPERATE_NOT_PERMIT, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 1780f6603c60Sopenharmony_ci isEnd = true; 1781f6603c60Sopenharmony_ci break; 1782f6603c60Sopenharmony_ci } 1783f6603c60Sopenharmony_ci 1784f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1785f6603c60Sopenharmony_ci isEnd = true; 1786f6603c60Sopenharmony_ci cout << "is end !!!!!!!!!!!!!!!" << endl; 1787f6603c60Sopenharmony_ci } 1788f6603c60Sopenharmony_ci if (index == 0) { 1789f6603c60Sopenharmony_ci count++; 1790f6603c60Sopenharmony_ci } 1791f6603c60Sopenharmony_ci } 1792f6603c60Sopenharmony_ci } 1793f6603c60Sopenharmony_ci close(fd); 1794f6603c60Sopenharmony_ci} 1795f6603c60Sopenharmony_ci 1796f6603c60Sopenharmony_ci/** 1797f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_4400 1798f6603c60Sopenharmony_ci * @tc.name : remove audio track before demux finish 1799f6603c60Sopenharmony_ci * @tc.desc : function test 1800f6603c60Sopenharmony_ci */ 1801f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4400, TestSize.Level1) 1802f6603c60Sopenharmony_ci{ 1803f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1804f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1805f6603c60Sopenharmony_ci 1806f6603c60Sopenharmony_ci int audioCount = 0; 1807f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1808f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1809f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1810f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1811f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1812f6603c60Sopenharmony_ci 1813f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1814f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1815f6603c60Sopenharmony_ci 1816f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1817f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1818f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 1819f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 1820f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 1821f6603c60Sopenharmony_ci } 1822f6603c60Sopenharmony_ci srand(time(nullptr)); 1823f6603c60Sopenharmony_ci int pos = rand() % 250; 1824f6603c60Sopenharmony_ci cout << " pos= " << pos << endl; 1825f6603c60Sopenharmony_ci 1826f6603c60Sopenharmony_ci while (true) { 1827f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1828f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 1, memory, &attr)); 1829f6603c60Sopenharmony_ci if (audioCount == pos) { 1830f6603c60Sopenharmony_ci cout << audioCount << " audioCount == pos remove audio track!!!!!!!!!" << endl; 1831f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_UnselectTrackByID(demuxer, 1)); 1832f6603c60Sopenharmony_ci ASSERT_NE(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 1, memory, &attr)); 1833f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1834f6603c60Sopenharmony_ci break; 1835f6603c60Sopenharmony_ci } 1836f6603c60Sopenharmony_ci audioCount++; 1837f6603c60Sopenharmony_ci } 1838f6603c60Sopenharmony_ci 1839f6603c60Sopenharmony_ci while (true) { 1840f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 1841f6603c60Sopenharmony_ci if (attr.flags & OH_AVCodecBufferFlags::AVCODEC_BUFFER_FLAGS_EOS) { 1842f6603c60Sopenharmony_ci cout << "is end !!!!!!!!!!!!!!!" << endl; 1843f6603c60Sopenharmony_ci break; 1844f6603c60Sopenharmony_ci } 1845f6603c60Sopenharmony_ci } 1846f6603c60Sopenharmony_ci close(fd); 1847f6603c60Sopenharmony_ci} 1848f6603c60Sopenharmony_ci 1849f6603c60Sopenharmony_ci/** 1850f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_4500 1851f6603c60Sopenharmony_ci * @tc.name : start demux bufore add track 1852f6603c60Sopenharmony_ci * @tc.desc : function test 1853f6603c60Sopenharmony_ci */ 1854f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_4500, TestSize.Level2) 1855f6603c60Sopenharmony_ci{ 1856f6603c60Sopenharmony_ci uint32_t trackIndex = 0; 1857f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 1858f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1859f6603c60Sopenharmony_ci srand(time(nullptr)); 1860f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1861f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1862f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1863f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1864f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1865f6603c60Sopenharmony_ci 1866f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 1867f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 1868f6603c60Sopenharmony_ci ret = OH_AVDemuxer_ReadSample(demuxer, trackIndex, memory, &attr); 1869f6603c60Sopenharmony_ci ASSERT_EQ(ret, AV_ERR_OPERATE_NOT_PERMIT); 1870f6603c60Sopenharmony_ci close(fd); 1871f6603c60Sopenharmony_ci} 1872f6603c60Sopenharmony_ci 1873f6603c60Sopenharmony_ci/** 1874f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_7000 1875f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,GetSourceFormat,OH_MD_KEY_TRACK_COUNT 1876f6603c60Sopenharmony_ci * @tc.desc : function test 1877f6603c60Sopenharmony_ci */ 1878f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7000, TestSize.Level0) 1879f6603c60Sopenharmony_ci{ 1880f6603c60Sopenharmony_ci OH_AVFormat *trackFormat2 = nullptr; 1881f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1882f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1883f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1884f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1885f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1886f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1887f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1888f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 1889f6603c60Sopenharmony_ci cout << OH_AVFormat_DumpInfo(sourceFormat) << "sourceFormat" << endl; 1890f6603c60Sopenharmony_ci 1891f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 1); 1892f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1893f6603c60Sopenharmony_ci cout << OH_AVFormat_DumpInfo(trackFormat) << "trackformat1" << endl; 1894f6603c60Sopenharmony_ci 1895f6603c60Sopenharmony_ci trackFormat2 = OH_AVSource_GetTrackFormat(source, 0); 1896f6603c60Sopenharmony_ci cout << OH_AVFormat_DumpInfo(trackFormat2) << "trackformat0" << endl; 1897f6603c60Sopenharmony_ci 1898f6603c60Sopenharmony_ci close(fd); 1899f6603c60Sopenharmony_ci} 1900f6603c60Sopenharmony_ci 1901f6603c60Sopenharmony_ci/** 1902f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_7100 1903f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,GetSourceFormat,OH_MD_KEY_TRACK_COUNT 1904f6603c60Sopenharmony_ci * @tc.desc : function test 1905f6603c60Sopenharmony_ci */ 1906f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7100, TestSize.Level0) 1907f6603c60Sopenharmony_ci{ 1908f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1909f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1910f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1911f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1912f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1913f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1914f6603c60Sopenharmony_ci 1915f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 1916f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 1917f6603c60Sopenharmony_ci ASSERT_EQ(g_trackCount, 2); 1918f6603c60Sopenharmony_ci close(fd); 1919f6603c60Sopenharmony_ci} 1920f6603c60Sopenharmony_ci 1921f6603c60Sopenharmony_ci/** 1922f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_7200 1923f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,GetAudioTrackFormat,MD_KEY_AAC_IS_ADTS 1924f6603c60Sopenharmony_ci * @tc.desc : function test 1925f6603c60Sopenharmony_ci */ 1926f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7200, TestSize.Level0) 1927f6603c60Sopenharmony_ci{ 1928f6603c60Sopenharmony_ci const char *stringVal; 1929f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1930f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1931f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1932f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1933f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1934f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1935f6603c60Sopenharmony_ci 1936f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1937f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1938f6603c60Sopenharmony_ci ASSERT_FALSE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_AAC_IS_ADTS, &stringVal)); 1939f6603c60Sopenharmony_ci close(fd); 1940f6603c60Sopenharmony_ci} 1941f6603c60Sopenharmony_ci 1942f6603c60Sopenharmony_ci/** 1943f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_7300 1944f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,GetAudioTrackFormat ,MD_KEY_BITRATE 1945f6603c60Sopenharmony_ci * @tc.desc : function test 1946f6603c60Sopenharmony_ci */ 1947f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7300, TestSize.Level0) 1948f6603c60Sopenharmony_ci{ 1949f6603c60Sopenharmony_ci int64_t br = 0; 1950f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1951f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1952f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1953f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1954f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1955f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1956f6603c60Sopenharmony_ci 1957f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1958f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1959f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetLongValue(trackFormat, OH_MD_KEY_BITRATE, &br)); 1960f6603c60Sopenharmony_ci ASSERT_EQ(br, 319999); 1961f6603c60Sopenharmony_ci close(fd); 1962f6603c60Sopenharmony_ci} 1963f6603c60Sopenharmony_ci 1964f6603c60Sopenharmony_ci/** 1965f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_7400 1966f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,GetAudioTrackFormat,MD_KEY_CHANNEL_COUNT 1967f6603c60Sopenharmony_ci * @tc.desc : function test 1968f6603c60Sopenharmony_ci */ 1969f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7400, TestSize.Level0) 1970f6603c60Sopenharmony_ci{ 1971f6603c60Sopenharmony_ci int32_t cc = 0; 1972f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1973f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1974f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1975f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1976f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 1977f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 1978f6603c60Sopenharmony_ci 1979f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 1980f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 1981f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_AUD_CHANNEL_COUNT, &cc)); 1982f6603c60Sopenharmony_ci 1983f6603c60Sopenharmony_ci ASSERT_EQ(cc, 2); 1984f6603c60Sopenharmony_ci close(fd); 1985f6603c60Sopenharmony_ci} 1986f6603c60Sopenharmony_ci 1987f6603c60Sopenharmony_ci/** 1988f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_7500 1989f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,GetAudioTrackFormat,MD_KEY_SAMPLE_RATE 1990f6603c60Sopenharmony_ci * @tc.desc : function test 1991f6603c60Sopenharmony_ci */ 1992f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7500, TestSize.Level0) 1993f6603c60Sopenharmony_ci{ 1994f6603c60Sopenharmony_ci int32_t sr = 0; 1995f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 1996f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 1997f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 1998f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 1999f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2000f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2001f6603c60Sopenharmony_ci 2002f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 2003f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 2004f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_AUD_SAMPLE_RATE, &sr)); 2005f6603c60Sopenharmony_ci ASSERT_EQ(sr, 44100); 2006f6603c60Sopenharmony_ci close(fd); 2007f6603c60Sopenharmony_ci} 2008f6603c60Sopenharmony_ci 2009f6603c60Sopenharmony_ci/** 2010f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_7600 2011f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,GetVideoTrackFormat,MD_KEY_HEIGHT 2012f6603c60Sopenharmony_ci * @tc.desc : function test 2013f6603c60Sopenharmony_ci */ 2014f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7600, TestSize.Level0) 2015f6603c60Sopenharmony_ci{ 2016f6603c60Sopenharmony_ci int32_t height = 0; 2017f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2018f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2019f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2020f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2021f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2022f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2023f6603c60Sopenharmony_ci 2024f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 1); 2025f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 2026f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_HEIGHT, &height)); 2027f6603c60Sopenharmony_ci ASSERT_EQ(height, 0); 2028f6603c60Sopenharmony_ci close(fd); 2029f6603c60Sopenharmony_ci} 2030f6603c60Sopenharmony_ci 2031f6603c60Sopenharmony_ci/** 2032f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_7700 2033f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,GetVideoTrackFormat,MD_KEY_WIDTH 2034f6603c60Sopenharmony_ci * @tc.desc : function test 2035f6603c60Sopenharmony_ci */ 2036f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7700, TestSize.Level0) 2037f6603c60Sopenharmony_ci{ 2038f6603c60Sopenharmony_ci int32_t weight = 0; 2039f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2040f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2041f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2042f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2043f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2044f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2045f6603c60Sopenharmony_ci 2046f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 1); 2047f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 2048f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_WIDTH, &weight)); 2049f6603c60Sopenharmony_ci ASSERT_EQ(weight, 0); 2050f6603c60Sopenharmony_ci close(fd); 2051f6603c60Sopenharmony_ci} 2052f6603c60Sopenharmony_ci 2053f6603c60Sopenharmony_ci/** 2054f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_7800 2055f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 GetPublicTrackFormat,MD_KEY_CODEC_MIME 2056f6603c60Sopenharmony_ci * @tc.desc : function test 2057f6603c60Sopenharmony_ci */ 2058f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7800, TestSize.Level0) 2059f6603c60Sopenharmony_ci{ 2060f6603c60Sopenharmony_ci const char *stringVal; 2061f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2062f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2063f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2064f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2065f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2066f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2067f6603c60Sopenharmony_ci 2068f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 1); 2069f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 2070f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &stringVal)); 2071f6603c60Sopenharmony_ci ASSERT_EQ(0, strcmp(stringVal, "video/mp4v-es")); 2072f6603c60Sopenharmony_ci close(fd); 2073f6603c60Sopenharmony_ci} 2074f6603c60Sopenharmony_ci 2075f6603c60Sopenharmony_ci/** 2076f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_7900 2077f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,GetPublicTrackFormat,MD_KEY_TRACK_TYPE 2078f6603c60Sopenharmony_ci * @tc.desc : function test 2079f6603c60Sopenharmony_ci */ 2080f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_7900, TestSize.Level0) 2081f6603c60Sopenharmony_ci{ 2082f6603c60Sopenharmony_ci int32_t type = 0; 2083f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2084f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2085f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2086f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2087f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2088f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2089f6603c60Sopenharmony_ci 2090f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 2091f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 2092f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &type)); 2093f6603c60Sopenharmony_ci 2094f6603c60Sopenharmony_ci ASSERT_EQ(type, 0); 2095f6603c60Sopenharmony_ci close(fd); 2096f6603c60Sopenharmony_ci} 2097f6603c60Sopenharmony_ci 2098f6603c60Sopenharmony_ci/** 2099f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_8000 2100f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,check source format,OH_MD_KEY_TITLE 2101f6603c60Sopenharmony_ci * @tc.desc : function test 2102f6603c60Sopenharmony_ci */ 2103f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8000, TestSize.Level0) 2104f6603c60Sopenharmony_ci{ 2105f6603c60Sopenharmony_ci const char *stringVal; 2106f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2107f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2108f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2109f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2110f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2111f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2112f6603c60Sopenharmony_ci 2113f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2114f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 2115f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_TITLE, &stringVal)); 2116f6603c60Sopenharmony_ci ASSERT_EQ(0, strcmp(stringVal, "title")); 2117f6603c60Sopenharmony_ci close(fd); 2118f6603c60Sopenharmony_ci} 2119f6603c60Sopenharmony_ci 2120f6603c60Sopenharmony_ci/** 2121f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_8100 2122f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,check source format,OH_MD_KEY_ALBUM 2123f6603c60Sopenharmony_ci * @tc.desc : function test 2124f6603c60Sopenharmony_ci */ 2125f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8100, TestSize.Level0) 2126f6603c60Sopenharmony_ci{ 2127f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2128f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2129f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2130f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2131f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2132f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2133f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2134f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 2135f6603c60Sopenharmony_ci const char *stringVal; 2136f6603c60Sopenharmony_ci ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_ALBUM, &stringVal)); 2137f6603c60Sopenharmony_ci close(fd); 2138f6603c60Sopenharmony_ci} 2139f6603c60Sopenharmony_ci 2140f6603c60Sopenharmony_ci/** 2141f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_8200 2142f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,check source format,OH_MD_KEY_ALBUM_ARTIST 2143f6603c60Sopenharmony_ci * @tc.desc : function test 2144f6603c60Sopenharmony_ci */ 2145f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8200, TestSize.Level0) 2146f6603c60Sopenharmony_ci{ 2147f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2148f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2149f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2150f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2151f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2152f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2153f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2154f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 2155f6603c60Sopenharmony_ci const char *stringVal; 2156f6603c60Sopenharmony_ci ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_ALBUM_ARTIST, &stringVal)); 2157f6603c60Sopenharmony_ci close(fd); 2158f6603c60Sopenharmony_ci} 2159f6603c60Sopenharmony_ci 2160f6603c60Sopenharmony_ci/** 2161f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_8300 2162f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_DATE 2163f6603c60Sopenharmony_ci * @tc.desc : function test 2164f6603c60Sopenharmony_ci */ 2165f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8300, TestSize.Level0) 2166f6603c60Sopenharmony_ci{ 2167f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2168f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2169f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2170f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2171f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2172f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2173f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2174f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 2175f6603c60Sopenharmony_ci const char *stringVal; 2176f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_DATE, &stringVal)); 2177f6603c60Sopenharmony_ci ASSERT_EQ(0, strcmp(stringVal, "2023")); 2178f6603c60Sopenharmony_ci close(fd); 2179f6603c60Sopenharmony_ci} 2180f6603c60Sopenharmony_ci 2181f6603c60Sopenharmony_ci/** 2182f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_8400 2183f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_COMMENT 2184f6603c60Sopenharmony_ci * @tc.desc : function test 2185f6603c60Sopenharmony_ci */ 2186f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8400, TestSize.Level0) 2187f6603c60Sopenharmony_ci{ 2188f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2189f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2190f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2191f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2192f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2193f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2194f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2195f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 2196f6603c60Sopenharmony_ci const char *stringVal; 2197f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_COMMENT, &stringVal)); 2198f6603c60Sopenharmony_ci ASSERT_EQ(0, strcmp(stringVal, "COMMENT")); 2199f6603c60Sopenharmony_ci close(fd); 2200f6603c60Sopenharmony_ci} 2201f6603c60Sopenharmony_ci 2202f6603c60Sopenharmony_ci/** 2203f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_8500 2204f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_GENRE 2205f6603c60Sopenharmony_ci * @tc.desc : function test 2206f6603c60Sopenharmony_ci */ 2207f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8500, TestSize.Level0) 2208f6603c60Sopenharmony_ci{ 2209f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2210f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2211f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2212f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2213f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2214f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2215f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2216f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 2217f6603c60Sopenharmony_ci const char *stringVal; 2218f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_GENRE, &stringVal)); 2219f6603c60Sopenharmony_ci ASSERT_EQ(0, strcmp(stringVal, "Classical")); 2220f6603c60Sopenharmony_ci close(fd); 2221f6603c60Sopenharmony_ci} 2222f6603c60Sopenharmony_ci 2223f6603c60Sopenharmony_ci/** 2224f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_8600 2225f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_COPYRIGHT 2226f6603c60Sopenharmony_ci * @tc.desc : function test 2227f6603c60Sopenharmony_ci */ 2228f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8600, TestSize.Level0) 2229f6603c60Sopenharmony_ci{ 2230f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2231f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2232f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2233f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2234f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2235f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2236f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2237f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 2238f6603c60Sopenharmony_ci const char *stringVal; 2239f6603c60Sopenharmony_ci ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_COPYRIGHT, &stringVal)); 2240f6603c60Sopenharmony_ci close(fd); 2241f6603c60Sopenharmony_ci} 2242f6603c60Sopenharmony_ci 2243f6603c60Sopenharmony_ci/** 2244f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_8700 2245f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_LANGUAGE 2246f6603c60Sopenharmony_ci * @tc.desc : function test 2247f6603c60Sopenharmony_ci */ 2248f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8700, TestSize.Level0) 2249f6603c60Sopenharmony_ci{ 2250f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2251f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2252f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2253f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2254f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2255f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2256f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2257f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 2258f6603c60Sopenharmony_ci const char *stringVal; 2259f6603c60Sopenharmony_ci ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_LANGUAGE, &stringVal)); 2260f6603c60Sopenharmony_ci close(fd); 2261f6603c60Sopenharmony_ci} 2262f6603c60Sopenharmony_ci 2263f6603c60Sopenharmony_ci/** 2264f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_8800 2265f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_DESCRIPTION 2266f6603c60Sopenharmony_ci * @tc.desc : function test 2267f6603c60Sopenharmony_ci */ 2268f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8800, TestSize.Level0) 2269f6603c60Sopenharmony_ci{ 2270f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2271f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2272f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2273f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2274f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2275f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2276f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2277f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 2278f6603c60Sopenharmony_ci const char *stringVal; 2279f6603c60Sopenharmony_ci ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_DESCRIPTION, &stringVal)); 2280f6603c60Sopenharmony_ci close(fd); 2281f6603c60Sopenharmony_ci} 2282f6603c60Sopenharmony_ci 2283f6603c60Sopenharmony_ci/** 2284f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_8800 2285f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,check track format,OH_MD_KEY_LYRICS 2286f6603c60Sopenharmony_ci * @tc.desc : function test 2287f6603c60Sopenharmony_ci */ 2288f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_8900, TestSize.Level0) 2289f6603c60Sopenharmony_ci{ 2290f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2291f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2292f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2293f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2294f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2295f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2296f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2297f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 2298f6603c60Sopenharmony_ci const char *stringVal; 2299f6603c60Sopenharmony_ci ASSERT_FALSE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_LYRICS, &stringVal)); 2300f6603c60Sopenharmony_ci close(fd); 2301f6603c60Sopenharmony_ci} 2302f6603c60Sopenharmony_ci 2303f6603c60Sopenharmony_ci/** 2304f6603c60Sopenharmony_ci * @tc.number : DEMUXER_FUNCTION_9000 2305f6603c60Sopenharmony_ci * @tc.name : demuxer MP4 ,check source format,OH_MD_KEY_ARTIST 2306f6603c60Sopenharmony_ci * @tc.desc : function test 2307f6603c60Sopenharmony_ci */ 2308f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, DEMUXER_FUNCTION_9000, TestSize.Level0) 2309f6603c60Sopenharmony_ci{ 2310f6603c60Sopenharmony_ci const char *file = "/data/test/media/01_video_audio.mp4"; 2311f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2312f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2313f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2314f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2315f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2316f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2317f6603c60Sopenharmony_ci ASSERT_NE(sourceFormat, nullptr); 2318f6603c60Sopenharmony_ci const char *stringVal; 2319f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(sourceFormat, OH_MD_KEY_ARTIST, &stringVal)); 2320f6603c60Sopenharmony_ci ASSERT_EQ(0, strcmp(stringVal, "sam")); 2321f6603c60Sopenharmony_ci close(fd); 2322f6603c60Sopenharmony_ci} 2323f6603c60Sopenharmony_ci/** 2324f6603c60Sopenharmony_ci * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_0200 2325f6603c60Sopenharmony_ci * @tc.name : demuxer video amr nb 2326f6603c60Sopenharmony_ci * @tc.desc : function test 2327f6603c60Sopenharmony_ci */ 2328f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_0200, TestSize.Level0) 2329f6603c60Sopenharmony_ci{ 2330f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 2331f6603c60Sopenharmony_ci bool audioIsEnd = false; 2332f6603c60Sopenharmony_ci int audioFrame = 0; 2333f6603c60Sopenharmony_ci const char *file = "/data/test/media/audio/amr_nb_8000_1.amr"; 2334f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2335f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2336f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2337f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2338f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2339f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 2340f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 2341f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2342f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 2343f6603c60Sopenharmony_ci ASSERT_EQ(1, g_trackCount); 2344f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 2345f6603c60Sopenharmony_ci int aKeyCount = 0; 2346f6603c60Sopenharmony_ci while (!audioIsEnd) { 2347f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 2348f6603c60Sopenharmony_ci SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); 2349f6603c60Sopenharmony_ci } 2350f6603c60Sopenharmony_ci cout << file << "audioFrame " << audioFrame << " aKeyCount " << aKeyCount << endl; 2351f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 1501); 2352f6603c60Sopenharmony_ci ASSERT_EQ(aKeyCount, 1501); 2353f6603c60Sopenharmony_ci close(fd); 2354f6603c60Sopenharmony_ci} 2355f6603c60Sopenharmony_ci 2356f6603c60Sopenharmony_ci/** 2357f6603c60Sopenharmony_ci * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_0300 2358f6603c60Sopenharmony_ci * @tc.name : demuxer video amr wb 2359f6603c60Sopenharmony_ci * @tc.desc : function test 2360f6603c60Sopenharmony_ci */ 2361f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_0300, TestSize.Level0) 2362f6603c60Sopenharmony_ci{ 2363f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 2364f6603c60Sopenharmony_ci bool audioIsEnd = false; 2365f6603c60Sopenharmony_ci int audioFrame = 0; 2366f6603c60Sopenharmony_ci const char *file = "/data/test/media/audio/amr_wb_16000_1.amr"; 2367f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2368f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2369f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2370f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2371f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2372f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 2373f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 2374f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2375f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 2376f6603c60Sopenharmony_ci ASSERT_EQ(1, g_trackCount); 2377f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 2378f6603c60Sopenharmony_ci int aKeyCount = 0; 2379f6603c60Sopenharmony_ci while (!audioIsEnd) { 2380f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 2381f6603c60Sopenharmony_ci SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); 2382f6603c60Sopenharmony_ci } 2383f6603c60Sopenharmony_ci cout << file << "audioFrame " << audioFrame << " aKeyCount " << aKeyCount << endl; 2384f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 1500); 2385f6603c60Sopenharmony_ci ASSERT_EQ(aKeyCount, 1500); 2386f6603c60Sopenharmony_ci close(fd); 2387f6603c60Sopenharmony_ci} 2388f6603c60Sopenharmony_ci 2389f6603c60Sopenharmony_ci/** 2390f6603c60Sopenharmony_ci * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_1000 2391f6603c60Sopenharmony_ci * @tc.name : demuxer amr_nb format 2392f6603c60Sopenharmony_ci * @tc.desc : function test 2393f6603c60Sopenharmony_ci */ 2394f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1000, TestSize.Level2) 2395f6603c60Sopenharmony_ci{ 2396f6603c60Sopenharmony_ci const char *file = "/data/test/media/audio/amr_nb_8000_1.amr"; 2397f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2398f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2399f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2400f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2401f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2402f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 2403f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 2404f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 2405f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 2406f6603c60Sopenharmony_ci const char *codecMime = ""; 2407f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &codecMime)); 2408f6603c60Sopenharmony_ci cout << "codecMime" << codecMime << endl; 2409f6603c60Sopenharmony_ci ASSERT_EQ(0, strcmp(codecMime, "audio/3gpp")); 2410f6603c60Sopenharmony_ci close(fd); 2411f6603c60Sopenharmony_ci} 2412f6603c60Sopenharmony_ci 2413f6603c60Sopenharmony_ci/** 2414f6603c60Sopenharmony_ci * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_1100 2415f6603c60Sopenharmony_ci * @tc.name : demuxer amr_wb format 2416f6603c60Sopenharmony_ci * @tc.desc : function test 2417f6603c60Sopenharmony_ci */ 2418f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1100, TestSize.Level2) 2419f6603c60Sopenharmony_ci{ 2420f6603c60Sopenharmony_ci const char *file = "/data/test/media/audio/amr_wb_16000_1.amr"; 2421f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2422f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2423f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2424f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2425f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2426f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 2427f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 2428f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 2429f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 2430f6603c60Sopenharmony_ci const char *codecMime = ""; 2431f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetStringValue(trackFormat, OH_MD_KEY_CODEC_MIME, &codecMime)); 2432f6603c60Sopenharmony_ci cout << "codecMime" << codecMime << endl; 2433f6603c60Sopenharmony_ci ASSERT_EQ(0, strcmp(codecMime, "audio/amr-wb")); 2434f6603c60Sopenharmony_ci close(fd); 2435f6603c60Sopenharmony_ci} 2436f6603c60Sopenharmony_ci 2437f6603c60Sopenharmony_ci 2438f6603c60Sopenharmony_ci/** 2439f6603c60Sopenharmony_ci * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_1200 2440f6603c60Sopenharmony_ci * @tc.name : demux hevc ts video and audio 2441f6603c60Sopenharmony_ci * @tc.desc : function test 2442f6603c60Sopenharmony_ci */ 2443f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1200, TestSize.Level0) 2444f6603c60Sopenharmony_ci{ 2445f6603c60Sopenharmony_ci if (access(HEVC_LIB_PATH.c_str(), F_OK) != 0) { 2446f6603c60Sopenharmony_ci return; 2447f6603c60Sopenharmony_ci } 2448f6603c60Sopenharmony_ci int tarckType = 0; 2449f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 2450f6603c60Sopenharmony_ci bool audioIsEnd = false; 2451f6603c60Sopenharmony_ci bool videoIsEnd = false; 2452f6603c60Sopenharmony_ci int audioFrame = 0; 2453f6603c60Sopenharmony_ci int videoFrame = 0; 2454f6603c60Sopenharmony_ci const char *file = "/data/test/media/hevc_v_a.ts"; 2455f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2456f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2457f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2458f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2459f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2460f6603c60Sopenharmony_ci 2461f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 2462f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 2463f6603c60Sopenharmony_ci 2464f6603c60Sopenharmony_ci sourceFormat = OH_AVSource_GetSourceFormat(source); 2465f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(sourceFormat, OH_MD_KEY_TRACK_COUNT, &g_trackCount)); 2466f6603c60Sopenharmony_ci ASSERT_EQ(2, g_trackCount); 2467f6603c60Sopenharmony_ci 2468f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 2469f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, index)); 2470f6603c60Sopenharmony_ci } 2471f6603c60Sopenharmony_ci int vKeyCount = 0; 2472f6603c60Sopenharmony_ci int aKeyCount = 0; 2473f6603c60Sopenharmony_ci while (!audioIsEnd || !videoIsEnd) { 2474f6603c60Sopenharmony_ci for (int32_t index = 0; index < g_trackCount; index++) { 2475f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, index); 2476f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 2477f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 2478f6603c60Sopenharmony_ci if ((audioIsEnd && (tarckType == 0)) || (videoIsEnd && (tarckType == 1))) { 2479f6603c60Sopenharmony_ci continue; 2480f6603c60Sopenharmony_ci } 2481f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, index, memory, &attr)); 2482f6603c60Sopenharmony_ci if (tarckType == 0) { 2483f6603c60Sopenharmony_ci SetAudioValue(attr, audioIsEnd, audioFrame, aKeyCount); 2484f6603c60Sopenharmony_ci } else if (tarckType == 1) { 2485f6603c60Sopenharmony_ci SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); 2486f6603c60Sopenharmony_ci } 2487f6603c60Sopenharmony_ci } 2488f6603c60Sopenharmony_ci } 2489f6603c60Sopenharmony_ci ASSERT_EQ(audioFrame, 384); 2490f6603c60Sopenharmony_ci ASSERT_EQ(aKeyCount, 384); 2491f6603c60Sopenharmony_ci ASSERT_EQ(videoFrame, 602); 2492f6603c60Sopenharmony_ci ASSERT_EQ(vKeyCount, 3); 2493f6603c60Sopenharmony_ci close(fd); 2494f6603c60Sopenharmony_ci} 2495f6603c60Sopenharmony_ci 2496f6603c60Sopenharmony_ci/** 2497f6603c60Sopenharmony_ci * @tc.number : SUB_MEDIA_DEMUXER_FUNCTION_1300 2498f6603c60Sopenharmony_ci * @tc.name : demux hevc ts video 2499f6603c60Sopenharmony_ci * @tc.desc : function test 2500f6603c60Sopenharmony_ci */ 2501f6603c60Sopenharmony_ciHWTEST_F(DemuxerFuncNdkTest, SUB_MEDIA_DEMUXER_FUNCTION_1300, TestSize.Level0) 2502f6603c60Sopenharmony_ci{ 2503f6603c60Sopenharmony_ci if (access(HEVC_LIB_PATH.c_str(), F_OK) != 0) { 2504f6603c60Sopenharmony_ci return; 2505f6603c60Sopenharmony_ci } 2506f6603c60Sopenharmony_ci int tarckType = 0; 2507f6603c60Sopenharmony_ci OH_AVCodecBufferAttr attr; 2508f6603c60Sopenharmony_ci bool videoIsEnd = false; 2509f6603c60Sopenharmony_ci int videoFrame = 0; 2510f6603c60Sopenharmony_ci const char *file = "/data/test/media/hevc_v.ts"; 2511f6603c60Sopenharmony_ci int fd = open(file, O_RDONLY); 2512f6603c60Sopenharmony_ci int64_t size = GetFileSize(file); 2513f6603c60Sopenharmony_ci cout << file << "----------------------" << fd << "---------" << size << endl; 2514f6603c60Sopenharmony_ci source = OH_AVSource_CreateWithFD(fd, 0, size); 2515f6603c60Sopenharmony_ci ASSERT_NE(source, nullptr); 2516f6603c60Sopenharmony_ci 2517f6603c60Sopenharmony_ci demuxer = OH_AVDemuxer_CreateWithSource(source); 2518f6603c60Sopenharmony_ci ASSERT_NE(demuxer, nullptr); 2519f6603c60Sopenharmony_ci 2520f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_SelectTrackByID(demuxer, 0)); 2521f6603c60Sopenharmony_ci int vKeyCount = 0; 2522f6603c60Sopenharmony_ci while (!videoIsEnd) { 2523f6603c60Sopenharmony_ci trackFormat = OH_AVSource_GetTrackFormat(source, 0); 2524f6603c60Sopenharmony_ci ASSERT_NE(trackFormat, nullptr); 2525f6603c60Sopenharmony_ci ASSERT_TRUE(OH_AVFormat_GetIntValue(trackFormat, OH_MD_KEY_TRACK_TYPE, &tarckType)); 2526f6603c60Sopenharmony_ci if (videoIsEnd && (tarckType == 1)) { 2527f6603c60Sopenharmony_ci continue; 2528f6603c60Sopenharmony_ci } 2529f6603c60Sopenharmony_ci ASSERT_EQ(AV_ERR_OK, OH_AVDemuxer_ReadSample(demuxer, 0, memory, &attr)); 2530f6603c60Sopenharmony_ci SetVideoValue(attr, videoIsEnd, videoFrame, vKeyCount); 2531f6603c60Sopenharmony_ci } 2532f6603c60Sopenharmony_ci ASSERT_EQ(videoFrame, 602); 2533f6603c60Sopenharmony_ci ASSERT_EQ(vKeyCount, 3); 2534f6603c60Sopenharmony_ci close(fd); 2535f6603c60Sopenharmony_ci}