1da853ecaSopenharmony_ci/* 2da853ecaSopenharmony_ci * Copyright (C) 2022 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 <string> 17da853ecaSopenharmony_ci#include <iostream> 18da853ecaSopenharmony_ci#include <thread> 19da853ecaSopenharmony_ci#include <vector> 20da853ecaSopenharmony_ci#include <ctime> 21da853ecaSopenharmony_ci#include "gtest/gtest.h" 22da853ecaSopenharmony_ci#include "AVMuxerDemo.h" 23da853ecaSopenharmony_ci#include "fcntl.h" 24da853ecaSopenharmony_ci#include "avcodec_errors.h" 25da853ecaSopenharmony_ci#include "securec.h" 26da853ecaSopenharmony_ci 27da853ecaSopenharmony_ciusing namespace std; 28da853ecaSopenharmony_ciusing namespace testing::ext; 29da853ecaSopenharmony_ciusing namespace OHOS; 30da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec; 31da853ecaSopenharmony_ciusing namespace OHOS::Media; 32da853ecaSopenharmony_ciconstexpr int32_t SAMPLE_RATE_44100 = 44100; 33da853ecaSopenharmony_ciconstexpr int32_t CHANNEL_COUNT = 2; 34da853ecaSopenharmony_ciconstexpr int32_t BUFFER_SIZE = 100; 35da853ecaSopenharmony_ciconstexpr int32_t SAMPLE_RATE_352 = 352; 36da853ecaSopenharmony_ciconstexpr int32_t SAMPLE_RATE_288 = 288; 37da853ecaSopenharmony_ciconstexpr int32_t BUFFER_SIZE_NUM = 1024 * 1024; 38da853ecaSopenharmony_ci 39da853ecaSopenharmony_cinamespace { 40da853ecaSopenharmony_ciclass InnerAVMuxerStablityTest : public testing::Test { 41da853ecaSopenharmony_cipublic: 42da853ecaSopenharmony_ci static void SetUpTestCase(); 43da853ecaSopenharmony_ci static void TearDownTestCase(); 44da853ecaSopenharmony_ci void SetUp() override; 45da853ecaSopenharmony_ci void TearDown() override; 46da853ecaSopenharmony_ci}; 47da853ecaSopenharmony_ci 48da853ecaSopenharmony_civoid InnerAVMuxerStablityTest::SetUpTestCase() {} 49da853ecaSopenharmony_civoid InnerAVMuxerStablityTest::TearDownTestCase() {} 50da853ecaSopenharmony_civoid InnerAVMuxerStablityTest::SetUp() {} 51da853ecaSopenharmony_civoid InnerAVMuxerStablityTest::TearDown() {} 52da853ecaSopenharmony_ci 53da853ecaSopenharmony_cistatic int g_inputFile = -1; 54da853ecaSopenharmony_cistatic const int DATA_AUDIO_ID = 0; 55da853ecaSopenharmony_cistatic const int DATA_VIDEO_ID = 1; 56da853ecaSopenharmony_ci 57da853ecaSopenharmony_ciconstexpr int RUN_TIMES = 1000; 58da853ecaSopenharmony_ciconstexpr int RUN_TIME = 8 * 3600; 59da853ecaSopenharmony_ci 60da853ecaSopenharmony_ciint32_t g_testResult[10] = { -1 }; 61da853ecaSopenharmony_ci 62da853ecaSopenharmony_ciint32_t SetRotation(AVMuxerDemo *muxerDemo) 63da853ecaSopenharmony_ci{ 64da853ecaSopenharmony_ci int32_t rotation = 0; 65da853ecaSopenharmony_ci int32_t ret = muxerDemo->InnerSetRotation(rotation); 66da853ecaSopenharmony_ci return ret; 67da853ecaSopenharmony_ci} 68da853ecaSopenharmony_ci 69da853ecaSopenharmony_ciint32_t AddTrack(AVMuxerDemo *muxerDemo, int32_t &trackIndex) 70da853ecaSopenharmony_ci{ 71da853ecaSopenharmony_ci std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 72da853ecaSopenharmony_ci int extraSize = 0; 73da853ecaSopenharmony_ci read(g_inputFile, static_cast<void *>(&extraSize), sizeof(extraSize)); 74da853ecaSopenharmony_ci if (extraSize <= BUFFER_SIZE && extraSize > 0) { 75da853ecaSopenharmony_ci std::vector<uint8_t> buffer(extraSize); 76da853ecaSopenharmony_ci read(g_inputFile, buffer.data(), extraSize); 77da853ecaSopenharmony_ci audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(buffer); 78da853ecaSopenharmony_ci } 79da853ecaSopenharmony_ci audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 80da853ecaSopenharmony_ci audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(CHANNEL_COUNT); 81da853ecaSopenharmony_ci audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(SAMPLE_RATE_44100); 82da853ecaSopenharmony_ci 83da853ecaSopenharmony_ci int32_t trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 84da853ecaSopenharmony_ci return trackId; 85da853ecaSopenharmony_ci} 86da853ecaSopenharmony_ci 87da853ecaSopenharmony_ciint32_t WriteSample(AVMuxerDemo *muxerDemo) 88da853ecaSopenharmony_ci{ 89da853ecaSopenharmony_ci uint32_t trackIndex = 0; 90da853ecaSopenharmony_ci uint8_t data[100]; 91da853ecaSopenharmony_ci std::shared_ptr<AVBuffer> avMemBuffer = AVBuffer::CreateAVBuffer(data, sizeof(data), sizeof(data)); 92da853ecaSopenharmony_ci avMemBuffer->flag_ = static_cast<uint32_t>(Plugins::AVBufferFlag::NONE); 93da853ecaSopenharmony_ci 94da853ecaSopenharmony_ci int32_t ret = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 95da853ecaSopenharmony_ci 96da853ecaSopenharmony_ci return ret; 97da853ecaSopenharmony_ci} 98da853ecaSopenharmony_ci 99da853ecaSopenharmony_ciint32_t AddAudioTrack(AVMuxerDemo *muxerDemo, int32_t &trackIndex) 100da853ecaSopenharmony_ci{ 101da853ecaSopenharmony_ci std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 102da853ecaSopenharmony_ci int extraSize = 0; 103da853ecaSopenharmony_ci read(g_inputFile, static_cast<void*>(&extraSize), sizeof(extraSize)); 104da853ecaSopenharmony_ci if (extraSize <= BUFFER_SIZE && extraSize > 0) { 105da853ecaSopenharmony_ci std::vector<uint8_t> buffer(extraSize); 106da853ecaSopenharmony_ci read(g_inputFile, buffer.data(), extraSize); 107da853ecaSopenharmony_ci audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(buffer); 108da853ecaSopenharmony_ci } 109da853ecaSopenharmony_ci audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_MPEG); 110da853ecaSopenharmony_ci audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(CHANNEL_COUNT); 111da853ecaSopenharmony_ci audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(SAMPLE_RATE_44100); 112da853ecaSopenharmony_ci 113da853ecaSopenharmony_ci int32_t trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 114da853ecaSopenharmony_ci return trackId; 115da853ecaSopenharmony_ci} 116da853ecaSopenharmony_ci 117da853ecaSopenharmony_ciint32_t AddAudioTrackAAC(AVMuxerDemo *muxerDemo, int32_t &trackIndex) 118da853ecaSopenharmony_ci{ 119da853ecaSopenharmony_ci std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 120da853ecaSopenharmony_ci int extraSize = 0; 121da853ecaSopenharmony_ci read(g_inputFile, static_cast<void*>(&extraSize), sizeof(extraSize)); 122da853ecaSopenharmony_ci if (extraSize <= BUFFER_SIZE && extraSize > 0) { 123da853ecaSopenharmony_ci std::vector<uint8_t> buffer(extraSize); 124da853ecaSopenharmony_ci read(g_inputFile, buffer.data(), extraSize); 125da853ecaSopenharmony_ci audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(buffer); 126da853ecaSopenharmony_ci } 127da853ecaSopenharmony_ci audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 128da853ecaSopenharmony_ci audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(CHANNEL_COUNT); 129da853ecaSopenharmony_ci audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(SAMPLE_RATE_44100); 130da853ecaSopenharmony_ci audioParams->Set<Tag::MEDIA_PROFILE>(AAC_PROFILE_LC); 131da853ecaSopenharmony_ci 132da853ecaSopenharmony_ci int32_t trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 133da853ecaSopenharmony_ci return trackId; 134da853ecaSopenharmony_ci} 135da853ecaSopenharmony_ci 136da853ecaSopenharmony_ciint32_t AddVideoTrack(AVMuxerDemo *muxerDemo, int32_t &trackIndex) 137da853ecaSopenharmony_ci{ 138da853ecaSopenharmony_ci std::shared_ptr<Meta> videoParams = std::make_shared<Meta>(); 139da853ecaSopenharmony_ci int extraSize = 0; 140da853ecaSopenharmony_ci read(g_inputFile, static_cast<void*>(&extraSize), sizeof(extraSize)); 141da853ecaSopenharmony_ci if (extraSize <= BUFFER_SIZE && extraSize > 0) { 142da853ecaSopenharmony_ci std::vector<uint8_t> buffer(extraSize); 143da853ecaSopenharmony_ci read(g_inputFile, buffer.data(), extraSize); 144da853ecaSopenharmony_ci videoParams->Set<Tag::MEDIA_CODEC_CONFIG>(buffer); 145da853ecaSopenharmony_ci } 146da853ecaSopenharmony_ci videoParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::VIDEO_MPEG4); 147da853ecaSopenharmony_ci videoParams->Set<Tag::VIDEO_WIDTH>(SAMPLE_RATE_352); 148da853ecaSopenharmony_ci videoParams->Set<Tag::VIDEO_HEIGHT>(SAMPLE_RATE_288); 149da853ecaSopenharmony_ci 150da853ecaSopenharmony_ci int32_t trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 151da853ecaSopenharmony_ci return trackId; 152da853ecaSopenharmony_ci} 153da853ecaSopenharmony_ci 154da853ecaSopenharmony_civoid RemoveHeader() 155da853ecaSopenharmony_ci{ 156da853ecaSopenharmony_ci int extraSize = 0; 157da853ecaSopenharmony_ci unsigned char buffer[100] = {0}; 158da853ecaSopenharmony_ci read(g_inputFile, static_cast<void*>(&extraSize), sizeof(extraSize)); 159da853ecaSopenharmony_ci if (extraSize <= BUFFER_SIZE && extraSize > 0) { 160da853ecaSopenharmony_ci read(g_inputFile, buffer, extraSize); 161da853ecaSopenharmony_ci } 162da853ecaSopenharmony_ci} 163da853ecaSopenharmony_ci 164da853ecaSopenharmony_civoid WriteTrackSample(AVMuxerDemo *muxerDemo, int audioTrackIndex, int videoTrackIndex) 165da853ecaSopenharmony_ci{ 166da853ecaSopenharmony_ci int dataTrackId = 0; 167da853ecaSopenharmony_ci int dataSize = 0; 168da853ecaSopenharmony_ci int ret = 0; 169da853ecaSopenharmony_ci int trackId = 0; 170da853ecaSopenharmony_ci uint32_t trackIndex; 171da853ecaSopenharmony_ci 172da853ecaSopenharmony_ci auto alloc = AVAllocatorFactory::CreateSharedAllocator(MemoryFlag::MEMORY_READ_WRITE); 173da853ecaSopenharmony_ci std::shared_ptr<AVBuffer> avMemBuffer = AVBuffer::CreateAVBuffer(alloc, BUFFER_SIZE_NUM); 174da853ecaSopenharmony_ci do { 175da853ecaSopenharmony_ci ret = read(g_inputFile, static_cast<void*>(&dataTrackId), sizeof(dataTrackId)); 176da853ecaSopenharmony_ci if (ret <= 0) { 177da853ecaSopenharmony_ci return; 178da853ecaSopenharmony_ci } 179da853ecaSopenharmony_ci ret = read(g_inputFile, static_cast<void*>(&avMemBuffer->pts_), sizeof(avMemBuffer->pts_)); 180da853ecaSopenharmony_ci if (ret <= 0) { 181da853ecaSopenharmony_ci return; 182da853ecaSopenharmony_ci } 183da853ecaSopenharmony_ci ret = read(g_inputFile, static_cast<void*>(&dataSize), sizeof(dataSize)); 184da853ecaSopenharmony_ci if (ret <= 0) { 185da853ecaSopenharmony_ci return; 186da853ecaSopenharmony_ci } 187da853ecaSopenharmony_ci ret = read(g_inputFile, static_cast<void*>(avMemBuffer->memory_->GetAddr()), dataSize); 188da853ecaSopenharmony_ci if (ret <= 0) { 189da853ecaSopenharmony_ci return; 190da853ecaSopenharmony_ci } 191da853ecaSopenharmony_ci 192da853ecaSopenharmony_ci avMemBuffer->memory_->SetSize(dataSize); 193da853ecaSopenharmony_ci if (dataTrackId == DATA_AUDIO_ID) { 194da853ecaSopenharmony_ci trackId = audioTrackIndex; 195da853ecaSopenharmony_ci } else if (dataTrackId == DATA_VIDEO_ID) { 196da853ecaSopenharmony_ci trackId = videoTrackIndex; 197da853ecaSopenharmony_ci } else { 198da853ecaSopenharmony_ci cout << "error dataTrackId : " << trackId << endl; 199da853ecaSopenharmony_ci } 200da853ecaSopenharmony_ci if (trackId >= 0) { 201da853ecaSopenharmony_ci trackIndex = trackId; 202da853ecaSopenharmony_ci int32_t result = muxerDemo->InnerWriteSample(trackIndex, avMemBuffer); 203da853ecaSopenharmony_ci if (result != AVCS_ERR_OK) { 204da853ecaSopenharmony_ci return; 205da853ecaSopenharmony_ci } 206da853ecaSopenharmony_ci } 207da853ecaSopenharmony_ci } while (ret > 0) 208da853ecaSopenharmony_ci} 209da853ecaSopenharmony_ci 210da853ecaSopenharmony_ciint32_t AddAudioTrackByFd(AVMuxerDemo *muxerDemo, int32_t inputFile, int32_t &trackIndex) 211da853ecaSopenharmony_ci{ 212da853ecaSopenharmony_ci std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 213da853ecaSopenharmony_ci int extraSize = 0; 214da853ecaSopenharmony_ci read(inputFile, static_cast<void*>(&extraSize), sizeof(extraSize)); 215da853ecaSopenharmony_ci if (extraSize <= BUFFER_SIZE && extraSize > 0) { 216da853ecaSopenharmony_ci std::vector<uint8_t> buffer(extraSize); 217da853ecaSopenharmony_ci read(inputFile, buffer.data(), extraSize); 218da853ecaSopenharmony_ci audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(buffer); 219da853ecaSopenharmony_ci } 220da853ecaSopenharmony_ci audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_MPEG); 221da853ecaSopenharmony_ci audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(CHANNEL_COUNT); 222da853ecaSopenharmony_ci audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(SAMPLE_RATE_44100); 223da853ecaSopenharmony_ci 224da853ecaSopenharmony_ci int32_t trackId = muxerDemo->InnerAddTrack(trackIndex, audioParams); 225da853ecaSopenharmony_ci return trackId; 226da853ecaSopenharmony_ci} 227da853ecaSopenharmony_ci 228da853ecaSopenharmony_ciint32_t AddAudioTrackAACByFd(AVMuxerDemo *muxerDemo, int32_t inputFile, int32_t &trackIndex) 229da853ecaSopenharmony_ci{ 230da853ecaSopenharmony_ci std::shared_ptr<Meta> audioParams = std::make_shared<Meta>(); 231da853ecaSopenharmony_ci int extraSize = 0; 232da853ecaSopenharmony_ci read(inputFile, static_cast<void*>(&extraSize), sizeof(extraSize)); 233da853ecaSopenharmony_ci if (extraSize <= BUFFER_SIZE && extraSize > 0) { 234da853ecaSopenharmony_ci std::vector<uint8_t> buffer(extraSize); 235da853ecaSopenharmony_ci read(inputFile, buffer.data(), extraSize); 236da853ecaSopenharmony_ci audioParams->Set<Tag::MEDIA_CODEC_CONFIG>(buffer); 237da853ecaSopenharmony_ci } 238da853ecaSopenharmony_ci audioParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::AUDIO_AAC); 239da853ecaSopenharmony_ci audioParams->Set<Tag::AUDIO_CHANNEL_COUNT>(CHANNEL_COUNT); 240da853ecaSopenharmony_ci audioParams->Set<Tag::AUDIO_SAMPLE_RATE>(SAMPLE_RATE_44100); 241da853ecaSopenharmony_ci 242da853ecaSopenharmony_ci int32_t ret = muxerDemo->InnerAddTrack(trackIndex, audioParams); 243da853ecaSopenharmony_ci return ret; 244da853ecaSopenharmony_ci} 245da853ecaSopenharmony_ci 246da853ecaSopenharmony_ciint32_t AddVideoTrackByFd(AVMuxerDemo *muxerDemo, int32_t inputFile, int32_t &trackIndex) 247da853ecaSopenharmony_ci{ 248da853ecaSopenharmony_ci std::shared_ptr<Meta> videoParams = std::make_shared<Meta>(); 249da853ecaSopenharmony_ci int extraSize = 0; 250da853ecaSopenharmony_ci read(inputFile, static_cast<void*>(&extraSize), sizeof(extraSize)); 251da853ecaSopenharmony_ci if (extraSize <= BUFFER_SIZE && extraSize > 0) { 252da853ecaSopenharmony_ci std::vector<uint8_t> buffer(extraSize); 253da853ecaSopenharmony_ci read(inputFile, buffer.data(), extraSize); 254da853ecaSopenharmony_ci videoParams->Set<Tag::MEDIA_CODEC_CONFIG>(buffer); 255da853ecaSopenharmony_ci } 256da853ecaSopenharmony_ci videoParams->Set<Tag::MIME_TYPE>(Plugins::MimeType::VIDEO_MPEG4); 257da853ecaSopenharmony_ci videoParams->Set<Tag::VIDEO_WIDTH>(SAMPLE_RATE_352); 258da853ecaSopenharmony_ci videoParams->Set<Tag::VIDEO_HEIGHT>(SAMPLE_RATE_288); 259da853ecaSopenharmony_ci 260da853ecaSopenharmony_ci int32_t trackId = muxerDemo->InnerAddTrack(trackIndex, videoParams); 261da853ecaSopenharmony_ci return trackId; 262da853ecaSopenharmony_ci} 263da853ecaSopenharmony_ci 264da853ecaSopenharmony_ciint WriteTrackSampleByFdRead(int *inputFile, int64_t *pts, int *dataSize, int *dataTrackId) 265da853ecaSopenharmony_ci{ 266da853ecaSopenharmony_ci int ret = read(*inputFile, static_cast<void*>(dataTrackId), sizeof(*dataTrackId)); 267da853ecaSopenharmony_ci if (ret <= 0) { 268da853ecaSopenharmony_ci cout << "read dataTrackId error, ret is: " << ret << endl; 269da853ecaSopenharmony_ci return -1; 270da853ecaSopenharmony_ci } 271da853ecaSopenharmony_ci ret = read(*inputFile, static_cast<void*>(pts), sizeof(*pts)); 272da853ecaSopenharmony_ci if (ret <= 0) { 273da853ecaSopenharmony_ci cout << "read info.presentationTimeUs error, ret is: " << ret << endl; 274da853ecaSopenharmony_ci return -1; 275da853ecaSopenharmony_ci } 276da853ecaSopenharmony_ci ret = read(*inputFile, static_cast<void*>(dataSize), sizeof(*dataSize)); 277da853ecaSopenharmony_ci if (ret <= 0) { 278da853ecaSopenharmony_ci cout << "read dataSize error, ret is: " << ret << endl; 279da853ecaSopenharmony_ci return -1; 280da853ecaSopenharmony_ci } 281da853ecaSopenharmony_ci return 0; 282da853ecaSopenharmony_ci} 283da853ecaSopenharmony_ci 284da853ecaSopenharmony_ciint WriteTrackSampleByFdMem(int dataSize, std::shared_ptr<AVBuffer> &avMuxerDemoBuffer) 285da853ecaSopenharmony_ci{ 286da853ecaSopenharmony_ci if (avMuxerDemoBuffer != nullptr && dataSize > avMuxerDemoBuffer->memory_->GetCapacity()) { 287da853ecaSopenharmony_ci avMuxerDemoBuffer = nullptr; 288da853ecaSopenharmony_ci } 289da853ecaSopenharmony_ci if (avMuxerDemoBuffer == nullptr) { 290da853ecaSopenharmony_ci auto alloc = AVAllocatorFactory::CreateSharedAllocator(MemoryFlag::MEMORY_READ_ONLY); 291da853ecaSopenharmony_ci avMuxerDemoBuffer = AVBuffer::CreateAVBuffer(alloc, dataSize); 292da853ecaSopenharmony_ci if (avMuxerDemoBuffer == nullptr) { 293da853ecaSopenharmony_ci printf("error malloc memory!\n"); 294da853ecaSopenharmony_ci return -1; 295da853ecaSopenharmony_ci } 296da853ecaSopenharmony_ci } 297da853ecaSopenharmony_ci return 0; 298da853ecaSopenharmony_ci} 299da853ecaSopenharmony_ci 300da853ecaSopenharmony_ciint WriteTrackSampleByFdGetIndex(const int *dataTrackId, const int *audioTrackIndex, 301da853ecaSopenharmony_ci int *videoTrackIndex) 302da853ecaSopenharmony_ci{ 303da853ecaSopenharmony_ci int trackId = 0; 304da853ecaSopenharmony_ci if (*dataTrackId == DATA_AUDIO_ID) { 305da853ecaSopenharmony_ci trackId = *audioTrackIndex; 306da853ecaSopenharmony_ci } else if (*dataTrackId == DATA_VIDEO_ID) { 307da853ecaSopenharmony_ci trackId = *videoTrackIndex; 308da853ecaSopenharmony_ci } else { 309da853ecaSopenharmony_ci cout << "error dataTrackId : " << *dataTrackId << endl; 310da853ecaSopenharmony_ci } 311da853ecaSopenharmony_ci 312da853ecaSopenharmony_ci return trackId; 313da853ecaSopenharmony_ci} 314da853ecaSopenharmony_ci 315da853ecaSopenharmony_civoid WriteTrackSampleByFd(AVMuxerDemo *muxerDemo, int audioTrackIndex, int videoTrackIndex, int32_t inputFile) 316da853ecaSopenharmony_ci{ 317da853ecaSopenharmony_ci int dataTrackId = 0; 318da853ecaSopenharmony_ci int dataSize = 0; 319da853ecaSopenharmony_ci int trackId = 0; 320da853ecaSopenharmony_ci int64_t pts = 0; 321da853ecaSopenharmony_ci uint32_t trackIndex; 322da853ecaSopenharmony_ci std::shared_ptr<AVBuffer> avMuxerDemoBuffer = nullptr; 323da853ecaSopenharmony_ci string resultStr = ""; 324da853ecaSopenharmony_ci do { 325da853ecaSopenharmony_ci int ret = WriteTrackSampleByFdRead(&inputFile, &pts, &dataSize, &dataTrackId); 326da853ecaSopenharmony_ci if (ret != 0) { 327da853ecaSopenharmony_ci return; 328da853ecaSopenharmony_ci } 329da853ecaSopenharmony_ci 330da853ecaSopenharmony_ci ret = WriteTrackSampleByFdMem(dataSize, avMuxerDemoBuffer); 331da853ecaSopenharmony_ci if (ret != 0) { 332da853ecaSopenharmony_ci break; 333da853ecaSopenharmony_ci } 334da853ecaSopenharmony_ci 335da853ecaSopenharmony_ci resultStr = 336da853ecaSopenharmony_ci "inputFile is: " + to_string(inputFile) + ", avMuxerDemoBufferSize is " + to_string(dataSize); 337da853ecaSopenharmony_ci cout << resultStr << endl; 338da853ecaSopenharmony_ci 339da853ecaSopenharmony_ci ret = read(inputFile, static_cast<void*>(avMuxerDemoBuffer->memory_->GetAddr()), dataSize); 340da853ecaSopenharmony_ci if (ret <= 0) { 341da853ecaSopenharmony_ci cout << "read data error, ret is: " << ret << endl; 342da853ecaSopenharmony_ci continue; 343da853ecaSopenharmony_ci } 344da853ecaSopenharmony_ci avMuxerDemoBuffer->pts_ = pts; 345da853ecaSopenharmony_ci avMuxerDemoBuffer->memory_->SetSize(dataSize); 346da853ecaSopenharmony_ci trackId = WriteTrackSampleByFdGetIndex(&dataTrackId, &audioTrackIndex, &videoTrackIndex); 347da853ecaSopenharmony_ci if (trackId >= 0) { 348da853ecaSopenharmony_ci trackIndex = trackId; 349da853ecaSopenharmony_ci int32_t result = muxerDemo->InnerWriteSample(trackIndex, avMuxerDemoBuffer); 350da853ecaSopenharmony_ci if (result != AVCS_ERR_OK) { 351da853ecaSopenharmony_ci cout << "InnerWriteSample error! ret is: " << result << endl; 352da853ecaSopenharmony_ci break; 353da853ecaSopenharmony_ci } 354da853ecaSopenharmony_ci } 355da853ecaSopenharmony_ci } while (ret >0) 356da853ecaSopenharmony_ci} 357da853ecaSopenharmony_ci 358da853ecaSopenharmony_civoid RunMuxer(string testcaseName, int threadId, Plugins::OutputFormat format) 359da853ecaSopenharmony_ci{ 360da853ecaSopenharmony_ci AVMuxerDemo *muxerDemo = new AVMuxerDemo(); 361da853ecaSopenharmony_ci time_t startTime = time(nullptr); 362da853ecaSopenharmony_ci ASSERT_NE(startTime, -1); 363da853ecaSopenharmony_ci time_t curTime = startTime; 364da853ecaSopenharmony_ci 365da853ecaSopenharmony_ci while (difftime(curTime, startTime) < RUN_TIME) { 366da853ecaSopenharmony_ci cout << "thread id is: " << threadId << ", run time : " << difftime(curTime, startTime) << " seconds" << endl; 367da853ecaSopenharmony_ci string fileName = testcaseName + "_" + to_string(threadId); 368da853ecaSopenharmony_ci 369da853ecaSopenharmony_ci cout << "thread id is: " << threadId << ", cur file name is: " << fileName << endl; 370da853ecaSopenharmony_ci int32_t fd = muxerDemo->InnerGetFdByName(format, fileName); 371da853ecaSopenharmony_ci 372da853ecaSopenharmony_ci int32_t inputFile; 373da853ecaSopenharmony_ci int32_t audioTrackId; 374da853ecaSopenharmony_ci int32_t videoTrackId; 375da853ecaSopenharmony_ci 376da853ecaSopenharmony_ci cout << "thread id is: " << threadId << ", fd is: " << fd << endl; 377da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 378da853ecaSopenharmony_ci 379da853ecaSopenharmony_ci int32_t ret; 380da853ecaSopenharmony_ci 381da853ecaSopenharmony_ci if (format == Plugins::OutputFormat::MPEG_4) { 382da853ecaSopenharmony_ci cout << "thread id is: " << threadId << ", format is: " << static_cast<int32_t>(format) << endl; 383da853ecaSopenharmony_ci inputFile = open("avDataMpegMpeg4.bin", O_RDONLY); 384da853ecaSopenharmony_ci AddAudioTrackByFd(muxerDemo, inputFile, audioTrackId); 385da853ecaSopenharmony_ci AddVideoTrackByFd(muxerDemo, inputFile, videoTrackId); 386da853ecaSopenharmony_ci } else { 387da853ecaSopenharmony_ci cout << "thread id is: " << threadId << ", format is: " << static_cast<int32_t>(format) << endl; 388da853ecaSopenharmony_ci inputFile = open("avData_mpeg4_aac_2.bin", O_RDONLY); 389da853ecaSopenharmony_ci AddAudioTrackAACByFd(muxerDemo, inputFile, audioTrackId); 390da853ecaSopenharmony_ci videoTrackId = -1; 391da853ecaSopenharmony_ci int extraSize = 0; 392da853ecaSopenharmony_ci unsigned char buffer[100] = {0}; 393da853ecaSopenharmony_ci read(inputFile, static_cast<void*>(&extraSize), sizeof(extraSize)); 394da853ecaSopenharmony_ci if (extraSize <= BUFFER_SIZE && extraSize > 0) { 395da853ecaSopenharmony_ci read(inputFile, buffer, extraSize); 396da853ecaSopenharmony_ci } 397da853ecaSopenharmony_ci } 398da853ecaSopenharmony_ci 399da853ecaSopenharmony_ci cout << "thread id is: " << threadId << ", audio track id is: " << audioTrackId 400da853ecaSopenharmony_ci << ", video track id is: " << videoTrackId << endl; 401da853ecaSopenharmony_ci 402da853ecaSopenharmony_ci ret = muxerDemo->InnerStart(); 403da853ecaSopenharmony_ci cout << "thread id is: " << threadId << ", Start ret is:" << ret << endl; 404da853ecaSopenharmony_ci 405da853ecaSopenharmony_ci WriteTrackSampleByFd(muxerDemo, audioTrackId, videoTrackId, inputFile); 406da853ecaSopenharmony_ci 407da853ecaSopenharmony_ci ret = muxerDemo->InnerStop(); 408da853ecaSopenharmony_ci cout << "thread id is: " << threadId << ", Stop ret is:" << ret << endl; 409da853ecaSopenharmony_ci 410da853ecaSopenharmony_ci ret = muxerDemo->InnerDestroy(); 411da853ecaSopenharmony_ci cout << "thread id is: " << threadId << ", Destroy ret is:" << ret << endl; 412da853ecaSopenharmony_ci 413da853ecaSopenharmony_ci close(inputFile); 414da853ecaSopenharmony_ci close(fd); 415da853ecaSopenharmony_ci curTime = time(nullptr); 416da853ecaSopenharmony_ci ASSERT_NE(curTime, -1); 417da853ecaSopenharmony_ci } 418da853ecaSopenharmony_ci g_testResult[threadId] = AVCS_ERR_OK; 419da853ecaSopenharmony_ci delete muxerDemo; 420da853ecaSopenharmony_ci} 421da853ecaSopenharmony_ci} // namespace 422da853ecaSopenharmony_ci 423da853ecaSopenharmony_ci/** 424da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_001 425da853ecaSopenharmony_ci * @tc.name : Create(1000 times) 426da853ecaSopenharmony_ci * @tc.desc : Stability test 427da853ecaSopenharmony_ci */ 428da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerStablityTest, SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_001, TestSize.Level2) 429da853ecaSopenharmony_ci{ 430da853ecaSopenharmony_ci AVMuxerDemo *muxerDemo = new AVMuxerDemo(); 431da853ecaSopenharmony_ci 432da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::M4A; 433da853ecaSopenharmony_ci int32_t fd = muxerDemo->InnerGetFdByName(format, "SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_001"); 434da853ecaSopenharmony_ci 435da853ecaSopenharmony_ci g_inputFile = open("avData_mpeg4_aac_2.bin", O_RDONLY); 436da853ecaSopenharmony_ci struct timeval start, end; 437da853ecaSopenharmony_ci double totalTime = 0; 438da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) { 439da853ecaSopenharmony_ci gettimeofday(&start, nullptr); 440da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 441da853ecaSopenharmony_ci gettimeofday(&end, nullptr); 442da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 443da853ecaSopenharmony_ci cout << "run time is: " << i << endl; 444da853ecaSopenharmony_ci int32_t ret = muxerDemo->InnerDestroy(); 445da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 446da853ecaSopenharmony_ci } 447da853ecaSopenharmony_ci cout << "1000 times finish, run time is " << totalTime << endl; 448da853ecaSopenharmony_ci close(fd); 449da853ecaSopenharmony_ci delete muxerDemo; 450da853ecaSopenharmony_ci} 451da853ecaSopenharmony_ci 452da853ecaSopenharmony_ci/** 453da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_002 454da853ecaSopenharmony_ci * @tc.name : SetRotation(1000 times) 455da853ecaSopenharmony_ci * @tc.desc : Stability test 456da853ecaSopenharmony_ci */ 457da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerStablityTest, SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_002, TestSize.Level2) 458da853ecaSopenharmony_ci{ 459da853ecaSopenharmony_ci AVMuxerDemo *muxerDemo = new AVMuxerDemo(); 460da853ecaSopenharmony_ci 461da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::M4A; 462da853ecaSopenharmony_ci int32_t fd = muxerDemo->InnerGetFdByName(format, "SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_002"); 463da853ecaSopenharmony_ci 464da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 465da853ecaSopenharmony_ci double totalTime = 0; 466da853ecaSopenharmony_ci struct timeval start, end; 467da853ecaSopenharmony_ci 468da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) { 469da853ecaSopenharmony_ci gettimeofday(&start, nullptr); 470da853ecaSopenharmony_ci int32_t ret = SetRotation(muxerDemo); 471da853ecaSopenharmony_ci gettimeofday(&end, nullptr); 472da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 473da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 474da853ecaSopenharmony_ci cout << "run time is: " << i << ", ret is:" << ret << endl; 475da853ecaSopenharmony_ci } 476da853ecaSopenharmony_ci cout << "1000 times finish, run time is " << totalTime << endl; 477da853ecaSopenharmony_ci muxerDemo->InnerDestroy(); 478da853ecaSopenharmony_ci 479da853ecaSopenharmony_ci close(fd); 480da853ecaSopenharmony_ci delete muxerDemo; 481da853ecaSopenharmony_ci} 482da853ecaSopenharmony_ci 483da853ecaSopenharmony_ci/** 484da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_003 485da853ecaSopenharmony_ci * @tc.name : AddTrack(1000 times) 486da853ecaSopenharmony_ci * @tc.desc : Stability test 487da853ecaSopenharmony_ci */ 488da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerStablityTest, SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_003, TestSize.Level2) 489da853ecaSopenharmony_ci{ 490da853ecaSopenharmony_ci AVMuxerDemo *muxerDemo = new AVMuxerDemo(); 491da853ecaSopenharmony_ci 492da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::M4A; 493da853ecaSopenharmony_ci int32_t fd = muxerDemo->InnerGetFdByName(format, "SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_003"); 494da853ecaSopenharmony_ci 495da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 496da853ecaSopenharmony_ci 497da853ecaSopenharmony_ci double totalTime = 0; 498da853ecaSopenharmony_ci struct timeval start, end; 499da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) { 500da853ecaSopenharmony_ci int32_t trackId = -1; 501da853ecaSopenharmony_ci gettimeofday(&start, nullptr); 502da853ecaSopenharmony_ci AddTrack(muxerDemo, trackId); 503da853ecaSopenharmony_ci gettimeofday(&end, nullptr); 504da853ecaSopenharmony_ci ASSERT_EQ(-1, trackId); 505da853ecaSopenharmony_ci cout << "run time is: " << i << ", track id is:" << trackId << endl; 506da853ecaSopenharmony_ci } 507da853ecaSopenharmony_ci cout << "1000 times finish, run time is " << totalTime << endl; 508da853ecaSopenharmony_ci muxerDemo->InnerDestroy(); 509da853ecaSopenharmony_ci 510da853ecaSopenharmony_ci close(fd); 511da853ecaSopenharmony_ci delete muxerDemo; 512da853ecaSopenharmony_ci} 513da853ecaSopenharmony_ci 514da853ecaSopenharmony_ci/** 515da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_004 516da853ecaSopenharmony_ci * @tc.name : Start(1000 times) 517da853ecaSopenharmony_ci * @tc.desc : Stability test 518da853ecaSopenharmony_ci */ 519da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerStablityTest, SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_004, TestSize.Level2) 520da853ecaSopenharmony_ci{ 521da853ecaSopenharmony_ci AVMuxerDemo *muxerDemo = new AVMuxerDemo(); 522da853ecaSopenharmony_ci 523da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::M4A; 524da853ecaSopenharmony_ci int32_t fd = muxerDemo->InnerGetFdByName(format, "SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_004"); 525da853ecaSopenharmony_ci 526da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 527da853ecaSopenharmony_ci int32_t audioTrackId; 528da853ecaSopenharmony_ci int32_t trackId = AddTrack(muxerDemo, audioTrackId); 529da853ecaSopenharmony_ci ASSERT_EQ(0, trackId); 530da853ecaSopenharmony_ci 531da853ecaSopenharmony_ci double totalTime = 0; 532da853ecaSopenharmony_ci struct timeval start, end; 533da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) { 534da853ecaSopenharmony_ci gettimeofday(&start, nullptr); 535da853ecaSopenharmony_ci int32_t ret = muxerDemo->InnerStart(); 536da853ecaSopenharmony_ci gettimeofday(&end, nullptr); 537da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 538da853ecaSopenharmony_ci cout << "run time is: " << i << ", ret is:" << ret << endl; 539da853ecaSopenharmony_ci } 540da853ecaSopenharmony_ci cout << "1000 times finish, run time is " << totalTime << endl; 541da853ecaSopenharmony_ci muxerDemo->InnerDestroy(); 542da853ecaSopenharmony_ci 543da853ecaSopenharmony_ci close(fd); 544da853ecaSopenharmony_ci delete muxerDemo; 545da853ecaSopenharmony_ci} 546da853ecaSopenharmony_ci 547da853ecaSopenharmony_ci/** 548da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_005 549da853ecaSopenharmony_ci * @tc.name : WriteSample(1000 times) 550da853ecaSopenharmony_ci * @tc.desc : Stability test 551da853ecaSopenharmony_ci */ 552da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerStablityTest, SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_005, TestSize.Level2) 553da853ecaSopenharmony_ci{ 554da853ecaSopenharmony_ci AVMuxerDemo *muxerDemo = new AVMuxerDemo(); 555da853ecaSopenharmony_ci 556da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::M4A; 557da853ecaSopenharmony_ci int32_t fd = muxerDemo->InnerGetFdByName(format, "SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_005"); 558da853ecaSopenharmony_ci 559da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 560da853ecaSopenharmony_ci 561da853ecaSopenharmony_ci int32_t audioTrackId; 562da853ecaSopenharmony_ci int32_t trackId = AddTrack(muxerDemo, audioTrackId); 563da853ecaSopenharmony_ci ASSERT_EQ(0, trackId); 564da853ecaSopenharmony_ci 565da853ecaSopenharmony_ci int32_t ret = muxerDemo->InnerStart(); 566da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 567da853ecaSopenharmony_ci 568da853ecaSopenharmony_ci double totalTime = 0; 569da853ecaSopenharmony_ci struct timeval start, end; 570da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) { 571da853ecaSopenharmony_ci gettimeofday(&start, nullptr); 572da853ecaSopenharmony_ci ret = WriteSample(muxerDemo); 573da853ecaSopenharmony_ci gettimeofday(&end, nullptr); 574da853ecaSopenharmony_ci cout << "run time is: " << i << ", ret is:" << ret << endl; 575da853ecaSopenharmony_ci } 576da853ecaSopenharmony_ci cout << "1000 times finish, run time is " << totalTime << endl; 577da853ecaSopenharmony_ci muxerDemo->InnerDestroy(); 578da853ecaSopenharmony_ci 579da853ecaSopenharmony_ci close(fd); 580da853ecaSopenharmony_ci delete muxerDemo; 581da853ecaSopenharmony_ci} 582da853ecaSopenharmony_ci 583da853ecaSopenharmony_ci/** 584da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_006 585da853ecaSopenharmony_ci * @tc.name : Stop(1000 times) 586da853ecaSopenharmony_ci * @tc.desc : Stability test 587da853ecaSopenharmony_ci */ 588da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerStablityTest, SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_006, TestSize.Level2) 589da853ecaSopenharmony_ci{ 590da853ecaSopenharmony_ci AVMuxerDemo *muxerDemo = new AVMuxerDemo(); 591da853ecaSopenharmony_ci 592da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::M4A; 593da853ecaSopenharmony_ci int32_t fd = muxerDemo->InnerGetFdByName(format, "SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_006"); 594da853ecaSopenharmony_ci 595da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 596da853ecaSopenharmony_ci 597da853ecaSopenharmony_ci int32_t audioTrackId; 598da853ecaSopenharmony_ci int32_t trackId = AddTrack(muxerDemo, audioTrackId); 599da853ecaSopenharmony_ci ASSERT_EQ(0, trackId); 600da853ecaSopenharmony_ci 601da853ecaSopenharmony_ci int32_t ret = muxerDemo->InnerStart(); 602da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 603da853ecaSopenharmony_ci 604da853ecaSopenharmony_ci ret = WriteSample(muxerDemo); 605da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 606da853ecaSopenharmony_ci 607da853ecaSopenharmony_ci double totalTime = 0; 608da853ecaSopenharmony_ci struct timeval start, end; 609da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) { 610da853ecaSopenharmony_ci gettimeofday(&start, nullptr); 611da853ecaSopenharmony_ci ret = muxerDemo->InnerStop(); 612da853ecaSopenharmony_ci gettimeofday(&end, nullptr); 613da853ecaSopenharmony_ci cout << "run time is: " << i << ", ret is:" << ret << endl; 614da853ecaSopenharmony_ci } 615da853ecaSopenharmony_ci cout << "1000 times finish, run time is " << totalTime << endl; 616da853ecaSopenharmony_ci muxerDemo->InnerDestroy(); 617da853ecaSopenharmony_ci 618da853ecaSopenharmony_ci close(fd); 619da853ecaSopenharmony_ci delete muxerDemo; 620da853ecaSopenharmony_ci} 621da853ecaSopenharmony_ci 622da853ecaSopenharmony_ci/** 623da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_007 624da853ecaSopenharmony_ci * @tc.name : Destroy(1000 times) 625da853ecaSopenharmony_ci * @tc.desc : Stability test 626da853ecaSopenharmony_ci */ 627da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerStablityTest, SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_007, TestSize.Level2) 628da853ecaSopenharmony_ci{ 629da853ecaSopenharmony_ci AVMuxerDemo *muxerDemo = new AVMuxerDemo(); 630da853ecaSopenharmony_ci 631da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::M4A; 632da853ecaSopenharmony_ci int32_t fd = muxerDemo->InnerGetFdByName(format, "SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_007"); 633da853ecaSopenharmony_ci 634da853ecaSopenharmony_ci double totalTime = 0; 635da853ecaSopenharmony_ci struct timeval start, end; 636da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) { 637da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 638da853ecaSopenharmony_ci 639da853ecaSopenharmony_ci gettimeofday(&start, nullptr); 640da853ecaSopenharmony_ci int32_t ret = muxerDemo->InnerDestroy(); 641da853ecaSopenharmony_ci gettimeofday(&end, nullptr); 642da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 643da853ecaSopenharmony_ci cout << "run time is: " << i << ", ret is:" << ret << endl; 644da853ecaSopenharmony_ci } 645da853ecaSopenharmony_ci cout << "1000 times finish, run time is " << totalTime << endl; 646da853ecaSopenharmony_ci close(fd); 647da853ecaSopenharmony_ci delete muxerDemo; 648da853ecaSopenharmony_ci} 649da853ecaSopenharmony_ci 650da853ecaSopenharmony_ci/** 651da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_008 652da853ecaSopenharmony_ci * @tc.name : m4a(long time) 653da853ecaSopenharmony_ci * @tc.desc : Function test 654da853ecaSopenharmony_ci */ 655da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerStablityTest, SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_008, TestSize.Level2) 656da853ecaSopenharmony_ci{ 657da853ecaSopenharmony_ci AVMuxerDemo *muxerDemo = new AVMuxerDemo(); 658da853ecaSopenharmony_ci time_t startTime = time(nullptr); 659da853ecaSopenharmony_ci ASSERT_NE(startTime, -1); 660da853ecaSopenharmony_ci time_t curTime = startTime; 661da853ecaSopenharmony_ci 662da853ecaSopenharmony_ci while (difftime(curTime, startTime) < RUN_TIME) { 663da853ecaSopenharmony_ci cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl; 664da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::M4A; 665da853ecaSopenharmony_ci int32_t fd = muxerDemo->InnerGetFdByName(format, "SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_008"); 666da853ecaSopenharmony_ci 667da853ecaSopenharmony_ci g_inputFile = open("avData_mpeg4_aac_2.bin", O_RDONLY); 668da853ecaSopenharmony_ci 669da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 670da853ecaSopenharmony_ci 671da853ecaSopenharmony_ci int32_t audioTrackId; 672da853ecaSopenharmony_ci AddAudioTrackAAC(muxerDemo, audioTrackId); 673da853ecaSopenharmony_ci int32_t videoTrackId = -1; 674da853ecaSopenharmony_ci RemoveHeader(); 675da853ecaSopenharmony_ci 676da853ecaSopenharmony_ci cout << "audio track id is: " << audioTrackId << ", video track id is: " << videoTrackId << endl; 677da853ecaSopenharmony_ci 678da853ecaSopenharmony_ci int32_t ret; 679da853ecaSopenharmony_ci 680da853ecaSopenharmony_ci ret = muxerDemo->InnerStart(); 681da853ecaSopenharmony_ci cout << "Start ret is:" << ret << endl; 682da853ecaSopenharmony_ci 683da853ecaSopenharmony_ci WriteTrackSample(muxerDemo, audioTrackId, videoTrackId); 684da853ecaSopenharmony_ci 685da853ecaSopenharmony_ci ret = muxerDemo->InnerStop(); 686da853ecaSopenharmony_ci cout << "Stop ret is:" << ret << endl; 687da853ecaSopenharmony_ci 688da853ecaSopenharmony_ci ret = muxerDemo->InnerDestroy(); 689da853ecaSopenharmony_ci cout << "Destroy ret is:" << ret << endl; 690da853ecaSopenharmony_ci 691da853ecaSopenharmony_ci close(g_inputFile); 692da853ecaSopenharmony_ci close(fd); 693da853ecaSopenharmony_ci curTime = time(nullptr); 694da853ecaSopenharmony_ci ASSERT_NE(curTime, -1); 695da853ecaSopenharmony_ci } 696da853ecaSopenharmony_ci delete muxerDemo; 697da853ecaSopenharmony_ci} 698da853ecaSopenharmony_ci 699da853ecaSopenharmony_ci/** 700da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_009 701da853ecaSopenharmony_ci * @tc.name : mp4(long time) 702da853ecaSopenharmony_ci * @tc.desc : Function test 703da853ecaSopenharmony_ci */ 704da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerStablityTest, SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_009, TestSize.Level2) 705da853ecaSopenharmony_ci{ 706da853ecaSopenharmony_ci AVMuxerDemo *muxerDemo = new AVMuxerDemo(); 707da853ecaSopenharmony_ci time_t startTime = time(nullptr); 708da853ecaSopenharmony_ci ASSERT_NE(startTime, -1); 709da853ecaSopenharmony_ci time_t curTime = startTime; 710da853ecaSopenharmony_ci 711da853ecaSopenharmony_ci while (difftime(curTime, startTime) < RUN_TIME) { 712da853ecaSopenharmony_ci cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl; 713da853ecaSopenharmony_ci 714da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 715da853ecaSopenharmony_ci int32_t fd = muxerDemo->InnerGetFdByName(format, "SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_009"); 716da853ecaSopenharmony_ci 717da853ecaSopenharmony_ci g_inputFile = open("avDataMpegMpeg4.bin", O_RDONLY); 718da853ecaSopenharmony_ci 719da853ecaSopenharmony_ci muxerDemo->InnerCreate(fd, format); 720da853ecaSopenharmony_ci 721da853ecaSopenharmony_ci int32_t audioTrackId; 722da853ecaSopenharmony_ci AddAudioTrack(muxerDemo, audioTrackId); 723da853ecaSopenharmony_ci int32_t videoTrackId; 724da853ecaSopenharmony_ci AddVideoTrack(muxerDemo, videoTrackId); 725da853ecaSopenharmony_ci 726da853ecaSopenharmony_ci cout << "audio track id is: " << audioTrackId << ", video track id is: " << videoTrackId << endl; 727da853ecaSopenharmony_ci 728da853ecaSopenharmony_ci int32_t ret; 729da853ecaSopenharmony_ci 730da853ecaSopenharmony_ci ret = muxerDemo->InnerStart(); 731da853ecaSopenharmony_ci cout << "Start ret is:" << ret << endl; 732da853ecaSopenharmony_ci 733da853ecaSopenharmony_ci WriteTrackSample(muxerDemo, audioTrackId, videoTrackId); 734da853ecaSopenharmony_ci 735da853ecaSopenharmony_ci ret = muxerDemo->InnerStop(); 736da853ecaSopenharmony_ci cout << "Stop ret is:" << ret << endl; 737da853ecaSopenharmony_ci 738da853ecaSopenharmony_ci ret = muxerDemo->InnerDestroy(); 739da853ecaSopenharmony_ci cout << "Destroy ret is:" << ret << endl; 740da853ecaSopenharmony_ci 741da853ecaSopenharmony_ci close(g_inputFile); 742da853ecaSopenharmony_ci close(fd); 743da853ecaSopenharmony_ci curTime = time(nullptr); 744da853ecaSopenharmony_ci ASSERT_NE(curTime, -1); 745da853ecaSopenharmony_ci } 746da853ecaSopenharmony_ci delete muxerDemo; 747da853ecaSopenharmony_ci} 748da853ecaSopenharmony_ci 749da853ecaSopenharmony_ci/** 750da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_010 751da853ecaSopenharmony_ci * @tc.name : m4a(thread long time) 752da853ecaSopenharmony_ci * @tc.desc : Function test 753da853ecaSopenharmony_ci */ 754da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerStablityTest, SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_010, TestSize.Level2) 755da853ecaSopenharmony_ci{ 756da853ecaSopenharmony_ci vector<thread> threadVec; 757da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::M4A; 758da853ecaSopenharmony_ci for (int i = 0; i < 10; i++) { 759da853ecaSopenharmony_ci threadVec.push_back(thread(RunMuxer, "SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_010", i, format)); 760da853ecaSopenharmony_ci } 761da853ecaSopenharmony_ci for (uint32_t i = 0; i < threadVec.size(); i++) { 762da853ecaSopenharmony_ci threadVec[i].join(); 763da853ecaSopenharmony_ci } 764da853ecaSopenharmony_ci for (int32_t i = 0; i < 10; i++) 765da853ecaSopenharmony_ci { 766da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, g_testResult[i]); 767da853ecaSopenharmony_ci } 768da853ecaSopenharmony_ci} 769da853ecaSopenharmony_ci 770da853ecaSopenharmony_ci/** 771da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_011 772da853ecaSopenharmony_ci * @tc.name : mp4(thread long time) 773da853ecaSopenharmony_ci * @tc.desc : Function test 774da853ecaSopenharmony_ci */ 775da853ecaSopenharmony_ciHWTEST_F(InnerAVMuxerStablityTest, SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_011, TestSize.Level2) 776da853ecaSopenharmony_ci{ 777da853ecaSopenharmony_ci vector<thread> threadVec; 778da853ecaSopenharmony_ci Plugins::OutputFormat format = Plugins::OutputFormat::MPEG_4; 779da853ecaSopenharmony_ci for (int i = 0; i < 10; i++) { 780da853ecaSopenharmony_ci threadVec.push_back(thread(RunMuxer, "SUB_MULTIMEDIA_MEDIA_MUXER_STABILITY_011", i, format)); 781da853ecaSopenharmony_ci } 782da853ecaSopenharmony_ci for (uint32_t i = 0; i < threadVec.size(); i++) { 783da853ecaSopenharmony_ci threadVec[i].join(); 784da853ecaSopenharmony_ci } 785da853ecaSopenharmony_ci for (int32_t i = 0; i < 10; i++) 786da853ecaSopenharmony_ci { 787da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, g_testResult[i]); 788da853ecaSopenharmony_ci } 789da853ecaSopenharmony_ci}