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}