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 "AudioDecoderDemoCommon.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
30da853ecaSopenharmony_ciusing namespace std;
31da853ecaSopenharmony_ciusing namespace testing::ext;
32da853ecaSopenharmony_ciusing namespace OHOS;
33da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec;
34da853ecaSopenharmony_ci
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
50da853ecaSopenharmony_ci    constexpr int RUN_TIMES = 100000;
51da853ecaSopenharmony_ci    constexpr int RUN_TIME = 12 * 3600;
52da853ecaSopenharmony_ci}
53da853ecaSopenharmony_ci
54da853ecaSopenharmony_ci/**
55da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_001
56da853ecaSopenharmony_ci * @tc.name      : InnerCreateByMime(1000 times)
57da853ecaSopenharmony_ci * @tc.desc      : Stability test
58da853ecaSopenharmony_ci */
59da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_001, TestSize.Level2)
60da853ecaSopenharmony_ci{
61da853ecaSopenharmony_ci    srand(time(nullptr) * 10);
62da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
63da853ecaSopenharmony_ci
64da853ecaSopenharmony_ci    string mimeType[] = { "audio/mp4a-latm", "audio/mpeg", "audio/vorbis", "audio/flac", "audio/amr-wb",
65da853ecaSopenharmony_ci                          "audio/3gpp", "audio/g711mu" };
66da853ecaSopenharmony_ci
67da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
68da853ecaSopenharmony_ci    {
69da853ecaSopenharmony_ci        int typeIndex = rand() % 4;
70da853ecaSopenharmony_ci        decoderDemo->InnerCreateByMime(mimeType[typeIndex].c_str());
71da853ecaSopenharmony_ci        cout << "run time is: " << i << endl;
72da853ecaSopenharmony_ci        int32_t ret = decoderDemo->InnerDestroy();
73da853ecaSopenharmony_ci        ASSERT_EQ(AVCS_ERR_OK, ret);
74da853ecaSopenharmony_ci    }
75da853ecaSopenharmony_ci
76da853ecaSopenharmony_ci    delete decoderDemo;
77da853ecaSopenharmony_ci}
78da853ecaSopenharmony_ci
79da853ecaSopenharmony_ci
80da853ecaSopenharmony_ci/**
81da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_002
82da853ecaSopenharmony_ci * @tc.name      : InnerCreateByName(1000 times)
83da853ecaSopenharmony_ci * @tc.desc      : Stability test
84da853ecaSopenharmony_ci */
85da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_002, TestSize.Level2)
86da853ecaSopenharmony_ci{
87da853ecaSopenharmony_ci    srand(time(nullptr) * 10);
88da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
89da853ecaSopenharmony_ci
90da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
91da853ecaSopenharmony_ci    {
92da853ecaSopenharmony_ci        decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg");
93da853ecaSopenharmony_ci        cout << "run time is: " << i << endl;
94da853ecaSopenharmony_ci        int32_t ret = decoderDemo->InnerDestroy();
95da853ecaSopenharmony_ci        ASSERT_EQ(AVCS_ERR_OK, ret);
96da853ecaSopenharmony_ci    }
97da853ecaSopenharmony_ci    delete decoderDemo;
98da853ecaSopenharmony_ci}
99da853ecaSopenharmony_ci
100da853ecaSopenharmony_ci
101da853ecaSopenharmony_ci/**
102da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_003
103da853ecaSopenharmony_ci * @tc.name      : InnerPrepare(1000 times)
104da853ecaSopenharmony_ci * @tc.desc      : Stability test
105da853ecaSopenharmony_ci */
106da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_003, TestSize.Level2)
107da853ecaSopenharmony_ci{
108da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
109da853ecaSopenharmony_ci    int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg");
110da853ecaSopenharmony_ci    ASSERT_EQ(AVCS_ERR_OK, ret);
111da853ecaSopenharmony_ci    std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal();
112da853ecaSopenharmony_ci    std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_);
113da853ecaSopenharmony_ci    decoderDemo->InnerSetCallback(cb_);
114da853ecaSopenharmony_ci
115da853ecaSopenharmony_ci    Format format;
116da853ecaSopenharmony_ci
117da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000);
118da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
119da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000);
120da853ecaSopenharmony_ci
121da853ecaSopenharmony_ci    decoderDemo->InnerConfigure(format);
122da853ecaSopenharmony_ci
123da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
124da853ecaSopenharmony_ci    {
125da853ecaSopenharmony_ci        ret = decoderDemo->InnerPrepare();
126da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
127da853ecaSopenharmony_ci    }
128da853ecaSopenharmony_ci
129da853ecaSopenharmony_ci    decoderDemo->InnerDestroy();
130da853ecaSopenharmony_ci
131da853ecaSopenharmony_ci    delete decoderDemo;
132da853ecaSopenharmony_ci}
133da853ecaSopenharmony_ci
134da853ecaSopenharmony_ci
135da853ecaSopenharmony_ci/**
136da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_004
137da853ecaSopenharmony_ci * @tc.name      : InnerStart(1000 times)
138da853ecaSopenharmony_ci * @tc.desc      : Stability test
139da853ecaSopenharmony_ci */
140da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_004, TestSize.Level2)
141da853ecaSopenharmony_ci{
142da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
143da853ecaSopenharmony_ci    int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg");
144da853ecaSopenharmony_ci    ASSERT_EQ(AVCS_ERR_OK, ret);
145da853ecaSopenharmony_ci    std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal();
146da853ecaSopenharmony_ci    std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_);
147da853ecaSopenharmony_ci    decoderDemo->InnerSetCallback(cb_);
148da853ecaSopenharmony_ci    Format format;
149da853ecaSopenharmony_ci
150da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000);
151da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
152da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000);
153da853ecaSopenharmony_ci
154da853ecaSopenharmony_ci    decoderDemo->InnerConfigure(format);
155da853ecaSopenharmony_ci    decoderDemo->InnerPrepare();
156da853ecaSopenharmony_ci
157da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
158da853ecaSopenharmony_ci    {
159da853ecaSopenharmony_ci        ret = decoderDemo->InnerStart();
160da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
161da853ecaSopenharmony_ci    }
162da853ecaSopenharmony_ci
163da853ecaSopenharmony_ci    decoderDemo->InnerDestroy();
164da853ecaSopenharmony_ci
165da853ecaSopenharmony_ci    delete decoderDemo;
166da853ecaSopenharmony_ci}
167da853ecaSopenharmony_ci
168da853ecaSopenharmony_ci
169da853ecaSopenharmony_ci/**
170da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_005
171da853ecaSopenharmony_ci * @tc.name      : InnerStop(1000 times)
172da853ecaSopenharmony_ci * @tc.desc      : Stability test
173da853ecaSopenharmony_ci */
174da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_005, TestSize.Level2)
175da853ecaSopenharmony_ci{
176da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
177da853ecaSopenharmony_ci    int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg");
178da853ecaSopenharmony_ci    ASSERT_EQ(AVCS_ERR_OK, ret);
179da853ecaSopenharmony_ci    std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal();
180da853ecaSopenharmony_ci    std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_);
181da853ecaSopenharmony_ci    decoderDemo->InnerSetCallback(cb_);
182da853ecaSopenharmony_ci    Format format;
183da853ecaSopenharmony_ci
184da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000);
185da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
186da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000);
187da853ecaSopenharmony_ci
188da853ecaSopenharmony_ci    decoderDemo->InnerConfigure(format);
189da853ecaSopenharmony_ci    decoderDemo->InnerPrepare();
190da853ecaSopenharmony_ci    decoderDemo->InnerStart();
191da853ecaSopenharmony_ci
192da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
193da853ecaSopenharmony_ci    {
194da853ecaSopenharmony_ci        ret = decoderDemo->InnerStop();
195da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
196da853ecaSopenharmony_ci    }
197da853ecaSopenharmony_ci
198da853ecaSopenharmony_ci    decoderDemo->InnerDestroy();
199da853ecaSopenharmony_ci
200da853ecaSopenharmony_ci    delete decoderDemo;
201da853ecaSopenharmony_ci}
202da853ecaSopenharmony_ci
203da853ecaSopenharmony_ci/**
204da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_006
205da853ecaSopenharmony_ci * @tc.name      : InnerDestroy(1000 times)
206da853ecaSopenharmony_ci * @tc.desc      : Stability test
207da853ecaSopenharmony_ci */
208da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_006, TestSize.Level2)
209da853ecaSopenharmony_ci{
210da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
211da853ecaSopenharmony_ci    int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg");
212da853ecaSopenharmony_ci    ASSERT_EQ(AVCS_ERR_OK, ret);
213da853ecaSopenharmony_ci    std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal();
214da853ecaSopenharmony_ci    std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_);
215da853ecaSopenharmony_ci    decoderDemo->InnerSetCallback(cb_);
216da853ecaSopenharmony_ci    Format format;
217da853ecaSopenharmony_ci
218da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000);
219da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
220da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000);
221da853ecaSopenharmony_ci
222da853ecaSopenharmony_ci    decoderDemo->InnerConfigure(format);
223da853ecaSopenharmony_ci    decoderDemo->InnerPrepare();
224da853ecaSopenharmony_ci    decoderDemo->InnerStart();
225da853ecaSopenharmony_ci    decoderDemo->InnerStop();
226da853ecaSopenharmony_ci
227da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
228da853ecaSopenharmony_ci    {
229da853ecaSopenharmony_ci        ret = decoderDemo->InnerDestroy();
230da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
231da853ecaSopenharmony_ci    }
232da853ecaSopenharmony_ci    delete decoderDemo;
233da853ecaSopenharmony_ci}
234da853ecaSopenharmony_ci
235da853ecaSopenharmony_ci
236da853ecaSopenharmony_ci/**
237da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_007
238da853ecaSopenharmony_ci * @tc.name      : InnerReset(1000 times)
239da853ecaSopenharmony_ci * @tc.desc      : Stability test
240da853ecaSopenharmony_ci */
241da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_007, TestSize.Level2)
242da853ecaSopenharmony_ci{
243da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
244da853ecaSopenharmony_ci    int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg");
245da853ecaSopenharmony_ci    ASSERT_EQ(AVCS_ERR_OK, ret);
246da853ecaSopenharmony_ci    std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal();
247da853ecaSopenharmony_ci    std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_);
248da853ecaSopenharmony_ci    decoderDemo->InnerSetCallback(cb_);
249da853ecaSopenharmony_ci    Format format;
250da853ecaSopenharmony_ci
251da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000);
252da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
253da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000);
254da853ecaSopenharmony_ci
255da853ecaSopenharmony_ci    decoderDemo->InnerConfigure(format);
256da853ecaSopenharmony_ci    decoderDemo->InnerPrepare();
257da853ecaSopenharmony_ci    decoderDemo->InnerStart();
258da853ecaSopenharmony_ci
259da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
260da853ecaSopenharmony_ci    {
261da853ecaSopenharmony_ci        ret = decoderDemo->InnerReset();
262da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
263da853ecaSopenharmony_ci    }
264da853ecaSopenharmony_ci    decoderDemo->InnerDestroy();
265da853ecaSopenharmony_ci    delete decoderDemo;
266da853ecaSopenharmony_ci}
267da853ecaSopenharmony_ci
268da853ecaSopenharmony_ci
269da853ecaSopenharmony_ci/**
270da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_008
271da853ecaSopenharmony_ci * @tc.name      : InnerFlush(1000 times)
272da853ecaSopenharmony_ci * @tc.desc      : Stability test
273da853ecaSopenharmony_ci */
274da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_008, TestSize.Level2)
275da853ecaSopenharmony_ci{
276da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
277da853ecaSopenharmony_ci    int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg");
278da853ecaSopenharmony_ci    ASSERT_EQ(AVCS_ERR_OK, ret);
279da853ecaSopenharmony_ci    std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal();
280da853ecaSopenharmony_ci    std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_);
281da853ecaSopenharmony_ci    decoderDemo->InnerSetCallback(cb_);
282da853ecaSopenharmony_ci    Format format;
283da853ecaSopenharmony_ci
284da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000);
285da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
286da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000);
287da853ecaSopenharmony_ci
288da853ecaSopenharmony_ci    decoderDemo->InnerConfigure(format);
289da853ecaSopenharmony_ci    decoderDemo->InnerPrepare();
290da853ecaSopenharmony_ci    decoderDemo->InnerStart();
291da853ecaSopenharmony_ci
292da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
293da853ecaSopenharmony_ci    {
294da853ecaSopenharmony_ci        ret = decoderDemo->InnerFlush();
295da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
296da853ecaSopenharmony_ci    }
297da853ecaSopenharmony_ci    decoderDemo->InnerDestroy();
298da853ecaSopenharmony_ci    delete decoderDemo;
299da853ecaSopenharmony_ci}
300da853ecaSopenharmony_ci
301da853ecaSopenharmony_ci
302da853ecaSopenharmony_ci/**
303da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_009
304da853ecaSopenharmony_ci * @tc.name      : InnerRelease(1000 times)
305da853ecaSopenharmony_ci * @tc.desc      : Stability test
306da853ecaSopenharmony_ci */
307da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_009, TestSize.Level2)
308da853ecaSopenharmony_ci{
309da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
310da853ecaSopenharmony_ci    int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg");
311da853ecaSopenharmony_ci    ASSERT_EQ(AVCS_ERR_OK, ret);
312da853ecaSopenharmony_ci    std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal();
313da853ecaSopenharmony_ci    std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_);
314da853ecaSopenharmony_ci    decoderDemo->InnerSetCallback(cb_);
315da853ecaSopenharmony_ci    Format format;
316da853ecaSopenharmony_ci
317da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000);
318da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
319da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000);
320da853ecaSopenharmony_ci
321da853ecaSopenharmony_ci    decoderDemo->InnerConfigure(format);
322da853ecaSopenharmony_ci    decoderDemo->InnerPrepare();
323da853ecaSopenharmony_ci    decoderDemo->InnerStart();
324da853ecaSopenharmony_ci
325da853ecaSopenharmony_ci    for (int i = 0; i < RUN_TIMES; i++)
326da853ecaSopenharmony_ci    {
327da853ecaSopenharmony_ci        ret = decoderDemo->InnerRelease();
328da853ecaSopenharmony_ci        cout << "run time is: " << i << ", ret is:" << ret << endl;
329da853ecaSopenharmony_ci    }
330da853ecaSopenharmony_ci    decoderDemo->InnerDestroy();
331da853ecaSopenharmony_ci    delete decoderDemo;
332da853ecaSopenharmony_ci}
333da853ecaSopenharmony_ci
334da853ecaSopenharmony_ci
335da853ecaSopenharmony_ci/**
336da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_010
337da853ecaSopenharmony_ci * @tc.name      : MP3(long time)
338da853ecaSopenharmony_ci * @tc.desc      : Stability test
339da853ecaSopenharmony_ci */
340da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_010, TestSize.Level2)
341da853ecaSopenharmony_ci{
342da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
343da853ecaSopenharmony_ci    time_t startTime = time(nullptr);
344da853ecaSopenharmony_ci    ASSERT_NE(startTime, -1);
345da853ecaSopenharmony_ci    time_t curTime = startTime;
346da853ecaSopenharmony_ci
347da853ecaSopenharmony_ci    while (difftime(curTime, startTime) < RUN_TIME)
348da853ecaSopenharmony_ci    {
349da853ecaSopenharmony_ci        cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl;
350da853ecaSopenharmony_ci        std::string inputFilePath = "s16p_128k_16000_1_dayuhaitang.mp3";
351da853ecaSopenharmony_ci        std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_010.pcm";
352da853ecaSopenharmony_ci
353da853ecaSopenharmony_ci        Format format;
354da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 128000);
355da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
356da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000);
357da853ecaSopenharmony_ci
358da853ecaSopenharmony_ci        decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "OH.Media.Codec.Decoder.Audio.Mpeg", format);
359da853ecaSopenharmony_ci        curTime = time(nullptr);
360da853ecaSopenharmony_ci        ASSERT_NE(curTime, -1);
361da853ecaSopenharmony_ci    }
362da853ecaSopenharmony_ci    delete decoderDemo;
363da853ecaSopenharmony_ci}
364da853ecaSopenharmony_ci
365da853ecaSopenharmony_ci
366da853ecaSopenharmony_ci/**
367da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_011
368da853ecaSopenharmony_ci * @tc.name      : aac(long time)
369da853ecaSopenharmony_ci * @tc.desc      : Stability test
370da853ecaSopenharmony_ci */
371da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_011, TestSize.Level2)
372da853ecaSopenharmony_ci{
373da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
374da853ecaSopenharmony_ci    time_t startTime = time(nullptr);
375da853ecaSopenharmony_ci    ASSERT_NE(startTime, -1);
376da853ecaSopenharmony_ci    time_t curTime = startTime;
377da853ecaSopenharmony_ci
378da853ecaSopenharmony_ci    while (difftime(curTime, startTime) < RUN_TIME)
379da853ecaSopenharmony_ci    {
380da853ecaSopenharmony_ci        cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl;
381da853ecaSopenharmony_ci        std::string inputFilePath = "fltp_aac_low_128k_16000_2_dayuhaitang.aac";
382da853ecaSopenharmony_ci        std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_011.pcm";
383da853ecaSopenharmony_ci
384da853ecaSopenharmony_ci        Format format;
385da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 2);
386da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000);
387da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 128000);
388da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, 1);
389da853ecaSopenharmony_ci
390da853ecaSopenharmony_ci        decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "avdec_aac", format);
391da853ecaSopenharmony_ci        curTime = time(nullptr);
392da853ecaSopenharmony_ci        ASSERT_NE(curTime, -1);
393da853ecaSopenharmony_ci    }
394da853ecaSopenharmony_ci    delete decoderDemo;
395da853ecaSopenharmony_ci}
396da853ecaSopenharmony_ci
397da853ecaSopenharmony_ci
398da853ecaSopenharmony_ci/**
399da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_012
400da853ecaSopenharmony_ci * @tc.name      : avdec_vorbis(long time)
401da853ecaSopenharmony_ci * @tc.desc      : Stability test
402da853ecaSopenharmony_ci */
403da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_012, TestSize.Level2)
404da853ecaSopenharmony_ci{
405da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
406da853ecaSopenharmony_ci    time_t startTime = time(nullptr);
407da853ecaSopenharmony_ci    ASSERT_NE(startTime, -1);
408da853ecaSopenharmony_ci    time_t curTime = startTime;
409da853ecaSopenharmony_ci
410da853ecaSopenharmony_ci    while (difftime(curTime, startTime) < RUN_TIME)
411da853ecaSopenharmony_ci    {
412da853ecaSopenharmony_ci        cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl;
413da853ecaSopenharmony_ci        std::string inputFilePath = "fltp_128k_16000_2_dayuhaitang.ogg";
414da853ecaSopenharmony_ci        std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_012.pcm";
415da853ecaSopenharmony_ci
416da853ecaSopenharmony_ci        Format format;
417da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 128000);
418da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 2);
419da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000);
420da853ecaSopenharmony_ci
421da853ecaSopenharmony_ci        decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "avdec_vorbis", format);
422da853ecaSopenharmony_ci        curTime = time(nullptr);
423da853ecaSopenharmony_ci        ASSERT_NE(curTime, -1);
424da853ecaSopenharmony_ci    }
425da853ecaSopenharmony_ci    delete decoderDemo;
426da853ecaSopenharmony_ci}
427da853ecaSopenharmony_ci
428da853ecaSopenharmony_ci
429da853ecaSopenharmony_ci/**
430da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_013
431da853ecaSopenharmony_ci * @tc.name      : avdec_flac(long time)
432da853ecaSopenharmony_ci * @tc.desc      : Stability test
433da853ecaSopenharmony_ci */
434da853ecaSopenharmony_ciHWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_013, TestSize.Level2)
435da853ecaSopenharmony_ci{
436da853ecaSopenharmony_ci    AudioDecoderDemo* decoderDemo = new AudioDecoderDemo();
437da853ecaSopenharmony_ci    time_t startTime = time(nullptr);
438da853ecaSopenharmony_ci    ASSERT_NE(startTime, -1);
439da853ecaSopenharmony_ci    time_t curTime = startTime;
440da853ecaSopenharmony_ci
441da853ecaSopenharmony_ci    while (difftime(curTime, startTime) < RUN_TIME)
442da853ecaSopenharmony_ci    {
443da853ecaSopenharmony_ci        cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl;
444da853ecaSopenharmony_ci        std::string inputFilePath = "s32_16000_2_dayuhaitang.flac";
445da853ecaSopenharmony_ci        std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_013.pcm";
446da853ecaSopenharmony_ci
447da853ecaSopenharmony_ci        Format format;
448da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 357000);
449da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 2);
450da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000);
451da853ecaSopenharmony_ci        format.PutIntValue("bits_per_coded_sample", 24);
452da853ecaSopenharmony_ci
453da853ecaSopenharmony_ci        decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "avdec_flac", format);
454da853ecaSopenharmony_ci        curTime = time(nullptr);
455da853ecaSopenharmony_ci        ASSERT_NE(curTime, -1);
456da853ecaSopenharmony_ci    }
457da853ecaSopenharmony_ci    delete decoderDemo;
458da853ecaSopenharmony_ci}