1da853ecaSopenharmony_ci/* 2da853ecaSopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License. 5da853ecaSopenharmony_ci * You may obtain a copy of the License at 6da853ecaSopenharmony_ci * 7da853ecaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8da853ecaSopenharmony_ci * 9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and 13da853ecaSopenharmony_ci * limitations under the License. 14da853ecaSopenharmony_ci */ 15da853ecaSopenharmony_ci 16da853ecaSopenharmony_ci#include <string> 17da853ecaSopenharmony_ci#include "gtest/gtest.h" 18da853ecaSopenharmony_ci#include "AudioEncoderDemoCommon.h" 19da853ecaSopenharmony_ci 20da853ecaSopenharmony_ciusing namespace std; 21da853ecaSopenharmony_ciusing namespace testing::ext; 22da853ecaSopenharmony_ciusing namespace OHOS; 23da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec; 24da853ecaSopenharmony_ci 25da853ecaSopenharmony_ci 26da853ecaSopenharmony_cinamespace { 27da853ecaSopenharmony_ci class NativeFunctionTest : public testing::Test { 28da853ecaSopenharmony_ci public: 29da853ecaSopenharmony_ci static void SetUpTestCase(); 30da853ecaSopenharmony_ci static void TearDownTestCase(); 31da853ecaSopenharmony_ci void SetUp() override; 32da853ecaSopenharmony_ci void TearDown() override; 33da853ecaSopenharmony_ci }; 34da853ecaSopenharmony_ci 35da853ecaSopenharmony_ci void NativeFunctionTest::SetUpTestCase() {} 36da853ecaSopenharmony_ci void NativeFunctionTest::TearDownTestCase() {} 37da853ecaSopenharmony_ci void NativeFunctionTest::SetUp() {} 38da853ecaSopenharmony_ci void NativeFunctionTest::TearDown() {} 39da853ecaSopenharmony_ci 40da853ecaSopenharmony_ci constexpr uint32_t DEFAULT_AAC_TYPE = 1; 41da853ecaSopenharmony_ci constexpr int32_t CHANNEL_COUNT_AAC = 2; 42da853ecaSopenharmony_ci constexpr int32_t SAMPLE_RATE_AAC = 16000; 43da853ecaSopenharmony_ci constexpr int64_t BITS_RATE_AAC = 129000; 44da853ecaSopenharmony_ci constexpr int32_t CHANNEL_COUNT_FLAC = 2; 45da853ecaSopenharmony_ci constexpr int32_t SAMPLE_RATE_FLAC = 48000; 46da853ecaSopenharmony_ci constexpr int64_t BITS_RATE_FLAC = 128000; 47da853ecaSopenharmony_ci constexpr int32_t COMPLIANCE_LEVEL = -2; 48da853ecaSopenharmony_ci 49da853ecaSopenharmony_ci constexpr int32_t CHANNEL_COUNT_MONO = 1; 50da853ecaSopenharmony_ci constexpr int32_t CHANNEL_COUNT_STEREO = 2; 51da853ecaSopenharmony_ci constexpr int32_t CHANNEL_COUNT_7POINT1 = 8; 52da853ecaSopenharmony_ci 53da853ecaSopenharmony_ci int32_t testResult[16] = { -1 }; 54da853ecaSopenharmony_ci 55da853ecaSopenharmony_ci vector<string> SplitStringFully(const string& str, const string& separator) 56da853ecaSopenharmony_ci { 57da853ecaSopenharmony_ci vector<string> dest; 58da853ecaSopenharmony_ci string substring; 59da853ecaSopenharmony_ci string::size_type start = 0; 60da853ecaSopenharmony_ci string::size_type index = str.find_first_of(separator, start); 61da853ecaSopenharmony_ci 62da853ecaSopenharmony_ci while (index != string::npos) { 63da853ecaSopenharmony_ci substring = str.substr(start, index - start); 64da853ecaSopenharmony_ci dest.push_back(substring); 65da853ecaSopenharmony_ci start = str.find_first_not_of(separator, index); 66da853ecaSopenharmony_ci if (start == string::npos) { 67da853ecaSopenharmony_ci return dest; 68da853ecaSopenharmony_ci } 69da853ecaSopenharmony_ci 70da853ecaSopenharmony_ci index = str.find_first_of(separator, start); 71da853ecaSopenharmony_ci } 72da853ecaSopenharmony_ci substring = str.substr(start); 73da853ecaSopenharmony_ci dest.push_back(substring); 74da853ecaSopenharmony_ci 75da853ecaSopenharmony_ci return dest; 76da853ecaSopenharmony_ci } 77da853ecaSopenharmony_ci 78da853ecaSopenharmony_ci bool compareFile(string file1, string file2) 79da853ecaSopenharmony_ci { 80da853ecaSopenharmony_ci string ans1, ans2; 81da853ecaSopenharmony_ci int i; 82da853ecaSopenharmony_ci (void)freopen(file1.c_str(), "r", stdin); 83da853ecaSopenharmony_ci char c; 84da853ecaSopenharmony_ci while (scanf_s("%c", &c, 1) != EOF) { 85da853ecaSopenharmony_ci ans1 += c; 86da853ecaSopenharmony_ci } 87da853ecaSopenharmony_ci (void)fclose(stdin); 88da853ecaSopenharmony_ci 89da853ecaSopenharmony_ci (void)freopen(file2.c_str(), "r", stdin); 90da853ecaSopenharmony_ci while (scanf_s("%c", &c, 1) != EOF) { 91da853ecaSopenharmony_ci ans2 += c; 92da853ecaSopenharmony_ci } 93da853ecaSopenharmony_ci (void)fclose(stdin); 94da853ecaSopenharmony_ci if (ans1.size() != ans2.size()) { 95da853ecaSopenharmony_ci return false; 96da853ecaSopenharmony_ci } 97da853ecaSopenharmony_ci for (i = 0; i < ans1.size(); i++) { 98da853ecaSopenharmony_ci if (ans1[i] != ans2[i]) { 99da853ecaSopenharmony_ci return false; 100da853ecaSopenharmony_ci } 101da853ecaSopenharmony_ci } 102da853ecaSopenharmony_ci return true; 103da853ecaSopenharmony_ci } 104da853ecaSopenharmony_ci 105da853ecaSopenharmony_ci OH_AVFormat* getAVFormatByEncoder(string encoderName) 106da853ecaSopenharmony_ci { 107da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 108da853ecaSopenharmony_ci if (encoderName == "OH.Media.Codec.Encoder.Audio.AAC") { 109da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, CHANNEL_COUNT_AAC); 110da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, SAMPLE_RATE_AAC); 111da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 112da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 113da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 114da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 115da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, BITS_RATE_AAC); 116da853ecaSopenharmony_ci } else { 117da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, CHANNEL_COUNT_FLAC); 118da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, SAMPLE_RATE_FLAC); 119da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_S16LE); 120da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_S16LE); 121da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 122da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, BITS_RATE_FLAC); 123da853ecaSopenharmony_ci } 124da853ecaSopenharmony_ci return format; 125da853ecaSopenharmony_ci } 126da853ecaSopenharmony_ci 127da853ecaSopenharmony_ci void runEncode(string encoderName, string inputFile, string outputFile, int32_t threadId) 128da853ecaSopenharmony_ci { 129da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 130da853ecaSopenharmony_ci 131da853ecaSopenharmony_ci OH_AVFormat* format = getAVFormatByEncoder(encoderName); 132da853ecaSopenharmony_ci 133da853ecaSopenharmony_ci encoderDemo->NativeRunCase(inputFile, outputFile, encoderName.c_str(), format); 134da853ecaSopenharmony_ci 135da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 136da853ecaSopenharmony_ci delete encoderDemo; 137da853ecaSopenharmony_ci 138da853ecaSopenharmony_ci testResult[threadId] = AV_ERR_OK; 139da853ecaSopenharmony_ci } 140da853ecaSopenharmony_ci 141da853ecaSopenharmony_ci OH_AVFormat* getAVFormatAAC(int32_t channelCount, int32_t sampleRate, int64_t bitrate) 142da853ecaSopenharmony_ci { 143da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 144da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, channelCount); 145da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, sampleRate); 146da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 147da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 148da853ecaSopenharmony_ci 149da853ecaSopenharmony_ci switch (channelCount) { 150da853ecaSopenharmony_ci case CHANNEL_COUNT_MONO: 151da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, MONO); 152da853ecaSopenharmony_ci break; 153da853ecaSopenharmony_ci case CHANNEL_COUNT_STEREO: 154da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 155da853ecaSopenharmony_ci break; 156da853ecaSopenharmony_ci case CHANNEL_COUNT_7POINT1: 157da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, CH_7POINT1); 158da853ecaSopenharmony_ci break; 159da853ecaSopenharmony_ci default: 160da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, UNKNOWN_CHANNEL_LAYOUT); 161da853ecaSopenharmony_ci break; 162da853ecaSopenharmony_ci } 163da853ecaSopenharmony_ci 164da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 165da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, bitrate); 166da853ecaSopenharmony_ci 167da853ecaSopenharmony_ci return format; 168da853ecaSopenharmony_ci } 169da853ecaSopenharmony_ci 170da853ecaSopenharmony_ci 171da853ecaSopenharmony_ci OH_AVFormat* getAVFormatFlac(int32_t channelCount, int32_t sampleRate, int32_t sampleFormat, int64_t bitrate) 172da853ecaSopenharmony_ci { 173da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 174da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, channelCount); 175da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, sampleRate); 176da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, sampleFormat); 177da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, sampleFormat); 178da853ecaSopenharmony_ci 179da853ecaSopenharmony_ci int32_t bitsPerSample; 180da853ecaSopenharmony_ci if (sampleFormat == OH_BitsPerSample::SAMPLE_S16LE) { 181da853ecaSopenharmony_ci bitsPerSample = S16_BITS_PER_SAMPLE; 182da853ecaSopenharmony_ci } else { 183da853ecaSopenharmony_ci bitsPerSample = S32_BITS_PER_SAMPLE; 184da853ecaSopenharmony_ci } 185da853ecaSopenharmony_ci 186da853ecaSopenharmony_ci int32_t inputBufSize; 187da853ecaSopenharmony_ci switch (channelCount) { 188da853ecaSopenharmony_ci case CHANNEL_COUNT_MONO: 189da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, MONO); 190da853ecaSopenharmony_ci inputBufSize = COMMON_FLAC_NUM * channelCount * bitsPerSample; 191da853ecaSopenharmony_ci break; 192da853ecaSopenharmony_ci case CHANNEL_COUNT_STEREO: 193da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 194da853ecaSopenharmony_ci inputBufSize = COMMON_FLAC_NUM * channelCount * bitsPerSample; 195da853ecaSopenharmony_ci break; 196da853ecaSopenharmony_ci case CHANNEL_COUNT_7POINT1: 197da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, CH_7POINT1); 198da853ecaSopenharmony_ci inputBufSize = COMMON_FLAC_NUM * channelCount * bitsPerSample; 199da853ecaSopenharmony_ci break; 200da853ecaSopenharmony_ci default: 201da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, UNKNOWN_CHANNEL_LAYOUT); 202da853ecaSopenharmony_ci inputBufSize = COMMON_FLAC_NUM * UNKNOWN_CHANNEL * bitsPerSample; 203da853ecaSopenharmony_ci break; 204da853ecaSopenharmony_ci } 205da853ecaSopenharmony_ci 206da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, bitrate); 207da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_COMPLIANCE_LEVEL, COMPLIANCE_LEVEL); 208da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, inputBufSize); 209da853ecaSopenharmony_ci 210da853ecaSopenharmony_ci return format; 211da853ecaSopenharmony_ci } 212da853ecaSopenharmony_ci} 213da853ecaSopenharmony_ci 214da853ecaSopenharmony_ci/** 215da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_001 216da853ecaSopenharmony_ci * @tc.name : aac(different sample rate) 217da853ecaSopenharmony_ci * @tc.desc : function check 218da853ecaSopenharmony_ci */ 219da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_001, TestSize.Level2) 220da853ecaSopenharmony_ci{ 221da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 222da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 223da853ecaSopenharmony_ci 224da853ecaSopenharmony_ci string fileList[] = { 225da853ecaSopenharmony_ci "f32le_7350_2_dayuhaitang.pcm", 226da853ecaSopenharmony_ci "f32le_16000_2_dayuhaitang.pcm", 227da853ecaSopenharmony_ci "f32le_44100_2_dayuhaitang.pcm", 228da853ecaSopenharmony_ci "f32le_48000_2_dayuhaitang.pcm", 229da853ecaSopenharmony_ci "f32le_96000_2_dayuhaitang.pcm" 230da853ecaSopenharmony_ci }; 231da853ecaSopenharmony_ci 232da853ecaSopenharmony_ci for (int i = 0; i < 5; i++) 233da853ecaSopenharmony_ci { 234da853ecaSopenharmony_ci vector<string> dest = SplitStringFully(fileList[i], "_"); 235da853ecaSopenharmony_ci if (dest.size() < 4) { 236da853ecaSopenharmony_ci cout << "split error !!!" << endl; 237da853ecaSopenharmony_ci return; 238da853ecaSopenharmony_ci } 239da853ecaSopenharmony_ci int32_t channelCount = stoi(dest[2]); 240da853ecaSopenharmony_ci int32_t sampleRate = stoi(dest[1]); 241da853ecaSopenharmony_ci 242da853ecaSopenharmony_ci cout << "channel count is " << channelCount << ", sample rate is " << sampleRate << endl; 243da853ecaSopenharmony_ci 244da853ecaSopenharmony_ci OH_AVFormat* format = getAVFormatAAC(channelCount, sampleRate, BITS_RATE_AAC); 245da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 246da853ecaSopenharmony_ci 247da853ecaSopenharmony_ci string inputFile = fileList[i]; 248da853ecaSopenharmony_ci string outputFile = "FUNCTION_001_" + to_string(sampleRate) + ".aac"; 249da853ecaSopenharmony_ci 250da853ecaSopenharmony_ci encoderDemo->NativeRunCase(inputFile, outputFile, encoderName.c_str(), format); 251da853ecaSopenharmony_ci 252da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 253da853ecaSopenharmony_ci } 254da853ecaSopenharmony_ci delete encoderDemo; 255da853ecaSopenharmony_ci} 256da853ecaSopenharmony_ci 257da853ecaSopenharmony_ci/** 258da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_002 259da853ecaSopenharmony_ci * @tc.name : aac(different channel num) 260da853ecaSopenharmony_ci * @tc.desc : function check 261da853ecaSopenharmony_ci */ 262da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_002, TestSize.Level2) 263da853ecaSopenharmony_ci{ 264da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 265da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 266da853ecaSopenharmony_ci 267da853ecaSopenharmony_ci string fileList[] = { 268da853ecaSopenharmony_ci "f32le_7350_1_dayuhaitang.pcm", 269da853ecaSopenharmony_ci "f32le_16000_2_dayuhaitang.pcm", 270da853ecaSopenharmony_ci "f32le_96000_8_dayuhaitang.pcm" 271da853ecaSopenharmony_ci }; 272da853ecaSopenharmony_ci 273da853ecaSopenharmony_ci for (int i = 0; i < 3; i++) 274da853ecaSopenharmony_ci { 275da853ecaSopenharmony_ci vector<string> dest = SplitStringFully(fileList[i], "_"); 276da853ecaSopenharmony_ci if (dest.size() < 4) 277da853ecaSopenharmony_ci { 278da853ecaSopenharmony_ci cout << "split error !!!" << endl; 279da853ecaSopenharmony_ci return; 280da853ecaSopenharmony_ci } 281da853ecaSopenharmony_ci int32_t channelCount = stoi(dest[2]); 282da853ecaSopenharmony_ci int32_t sampleRate = stoi(dest[1]); 283da853ecaSopenharmony_ci 284da853ecaSopenharmony_ci cout << "channel count is " << channelCount << ", sample rate is " << sampleRate << endl; 285da853ecaSopenharmony_ci 286da853ecaSopenharmony_ci OH_AVFormat* format = getAVFormatAAC(channelCount, sampleRate, BITS_RATE_AAC); 287da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 288da853ecaSopenharmony_ci 289da853ecaSopenharmony_ci string inputFile = fileList[i]; 290da853ecaSopenharmony_ci string outputFile = "FUNCTION_002_" + to_string(channelCount) + ".aac"; 291da853ecaSopenharmony_ci 292da853ecaSopenharmony_ci encoderDemo->NativeRunCase(inputFile, outputFile, encoderName.c_str(), format); 293da853ecaSopenharmony_ci 294da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 295da853ecaSopenharmony_ci } 296da853ecaSopenharmony_ci delete encoderDemo; 297da853ecaSopenharmony_ci} 298da853ecaSopenharmony_ci 299da853ecaSopenharmony_ci 300da853ecaSopenharmony_ci/** 301da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_003 302da853ecaSopenharmony_ci * @tc.name : aac(different bitrate) 303da853ecaSopenharmony_ci * @tc.desc : function check 304da853ecaSopenharmony_ci */ 305da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_003, TestSize.Level2) 306da853ecaSopenharmony_ci{ 307da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 308da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 309da853ecaSopenharmony_ci 310da853ecaSopenharmony_ci long bitrateList[] = {32000L, 96000L, 128000L, 256000L, 300000L, 500000L}; 311da853ecaSopenharmony_ci string inputFile = "f32le_96000_2_dayuhaitang.pcm"; 312da853ecaSopenharmony_ci 313da853ecaSopenharmony_ci for (int i = 0; i < 6; i++) 314da853ecaSopenharmony_ci { 315da853ecaSopenharmony_ci vector<string> dest = SplitStringFully(inputFile, "_"); 316da853ecaSopenharmony_ci if (dest.size() < 4) 317da853ecaSopenharmony_ci { 318da853ecaSopenharmony_ci cout << "split error !!!" << endl; 319da853ecaSopenharmony_ci return; 320da853ecaSopenharmony_ci } 321da853ecaSopenharmony_ci int32_t channelCount = stoi(dest[2]); 322da853ecaSopenharmony_ci int32_t sampleRate = stoi(dest[1]); 323da853ecaSopenharmony_ci 324da853ecaSopenharmony_ci cout << "channel count is " << channelCount << ", sample rate is " << sampleRate << endl; 325da853ecaSopenharmony_ci 326da853ecaSopenharmony_ci OH_AVFormat* format = getAVFormatAAC(channelCount, sampleRate, bitrateList[i]); 327da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 328da853ecaSopenharmony_ci 329da853ecaSopenharmony_ci string outputFile = "FUNCTION_003_" + to_string(bitrateList[i]) + ".aac"; 330da853ecaSopenharmony_ci 331da853ecaSopenharmony_ci encoderDemo->NativeRunCase(inputFile, outputFile, encoderName.c_str(), format); 332da853ecaSopenharmony_ci 333da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 334da853ecaSopenharmony_ci } 335da853ecaSopenharmony_ci delete encoderDemo; 336da853ecaSopenharmony_ci} 337da853ecaSopenharmony_ci 338da853ecaSopenharmony_ci 339da853ecaSopenharmony_ci/** 340da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_004 341da853ecaSopenharmony_ci * @tc.name : flac(different sample rate) 342da853ecaSopenharmony_ci * @tc.desc : function check 343da853ecaSopenharmony_ci */ 344da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_004, TestSize.Level2) 345da853ecaSopenharmony_ci{ 346da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 347da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.Flac"; 348da853ecaSopenharmony_ci 349da853ecaSopenharmony_ci string fileList[] = { 350da853ecaSopenharmony_ci "s16_8000_2_dayuhaitang.pcm", 351da853ecaSopenharmony_ci "s16_16000_2_dayuhaitang.pcm", 352da853ecaSopenharmony_ci "s16_44100_2_dayuhaitang.pcm", 353da853ecaSopenharmony_ci "s16_48000_2_dayuhaitang.pcm", 354da853ecaSopenharmony_ci "s16_96000_2_dayuhaitang.pcm" 355da853ecaSopenharmony_ci }; 356da853ecaSopenharmony_ci 357da853ecaSopenharmony_ci for (int i = 0; i < 5; i++) 358da853ecaSopenharmony_ci { 359da853ecaSopenharmony_ci vector<string> dest = SplitStringFully(fileList[i], "_"); 360da853ecaSopenharmony_ci if (dest.size() < 4) 361da853ecaSopenharmony_ci { 362da853ecaSopenharmony_ci cout << "split error !!!" << endl; 363da853ecaSopenharmony_ci return; 364da853ecaSopenharmony_ci } 365da853ecaSopenharmony_ci int32_t channelCount = stoi(dest[2]); 366da853ecaSopenharmony_ci int32_t sampleRate = stoi(dest[1]); 367da853ecaSopenharmony_ci 368da853ecaSopenharmony_ci OH_AVFormat* format = getAVFormatFlac(channelCount, sampleRate, OH_BitsPerSample::SAMPLE_S16LE, BITS_RATE_FLAC); 369da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 370da853ecaSopenharmony_ci 371da853ecaSopenharmony_ci string inputFile = fileList[i]; 372da853ecaSopenharmony_ci string outputFile = "FUNCTION_004_" + to_string(sampleRate) + ".flac"; 373da853ecaSopenharmony_ci 374da853ecaSopenharmony_ci encoderDemo->NativeRunCase(inputFile, outputFile, encoderName.c_str(), format); 375da853ecaSopenharmony_ci 376da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 377da853ecaSopenharmony_ci } 378da853ecaSopenharmony_ci delete encoderDemo; 379da853ecaSopenharmony_ci} 380da853ecaSopenharmony_ci 381da853ecaSopenharmony_ci 382da853ecaSopenharmony_ci/** 383da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_005 384da853ecaSopenharmony_ci * @tc.name : flac(different sample format) 385da853ecaSopenharmony_ci * @tc.desc : function check 386da853ecaSopenharmony_ci */ 387da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_005, TestSize.Level2) 388da853ecaSopenharmony_ci{ 389da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 390da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.Flac"; 391da853ecaSopenharmony_ci 392da853ecaSopenharmony_ci string fileList[] = { 393da853ecaSopenharmony_ci "s32_8000_2_dayuhaitang.pcm", 394da853ecaSopenharmony_ci "s32_16000_2_dayuhaitang.pcm", 395da853ecaSopenharmony_ci "s32_44100_2_dayuhaitang.pcm", 396da853ecaSopenharmony_ci "s32_48000_2_dayuhaitang.pcm", 397da853ecaSopenharmony_ci "s32_96000_2_dayuhaitang.pcm" 398da853ecaSopenharmony_ci }; 399da853ecaSopenharmony_ci 400da853ecaSopenharmony_ci long bitrate = 500000; 401da853ecaSopenharmony_ci 402da853ecaSopenharmony_ci for (int i = 0; i < 5; i++) 403da853ecaSopenharmony_ci { 404da853ecaSopenharmony_ci vector<string> dest = SplitStringFully(fileList[i], "_"); 405da853ecaSopenharmony_ci if (dest.size() < 4) { 406da853ecaSopenharmony_ci cout << "split error !!!" << endl; 407da853ecaSopenharmony_ci return; 408da853ecaSopenharmony_ci } 409da853ecaSopenharmony_ci int32_t channelCount = stoi(dest[2]); 410da853ecaSopenharmony_ci int32_t sampleRate = stoi(dest[1]); 411da853ecaSopenharmony_ci 412da853ecaSopenharmony_ci int32_t sampleFormat; 413da853ecaSopenharmony_ci if (dest[0] == "s16") { 414da853ecaSopenharmony_ci sampleFormat = OH_BitsPerSample::SAMPLE_S16LE; 415da853ecaSopenharmony_ci } else { 416da853ecaSopenharmony_ci sampleFormat = OH_BitsPerSample::SAMPLE_S32LE; 417da853ecaSopenharmony_ci } 418da853ecaSopenharmony_ci 419da853ecaSopenharmony_ci OH_AVFormat* format = getAVFormatFlac(channelCount, sampleRate, sampleFormat, bitrate); 420da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 421da853ecaSopenharmony_ci 422da853ecaSopenharmony_ci string inputFile = fileList[i]; 423da853ecaSopenharmony_ci string outputFile = "FUNCTION_005_" + dest[0] + "_" + to_string(sampleRate) + ".flac"; 424da853ecaSopenharmony_ci 425da853ecaSopenharmony_ci encoderDemo->NativeRunCase(inputFile, outputFile, encoderName.c_str(), format); 426da853ecaSopenharmony_ci 427da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 428da853ecaSopenharmony_ci } 429da853ecaSopenharmony_ci delete encoderDemo; 430da853ecaSopenharmony_ci} 431da853ecaSopenharmony_ci 432da853ecaSopenharmony_ci 433da853ecaSopenharmony_ci/** 434da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_006 435da853ecaSopenharmony_ci * @tc.name : flac(different channel num) 436da853ecaSopenharmony_ci * @tc.desc : function check 437da853ecaSopenharmony_ci */ 438da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_006, TestSize.Level2) 439da853ecaSopenharmony_ci{ 440da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 441da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.Flac"; 442da853ecaSopenharmony_ci 443da853ecaSopenharmony_ci string fileList[] = { 444da853ecaSopenharmony_ci "s16_8000_1_dayuhaitang.pcm", 445da853ecaSopenharmony_ci "s16_48000_1_dayuhaitang.pcm", 446da853ecaSopenharmony_ci "s16_48000_2_dayuhaitang.pcm", 447da853ecaSopenharmony_ci "s16_48000_8_dayuhaitang.pcm" 448da853ecaSopenharmony_ci }; 449da853ecaSopenharmony_ci 450da853ecaSopenharmony_ci long bitrate = 500000; 451da853ecaSopenharmony_ci 452da853ecaSopenharmony_ci for (int i = 0; i < 4; i++) 453da853ecaSopenharmony_ci { 454da853ecaSopenharmony_ci vector<string> dest = SplitStringFully(fileList[i], "_"); 455da853ecaSopenharmony_ci if (dest.size() < 4) 456da853ecaSopenharmony_ci { 457da853ecaSopenharmony_ci cout << "split error !!!" << endl; 458da853ecaSopenharmony_ci return; 459da853ecaSopenharmony_ci } 460da853ecaSopenharmony_ci int32_t channelCount = stoi(dest[2]); 461da853ecaSopenharmony_ci int32_t sampleRate = stoi(dest[1]); 462da853ecaSopenharmony_ci 463da853ecaSopenharmony_ci int32_t sampleFormat; 464da853ecaSopenharmony_ci if (dest[0] == "s16") { 465da853ecaSopenharmony_ci sampleFormat = OH_BitsPerSample::SAMPLE_S16LE; 466da853ecaSopenharmony_ci } else { 467da853ecaSopenharmony_ci sampleFormat = OH_BitsPerSample::SAMPLE_S32LE; 468da853ecaSopenharmony_ci } 469da853ecaSopenharmony_ci 470da853ecaSopenharmony_ci OH_AVFormat* format = getAVFormatFlac(channelCount, sampleRate, sampleFormat, bitrate); 471da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 472da853ecaSopenharmony_ci 473da853ecaSopenharmony_ci string inputFile = fileList[i]; 474da853ecaSopenharmony_ci string outputFile = "FUNCTION_006_" + dest[0] + "_" + to_string(channelCount) + ".flac"; 475da853ecaSopenharmony_ci 476da853ecaSopenharmony_ci encoderDemo->NativeRunCase(inputFile, outputFile, encoderName.c_str(), format); 477da853ecaSopenharmony_ci 478da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 479da853ecaSopenharmony_ci } 480da853ecaSopenharmony_ci delete encoderDemo; 481da853ecaSopenharmony_ci} 482da853ecaSopenharmony_ci 483da853ecaSopenharmony_ci/** 484da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_007 485da853ecaSopenharmony_ci * @tc.name : Flush(AAC) 486da853ecaSopenharmony_ci * @tc.desc : function check 487da853ecaSopenharmony_ci */ 488da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_007, TestSize.Level2) 489da853ecaSopenharmony_ci{ 490da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 491da853ecaSopenharmony_ci string decoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 492da853ecaSopenharmony_ci 493da853ecaSopenharmony_ci string inputFile = "f32le_16000_2_dayuhaitang.pcm"; 494da853ecaSopenharmony_ci string firstOutputFile = "FUNCTION_007_1.aac"; 495da853ecaSopenharmony_ci string secondOutputFile = "FUNCTION_007_2.aac"; 496da853ecaSopenharmony_ci 497da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 498da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 499da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 16000); 500da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 501da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 502da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 503da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 504da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 129000); 505da853ecaSopenharmony_ci 506da853ecaSopenharmony_ci encoderDemo->NativeRunCaseFlush(inputFile, firstOutputFile, secondOutputFile, decoderName.c_str(), format); 507da853ecaSopenharmony_ci 508da853ecaSopenharmony_ci bool isSame = compareFile(firstOutputFile, secondOutputFile); 509da853ecaSopenharmony_ci ASSERT_EQ(true, isSame); 510da853ecaSopenharmony_ci 511da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 512da853ecaSopenharmony_ci delete encoderDemo; 513da853ecaSopenharmony_ci} 514da853ecaSopenharmony_ci 515da853ecaSopenharmony_ci/** 516da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_008 517da853ecaSopenharmony_ci * @tc.name : Flush(flac) 518da853ecaSopenharmony_ci * @tc.desc : function check 519da853ecaSopenharmony_ci */ 520da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_008, TestSize.Level2) 521da853ecaSopenharmony_ci{ 522da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 523da853ecaSopenharmony_ci string decoderName = "OH.Media.Codec.Encoder.Audio.Flac"; 524da853ecaSopenharmony_ci 525da853ecaSopenharmony_ci string inputFile = "s16_48000_2_dayuhaitang.pcm"; 526da853ecaSopenharmony_ci string firstOutputFile = "FUNCTION_008_1.flac"; 527da853ecaSopenharmony_ci string secondOutputFile = "FUNCTION_008_2.flac"; 528da853ecaSopenharmony_ci 529da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 530da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 531da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 48000); 532da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_S16LE); 533da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_S16LE); 534da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 535da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 536da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 129000); 537da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, 538da853ecaSopenharmony_ci COMMON_FLAC_NUM * CHANNEL_COUNT_STEREO * S16_BITS_PER_SAMPLE); 539da853ecaSopenharmony_ci 540da853ecaSopenharmony_ci encoderDemo->NativeRunCaseFlush(inputFile, firstOutputFile, secondOutputFile, decoderName.c_str(), format); 541da853ecaSopenharmony_ci 542da853ecaSopenharmony_ci bool isSame = compareFile(firstOutputFile, secondOutputFile); 543da853ecaSopenharmony_ci ASSERT_EQ(true, isSame); 544da853ecaSopenharmony_ci 545da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 546da853ecaSopenharmony_ci delete encoderDemo; 547da853ecaSopenharmony_ci} 548da853ecaSopenharmony_ci 549da853ecaSopenharmony_ci/** 550da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_009 551da853ecaSopenharmony_ci * @tc.name : Reset(AAC) 552da853ecaSopenharmony_ci * @tc.desc : function check 553da853ecaSopenharmony_ci */ 554da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_009, TestSize.Level2) 555da853ecaSopenharmony_ci{ 556da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 557da853ecaSopenharmony_ci string decoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 558da853ecaSopenharmony_ci 559da853ecaSopenharmony_ci string inputFile = "f32le_16000_2_dayuhaitang.pcm"; 560da853ecaSopenharmony_ci string firstOutputFile = "FUNCTION_009_1.aac"; 561da853ecaSopenharmony_ci string secondOutputFile = "FUNCTION_009_2.aac"; 562da853ecaSopenharmony_ci 563da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 564da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 565da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 16000); 566da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 567da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 568da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 569da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 570da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 129000); 571da853ecaSopenharmony_ci 572da853ecaSopenharmony_ci encoderDemo->NativeRunCaseReset(inputFile, firstOutputFile, secondOutputFile, decoderName.c_str(), format); 573da853ecaSopenharmony_ci 574da853ecaSopenharmony_ci bool isSame = compareFile(firstOutputFile, secondOutputFile); 575da853ecaSopenharmony_ci ASSERT_EQ(true, isSame); 576da853ecaSopenharmony_ci 577da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 578da853ecaSopenharmony_ci delete encoderDemo; 579da853ecaSopenharmony_ci} 580da853ecaSopenharmony_ci 581da853ecaSopenharmony_ci/** 582da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_010 583da853ecaSopenharmony_ci * @tc.name : Reset(flac) 584da853ecaSopenharmony_ci * @tc.desc : function check 585da853ecaSopenharmony_ci */ 586da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_010, TestSize.Level2) 587da853ecaSopenharmony_ci{ 588da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 589da853ecaSopenharmony_ci string decoderName = "OH.Media.Codec.Encoder.Audio.Flac"; 590da853ecaSopenharmony_ci 591da853ecaSopenharmony_ci string inputFile = "s16_48000_2_dayuhaitang.pcm"; 592da853ecaSopenharmony_ci string firstOutputFile = "FUNCTION_010_1.flac"; 593da853ecaSopenharmony_ci string secondOutputFile = "FUNCTION_010_2.flac"; 594da853ecaSopenharmony_ci 595da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 596da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 597da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 48000); 598da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_S16LE); 599da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_S16LE); 600da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 601da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 602da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 129000); 603da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, 604da853ecaSopenharmony_ci COMMON_FLAC_NUM * CHANNEL_COUNT_STEREO * S16_BITS_PER_SAMPLE); 605da853ecaSopenharmony_ci 606da853ecaSopenharmony_ci encoderDemo->NativeRunCaseReset(inputFile, firstOutputFile, secondOutputFile, decoderName.c_str(), format); 607da853ecaSopenharmony_ci 608da853ecaSopenharmony_ci bool isSame = compareFile(firstOutputFile, secondOutputFile); 609da853ecaSopenharmony_ci ASSERT_EQ(true, isSame); 610da853ecaSopenharmony_ci 611da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 612da853ecaSopenharmony_ci delete encoderDemo; 613da853ecaSopenharmony_ci} 614da853ecaSopenharmony_ci 615da853ecaSopenharmony_ci 616da853ecaSopenharmony_ci/** 617da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_011 618da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_GetOutputDescription 619da853ecaSopenharmony_ci * @tc.desc : function check 620da853ecaSopenharmony_ci */ 621da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_011, TestSize.Level2) 622da853ecaSopenharmony_ci{ 623da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 624da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 625da853ecaSopenharmony_ci 626da853ecaSopenharmony_ci string inputFile = "f32le_16000_2_dayuhaitang.pcm"; 627da853ecaSopenharmony_ci string outputFile = "FUNCTION_011.aac"; 628da853ecaSopenharmony_ci 629da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 630da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 631da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 16000); 632da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 633da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 634da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 635da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 636da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 129000); 637da853ecaSopenharmony_ci 638da853ecaSopenharmony_ci OH_AVFormat* formatGet = encoderDemo->NativeRunCaseGetOutputDescription(inputFile, outputFile, encoderName.c_str(), 639da853ecaSopenharmony_ci format); 640da853ecaSopenharmony_ci ASSERT_NE(nullptr, formatGet); 641da853ecaSopenharmony_ci 642da853ecaSopenharmony_ci int32_t channelNum_Get; 643da853ecaSopenharmony_ci int32_t sampleRate_Get; 644da853ecaSopenharmony_ci int64_t bitrate_Get; 645da853ecaSopenharmony_ci OH_AVFormat_GetIntValue(formatGet, OH_MD_KEY_AUD_CHANNEL_COUNT, &channelNum_Get); 646da853ecaSopenharmony_ci OH_AVFormat_GetIntValue(formatGet, OH_MD_KEY_AUD_SAMPLE_RATE, &sampleRate_Get); 647da853ecaSopenharmony_ci OH_AVFormat_GetLongValue(formatGet, OH_MD_KEY_BITRATE, &bitrate_Get); 648da853ecaSopenharmony_ci 649da853ecaSopenharmony_ci const char* testStr = nullptr; 650da853ecaSopenharmony_ci OH_AVFormat_GetStringValue(formatGet, OH_MD_KEY_CODEC_MIME, &testStr); 651da853ecaSopenharmony_ci 652da853ecaSopenharmony_ci cout << "channel num is " << channelNum_Get << ", sample rate is " << 653da853ecaSopenharmony_ci sampleRate_Get << ", bitrate is " << bitrate_Get << endl; 654da853ecaSopenharmony_ci 655da853ecaSopenharmony_ci cout << "OH_MD_KEY_CODEC_MIME is " << testStr << endl; 656da853ecaSopenharmony_ci 657da853ecaSopenharmony_ci ASSERT_EQ(2, channelNum_Get); 658da853ecaSopenharmony_ci ASSERT_EQ(16000, sampleRate_Get); 659da853ecaSopenharmony_ci ASSERT_EQ(129000, bitrate_Get); 660da853ecaSopenharmony_ci 661da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 662da853ecaSopenharmony_ci OH_AVFormat_Destroy(formatGet); 663da853ecaSopenharmony_ci delete encoderDemo; 664da853ecaSopenharmony_ci} 665da853ecaSopenharmony_ci 666da853ecaSopenharmony_ci/** 667da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_012 668da853ecaSopenharmony_ci * @tc.name : AAC(thread) 669da853ecaSopenharmony_ci * @tc.desc : Function test 670da853ecaSopenharmony_ci */ 671da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_012, TestSize.Level2) 672da853ecaSopenharmony_ci{ 673da853ecaSopenharmony_ci vector<thread> threadVec; 674da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 675da853ecaSopenharmony_ci 676da853ecaSopenharmony_ci string inputFile = "f32le_16000_2_dayuhaitang.pcm"; 677da853ecaSopenharmony_ci 678da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 679da853ecaSopenharmony_ci { 680da853ecaSopenharmony_ci string outputFile = "FUNCTION_012_" + to_string(i) + ".aac"; 681da853ecaSopenharmony_ci threadVec.push_back(thread(runEncode, encoderName, inputFile, outputFile, i)); 682da853ecaSopenharmony_ci } 683da853ecaSopenharmony_ci for (uint32_t i = 0; i < threadVec.size(); i++) 684da853ecaSopenharmony_ci { 685da853ecaSopenharmony_ci threadVec[i].join(); 686da853ecaSopenharmony_ci } 687da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 688da853ecaSopenharmony_ci { 689da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, testResult[i]); 690da853ecaSopenharmony_ci } 691da853ecaSopenharmony_ci} 692da853ecaSopenharmony_ci 693da853ecaSopenharmony_ci/** 694da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_013 695da853ecaSopenharmony_ci * @tc.name : flac(thread) 696da853ecaSopenharmony_ci * @tc.desc : Function test 697da853ecaSopenharmony_ci */ 698da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_013, TestSize.Level2) 699da853ecaSopenharmony_ci{ 700da853ecaSopenharmony_ci vector<thread> threadVec; 701da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.Flac"; 702da853ecaSopenharmony_ci 703da853ecaSopenharmony_ci string inputFile = "s16_48000_2_dayuhaitang.pcm"; 704da853ecaSopenharmony_ci 705da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 706da853ecaSopenharmony_ci { 707da853ecaSopenharmony_ci string outputFile = "FUNCTION_013_" + to_string(i) + ".flac"; 708da853ecaSopenharmony_ci threadVec.push_back(thread(runEncode, encoderName, inputFile, outputFile, i)); 709da853ecaSopenharmony_ci } 710da853ecaSopenharmony_ci for (uint32_t i = 0; i < threadVec.size(); i++) 711da853ecaSopenharmony_ci { 712da853ecaSopenharmony_ci threadVec[i].join(); 713da853ecaSopenharmony_ci } 714da853ecaSopenharmony_ci for (int32_t i = 0; i < 16; i++) 715da853ecaSopenharmony_ci { 716da853ecaSopenharmony_ci ASSERT_EQ(AV_ERR_OK, testResult[i]); 717da853ecaSopenharmony_ci } 718da853ecaSopenharmony_ci} 719da853ecaSopenharmony_ci 720da853ecaSopenharmony_ci/** 721da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_100 722da853ecaSopenharmony_ci * @tc.name : AAC 723da853ecaSopenharmony_ci * @tc.desc : function check 724da853ecaSopenharmony_ci */ 725da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_100, TestSize.Level2) 726da853ecaSopenharmony_ci{ 727da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 728da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.AAC"; 729da853ecaSopenharmony_ci 730da853ecaSopenharmony_ci string inputFile = "B_Bird_on_a_wire_1_f32.pcm"; 731da853ecaSopenharmony_ci string outputFile = "FUNCTION_100.aac"; 732da853ecaSopenharmony_ci 733da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 734da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 1); 735da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 48000); 736da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32LE); 737da853ecaSopenharmony_ci 738da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32LE); 739da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, MONO); 740da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, DEFAULT_AAC_TYPE); 741da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 128000); 742da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, 48000); 743da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 744da853ecaSopenharmony_ci 745da853ecaSopenharmony_ci encoderDemo->NativeRunCasePerformance(inputFile, outputFile, encoderName.c_str(), format); 746da853ecaSopenharmony_ci 747da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 748da853ecaSopenharmony_ci delete encoderDemo; 749da853ecaSopenharmony_ci} 750da853ecaSopenharmony_ci 751da853ecaSopenharmony_ci/** 752da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_200 753da853ecaSopenharmony_ci * @tc.name : FLAC 754da853ecaSopenharmony_ci * @tc.desc : function check 755da853ecaSopenharmony_ci */ 756da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_200, TestSize.Level2) 757da853ecaSopenharmony_ci{ 758da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 759da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.Flac"; 760da853ecaSopenharmony_ci 761da853ecaSopenharmony_ci string inputFile = "B_Bird_on_a_wire_1_1.pcm"; 762da853ecaSopenharmony_ci string outputFile = "FUNCTION_200.flac"; 763da853ecaSopenharmony_ci 764da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 765da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 1); 766da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 48000); 767da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_S16LE); 768da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_S16LE); 769da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, MONO); 770da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 429000); 771da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_COMPLIANCE_LEVEL, -2); 772da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, 48000); 773da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 774da853ecaSopenharmony_ci 775da853ecaSopenharmony_ci encoderDemo->NativeRunCasePerformance(inputFile, outputFile, encoderName.c_str(), format); 776da853ecaSopenharmony_ci 777da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 778da853ecaSopenharmony_ci delete encoderDemo; 779da853ecaSopenharmony_ci} 780da853ecaSopenharmony_ci 781da853ecaSopenharmony_ci/** 782da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_201 783da853ecaSopenharmony_ci * @tc.name : FLAC 784da853ecaSopenharmony_ci * @tc.desc : function check 785da853ecaSopenharmony_ci */ 786da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_201, TestSize.Level2) 787da853ecaSopenharmony_ci{ 788da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 789da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.Flac"; 790da853ecaSopenharmony_ci 791da853ecaSopenharmony_ci string inputFile = "free_loss.pcm"; 792da853ecaSopenharmony_ci string outputFile = "FUNCTION_201.flac"; 793da853ecaSopenharmony_ci 794da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 795da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 1); 796da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 48000); 797da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_S16LE); 798da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_S16LE); 799da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, MONO); 800da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 613000); 801da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_COMPLIANCE_LEVEL, -2); 802da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, 48000); 803da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 804da853ecaSopenharmony_ci 805da853ecaSopenharmony_ci encoderDemo->NativeRunCasePerformance(inputFile, outputFile, encoderName.c_str(), format); 806da853ecaSopenharmony_ci 807da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 808da853ecaSopenharmony_ci delete encoderDemo; 809da853ecaSopenharmony_ci} 810da853ecaSopenharmony_ci 811da853ecaSopenharmony_ci/** 812da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_202 813da853ecaSopenharmony_ci * @tc.name : FLAC 814da853ecaSopenharmony_ci * @tc.desc : function check 815da853ecaSopenharmony_ci */ 816da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_202, TestSize.Level2) 817da853ecaSopenharmony_ci{ 818da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 819da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.Flac"; 820da853ecaSopenharmony_ci 821da853ecaSopenharmony_ci string inputFile = "B_Bird_on_a_wire_1_1.pcm"; 822da853ecaSopenharmony_ci string outputFile = "FUNCTION_202.dat"; 823da853ecaSopenharmony_ci 824da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 825da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 1); 826da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 48000); 827da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_S16LE); 828da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_S16LE); 829da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, MONO); 830da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 429000); 831da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_COMPLIANCE_LEVEL, -2); 832da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, 48000); 833da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 834da853ecaSopenharmony_ci 835da853ecaSopenharmony_ci encoderDemo->TestRunCase(inputFile, outputFile, encoderName.c_str(), format); 836da853ecaSopenharmony_ci 837da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 838da853ecaSopenharmony_ci delete encoderDemo; 839da853ecaSopenharmony_ci} 840da853ecaSopenharmony_ci 841da853ecaSopenharmony_ci/** 842da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_203 843da853ecaSopenharmony_ci * @tc.name : FLAC 844da853ecaSopenharmony_ci * @tc.desc : function check 845da853ecaSopenharmony_ci */ 846da853ecaSopenharmony_ciHWTEST_F(NativeFunctionTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUNCTION_203, TestSize.Level2) 847da853ecaSopenharmony_ci{ 848da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 849da853ecaSopenharmony_ci string encoderName = "OH.Media.Codec.Encoder.Audio.Flac"; 850da853ecaSopenharmony_ci 851da853ecaSopenharmony_ci string inputFile = "free_loss.pcm"; 852da853ecaSopenharmony_ci string outputFile = "FUNCTION_203.dat"; 853da853ecaSopenharmony_ci 854da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 855da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 1); 856da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 96000); 857da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_S16LE); 858da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_S16LE); 859da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, MONO); 860da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 613000); 861da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_COMPLIANCE_LEVEL, -2); 862da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_MAX_INPUT_SIZE, 16384); 863da853ecaSopenharmony_ci ASSERT_NE(nullptr, format); 864da853ecaSopenharmony_ci 865da853ecaSopenharmony_ci encoderDemo->TestRunCase(inputFile, outputFile, encoderName.c_str(), format); 866da853ecaSopenharmony_ci 867da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 868da853ecaSopenharmony_ci delete encoderDemo; 869da853ecaSopenharmony_ci}