1da853ecaSopenharmony_ci/*
2da853ecaSopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd.
3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License.
5da853ecaSopenharmony_ci * You may obtain a copy of the License at
6da853ecaSopenharmony_ci *
7da853ecaSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8da853ecaSopenharmony_ci *
9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and
13da853ecaSopenharmony_ci * limitations under the License.
14da853ecaSopenharmony_ci */
15da853ecaSopenharmony_ci
16da853ecaSopenharmony_ci#include <string>
17da853ecaSopenharmony_ci#include <iostream>
18da853ecaSopenharmony_ci#include <thread>
19da853ecaSopenharmony_ci#include <vector>
20da853ecaSopenharmony_ci#include <ctime>
21da853ecaSopenharmony_ci#include "gtest/gtest.h"
22da853ecaSopenharmony_ci#include "AudioEncoderDemoCommon.h"
23da853ecaSopenharmony_ci#include "fcntl.h"
24da853ecaSopenharmony_ci#include "media_description.h"
25da853ecaSopenharmony_ci#include "avcodec_info.h"
26da853ecaSopenharmony_ci#include "avcodec_errors.h"
27da853ecaSopenharmony_ci#include "av_common.h"
28da853ecaSopenharmony_ci#include "meta/format.h"
29da853ecaSopenharmony_ci#include "avcodec_audio_common.h"
30da853ecaSopenharmony_ci
31da853ecaSopenharmony_ciusing namespace std;
32da853ecaSopenharmony_ciusing namespace testing::ext;
33da853ecaSopenharmony_ciusing namespace OHOS;
34da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec;
35da853ecaSopenharmony_ci
36da853ecaSopenharmony_cinamespace {
37da853ecaSopenharmony_ci    class InnerStablityTest : public testing::Test {
38da853ecaSopenharmony_ci    public:
39da853ecaSopenharmony_ci        static void SetUpTestCase();
40da853ecaSopenharmony_ci        static void TearDownTestCase();
41da853ecaSopenharmony_ci        void SetUp() override;
42da853ecaSopenharmony_ci        void TearDown() override;
43da853ecaSopenharmony_ci    };
44da853ecaSopenharmony_ci
45da853ecaSopenharmony_ci    void InnerStablityTest::SetUpTestCase() {}
46da853ecaSopenharmony_ci    void InnerStablityTest::TearDownTestCase() {}
47da853ecaSopenharmony_ci    void InnerStablityTest::SetUp() {}
48da853ecaSopenharmony_ci    void InnerStablityTest::TearDown() {}
49da853ecaSopenharmony_ci    constexpr int RUN_TIMES = 100000;
50da853ecaSopenharmony_ci    constexpr int RUN_TIME = 12 * 3600;
51da853ecaSopenharmony_ci    string inputFilePath = "/data/audioIn.mp3";
52da853ecaSopenharmony_ci    string outputFilePath = "/data/audioOut.pcm";
53da853ecaSopenharmony_ci}
54da853ecaSopenharmony_ci
55da853ecaSopenharmony_ci/**
56da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_001
57da853ecaSopenharmony_ci * @tc.name      : InnerCreateByMime(1000 times)
58da853ecaSopenharmony_ci * @tc.desc      : Stability test
59da853ecaSopenharmony_ci */
60da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_001, TestSize.Level2)
61da853ecaSopenharmony_ci{
62da853ecaSopenharmony_ci    srand(time(nullptr) * 10);
63da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
64da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
65da853ecaSopenharmony_ci    string mimeType[] = { "audio/mp4a-latm", "audio/flac" };
66da853ecaSopenharmony_ci
67da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
68da853ecaSopenharmony_ci    {
69da853ecaSopenharmony_ci        int typeIndex = rand() % 4;
70da853ecaSopenharmony_ci        encoderDemo->InnerCreateByMime(mimeType[typeIndex].c_str());
71da853ecaSopenharmony_ci        cout << "run time is: " << i << endl;
72da853ecaSopenharmony_ci        encoderDemo->InnerDestroy();
73da853ecaSopenharmony_ci    }
74da853ecaSopenharmony_ci
75da853ecaSopenharmony_ci    delete encoderDemo;
76da853ecaSopenharmony_ci}
77da853ecaSopenharmony_ci
78da853ecaSopenharmony_ci/**
79da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_002
80da853ecaSopenharmony_ci * @tc.name      : InnerCreateByName(1000 times)
81da853ecaSopenharmony_ci * @tc.desc      : Stability test
82da853ecaSopenharmony_ci */
83da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_002, TestSize.Level2)
84da853ecaSopenharmony_ci{
85da853ecaSopenharmony_ci    srand(time(nullptr) * 10);
86da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
87da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
88da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
89da853ecaSopenharmony_ci    {
90da853ecaSopenharmony_ci        encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
91da853ecaSopenharmony_ci        cout << "run time is: " << i << endl;
92da853ecaSopenharmony_ci        encoderDemo->InnerDestroy();
93da853ecaSopenharmony_ci    }
94da853ecaSopenharmony_ci    delete encoderDemo;
95da853ecaSopenharmony_ci}
96da853ecaSopenharmony_ci
97da853ecaSopenharmony_ci/**
98da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_003
99da853ecaSopenharmony_ci * @tc.name      : InnerPrepare(1000 times)
100da853ecaSopenharmony_ci * @tc.desc      : Stability test
101da853ecaSopenharmony_ci */
102da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_003, TestSize.Level2)
103da853ecaSopenharmony_ci{
104da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
105da853ecaSopenharmony_ci    encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
106da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
107da853ecaSopenharmony_ci    Format format;
108da853ecaSopenharmony_ci
109da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
110da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
111da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 112000);
112da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
113da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
114da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
115da853ecaSopenharmony_ci
116da853ecaSopenharmony_ci    encoderDemo->InnerConfigure(format);
117da853ecaSopenharmony_ci
118da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
119da853ecaSopenharmony_ci    {
120da853ecaSopenharmony_ci        int32_t ret = encoderDemo->InnerPrepare();
121da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
122da853ecaSopenharmony_ci    }
123da853ecaSopenharmony_ci
124da853ecaSopenharmony_ci    encoderDemo->InnerDestroy();
125da853ecaSopenharmony_ci
126da853ecaSopenharmony_ci    delete encoderDemo;
127da853ecaSopenharmony_ci}
128da853ecaSopenharmony_ci
129da853ecaSopenharmony_ci
130da853ecaSopenharmony_ci/**
131da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_004
132da853ecaSopenharmony_ci * @tc.name      : InnerStart(1000 times)
133da853ecaSopenharmony_ci * @tc.desc      : Stability test
134da853ecaSopenharmony_ci */
135da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_004, TestSize.Level2)
136da853ecaSopenharmony_ci{
137da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
138da853ecaSopenharmony_ci    encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
139da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
140da853ecaSopenharmony_ci    Format format;
141da853ecaSopenharmony_ci
142da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
143da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
144da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 112000);
145da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
146da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
147da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
148da853ecaSopenharmony_ci
149da853ecaSopenharmony_ci    std::shared_ptr<AEncSignal> signal_ = encoderDemo->getSignal();
150da853ecaSopenharmony_ci    std::shared_ptr<InnerAEnDemoCallback> cb_ = make_unique<InnerAEnDemoCallback>(signal_);
151da853ecaSopenharmony_ci    int32_t ret = encoderDemo->InnerSetCallback(cb_);
152da853ecaSopenharmony_ci
153da853ecaSopenharmony_ci    encoderDemo->InnerConfigure(format);
154da853ecaSopenharmony_ci    encoderDemo->InnerPrepare();
155da853ecaSopenharmony_ci
156da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
157da853ecaSopenharmony_ci    {
158da853ecaSopenharmony_ci        ret = encoderDemo->InnerStart();
159da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
160da853ecaSopenharmony_ci    }
161da853ecaSopenharmony_ci
162da853ecaSopenharmony_ci    encoderDemo->InnerDestroy();
163da853ecaSopenharmony_ci
164da853ecaSopenharmony_ci    delete encoderDemo;
165da853ecaSopenharmony_ci}
166da853ecaSopenharmony_ci
167da853ecaSopenharmony_ci/**
168da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_005
169da853ecaSopenharmony_ci * @tc.name      : InnerStop(1000 times)
170da853ecaSopenharmony_ci * @tc.desc      : Stability test
171da853ecaSopenharmony_ci */
172da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_005, TestSize.Level2)
173da853ecaSopenharmony_ci{
174da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
175da853ecaSopenharmony_ci    encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
176da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
177da853ecaSopenharmony_ci    Format format;
178da853ecaSopenharmony_ci
179da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
180da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
181da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 112000);
182da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
183da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
184da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
185da853ecaSopenharmony_ci
186da853ecaSopenharmony_ci    std::shared_ptr<AEncSignal> signal_ = encoderDemo->getSignal();
187da853ecaSopenharmony_ci    std::shared_ptr<InnerAEnDemoCallback> cb_ = make_unique<InnerAEnDemoCallback>(signal_);
188da853ecaSopenharmony_ci    int32_t ret = encoderDemo->InnerSetCallback(cb_);
189da853ecaSopenharmony_ci
190da853ecaSopenharmony_ci    encoderDemo->InnerConfigure(format);
191da853ecaSopenharmony_ci    encoderDemo->InnerPrepare();
192da853ecaSopenharmony_ci    encoderDemo->InnerStart();
193da853ecaSopenharmony_ci
194da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
195da853ecaSopenharmony_ci    {
196da853ecaSopenharmony_ci        ret = encoderDemo->InnerStop();
197da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
198da853ecaSopenharmony_ci    }
199da853ecaSopenharmony_ci
200da853ecaSopenharmony_ci    encoderDemo->InnerDestroy();
201da853ecaSopenharmony_ci
202da853ecaSopenharmony_ci    delete encoderDemo;
203da853ecaSopenharmony_ci}
204da853ecaSopenharmony_ci
205da853ecaSopenharmony_ci
206da853ecaSopenharmony_ci/**
207da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_006
208da853ecaSopenharmony_ci * @tc.name      : InnerDestroy(1000 times)
209da853ecaSopenharmony_ci * @tc.desc      : Stability test
210da853ecaSopenharmony_ci */
211da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_006, TestSize.Level2)
212da853ecaSopenharmony_ci{
213da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
214da853ecaSopenharmony_ci    encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
215da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
216da853ecaSopenharmony_ci    Format format;
217da853ecaSopenharmony_ci
218da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
219da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
220da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 112000);
221da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
222da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
223da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
224da853ecaSopenharmony_ci
225da853ecaSopenharmony_ci    std::shared_ptr<AEncSignal> signal_ = encoderDemo->getSignal();
226da853ecaSopenharmony_ci    std::shared_ptr<InnerAEnDemoCallback> cb_ = make_unique<InnerAEnDemoCallback>(signal_);
227da853ecaSopenharmony_ci    int32_t ret = encoderDemo->InnerSetCallback(cb_);
228da853ecaSopenharmony_ci
229da853ecaSopenharmony_ci    encoderDemo->InnerConfigure(format);
230da853ecaSopenharmony_ci    encoderDemo->InnerPrepare();
231da853ecaSopenharmony_ci    encoderDemo->InnerStart();
232da853ecaSopenharmony_ci    encoderDemo->InnerStop();
233da853ecaSopenharmony_ci
234da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
235da853ecaSopenharmony_ci    {
236da853ecaSopenharmony_ci        ret = encoderDemo->InnerDestroy();
237da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
238da853ecaSopenharmony_ci    }
239da853ecaSopenharmony_ci
240da853ecaSopenharmony_ci    delete encoderDemo;
241da853ecaSopenharmony_ci}
242da853ecaSopenharmony_ci
243da853ecaSopenharmony_ci/**
244da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_007
245da853ecaSopenharmony_ci * @tc.name      : InnerReset(1000 times)
246da853ecaSopenharmony_ci * @tc.desc      : Stability test
247da853ecaSopenharmony_ci */
248da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_007, TestSize.Level2)
249da853ecaSopenharmony_ci{
250da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
251da853ecaSopenharmony_ci    encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
252da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
253da853ecaSopenharmony_ci    Format format;
254da853ecaSopenharmony_ci
255da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
256da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
257da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 112000);
258da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
259da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
260da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
261da853ecaSopenharmony_ci
262da853ecaSopenharmony_ci    std::shared_ptr<AEncSignal> signal_ = encoderDemo->getSignal();
263da853ecaSopenharmony_ci    std::shared_ptr<InnerAEnDemoCallback> cb_ = make_unique<InnerAEnDemoCallback>(signal_);
264da853ecaSopenharmony_ci    int32_t ret = encoderDemo->InnerSetCallback(cb_);
265da853ecaSopenharmony_ci
266da853ecaSopenharmony_ci    encoderDemo->InnerConfigure(format);
267da853ecaSopenharmony_ci    encoderDemo->InnerPrepare();
268da853ecaSopenharmony_ci    encoderDemo->InnerStart();
269da853ecaSopenharmony_ci
270da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
271da853ecaSopenharmony_ci    {
272da853ecaSopenharmony_ci        ret = encoderDemo->InnerReset();
273da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
274da853ecaSopenharmony_ci    }
275da853ecaSopenharmony_ci    encoderDemo->InnerDestroy();
276da853ecaSopenharmony_ci    delete encoderDemo;
277da853ecaSopenharmony_ci}
278da853ecaSopenharmony_ci
279da853ecaSopenharmony_ci/**
280da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_008
281da853ecaSopenharmony_ci * @tc.name      : InnerFlush(1000 times)
282da853ecaSopenharmony_ci * @tc.desc      : Stability test
283da853ecaSopenharmony_ci */
284da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_008, TestSize.Level2)
285da853ecaSopenharmony_ci{
286da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
287da853ecaSopenharmony_ci    encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
288da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
289da853ecaSopenharmony_ci    Format format;
290da853ecaSopenharmony_ci
291da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
292da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
293da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 112000);
294da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
295da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
296da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
297da853ecaSopenharmony_ci
298da853ecaSopenharmony_ci    std::shared_ptr<AEncSignal> signal_ = encoderDemo->getSignal();
299da853ecaSopenharmony_ci    std::shared_ptr<InnerAEnDemoCallback> cb_ = make_unique<InnerAEnDemoCallback>(signal_);
300da853ecaSopenharmony_ci    int32_t ret = encoderDemo->InnerSetCallback(cb_);
301da853ecaSopenharmony_ci
302da853ecaSopenharmony_ci    encoderDemo->InnerConfigure(format);
303da853ecaSopenharmony_ci    encoderDemo->InnerPrepare();
304da853ecaSopenharmony_ci    encoderDemo->InnerStart();
305da853ecaSopenharmony_ci
306da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
307da853ecaSopenharmony_ci    {
308da853ecaSopenharmony_ci        ret = encoderDemo->InnerFlush();
309da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
310da853ecaSopenharmony_ci    }
311da853ecaSopenharmony_ci    encoderDemo->InnerDestroy();
312da853ecaSopenharmony_ci    delete encoderDemo;
313da853ecaSopenharmony_ci}
314da853ecaSopenharmony_ci
315da853ecaSopenharmony_ci/**
316da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_009
317da853ecaSopenharmony_ci * @tc.name      : InnerRelease(1000 times)
318da853ecaSopenharmony_ci * @tc.desc      : Stability test
319da853ecaSopenharmony_ci */
320da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_009, TestSize.Level2)
321da853ecaSopenharmony_ci{
322da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
323da853ecaSopenharmony_ci    encoderDemo->InnerCreateByName("OH.Media.Codec.Encoder.Audio.AAC");
324da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
325da853ecaSopenharmony_ci    Format format;
326da853ecaSopenharmony_ci
327da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
328da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
329da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 112000);
330da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
331da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
332da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
333da853ecaSopenharmony_ci
334da853ecaSopenharmony_ci    std::shared_ptr<AEncSignal> signal_ = encoderDemo->getSignal();
335da853ecaSopenharmony_ci    std::shared_ptr<InnerAEnDemoCallback> cb_ = make_unique<InnerAEnDemoCallback>(signal_);
336da853ecaSopenharmony_ci    int32_t ret = encoderDemo->InnerSetCallback(cb_);
337da853ecaSopenharmony_ci
338da853ecaSopenharmony_ci    encoderDemo->InnerConfigure(format);
339da853ecaSopenharmony_ci    encoderDemo->InnerPrepare();
340da853ecaSopenharmony_ci    encoderDemo->InnerStart();
341da853ecaSopenharmony_ci
342da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
343da853ecaSopenharmony_ci    {
344da853ecaSopenharmony_ci        ret = encoderDemo->InnerRelease();
345da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
346da853ecaSopenharmony_ci    }
347da853ecaSopenharmony_ci    encoderDemo->InnerDestroy();
348da853ecaSopenharmony_ci    delete encoderDemo;
349da853ecaSopenharmony_ci}
350da853ecaSopenharmony_ci
351da853ecaSopenharmony_ci/**
352da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_010
353da853ecaSopenharmony_ci * @tc.name      : aac(long time)
354da853ecaSopenharmony_ci * @tc.desc      : Function test
355da853ecaSopenharmony_ci */
356da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_010, TestSize.Level2)
357da853ecaSopenharmony_ci{
358da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
359da853ecaSopenharmony_ci    time_t startTime = time(nullptr);
360da853ecaSopenharmony_ci    ASSERT_NE(startTime, -1);
361da853ecaSopenharmony_ci    time_t curTime = startTime;
362da853ecaSopenharmony_ci
363da853ecaSopenharmony_ci    while (difftime(curTime, startTime) < RUN_TIME)
364da853ecaSopenharmony_ci    {
365da853ecaSopenharmony_ci        cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl;
366da853ecaSopenharmony_ci        inputFilePath = "f32le_44100_1_dayuhaitang.pcm";
367da853ecaSopenharmony_ci        outputFilePath = "FUNCTION_010_stability.aac";
368da853ecaSopenharmony_ci
369da853ecaSopenharmony_ci        Format format;
370da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
371da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
372da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 112000);
373da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
374da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
375da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
376da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, 1);
377da853ecaSopenharmony_ci
378da853ecaSopenharmony_ci        encoderDemo->InnerRunCase(inputFilePath, outputFilePath, "OH.Media.Codec.Encoder.Audio.AAC", format);
379da853ecaSopenharmony_ci        curTime = time(nullptr);
380da853ecaSopenharmony_ci        ASSERT_NE(curTime, -1);
381da853ecaSopenharmony_ci    }
382da853ecaSopenharmony_ci    delete encoderDemo;
383da853ecaSopenharmony_ci}
384da853ecaSopenharmony_ci
385da853ecaSopenharmony_ci/**
386da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_011
387da853ecaSopenharmony_ci * @tc.name      : flac(long time)
388da853ecaSopenharmony_ci * @tc.desc      : Function test
389da853ecaSopenharmony_ci */
390da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_ENCODER_STABILITY_011, TestSize.Level2)
391da853ecaSopenharmony_ci{
392da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
393da853ecaSopenharmony_ci    time_t startTime = time(nullptr);
394da853ecaSopenharmony_ci    ASSERT_NE(startTime, -1);
395da853ecaSopenharmony_ci    time_t curTime = startTime;
396da853ecaSopenharmony_ci
397da853ecaSopenharmony_ci    while (difftime(curTime, startTime) < RUN_TIME)
398da853ecaSopenharmony_ci    {
399da853ecaSopenharmony_ci        cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl;
400da853ecaSopenharmony_ci        inputFilePath = "s16_44100_2_dayuhaitang.pcm";
401da853ecaSopenharmony_ci        outputFilePath = "FUNCTION_011_stability.flac";
402da853ecaSopenharmony_ci
403da853ecaSopenharmony_ci        Format format;
404da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 2);
405da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
406da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 112000);
407da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_S32LE);
408da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_S32LE);
409da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, STEREO);
410da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_COMPLIANCE_LEVEL, -2);
411da853ecaSopenharmony_ci        encoderDemo->InnerRunCase(inputFilePath, outputFilePath, "OH.Media.Codec.Encoder.Audio.Flac", format);
412da853ecaSopenharmony_ci        curTime = time(nullptr);
413da853ecaSopenharmony_ci        ASSERT_NE(curTime, -1);
414da853ecaSopenharmony_ci    }
415da853ecaSopenharmony_ci    delete encoderDemo;
416da853ecaSopenharmony_ci}
417