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