1da853ecaSopenharmony_ci/*
2da853ecaSopenharmony_ci * Copyright (C) 2023 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#include <string>
16da853ecaSopenharmony_ci#include <iostream>
17da853ecaSopenharmony_ci#include <unistd.h>
18da853ecaSopenharmony_ci#include "gtest/gtest.h"
19da853ecaSopenharmony_ci#include "AudioEncoderDemoCommon.h"
20da853ecaSopenharmony_ci#include "avcodec_errors.h"
21da853ecaSopenharmony_ci#include "avcodec_common.h"
22da853ecaSopenharmony_ci#include "media_description.h"
23da853ecaSopenharmony_ci#include "securec.h"
24da853ecaSopenharmony_ci#include "avcodec_audio_common.h"
25da853ecaSopenharmony_ci#include "libavcodec/avcodec.h"
26da853ecaSopenharmony_ci#include "libavformat/avformat.h"
27da853ecaSopenharmony_ci#include "libavutil/imgutils.h"
28da853ecaSopenharmony_ci#include "libavutil/samplefmt.h"
29da853ecaSopenharmony_ci#include "libavutil/timestamp.h"
30da853ecaSopenharmony_ci
31da853ecaSopenharmony_ciusing namespace std;
32da853ecaSopenharmony_ciusing namespace testing::ext;
33da853ecaSopenharmony_ciusing namespace OHOS;
34da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec;
35da853ecaSopenharmony_ciconstexpr uint32_t SAMPLE_RATE_16000 = 16000;
36da853ecaSopenharmony_ciconstexpr uint32_t SAMPLE_RATE_128000 = 128000;
37da853ecaSopenharmony_ciconstexpr uint32_t SAMPLE_RATE_112000 = 112000;
38da853ecaSopenharmony_ciconstexpr uint32_t CHANNEL_COUNT = 2;
39da853ecaSopenharmony_ciconstexpr uint32_t CHANNEL_COUNT_2 = -2;
40da853ecaSopenharmony_ciint32_t testResult[10] = { -1 };
41da853ecaSopenharmony_ci
42da853ecaSopenharmony_cinamespace {
43da853ecaSopenharmony_ci    class InnerFunctionTest : public testing::Test {
44da853ecaSopenharmony_ci    public:
45da853ecaSopenharmony_ci        static void SetUpTestCase();
46da853ecaSopenharmony_ci        static void TearDownTestCase();
47da853ecaSopenharmony_ci        void SetUp() override;
48da853ecaSopenharmony_ci        void TearDown() override;
49da853ecaSopenharmony_ci    };
50da853ecaSopenharmony_ci
51da853ecaSopenharmony_ci    void InnerFunctionTest::SetUpTestCase() {}
52da853ecaSopenharmony_ci    void InnerFunctionTest::TearDownTestCase() {}
53da853ecaSopenharmony_ci    void InnerFunctionTest::SetUp() {}
54da853ecaSopenharmony_ci    void InnerFunctionTest::TearDown() {}
55da853ecaSopenharmony_ci
56da853ecaSopenharmony_ci    void runEncode(string encoderName, string inputFile, string outputFile, int32_t threadId)
57da853ecaSopenharmony_ci    {
58da853ecaSopenharmony_ci        AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
59da853ecaSopenharmony_ci        if (encoderName == "OH.Media.Codec.Encoder.Audio.AAC") {
60da853ecaSopenharmony_ci            Format format;
61da853ecaSopenharmony_ci            format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
62da853ecaSopenharmony_ci            format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_16000);
63da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, SAMPLE_RATE_128000);
64da853ecaSopenharmony_ci            format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
65da853ecaSopenharmony_ci            format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
66da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
67da853ecaSopenharmony_ci            format.PutIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, 1);
68da853ecaSopenharmony_ci            encoderDemo->InnerRunCase(inputFile, outputFile, encoderName.c_str(), format);
69da853ecaSopenharmony_ci        } else if (encoderName == "OH.Media.Codec.Encoder.Audio.Flac") {
70da853ecaSopenharmony_ci            Format format;
71da853ecaSopenharmony_ci            format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, CHANNEL_COUNT);
72da853ecaSopenharmony_ci            format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_16000);
73da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, SAMPLE_RATE_112000);
74da853ecaSopenharmony_ci            format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_S32LE);
75da853ecaSopenharmony_ci            format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_S32LE);
76da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, STEREO);
77da853ecaSopenharmony_ci            format.PutIntValue(MediaDescriptionKey::MD_KEY_COMPLIANCE_LEVEL, CHANNEL_COUNT_2);
78da853ecaSopenharmony_ci
79da853ecaSopenharmony_ci            encoderDemo->InnerRunCase(inputFile, outputFile, encoderName.c_str(), format);
80da853ecaSopenharmony_ci        }
81da853ecaSopenharmony_ci        testResult[threadId] = AVCS_ERR_OK;
82da853ecaSopenharmony_ci        delete encoderDemo;
83da853ecaSopenharmony_ci    }
84da853ecaSopenharmony_ci    }
85da853ecaSopenharmony_ci
86da853ecaSopenharmony_ci/**
87da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_001
88da853ecaSopenharmony_ci * @tc.name      : aac(different sample rate)
89da853ecaSopenharmony_ci * @tc.desc      : Function test
90da853ecaSopenharmony_ci */
91da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_001, TestSize.Level2)
92da853ecaSopenharmony_ci{
93da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
94da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
95da853ecaSopenharmony_ci
96da853ecaSopenharmony_ci    string encoderName = "OH.Media.Codec.Encoder.Audio.AAC";
97da853ecaSopenharmony_ci
98da853ecaSopenharmony_ci    int32_t sample_rate_List[] = {7350, 8000, 16000, 44100, 48000, 96000};
99da853ecaSopenharmony_ci
100da853ecaSopenharmony_ci    for (int i = 0; i < 6; i++)
101da853ecaSopenharmony_ci    {
102da853ecaSopenharmony_ci        Format format;
103da853ecaSopenharmony_ci        int sample_rate = sample_rate_List[i];
104da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
105da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, sample_rate);
106da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, SAMPLE_RATE_128000);
107da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
108da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
109da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
110da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, 1);
111da853ecaSopenharmony_ci
112da853ecaSopenharmony_ci        string inputFile = "f32le_" + to_string(sample_rate) + "_1_dayuhaitang.pcm";
113da853ecaSopenharmony_ci        string outputFile = "FUNCTION_001_" + to_string(sample_rate) + "_1_output.aac";
114da853ecaSopenharmony_ci
115da853ecaSopenharmony_ci        cout << "inputFile  " <<  inputFile << endl;
116da853ecaSopenharmony_ci        encoderDemo->InnerRunCase(inputFile, outputFile, encoderName.c_str(), format);
117da853ecaSopenharmony_ci    }
118da853ecaSopenharmony_ci    delete encoderDemo;
119da853ecaSopenharmony_ci}
120da853ecaSopenharmony_ci
121da853ecaSopenharmony_ci
122da853ecaSopenharmony_ci/**
123da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_002
124da853ecaSopenharmony_ci * @tc.name      : AAC different Channel_count
125da853ecaSopenharmony_ci * @tc.desc      : Function test
126da853ecaSopenharmony_ci */
127da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_002, TestSize.Level2)
128da853ecaSopenharmony_ci{
129da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
130da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
131da853ecaSopenharmony_ci
132da853ecaSopenharmony_ci    string encoderName = "OH.Media.Codec.Encoder.Audio.AAC";
133da853ecaSopenharmony_ci
134da853ecaSopenharmony_ci    int Channel_count_List[] = {1, 2, 8};
135da853ecaSopenharmony_ci
136da853ecaSopenharmony_ci    for (int i = 0; i < 3; i++)
137da853ecaSopenharmony_ci    {
138da853ecaSopenharmony_ci        Format format;
139da853ecaSopenharmony_ci        int Channel_count = Channel_count_List[i];
140da853ecaSopenharmony_ci        switch (Channel_count)
141da853ecaSopenharmony_ci        {
142da853ecaSopenharmony_ci        case 1:
143da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
144da853ecaSopenharmony_ci            break;
145da853ecaSopenharmony_ci        case 2:
146da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, STEREO);
147da853ecaSopenharmony_ci            break;
148da853ecaSopenharmony_ci        case 8:
149da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, CH_7POINT1);
150da853ecaSopenharmony_ci            break;
151da853ecaSopenharmony_ci        default:
152da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, UNKNOWN_CHANNEL_LAYOUT);
153da853ecaSopenharmony_ci            break;
154da853ecaSopenharmony_ci        }
155da853ecaSopenharmony_ci
156da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, Channel_count);
157da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_16000);
158da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, SAMPLE_RATE_128000);
159da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
160da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
161da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, 1);
162da853ecaSopenharmony_ci
163da853ecaSopenharmony_ci        string inputFile = "f32le_16000_" + to_string(Channel_count) + "_dayuhaitang.pcm";
164da853ecaSopenharmony_ci        string outputFile = "FUNCTION_002_16000_" + to_string(Channel_count) + "_output.aac";
165da853ecaSopenharmony_ci
166da853ecaSopenharmony_ci        cout << "inputFile  " <<  inputFile << endl;
167da853ecaSopenharmony_ci        encoderDemo->InnerRunCase(inputFile, outputFile, encoderName.c_str(), format);
168da853ecaSopenharmony_ci    }
169da853ecaSopenharmony_ci    delete encoderDemo;
170da853ecaSopenharmony_ci}
171da853ecaSopenharmony_ci
172da853ecaSopenharmony_ci/**
173da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_003
174da853ecaSopenharmony_ci * @tc.name      : AAC different bitrate
175da853ecaSopenharmony_ci * @tc.desc      : Function test
176da853ecaSopenharmony_ci */
177da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_003, TestSize.Level2)
178da853ecaSopenharmony_ci{
179da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
180da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
181da853ecaSopenharmony_ci
182da853ecaSopenharmony_ci    string encoderName = "OH.Media.Codec.Encoder.Audio.AAC";
183da853ecaSopenharmony_ci
184da853ecaSopenharmony_ci    int32_t bitrateList[] = {32000, 96000, 128000, 256000, 300000, 500000};
185da853ecaSopenharmony_ci
186da853ecaSopenharmony_ci    for (int i = 0; i < 6; i++)
187da853ecaSopenharmony_ci    {
188da853ecaSopenharmony_ci        Format format;
189da853ecaSopenharmony_ci        int32_t bitrate = bitrateList[i];
190da853ecaSopenharmony_ci
191da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
192da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, SAMPLE_RATE_16000);
193da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, bitrate);
194da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
195da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
196da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
197da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, 1);
198da853ecaSopenharmony_ci
199da853ecaSopenharmony_ci        string inputFile = "f32le_16000_1_dayuhaitang.pcm";
200da853ecaSopenharmony_ci        string outputFile = "FUNCTION_003_16000_1_" + to_string((int)(bitrate/1000)) + "k_output.aac";
201da853ecaSopenharmony_ci
202da853ecaSopenharmony_ci        cout << "inputFile  " <<  inputFile << endl;
203da853ecaSopenharmony_ci        encoderDemo->InnerRunCase(inputFile, outputFile, encoderName.c_str(), format);
204da853ecaSopenharmony_ci    }
205da853ecaSopenharmony_ci    delete encoderDemo;
206da853ecaSopenharmony_ci}
207da853ecaSopenharmony_ci
208da853ecaSopenharmony_ci/**
209da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_004
210da853ecaSopenharmony_ci * @tc.name      : FLAC(different sample rate)
211da853ecaSopenharmony_ci * @tc.desc      : Function test
212da853ecaSopenharmony_ci */
213da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_004, TestSize.Level2)
214da853ecaSopenharmony_ci{
215da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
216da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
217da853ecaSopenharmony_ci
218da853ecaSopenharmony_ci    string encoderName = "OH.Media.Codec.Encoder.Audio.Flac";
219da853ecaSopenharmony_ci
220da853ecaSopenharmony_ci    int32_t sample_rate_List[] = {8000, 16000, 44100, 48000, 96000};
221da853ecaSopenharmony_ci
222da853ecaSopenharmony_ci    for (int i = 0; i < 5; i++)
223da853ecaSopenharmony_ci    {
224da853ecaSopenharmony_ci        Format format;
225da853ecaSopenharmony_ci        int32_t sample_rate = sample_rate_List[i];
226da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, CHANNEL_COUNT);
227da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, sample_rate);
228da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 50000);
229da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_S32LE);
230da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_S32LE);
231da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, STEREO);
232da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_COMPLIANCE_LEVEL, -2);
233da853ecaSopenharmony_ci
234da853ecaSopenharmony_ci        string inputFile = "s16_" + to_string(sample_rate) + "_2_dayuhaitang.pcm";
235da853ecaSopenharmony_ci        string outputFile = "FUNCTION_004_" + to_string(sample_rate) + "_2_output.flac";
236da853ecaSopenharmony_ci
237da853ecaSopenharmony_ci        cout << "inputFile  " <<  inputFile << endl;
238da853ecaSopenharmony_ci        encoderDemo->InnerRunCase(inputFile, outputFile, encoderName.c_str(), format);
239da853ecaSopenharmony_ci    }
240da853ecaSopenharmony_ci    delete encoderDemo;
241da853ecaSopenharmony_ci}
242da853ecaSopenharmony_ci
243da853ecaSopenharmony_ci
244da853ecaSopenharmony_ci/**
245da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_005
246da853ecaSopenharmony_ci * @tc.name      : flac different format
247da853ecaSopenharmony_ci * @tc.desc      : Function test
248da853ecaSopenharmony_ci */
249da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_005, TestSize.Level2)
250da853ecaSopenharmony_ci{
251da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
252da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
253da853ecaSopenharmony_ci
254da853ecaSopenharmony_ci    string encoderName = "OH.Media.Codec.Encoder.Audio.Flac";
255da853ecaSopenharmony_ci
256da853ecaSopenharmony_ci    string formatList[] = { "s16", "s32" };
257da853ecaSopenharmony_ci    uint32_t sample_format;
258da853ecaSopenharmony_ci    for (int i = 0; i < 2; i++)
259da853ecaSopenharmony_ci    {
260da853ecaSopenharmony_ci        Format format;
261da853ecaSopenharmony_ci        string sample_Media::FORMAT_TYPE = formatList[i];
262da853ecaSopenharmony_ci            if (sample_Media::FORMAT_TYPE == "s16") {
263da853ecaSopenharmony_ci            sample_format = AudioSampleFormat::SAMPLE_S16LE;
264da853ecaSopenharmony_ci        }
265da853ecaSopenharmony_ci        if (sample_Media::FORMAT_TYPE == "s32") {
266da853ecaSopenharmony_ci            sample_format = AudioSampleFormat::SAMPLE_S32LE;
267da853ecaSopenharmony_ci        }
268da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, CHANNEL_COUNT);
269da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000);
270da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 50000);
271da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, sample_format);
272da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, sample_format);
273da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, STEREO);
274da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_COMPLIANCE_LEVEL, -2);
275da853ecaSopenharmony_ci
276da853ecaSopenharmony_ci        string inputFile = sample_Media::FORMAT_TYPE + "_48000_2_dayuhaitang.pcm";
277da853ecaSopenharmony_ci        string outputFile = "FUNCTION_005_48000_2_1536k_" + sample_Media::FORMAT_TYPE + "_output.flac";
278da853ecaSopenharmony_ci
279da853ecaSopenharmony_ci        cout << "inputFile  " <<  inputFile << endl;
280da853ecaSopenharmony_ci        encoderDemo->InnerRunCase(inputFile, outputFile, encoderName.c_str(), format);
281da853ecaSopenharmony_ci    }
282da853ecaSopenharmony_ci    delete encoderDemo;
283da853ecaSopenharmony_ci}
284da853ecaSopenharmony_ci
285da853ecaSopenharmony_ci/**
286da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_006
287da853ecaSopenharmony_ci * @tc.name      : flac different Channel_count
288da853ecaSopenharmony_ci * @tc.desc      : Function test
289da853ecaSopenharmony_ci */
290da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_006, TestSize.Level2)
291da853ecaSopenharmony_ci{
292da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
293da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
294da853ecaSopenharmony_ci
295da853ecaSopenharmony_ci    string encoderName = "OH.Media.Codec.Encoder.Audio.Flac";
296da853ecaSopenharmony_ci
297da853ecaSopenharmony_ci    int Channel_count_List[] = { 1, 2, 8};
298da853ecaSopenharmony_ci
299da853ecaSopenharmony_ci    for (int i = 0; i < 3; i++)
300da853ecaSopenharmony_ci    {
301da853ecaSopenharmony_ci        Format format;
302da853ecaSopenharmony_ci        int32_t Channel_count = Channel_count_List[i];
303da853ecaSopenharmony_ci
304da853ecaSopenharmony_ci        switch (Channel_count)
305da853ecaSopenharmony_ci        {
306da853ecaSopenharmony_ci        case 1:
307da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
308da853ecaSopenharmony_ci            break;
309da853ecaSopenharmony_ci        case 2:
310da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, STEREO);
311da853ecaSopenharmony_ci            break;
312da853ecaSopenharmony_ci        case 8:
313da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, CH_7POINT1);
314da853ecaSopenharmony_ci            break;
315da853ecaSopenharmony_ci        default:
316da853ecaSopenharmony_ci            format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, UNKNOWN_CHANNEL_LAYOUT);
317da853ecaSopenharmony_ci            break;
318da853ecaSopenharmony_ci        }
319da853ecaSopenharmony_ci
320da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, Channel_count);
321da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000);
322da853ecaSopenharmony_ci        format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 50000);
323da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_S32LE);
324da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_S32LE);
325da853ecaSopenharmony_ci        format.PutIntValue(MediaDescriptionKey::MD_KEY_COMPLIANCE_LEVEL, -2);
326da853ecaSopenharmony_ci
327da853ecaSopenharmony_ci        string inputFile = "s16_48000_" + to_string(Channel_count) + "_dayuhaitang.pcm";
328da853ecaSopenharmony_ci        string outputFile = "FUNCTION_006_48000_" + to_string(Channel_count) + "_output.flac";
329da853ecaSopenharmony_ci
330da853ecaSopenharmony_ci        cout << "inputFile  " <<  inputFile << endl;
331da853ecaSopenharmony_ci        encoderDemo->InnerRunCase(inputFile, outputFile, encoderName.c_str(), format);
332da853ecaSopenharmony_ci    }
333da853ecaSopenharmony_ci    delete encoderDemo;
334da853ecaSopenharmony_ci}
335da853ecaSopenharmony_ci
336da853ecaSopenharmony_ci/**
337da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_007
338da853ecaSopenharmony_ci * @tc.name      : aac flush
339da853ecaSopenharmony_ci * @tc.desc      : Function test
340da853ecaSopenharmony_ci */
341da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_007, TestSize.Level2)
342da853ecaSopenharmony_ci{
343da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
344da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
345da853ecaSopenharmony_ci
346da853ecaSopenharmony_ci    string encoderName = "OH.Media.Codec.Encoder.Audio.AAC";
347da853ecaSopenharmony_ci
348da853ecaSopenharmony_ci    string inputFile = "f32le_44100_1_dayuhaitang.pcm";
349da853ecaSopenharmony_ci    string firstOutputFile = "FUNCTION_007_InnerFlush1.aac";
350da853ecaSopenharmony_ci    string secondOutputFile = "FUNCTION_007_InnerFlush2.aac";
351da853ecaSopenharmony_ci
352da853ecaSopenharmony_ci    Format format;
353da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
354da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
355da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, SAMPLE_RATE_112000);
356da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
357da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
358da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
359da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, 1);
360da853ecaSopenharmony_ci
361da853ecaSopenharmony_ci    cout << "inputFile  " <<  inputFile << endl;
362da853ecaSopenharmony_ci    encoderDemo->InnerRunCaseFlush(inputFile, firstOutputFile, secondOutputFile, encoderName.c_str(), format);
363da853ecaSopenharmony_ci
364da853ecaSopenharmony_ci    delete encoderDemo;
365da853ecaSopenharmony_ci}
366da853ecaSopenharmony_ci
367da853ecaSopenharmony_ci/**
368da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_008
369da853ecaSopenharmony_ci * @tc.name      : aac reset
370da853ecaSopenharmony_ci * @tc.desc      : Function test
371da853ecaSopenharmony_ci */
372da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_008, TestSize.Level2)
373da853ecaSopenharmony_ci{
374da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
375da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
376da853ecaSopenharmony_ci
377da853ecaSopenharmony_ci    string encoderName = "OH.Media.Codec.Encoder.Audio.AAC";
378da853ecaSopenharmony_ci
379da853ecaSopenharmony_ci    string inputFile = "f32le_44100_1_dayuhaitang.pcm";
380da853ecaSopenharmony_ci    string firstOutputFile = "FUNCTION_008_InnerReset1.aac";
381da853ecaSopenharmony_ci    string secondOutputFile = "FUNCTION_008_InnerReset2.aac";
382da853ecaSopenharmony_ci
383da853ecaSopenharmony_ci    Format format;
384da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1);
385da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
386da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 112000);
387da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_F32LE);
388da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_F32LE);
389da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, MONO);
390da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, 1);
391da853ecaSopenharmony_ci
392da853ecaSopenharmony_ci    cout << "inputFile  " <<  inputFile << endl;
393da853ecaSopenharmony_ci    encoderDemo->InnerRunCaseReset(inputFile, firstOutputFile, secondOutputFile, encoderName.c_str(), format);
394da853ecaSopenharmony_ci
395da853ecaSopenharmony_ci    delete encoderDemo;
396da853ecaSopenharmony_ci}
397da853ecaSopenharmony_ci
398da853ecaSopenharmony_ci/**
399da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_009
400da853ecaSopenharmony_ci * @tc.name      : flac flush
401da853ecaSopenharmony_ci * @tc.desc      : Function test
402da853ecaSopenharmony_ci */
403da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_009, TestSize.Level2)
404da853ecaSopenharmony_ci{
405da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
406da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
407da853ecaSopenharmony_ci
408da853ecaSopenharmony_ci    string encoderName = "OH.Media.Codec.Encoder.Audio.Flac";
409da853ecaSopenharmony_ci
410da853ecaSopenharmony_ci    string inputFile = "s16_44100_2_dayuhaitang.pcm";
411da853ecaSopenharmony_ci    string firstOutputFile = "FUNCTION_009_InnerFlush1.flac";
412da853ecaSopenharmony_ci    string secondOutputFile = "FUNCTION_009_InnerFlush2.flac";
413da853ecaSopenharmony_ci
414da853ecaSopenharmony_ci
415da853ecaSopenharmony_ci    Format format;
416da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, CHANNEL_COUNT);
417da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
418da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, SAMPLE_RATE_112000);
419da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_S32LE);
420da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_S32LE);
421da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, STEREO);
422da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_COMPLIANCE_LEVEL, -2);
423da853ecaSopenharmony_ci
424da853ecaSopenharmony_ci    cout << "inputFile  " <<  inputFile << endl;
425da853ecaSopenharmony_ci    encoderDemo->InnerRunCaseFlush(inputFile, firstOutputFile, secondOutputFile, encoderName.c_str(), format);
426da853ecaSopenharmony_ci
427da853ecaSopenharmony_ci    delete encoderDemo;
428da853ecaSopenharmony_ci}
429da853ecaSopenharmony_ci
430da853ecaSopenharmony_ci/**
431da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_010
432da853ecaSopenharmony_ci * @tc.name      : flac reset
433da853ecaSopenharmony_ci * @tc.desc      : Function test
434da853ecaSopenharmony_ci */
435da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_010, TestSize.Level2)
436da853ecaSopenharmony_ci{
437da853ecaSopenharmony_ci    AudioEncoderDemo* encoderDemo = new AudioEncoderDemo();
438da853ecaSopenharmony_ci    ASSERT_NE(nullptr, encoderDemo);
439da853ecaSopenharmony_ci
440da853ecaSopenharmony_ci    string encoderName = "OH.Media.Codec.Encoder.Audio.Flac";
441da853ecaSopenharmony_ci
442da853ecaSopenharmony_ci    string inputFile = "s16_44100_2_dayuhaitang.pcm";
443da853ecaSopenharmony_ci    string firstOutputFile = "FUNCTION_010_InnerReset1.flac";
444da853ecaSopenharmony_ci    string secondOutputFile = "FUNCTION_010_InnerReset2.flac";
445da853ecaSopenharmony_ci
446da853ecaSopenharmony_ci    Format format;
447da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, CHANNEL_COUNT);
448da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100);
449da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, SAMPLE_RATE_112000);
450da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_BITS_PER_CODED_SAMPLE, AudioSampleFormat::SAMPLE_S32LE);
451da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_AUDIO_SAMPLE_FORMAT, AudioSampleFormat::SAMPLE_S32LE);
452da853ecaSopenharmony_ci    format.PutLongValue(MediaDescriptionKey::MD_KEY_CHANNEL_LAYOUT, STEREO);
453da853ecaSopenharmony_ci    format.PutIntValue(MediaDescriptionKey::MD_KEY_COMPLIANCE_LEVEL, -2);
454da853ecaSopenharmony_ci
455da853ecaSopenharmony_ci    cout << "inputFile  " <<  inputFile << endl;
456da853ecaSopenharmony_ci    encoderDemo->InnerRunCaseReset(inputFile, firstOutputFile, secondOutputFile, encoderName.c_str(), format);
457da853ecaSopenharmony_ci
458da853ecaSopenharmony_ci    delete encoderDemo;
459da853ecaSopenharmony_ci}
460da853ecaSopenharmony_ci
461da853ecaSopenharmony_ci/**
462da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_011
463da853ecaSopenharmony_ci * @tc.name      : AAC(thread)
464da853ecaSopenharmony_ci * @tc.desc      : Function test
465da853ecaSopenharmony_ci */
466da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_011, TestSize.Level2)
467da853ecaSopenharmony_ci{
468da853ecaSopenharmony_ci    vector<thread> threadVec;
469da853ecaSopenharmony_ci    string decoderName = "OH.Media.Codec.Encoder.Audio.AAC";
470da853ecaSopenharmony_ci
471da853ecaSopenharmony_ci    string inputFile = "f32le_16000_1_dayuhaitang.pcm";
472da853ecaSopenharmony_ci
473da853ecaSopenharmony_ci    for (int32_t i = 0; i < 16; i++)
474da853ecaSopenharmony_ci    {
475da853ecaSopenharmony_ci        string outputFile = "FUNCTION_011_" + to_string(i) + ".aac";
476da853ecaSopenharmony_ci        threadVec.push_back(thread(runEncode, decoderName, inputFile, outputFile, i));
477da853ecaSopenharmony_ci    }
478da853ecaSopenharmony_ci    for (uint32_t i = 0; i < threadVec.size(); i++)
479da853ecaSopenharmony_ci    {
480da853ecaSopenharmony_ci        threadVec[i].join();
481da853ecaSopenharmony_ci    }
482da853ecaSopenharmony_ci    for (int32_t i = 0; i < 10; i++)
483da853ecaSopenharmony_ci    {
484da853ecaSopenharmony_ci        ASSERT_EQ(AVCS_ERR_OK, testResult[i]);
485da853ecaSopenharmony_ci    }
486da853ecaSopenharmony_ci}
487da853ecaSopenharmony_ci
488da853ecaSopenharmony_ci/**
489da853ecaSopenharmony_ci * @tc.number    : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_012
490da853ecaSopenharmony_ci * @tc.name      : Flac(thread)
491da853ecaSopenharmony_ci * @tc.desc      : Function test
492da853ecaSopenharmony_ci */
493da853ecaSopenharmony_ciHWTEST_F(InnerFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_012, TestSize.Level2)
494da853ecaSopenharmony_ci{
495da853ecaSopenharmony_ci    vector<thread> threadVec;
496da853ecaSopenharmony_ci    string decoderName = "OH.Media.Codec.Encoder.Audio.Flac";
497da853ecaSopenharmony_ci
498da853ecaSopenharmony_ci    string inputFile = "s16_16000_2_dayuhaitang.pcm";
499da853ecaSopenharmony_ci
500da853ecaSopenharmony_ci    for (int i = 0; i < 16; i++)
501da853ecaSopenharmony_ci    {
502da853ecaSopenharmony_ci        string outputFile = "FUNCTION_012_" + to_string(i) + ".flac";
503da853ecaSopenharmony_ci        threadVec.push_back(thread(runEncode, decoderName, inputFile, outputFile, i));
504da853ecaSopenharmony_ci    }
505da853ecaSopenharmony_ci    for (uint32_t i = 0; i < threadVec.size(); i++)
506da853ecaSopenharmony_ci    {
507da853ecaSopenharmony_ci        threadVec[i].join();
508da853ecaSopenharmony_ci    }
509da853ecaSopenharmony_ci    for (int32_t i = 0; i < 10; i++)
510da853ecaSopenharmony_ci    {
511da853ecaSopenharmony_ci        ASSERT_EQ(AVCS_ERR_OK, testResult[i]);
512da853ecaSopenharmony_ci    }
513da853ecaSopenharmony_ci}
514