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