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 "gtest/gtest.h" 18da853ecaSopenharmony_ci#include "AudioEncoderDemoCommon.h" 19da853ecaSopenharmony_ci 20da853ecaSopenharmony_ci 21da853ecaSopenharmony_ciusing namespace std; 22da853ecaSopenharmony_ciusing namespace testing::ext; 23da853ecaSopenharmony_ciusing namespace OHOS; 24da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec; 25da853ecaSopenharmony_ci 26da853ecaSopenharmony_cinamespace { 27da853ecaSopenharmony_ci class NativeStablityTest : public testing::Test { 28da853ecaSopenharmony_ci public: 29da853ecaSopenharmony_ci static void SetUpTestCase(); 30da853ecaSopenharmony_ci static void TearDownTestCase(); 31da853ecaSopenharmony_ci void SetUp() override; 32da853ecaSopenharmony_ci void TearDown() override; 33da853ecaSopenharmony_ci }; 34da853ecaSopenharmony_ci 35da853ecaSopenharmony_ci void NativeStablityTest::SetUpTestCase() {} 36da853ecaSopenharmony_ci void NativeStablityTest::TearDownTestCase() {} 37da853ecaSopenharmony_ci void NativeStablityTest::SetUp() {} 38da853ecaSopenharmony_ci void NativeStablityTest::TearDown() {} 39da853ecaSopenharmony_ci 40da853ecaSopenharmony_ci constexpr int RUN_TIMES = 2000; 41da853ecaSopenharmony_ci constexpr int RUN_TIME = 12 * 3600; 42da853ecaSopenharmony_ci constexpr uint32_t DEFAULT_AAC_TYPE = 1; 43da853ecaSopenharmony_ci 44da853ecaSopenharmony_ci constexpr int32_t CHANNEL_COUNT_AAC = 2; 45da853ecaSopenharmony_ci constexpr int32_t SAMPLE_RATE_AAC = 44100; 46da853ecaSopenharmony_ci constexpr int64_t BITS_RATE_AAC = 129000; 47da853ecaSopenharmony_ci 48da853ecaSopenharmony_ci constexpr int32_t CHANNEL_COUNT_FLAC = 2; 49da853ecaSopenharmony_ci constexpr int32_t SAMPLE_RATE_FLAC = 48000; 50da853ecaSopenharmony_ci constexpr int64_t BITS_RATE_FLAC = 128000; 51da853ecaSopenharmony_ci constexpr int32_t INPUT_SIZE_FLAC = COMMON_FLAC_NUM * CHANNEL_COUNT_FLAC * S16_BITS_PER_SAMPLE; 52da853ecaSopenharmony_ci 53da853ecaSopenharmony_ci int32_t g_testResult[16] = { -1 }; 54da853ecaSopenharmony_ci 55da853ecaSopenharmony_ci OH_AVFormat* GetAVFormatByEncoder(string encoderName) 56da853ecaSopenharmony_ci { 57da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 58da853ecaSopenharmony_ci if (encoderName == "OH.Media.Codec.Encoder.Audio.AAC") { 59da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, CHANNEL_COUNT_AAC); 60da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, SAMPLE_RATE_AAC); 61da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 62da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 63da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 64da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 65da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, BITS_RATE_AAC); 66da853ecaSopenharmony_ci } else { 67da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, CHANNEL_COUNT_FLAC); 68da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, SAMPLE_RATE_FLAC); 69da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_S16LE); 70da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_S16LE); 71da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 72da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, BITS_RATE_FLAC); 73da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, INPUT_SIZE_FLAC); 74da853ecaSopenharmony_ci } 75da853ecaSopenharmony_ci return format; 76da853ecaSopenharmony_ci } 77da853ecaSopenharmony_ci 78da853ecaSopenharmony_ci void RunEncode(string encoderName, string inputFile, string outputFile, int32_t threadId) 79da853ecaSopenharmony_ci { 80da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 81da853ecaSopenharmony_ci 82da853ecaSopenharmony_ci OH_AVFormat* format = GetAVFormatByEncoder(encoderName); 83da853ecaSopenharmony_ci 84da853ecaSopenharmony_ci encoderDemo->NativeRunCase(inputFile, outputFile, encoderName.c_str(), format); 85da853ecaSopenharmony_ci 86da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 87da853ecaSopenharmony_ci delete encoderDemo; 88da853ecaSopenharmony_ci } 89da853ecaSopenharmony_ci 90da853ecaSopenharmony_ci void RunLongTimeFlush(string encoderName, string inputFile, string outputFile, int32_t threadId) 91da853ecaSopenharmony_ci { 92da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 93da853ecaSopenharmony_ci bool needConfigure = true; 94da853ecaSopenharmony_ci 95da853ecaSopenharmony_ci time_t startTime = time(nullptr); 96da853ecaSopenharmony_ci ASSERT_NE(startTime, -1); 97da853ecaSopenharmony_ci time_t curTime = startTime; 98da853ecaSopenharmony_ci 99da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName(encoderName.c_str()); 100da853ecaSopenharmony_ci OH_AVFormat* format = GetAVFormatByEncoder(encoderName); 101da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 102da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 103da853ecaSopenharmony_ci encoderDemo->NativeSetCallback(handle, cb); 104da853ecaSopenharmony_ci 105da853ecaSopenharmony_ci while (difftime(curTime, startTime) < RUN_TIME) { 106da853ecaSopenharmony_ci encoderDemo->NativeRunCaseWithoutCreate(handle, inputFile, outputFile, format, encoderName.c_str(), 107da853ecaSopenharmony_ci needConfigure); 108da853ecaSopenharmony_ci needConfigure = false; 109da853ecaSopenharmony_ci encoderDemo->NativeFlush(handle); 110da853ecaSopenharmony_ci curTime = time(nullptr); 111da853ecaSopenharmony_ci ASSERT_NE(curTime, -1); 112da853ecaSopenharmony_ci } 113da853ecaSopenharmony_ci 114da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 115da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 116da853ecaSopenharmony_ci delete encoderDemo; 117da853ecaSopenharmony_ci } 118da853ecaSopenharmony_ci 119da853ecaSopenharmony_ci void RunLongTimeReset(string encoderName, string inputFile, string outputFile, int32_t threadId) 120da853ecaSopenharmony_ci { 121da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 122da853ecaSopenharmony_ci bool needConfigure = true; 123da853ecaSopenharmony_ci 124da853ecaSopenharmony_ci time_t startTime = time(nullptr); 125da853ecaSopenharmony_ci ASSERT_NE(startTime, -1); 126da853ecaSopenharmony_ci time_t curTime = startTime; 127da853ecaSopenharmony_ci 128da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName(encoderName.c_str()); 129da853ecaSopenharmony_ci OH_AVFormat* format = GetAVFormatByEncoder(encoderName); 130da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 131da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 132da853ecaSopenharmony_ci encoderDemo->NativeSetCallback(handle, cb); 133da853ecaSopenharmony_ci 134da853ecaSopenharmony_ci while (difftime(curTime, startTime) < RUN_TIME) { 135da853ecaSopenharmony_ci encoderDemo->NativeRunCaseWithoutCreate(handle, inputFile, outputFile, format, encoderName.c_str(), 136da853ecaSopenharmony_ci needConfigure); 137da853ecaSopenharmony_ci needConfigure = false; 138da853ecaSopenharmony_ci encoderDemo->NativeFlush(handle); 139da853ecaSopenharmony_ci curTime = time(nullptr); 140da853ecaSopenharmony_ci ASSERT_NE(curTime, -1); 141da853ecaSopenharmony_ci } 142da853ecaSopenharmony_ci 143da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 144da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 145da853ecaSopenharmony_ci delete encoderDemo; 146da853ecaSopenharmony_ci } 147da853ecaSopenharmony_ci 148da853ecaSopenharmony_ci void RunLongTimeStop(string encoderName, string inputFile, string outputFile, int32_t threadId) 149da853ecaSopenharmony_ci { 150da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 151da853ecaSopenharmony_ci bool needConfigure = true; 152da853ecaSopenharmony_ci 153da853ecaSopenharmony_ci time_t startTime = time(nullptr); 154da853ecaSopenharmony_ci if (startTime < 0) { 155da853ecaSopenharmony_ci return; 156da853ecaSopenharmony_ci } 157da853ecaSopenharmony_ci time_t curTime = startTime; 158da853ecaSopenharmony_ci 159da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName(encoderName.c_str()); 160da853ecaSopenharmony_ci OH_AVFormat* format = GetAVFormatByEncoder(encoderName); 161da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = { &OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 162da853ecaSopenharmony_ci &OnOutputBufferAvailable }; 163da853ecaSopenharmony_ci encoderDemo->NativeSetCallback(handle, cb); 164da853ecaSopenharmony_ci 165da853ecaSopenharmony_ci while (difftime(curTime, startTime) < RUN_TIME) { 166da853ecaSopenharmony_ci encoderDemo->NativeRunCaseWithoutCreate(handle, inputFile, outputFile, format, encoderName.c_str(), 167da853ecaSopenharmony_ci needConfigure); 168da853ecaSopenharmony_ci needConfigure = false; 169da853ecaSopenharmony_ci encoderDemo->NativeStop(handle); 170da853ecaSopenharmony_ci curTime = time(nullptr); 171da853ecaSopenharmony_ci ASSERT_NE(curTime, -1); 172da853ecaSopenharmony_ci } 173da853ecaSopenharmony_ci 174da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 175da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 176da853ecaSopenharmony_ci delete encoderDemo; 177da853ecaSopenharmony_ci } 178da853ecaSopenharmony_ci} 179da853ecaSopenharmony_ci 180da853ecaSopenharmony_ci 181da853ecaSopenharmony_ci/** 182da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_001 183da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_CreateByMime 2000 times 184da853ecaSopenharmony_ci * @tc.desc : stability 185da853ecaSopenharmony_ci */ 186da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_001, TestSize.Level2) 187da853ecaSopenharmony_ci{ 188da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 189da853ecaSopenharmony_ci double totalTime = 0; 190da853ecaSopenharmony_ci struct timeval start, end; 191da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 192da853ecaSopenharmony_ci { 193da853ecaSopenharmony_ci gettimeofday(&start, NULL); 194da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByMime(OH_AVCODEC_MIMETYPE_AUDIO_AAC); 195da853ecaSopenharmony_ci gettimeofday(&end, NULL); 196da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 197da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 198da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 199da853ecaSopenharmony_ci } 200da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 201da853ecaSopenharmony_ci delete encoderDemo; 202da853ecaSopenharmony_ci} 203da853ecaSopenharmony_ci 204da853ecaSopenharmony_ci 205da853ecaSopenharmony_ci/** 206da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_002 207da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_CreateByName 2000 times 208da853ecaSopenharmony_ci * @tc.desc : stability 209da853ecaSopenharmony_ci */ 210da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_002, TestSize.Level2) 211da853ecaSopenharmony_ci{ 212da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 213da853ecaSopenharmony_ci double totalTime = 0; 214da853ecaSopenharmony_ci struct timeval start, end; 215da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 216da853ecaSopenharmony_ci { 217da853ecaSopenharmony_ci gettimeofday(&start, NULL); 218da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 219da853ecaSopenharmony_ci gettimeofday(&end, NULL); 220da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 221da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 222da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 223da853ecaSopenharmony_ci } 224da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 225da853ecaSopenharmony_ci delete encoderDemo; 226da853ecaSopenharmony_ci} 227da853ecaSopenharmony_ci 228da853ecaSopenharmony_ci 229da853ecaSopenharmony_ci/** 230da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_003 231da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_Destroy 2000 times 232da853ecaSopenharmony_ci * @tc.desc : stability 233da853ecaSopenharmony_ci */ 234da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_003, TestSize.Level2) 235da853ecaSopenharmony_ci{ 236da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 237da853ecaSopenharmony_ci double totalTime = 0; 238da853ecaSopenharmony_ci struct timeval start, end; 239da853ecaSopenharmony_ci 240da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 241da853ecaSopenharmony_ci { 242da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 243da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 244da853ecaSopenharmony_ci gettimeofday(&start, NULL); 245da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 246da853ecaSopenharmony_ci gettimeofday(&end, NULL); 247da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 248da853ecaSopenharmony_ci } 249da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 250da853ecaSopenharmony_ci delete encoderDemo; 251da853ecaSopenharmony_ci} 252da853ecaSopenharmony_ci 253da853ecaSopenharmony_ci 254da853ecaSopenharmony_ci/** 255da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_004 256da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_SetCallback 2000 times 257da853ecaSopenharmony_ci * @tc.desc : stability 258da853ecaSopenharmony_ci */ 259da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_004, TestSize.Level2) 260da853ecaSopenharmony_ci{ 261da853ecaSopenharmony_ci OH_AVErrCode ret; 262da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 263da853ecaSopenharmony_ci double totalTime = 0; 264da853ecaSopenharmony_ci struct timeval start, end; 265da853ecaSopenharmony_ci 266da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 267da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 268da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 269da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 270da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 271da853ecaSopenharmony_ci { 272da853ecaSopenharmony_ci gettimeofday(&start, NULL); 273da853ecaSopenharmony_ci ret = encoderDemo->NativeSetCallback(handle, cb); 274da853ecaSopenharmony_ci gettimeofday(&end, NULL); 275da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 276da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 277da853ecaSopenharmony_ci } 278da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 279da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 280da853ecaSopenharmony_ci delete encoderDemo; 281da853ecaSopenharmony_ci} 282da853ecaSopenharmony_ci 283da853ecaSopenharmony_ci 284da853ecaSopenharmony_ci/** 285da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_005 286da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_Configure 2000 times 287da853ecaSopenharmony_ci * @tc.desc : stability 288da853ecaSopenharmony_ci */ 289da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_005, TestSize.Level2) 290da853ecaSopenharmony_ci{ 291da853ecaSopenharmony_ci OH_AVErrCode ret; 292da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 293da853ecaSopenharmony_ci double totalTime = 0; 294da853ecaSopenharmony_ci struct timeval start, end; 295da853ecaSopenharmony_ci 296da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 297da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 298da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 16000); 299da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 300da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 301da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 302da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 303da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 304da853ecaSopenharmony_ci 305da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 306da853ecaSopenharmony_ci { 307da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 308da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 309da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 310da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 311da853ecaSopenharmony_ci ret = encoderDemo->NativeSetCallback(handle, cb); 312da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 313da853ecaSopenharmony_ci gettimeofday(&start, NULL); 314da853ecaSopenharmony_ci ret = encoderDemo->NativeConfigure(handle, format); 315da853ecaSopenharmony_ci gettimeofday(&end, NULL); 316da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 317da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 318da853ecaSopenharmony_ci 319da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 320da853ecaSopenharmony_ci } 321da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 322da853ecaSopenharmony_ci 323da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 324da853ecaSopenharmony_ci delete encoderDemo; 325da853ecaSopenharmony_ci} 326da853ecaSopenharmony_ci 327da853ecaSopenharmony_ci/** 328da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_006 329da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_Prepare 2000 times 330da853ecaSopenharmony_ci * @tc.desc : stability 331da853ecaSopenharmony_ci */ 332da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_006, TestSize.Level2) 333da853ecaSopenharmony_ci{ 334da853ecaSopenharmony_ci OH_AVErrCode ret; 335da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 336da853ecaSopenharmony_ci double totalTime = 0; 337da853ecaSopenharmony_ci struct timeval start, end; 338da853ecaSopenharmony_ci 339da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 340da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 341da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 16000); 342da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 343da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 344da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 345da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 346da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 347da853ecaSopenharmony_ci 348da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 349da853ecaSopenharmony_ci { 350da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 351da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 352da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 353da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 354da853ecaSopenharmony_ci ret = encoderDemo->NativeSetCallback(handle, cb); 355da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 356da853ecaSopenharmony_ci ret = encoderDemo->NativeConfigure(handle, format); 357da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 358da853ecaSopenharmony_ci gettimeofday(&start, NULL); 359da853ecaSopenharmony_ci ret = encoderDemo->NativePrepare(handle); 360da853ecaSopenharmony_ci gettimeofday(&end, NULL); 361da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 362da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 363da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 364da853ecaSopenharmony_ci } 365da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 366da853ecaSopenharmony_ci 367da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 368da853ecaSopenharmony_ci delete encoderDemo; 369da853ecaSopenharmony_ci} 370da853ecaSopenharmony_ci 371da853ecaSopenharmony_ci 372da853ecaSopenharmony_ci/** 373da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_007 374da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_Start 2000 times 375da853ecaSopenharmony_ci * @tc.desc : stability 376da853ecaSopenharmony_ci */ 377da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_007, TestSize.Level2) 378da853ecaSopenharmony_ci{ 379da853ecaSopenharmony_ci OH_AVErrCode ret; 380da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 381da853ecaSopenharmony_ci double totalTime = 0; 382da853ecaSopenharmony_ci struct timeval start, end; 383da853ecaSopenharmony_ci 384da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 385da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 386da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 16000); 387da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 388da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 389da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 390da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 391da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 392da853ecaSopenharmony_ci 393da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 394da853ecaSopenharmony_ci { 395da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 396da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 397da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 398da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 399da853ecaSopenharmony_ci ret = encoderDemo->NativeSetCallback(handle, cb); 400da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 401da853ecaSopenharmony_ci ret = encoderDemo->NativeConfigure(handle, format); 402da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 403da853ecaSopenharmony_ci ret = encoderDemo->NativePrepare(handle); 404da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 405da853ecaSopenharmony_ci gettimeofday(&start, NULL); 406da853ecaSopenharmony_ci ret = OH_AudioEncoder_Start(handle); 407da853ecaSopenharmony_ci gettimeofday(&end, NULL); 408da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 409da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 410da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 411da853ecaSopenharmony_ci } 412da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 413da853ecaSopenharmony_ci 414da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 415da853ecaSopenharmony_ci delete encoderDemo; 416da853ecaSopenharmony_ci} 417da853ecaSopenharmony_ci 418da853ecaSopenharmony_ci 419da853ecaSopenharmony_ci/** 420da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_008 421da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_Stop 2000 times 422da853ecaSopenharmony_ci * @tc.desc : stability 423da853ecaSopenharmony_ci */ 424da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_008, TestSize.Level2) 425da853ecaSopenharmony_ci{ 426da853ecaSopenharmony_ci OH_AVErrCode ret; 427da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 428da853ecaSopenharmony_ci double totalTime = 0; 429da853ecaSopenharmony_ci struct timeval start, end; 430da853ecaSopenharmony_ci 431da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 432da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 433da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 16000); 434da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 435da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 436da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 437da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 438da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 439da853ecaSopenharmony_ci 440da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 441da853ecaSopenharmony_ci { 442da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 443da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 444da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 445da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 446da853ecaSopenharmony_ci ret = encoderDemo->NativeSetCallback(handle, cb); 447da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 448da853ecaSopenharmony_ci ret = encoderDemo->NativeConfigure(handle, format); 449da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 450da853ecaSopenharmony_ci ret = encoderDemo->NativePrepare(handle); 451da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 452da853ecaSopenharmony_ci ret = OH_AudioEncoder_Start(handle); 453da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 454da853ecaSopenharmony_ci gettimeofday(&start, NULL); 455da853ecaSopenharmony_ci ret = OH_AudioEncoder_Stop(handle); 456da853ecaSopenharmony_ci gettimeofday(&end, NULL); 457da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 458da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 459da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 460da853ecaSopenharmony_ci } 461da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 462da853ecaSopenharmony_ci 463da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 464da853ecaSopenharmony_ci delete encoderDemo; 465da853ecaSopenharmony_ci} 466da853ecaSopenharmony_ci 467da853ecaSopenharmony_ci 468da853ecaSopenharmony_ci/** 469da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_009 470da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_Flush 2000 times 471da853ecaSopenharmony_ci * @tc.desc : stability 472da853ecaSopenharmony_ci */ 473da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_009, TestSize.Level2) 474da853ecaSopenharmony_ci{ 475da853ecaSopenharmony_ci OH_AVErrCode ret; 476da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 477da853ecaSopenharmony_ci double totalTime = 0; 478da853ecaSopenharmony_ci struct timeval start, end; 479da853ecaSopenharmony_ci 480da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 481da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 482da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 16000); 483da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 484da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 485da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 486da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 487da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 488da853ecaSopenharmony_ci 489da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 490da853ecaSopenharmony_ci { 491da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 492da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 493da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 494da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 495da853ecaSopenharmony_ci ret = encoderDemo->NativeSetCallback(handle, cb); 496da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 497da853ecaSopenharmony_ci ret = encoderDemo->NativeConfigure(handle, format); 498da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 499da853ecaSopenharmony_ci ret = encoderDemo->NativePrepare(handle); 500da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 501da853ecaSopenharmony_ci ret = OH_AudioEncoder_Start(handle); 502da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 503da853ecaSopenharmony_ci gettimeofday(&start, NULL); 504da853ecaSopenharmony_ci ret = encoderDemo->NativeFlush(handle); 505da853ecaSopenharmony_ci gettimeofday(&end, NULL); 506da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 507da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 508da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 509da853ecaSopenharmony_ci } 510da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 511da853ecaSopenharmony_ci 512da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 513da853ecaSopenharmony_ci delete encoderDemo; 514da853ecaSopenharmony_ci} 515da853ecaSopenharmony_ci 516da853ecaSopenharmony_ci 517da853ecaSopenharmony_ci/** 518da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_010 519da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_Reset 2000 times 520da853ecaSopenharmony_ci * @tc.desc : stability 521da853ecaSopenharmony_ci */ 522da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_010, TestSize.Level2) 523da853ecaSopenharmony_ci{ 524da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 525da853ecaSopenharmony_ci double totalTime = 0; 526da853ecaSopenharmony_ci struct timeval start, end; 527da853ecaSopenharmony_ci 528da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 529da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 530da853ecaSopenharmony_ci 531da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 532da853ecaSopenharmony_ci { 533da853ecaSopenharmony_ci gettimeofday(&start, NULL); 534da853ecaSopenharmony_ci OH_AudioEncoder_Reset(handle); 535da853ecaSopenharmony_ci gettimeofday(&end, NULL); 536da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 537da853ecaSopenharmony_ci } 538da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 539da853ecaSopenharmony_ci delete encoderDemo; 540da853ecaSopenharmony_ci} 541da853ecaSopenharmony_ci 542da853ecaSopenharmony_ci 543da853ecaSopenharmony_ci/** 544da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_011 545da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_GetOutputDescription 2000 times 546da853ecaSopenharmony_ci * @tc.desc : stability 547da853ecaSopenharmony_ci */ 548da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_011, TestSize.Level2) 549da853ecaSopenharmony_ci{ 550da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 551da853ecaSopenharmony_ci 552da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 553da853ecaSopenharmony_ci 554da853ecaSopenharmony_ci string inputFile = "f32le_44100_2_dayuhaitang.pcm"; 555da853ecaSopenharmony_ci string outputFile = "STABILITY_011.aac"; 556da853ecaSopenharmony_ci 557da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 558da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 559da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 44100); 560da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 561da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 562da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 563da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 564da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 565da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 566da853ecaSopenharmony_ci 567da853ecaSopenharmony_ci encoderDemo->setTimerFlag(TIMER_GETOUTPUTDESCRIPTION); 568da853ecaSopenharmony_ci encoderDemo->NativeRunCase(inputFile, outputFile, encoderName.c_str(), format); 569da853ecaSopenharmony_ci 570da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 571da853ecaSopenharmony_ci delete encoderDemo; 572da853ecaSopenharmony_ci} 573da853ecaSopenharmony_ci 574da853ecaSopenharmony_ci 575da853ecaSopenharmony_ci/** 576da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_012 577da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_SetParameter 2000 times 578da853ecaSopenharmony_ci * @tc.desc : stability 579da853ecaSopenharmony_ci */ 580da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_012, TestSize.Level2) 581da853ecaSopenharmony_ci{ 582da853ecaSopenharmony_ci OH_AVErrCode ret; 583da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 584da853ecaSopenharmony_ci double totalTime = 0; 585da853ecaSopenharmony_ci struct timeval start, end; 586da853ecaSopenharmony_ci 587da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 588da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 589da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 44100); 590da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 591da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 592da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 593da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 594da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 595da853ecaSopenharmony_ci 596da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 597da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 598da853ecaSopenharmony_ci 599da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 600da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 601da853ecaSopenharmony_ci ret = encoderDemo->NativeSetCallback(handle, cb); 602da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 603da853ecaSopenharmony_ci ret = encoderDemo->NativeConfigure(handle, format); 604da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 605da853ecaSopenharmony_ci ret = encoderDemo->NativePrepare(handle); 606da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 607da853ecaSopenharmony_ci ret = encoderDemo->NativeStart(handle); 608da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 609da853ecaSopenharmony_ci 610da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 611da853ecaSopenharmony_ci { 612da853ecaSopenharmony_ci gettimeofday(&start, NULL); 613da853ecaSopenharmony_ci ret = encoderDemo->NativeSetParameter(handle, format); 614da853ecaSopenharmony_ci gettimeofday(&end, NULL); 615da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 616da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 617da853ecaSopenharmony_ci } 618da853ecaSopenharmony_ci 619da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 620da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 621da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 622da853ecaSopenharmony_ci delete encoderDemo; 623da853ecaSopenharmony_ci} 624da853ecaSopenharmony_ci 625da853ecaSopenharmony_ci 626da853ecaSopenharmony_ci/** 627da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_013 628da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_PushInputData 2000 times 629da853ecaSopenharmony_ci * @tc.desc : stability 630da853ecaSopenharmony_ci */ 631da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_013, TestSize.Level2) 632da853ecaSopenharmony_ci{ 633da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 634da853ecaSopenharmony_ci 635da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 636da853ecaSopenharmony_ci 637da853ecaSopenharmony_ci string inputFile = "f32le_44100_2_dayuhaitang.pcm"; 638da853ecaSopenharmony_ci string outputFile = "STABILITY_013.aac"; 639da853ecaSopenharmony_ci 640da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 641da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 642da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 44100); 643da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 644da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 645da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 646da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 647da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 648da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 649da853ecaSopenharmony_ci 650da853ecaSopenharmony_ci encoderDemo->setTimerFlag(TIMER_INPUT); 651da853ecaSopenharmony_ci encoderDemo->NativeRunCase(inputFile, outputFile, encoderName.c_str(), format); 652da853ecaSopenharmony_ci 653da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 654da853ecaSopenharmony_ci delete encoderDemo; 655da853ecaSopenharmony_ci} 656da853ecaSopenharmony_ci 657da853ecaSopenharmony_ci 658da853ecaSopenharmony_ci/** 659da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_014 660da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_FreeOutputData 2000 times 661da853ecaSopenharmony_ci * @tc.desc : stability 662da853ecaSopenharmony_ci */ 663da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_014, TestSize.Level2) 664da853ecaSopenharmony_ci{ 665da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 666da853ecaSopenharmony_ci 667da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 668da853ecaSopenharmony_ci 669da853ecaSopenharmony_ci string inputFile = "f32le_44100_2_dayuhaitang.pcm"; 670da853ecaSopenharmony_ci string outputFile = "STABILITY_014.aac"; 671da853ecaSopenharmony_ci 672da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 673da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 674da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 44100); 675da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 676da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 677da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 678da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 679da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 680da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 681da853ecaSopenharmony_ci 682da853ecaSopenharmony_ci encoderDemo->setTimerFlag(TIMER_FREEOUTPUT); 683da853ecaSopenharmony_ci encoderDemo->NativeRunCase(inputFile, outputFile, encoderName.c_str(), format); 684da853ecaSopenharmony_ci 685da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 686da853ecaSopenharmony_ci delete encoderDemo; 687da853ecaSopenharmony_ci} 688da853ecaSopenharmony_ci 689da853ecaSopenharmony_ci 690da853ecaSopenharmony_ci/** 691da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_015 692da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_IsValid 2000 times 693da853ecaSopenharmony_ci * @tc.desc : stability 694da853ecaSopenharmony_ci */ 695da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_015, TestSize.Level2) 696da853ecaSopenharmony_ci{ 697da853ecaSopenharmony_ci OH_AVErrCode ret; 698da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 699da853ecaSopenharmony_ci double totalTime = 0; 700da853ecaSopenharmony_ci struct timeval start, end; 701da853ecaSopenharmony_ci bool isValid; 702da853ecaSopenharmony_ci 703da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 704da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 705da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 44100); 706da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 707da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 708da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 709da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 710da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 711da853ecaSopenharmony_ci 712da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 713da853ecaSopenharmony_ci ASSERT_NE(nullptr, handle); 714da853ecaSopenharmony_ci 715da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 716da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 717da853ecaSopenharmony_ci ret = encoderDemo->NativeSetCallback(handle, cb); 718da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 719da853ecaSopenharmony_ci ret = encoderDemo->NativeConfigure(handle, format); 720da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 721da853ecaSopenharmony_ci ret = encoderDemo->NativePrepare(handle); 722da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 723da853ecaSopenharmony_ci ret = encoderDemo->NativeStart(handle); 724da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, ret); 725da853ecaSopenharmony_ci 726da853ecaSopenharmony_ci for (int i = 0; i < RUN_TIMES; i++) 727da853ecaSopenharmony_ci { 728da853ecaSopenharmony_ci gettimeofday(&start, NULL); 729da853ecaSopenharmony_ci ret = encoderDemo->NativeIsValid(handle, &isValid); 730da853ecaSopenharmony_ci gettimeofday(&end, NULL); 731da853ecaSopenharmony_ci totalTime += (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec) / 1000000.0; 732da853ecaSopenharmony_ci cout << "IsValid ret is " << ret << endl; 733da853ecaSopenharmony_ci } 734da853ecaSopenharmony_ci 735da853ecaSopenharmony_ci cout << "2000 times finish, run time is " << totalTime << endl; 736da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 737da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 738da853ecaSopenharmony_ci delete encoderDemo; 739da853ecaSopenharmony_ci} 740da853ecaSopenharmony_ci 741da853ecaSopenharmony_ci 742da853ecaSopenharmony_ci/** 743da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_016 744da853ecaSopenharmony_ci * @tc.name : encoder(long time) 745da853ecaSopenharmony_ci * @tc.desc : stability 746da853ecaSopenharmony_ci */ 747da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_016, TestSize.Level2) 748da853ecaSopenharmony_ci{ 749da853ecaSopenharmony_ci string encoderList[] = { "OH.Media.Codec.Encoder.Audio.AAC", "OH.Media.Codec.Encoder.Audio.Flac"}; 750da853ecaSopenharmony_ci string encoderName; 751da853ecaSopenharmony_ci string inputFile; 752da853ecaSopenharmony_ci string outputFile; 753da853ecaSopenharmony_ci 754da853ecaSopenharmony_ci time_t startTime = time(nullptr); 755da853ecaSopenharmony_ci ASSERT_NE(startTime, -1); 756da853ecaSopenharmony_ci time_t curTime = startTime; 757da853ecaSopenharmony_ci 758da853ecaSopenharmony_ci while (difftime(curTime, startTime) < RUN_TIME) 759da853ecaSopenharmony_ci { 760da853ecaSopenharmony_ci for (int i = 0; i < 2; i++) 761da853ecaSopenharmony_ci { 762da853ecaSopenharmony_ci encoderName = encoderList[i]; 763da853ecaSopenharmony_ci if (encoderName == "OH.Media.Codec.Encoder.Audio.AAC") 764da853ecaSopenharmony_ci { 765da853ecaSopenharmony_ci inputFile = "f32le_44100_2_dayuhaitang.pcm"; 766da853ecaSopenharmony_ci outputFile = "STABILITY_016.aac"; 767da853ecaSopenharmony_ci } 768da853ecaSopenharmony_ci else 769da853ecaSopenharmony_ci { 770da853ecaSopenharmony_ci inputFile = "s16_48000_2_dayuhaitang.pcm"; 771da853ecaSopenharmony_ci outputFile = "STABILITY_016.flac"; 772da853ecaSopenharmony_ci } 773da853ecaSopenharmony_ci 774da853ecaSopenharmony_ci cout << "cur decoder name is " << encoderName << ", input file is " << inputFile << ", output file is " << 775da853ecaSopenharmony_ci outputFile << endl; 776da853ecaSopenharmony_ci RunEncode(encoderName, inputFile, outputFile, i); 777da853ecaSopenharmony_ci } 778da853ecaSopenharmony_ci curTime = time(nullptr); 779da853ecaSopenharmony_ci ASSERT_NE(curTime, -1); 780da853ecaSopenharmony_ci } 781da853ecaSopenharmony_ci} 782da853ecaSopenharmony_ci 783da853ecaSopenharmony_ci 784da853ecaSopenharmony_ci/** 785da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_017 786da853ecaSopenharmony_ci * @tc.name : Flush(long time) 787da853ecaSopenharmony_ci * @tc.desc : stability 788da853ecaSopenharmony_ci */ 789da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_017, TestSize.Level2) 790da853ecaSopenharmony_ci{ 791da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 792da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 793da853ecaSopenharmony_ci string inputFile = "f32le_44100_2_dayuhaitang.pcm"; 794da853ecaSopenharmony_ci string outputFile = "STABILITY_017.aac"; 795da853ecaSopenharmony_ci bool needConfigure = true; 796da853ecaSopenharmony_ci 797da853ecaSopenharmony_ci time_t startTime = time(nullptr); 798da853ecaSopenharmony_ci ASSERT_NE(startTime, -1); 799da853ecaSopenharmony_ci time_t curTime = startTime; 800da853ecaSopenharmony_ci 801da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName(encoderName.c_str()); 802da853ecaSopenharmony_ci OH_AVFormat* format = GetAVFormatByEncoder(encoderName); 803da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 804da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 805da853ecaSopenharmony_ci encoderDemo->NativeSetCallback(handle, cb); 806da853ecaSopenharmony_ci 807da853ecaSopenharmony_ci while (difftime(curTime, startTime) < RUN_TIME) 808da853ecaSopenharmony_ci { 809da853ecaSopenharmony_ci encoderDemo->NativeRunCaseWithoutCreate(handle, inputFile, outputFile, format, encoderName.c_str(), 810da853ecaSopenharmony_ci needConfigure); 811da853ecaSopenharmony_ci needConfigure = false; 812da853ecaSopenharmony_ci encoderDemo->NativeFlush(handle); 813da853ecaSopenharmony_ci curTime = time(nullptr); 814da853ecaSopenharmony_ci ASSERT_NE(curTime, -1); 815da853ecaSopenharmony_ci } 816da853ecaSopenharmony_ci 817da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 818da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 819da853ecaSopenharmony_ci delete encoderDemo; 820da853ecaSopenharmony_ci} 821da853ecaSopenharmony_ci 822da853ecaSopenharmony_ci 823da853ecaSopenharmony_ci/** 824da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_018 825da853ecaSopenharmony_ci * @tc.name : Reset(long time) 826da853ecaSopenharmony_ci * @tc.desc : stability 827da853ecaSopenharmony_ci */ 828da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_018, TestSize.Level2) 829da853ecaSopenharmony_ci{ 830da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 831da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 832da853ecaSopenharmony_ci string inputFile = "f32le_44100_2_dayuhaitang.pcm"; 833da853ecaSopenharmony_ci string outputFile = "STABILITY_018.aac"; 834da853ecaSopenharmony_ci bool needConfigure = true; 835da853ecaSopenharmony_ci 836da853ecaSopenharmony_ci time_t startTime = time(nullptr); 837da853ecaSopenharmony_ci ASSERT_NE(startTime, -1); 838da853ecaSopenharmony_ci time_t curTime = startTime; 839da853ecaSopenharmony_ci 840da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName(encoderName.c_str()); 841da853ecaSopenharmony_ci OH_AVFormat* format = GetAVFormatByEncoder(encoderName); 842da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = {&OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 843da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 844da853ecaSopenharmony_ci encoderDemo->NativeSetCallback(handle, cb); 845da853ecaSopenharmony_ci 846da853ecaSopenharmony_ci while (difftime(curTime, startTime) < RUN_TIME) 847da853ecaSopenharmony_ci { 848da853ecaSopenharmony_ci encoderDemo->NativeRunCaseWithoutCreate(handle, inputFile, outputFile, format, encoderName.c_str(), 849da853ecaSopenharmony_ci needConfigure); 850da853ecaSopenharmony_ci encoderDemo->NativeReset(handle); 851da853ecaSopenharmony_ci curTime = time(nullptr); 852da853ecaSopenharmony_ci ASSERT_NE(curTime, -1); 853da853ecaSopenharmony_ci } 854da853ecaSopenharmony_ci 855da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 856da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 857da853ecaSopenharmony_ci delete encoderDemo; 858da853ecaSopenharmony_ci} 859da853ecaSopenharmony_ci 860da853ecaSopenharmony_ci 861da853ecaSopenharmony_ci/** 862da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_019 863da853ecaSopenharmony_ci * @tc.name : thread decoder(long time) 864da853ecaSopenharmony_ci * @tc.desc : stability 865da853ecaSopenharmony_ci */ 866da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_019, TestSize.Level2) 867da853ecaSopenharmony_ci{ 868da853ecaSopenharmony_ci string encoderList[] = { "OH.Media.Codec.Encoder.Audio.AAC", "OH.Media.Codec.Encoder.Audio.Flac" }; 869da853ecaSopenharmony_ci string encoderName; 870da853ecaSopenharmony_ci string inputFile; 871da853ecaSopenharmony_ci string outputFile; 872da853ecaSopenharmony_ci vector<thread> threadVec; 873da853ecaSopenharmony_ci 874da853ecaSopenharmony_ci time_t startTime = time(nullptr); 875da853ecaSopenharmony_ci ASSERT_NE(startTime, -1); 876da853ecaSopenharmony_ci time_t curTime = startTime; 877da853ecaSopenharmony_ci 878da853ecaSopenharmony_ci while (difftime(curTime, startTime) < RUN_TIME) 879da853ecaSopenharmony_ci { 880da853ecaSopenharmony_ci threadVec.clear(); 881da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 882da853ecaSopenharmony_ci { 883da853ecaSopenharmony_ci encoderName = encoderList[i % 2]; 884da853ecaSopenharmony_ci if (encoderName == "OH.Media.Codec.Encoder.Audio.AAC") 885da853ecaSopenharmony_ci { 886da853ecaSopenharmony_ci inputFile = "f32le_44100_2_dayuhaitang.pcm"; 887da853ecaSopenharmony_ci outputFile = "STABILITY_019_" + to_string(i) + ".aac"; 888da853ecaSopenharmony_ci } 889da853ecaSopenharmony_ci else 890da853ecaSopenharmony_ci { 891da853ecaSopenharmony_ci inputFile = "s16_48000_2_dayuhaitang.pcm"; 892da853ecaSopenharmony_ci outputFile = "STABILITY_019_" + to_string(i) + ".flac"; 893da853ecaSopenharmony_ci } 894da853ecaSopenharmony_ci cout << "cur decoder name is " << encoderName << ", input file is " << inputFile << ", output file is " << 895da853ecaSopenharmony_ci outputFile << endl; 896da853ecaSopenharmony_ci threadVec.push_back(thread(RunEncode, encoderName, inputFile, outputFile, i)); 897da853ecaSopenharmony_ci } 898da853ecaSopenharmony_ci for (uint32_t i = 0; i < threadVec.size(); i++) 899da853ecaSopenharmony_ci { 900da853ecaSopenharmony_ci threadVec[i].join(); 901da853ecaSopenharmony_ci } 902da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 903da853ecaSopenharmony_ci { 904da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, g_testResult[i]); 905da853ecaSopenharmony_ci } 906da853ecaSopenharmony_ci curTime = time(nullptr); 907da853ecaSopenharmony_ci ASSERT_NE(curTime, -1); 908da853ecaSopenharmony_ci } 909da853ecaSopenharmony_ci} 910da853ecaSopenharmony_ci 911da853ecaSopenharmony_ci 912da853ecaSopenharmony_ci/** 913da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_020 914da853ecaSopenharmony_ci * @tc.name : thread encoder Flush(long time) 915da853ecaSopenharmony_ci * @tc.desc : stability 916da853ecaSopenharmony_ci */ 917da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_020, TestSize.Level2) 918da853ecaSopenharmony_ci{ 919da853ecaSopenharmony_ci string encoderList[] = { "OH.Media.Codec.Encoder.Audio.AAC", "OH.Media.Codec.Encoder.Audio.Flac" }; 920da853ecaSopenharmony_ci string encoderName; 921da853ecaSopenharmony_ci string inputFile; 922da853ecaSopenharmony_ci string outputFile; 923da853ecaSopenharmony_ci vector<thread> threadVec; 924da853ecaSopenharmony_ci 925da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 926da853ecaSopenharmony_ci { 927da853ecaSopenharmony_ci encoderName = encoderList[i % 2]; 928da853ecaSopenharmony_ci if (encoderName == "OH.Media.Codec.Encoder.Audio.AAC") 929da853ecaSopenharmony_ci { 930da853ecaSopenharmony_ci inputFile = "f32le_44100_2_dayuhaitang.pcm"; 931da853ecaSopenharmony_ci outputFile = "STABILITY_019_" + to_string(i) + ".aac"; 932da853ecaSopenharmony_ci } 933da853ecaSopenharmony_ci else 934da853ecaSopenharmony_ci { 935da853ecaSopenharmony_ci inputFile = "s16_48000_2_dayuhaitang.pcm"; 936da853ecaSopenharmony_ci outputFile = "STABILITY_019_" + to_string(i) + ".flac"; 937da853ecaSopenharmony_ci } 938da853ecaSopenharmony_ci cout << "cur encoder name is " << encoderName << ", input file is " << inputFile << ", output file is " << 939da853ecaSopenharmony_ci outputFile << endl; 940da853ecaSopenharmony_ci threadVec.push_back(thread(RunLongTimeFlush, encoderName, inputFile, outputFile, i)); 941da853ecaSopenharmony_ci } 942da853ecaSopenharmony_ci for (uint32_t i = 0; i < threadVec.size(); i++) 943da853ecaSopenharmony_ci { 944da853ecaSopenharmony_ci threadVec[i].join(); 945da853ecaSopenharmony_ci } 946da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 947da853ecaSopenharmony_ci { 948da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, g_testResult[i]); 949da853ecaSopenharmony_ci } 950da853ecaSopenharmony_ci} 951da853ecaSopenharmony_ci 952da853ecaSopenharmony_ci 953da853ecaSopenharmony_ci/** 954da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_021 955da853ecaSopenharmony_ci * @tc.name : thread encoder Reset(long time) 956da853ecaSopenharmony_ci * @tc.desc : stability 957da853ecaSopenharmony_ci */ 958da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_021, TestSize.Level2) 959da853ecaSopenharmony_ci{ 960da853ecaSopenharmony_ci string encoderList[] = { "OH.Media.Codec.Encoder.Audio.AAC", "OH.Media.Codec.Encoder.Audio.Flac" }; 961da853ecaSopenharmony_ci string encoderName; 962da853ecaSopenharmony_ci string inputFile; 963da853ecaSopenharmony_ci string outputFile; 964da853ecaSopenharmony_ci vector<thread> threadVec; 965da853ecaSopenharmony_ci 966da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 967da853ecaSopenharmony_ci { 968da853ecaSopenharmony_ci encoderName = encoderList[i % 2]; 969da853ecaSopenharmony_ci if (encoderName == "OH.Media.Codec.Encoder.Audio.AAC") 970da853ecaSopenharmony_ci { 971da853ecaSopenharmony_ci inputFile = "f32le_44100_2_dayuhaitang.pcm"; 972da853ecaSopenharmony_ci outputFile = "STABILITY_019_" + to_string(i) + ".aac"; 973da853ecaSopenharmony_ci } 974da853ecaSopenharmony_ci else 975da853ecaSopenharmony_ci { 976da853ecaSopenharmony_ci inputFile = "s16_48000_2_dayuhaitang.pcm"; 977da853ecaSopenharmony_ci outputFile = "STABILITY_019_" + to_string(i) + ".flac"; 978da853ecaSopenharmony_ci } 979da853ecaSopenharmony_ci cout << "cur encoder name is " << encoderName << ", input file is " << inputFile << ", output file is " << 980da853ecaSopenharmony_ci outputFile << endl; 981da853ecaSopenharmony_ci threadVec.push_back(thread(RunLongTimeReset, encoderName, inputFile, outputFile, i)); 982da853ecaSopenharmony_ci } 983da853ecaSopenharmony_ci for (uint32_t i = 0; i < threadVec.size(); i++) 984da853ecaSopenharmony_ci { 985da853ecaSopenharmony_ci threadVec[i].join(); 986da853ecaSopenharmony_ci } 987da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 988da853ecaSopenharmony_ci { 989da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, g_testResult[i]); 990da853ecaSopenharmony_ci } 991da853ecaSopenharmony_ci} 992da853ecaSopenharmony_ci 993da853ecaSopenharmony_ci 994da853ecaSopenharmony_ci/** 995da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_022 996da853ecaSopenharmony_ci * @tc.name : thread encoder Reset(long time) 997da853ecaSopenharmony_ci * @tc.desc : stability 998da853ecaSopenharmony_ci */ 999da853ecaSopenharmony_ciHWTEST_F(NativeStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_022, TestSize.Level2) 1000da853ecaSopenharmony_ci{ 1001da853ecaSopenharmony_ci string encoderList[] = { "OH.Media.Codec.Encoder.Audio.AAC", "OH.Media.Codec.Encoder.Audio.Flac" }; 1002da853ecaSopenharmony_ci string encoderName; 1003da853ecaSopenharmony_ci string inputFile; 1004da853ecaSopenharmony_ci string outputFile; 1005da853ecaSopenharmony_ci vector<thread> threadVec; 1006da853ecaSopenharmony_ci 1007da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 1008da853ecaSopenharmony_ci { 1009da853ecaSopenharmony_ci encoderName = encoderList[i % 2]; 1010da853ecaSopenharmony_ci if (encoderName == "OH.Media.Codec.Encoder.Audio.AAC") 1011da853ecaSopenharmony_ci { 1012da853ecaSopenharmony_ci inputFile = "f32le_44100_2_dayuhaitang.pcm"; 1013da853ecaSopenharmony_ci outputFile = "STABILITY_019_" + to_string(i) + ".aac"; 1014da853ecaSopenharmony_ci } 1015da853ecaSopenharmony_ci else 1016da853ecaSopenharmony_ci { 1017da853ecaSopenharmony_ci inputFile = "s16_48000_2_dayuhaitang.pcm"; 1018da853ecaSopenharmony_ci outputFile = "STABILITY_019_" + to_string(i) + ".flac"; 1019da853ecaSopenharmony_ci } 1020da853ecaSopenharmony_ci cout << "cur encoder name is " << encoderName << ", input file is " << inputFile << ", output file is " << 1021da853ecaSopenharmony_ci outputFile << endl; 1022da853ecaSopenharmony_ci threadVec.push_back(thread(RunLongTimeStop, encoderName, inputFile, outputFile, i)); 1023da853ecaSopenharmony_ci } 1024da853ecaSopenharmony_ci for (uint32_t i = 0; i < threadVec.size(); i++) 1025da853ecaSopenharmony_ci { 1026da853ecaSopenharmony_ci threadVec[i].join(); 1027da853ecaSopenharmony_ci } 1028da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 1029da853ecaSopenharmony_ci { 1030da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, g_testResult[i]); 1031da853ecaSopenharmony_ci } 1032da853ecaSopenharmony_ci}