1fa7767c5Sopenharmony_ci/* 2fa7767c5Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd. 3fa7767c5Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fa7767c5Sopenharmony_ci * you may not use this file except in compliance with the License. 5fa7767c5Sopenharmony_ci * You may obtain a copy of the License at 6fa7767c5Sopenharmony_ci * 7fa7767c5Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fa7767c5Sopenharmony_ci * 9fa7767c5Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fa7767c5Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fa7767c5Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fa7767c5Sopenharmony_ci * See the License for the specific language governing permissions and 13fa7767c5Sopenharmony_ci * limitations under the License. 14fa7767c5Sopenharmony_ci */ 15fa7767c5Sopenharmony_ci 16fa7767c5Sopenharmony_ci#include "gtest/gtest.h" 17fa7767c5Sopenharmony_ci#include "plugin/common/any.h" 18fa7767c5Sopenharmony_ci#include "plugin/plugins/source/audio_capture/audio_capture_plugin.h" 19fa7767c5Sopenharmony_ci#include "plugin/plugins/source/audio_capture/audio_type_translate.h" 20fa7767c5Sopenharmony_ci 21fa7767c5Sopenharmony_ciusing namespace testing::ext; 22fa7767c5Sopenharmony_ci 23fa7767c5Sopenharmony_cinamespace OHOS { 24fa7767c5Sopenharmony_cinamespace Media { 25fa7767c5Sopenharmony_cinamespace Test { 26fa7767c5Sopenharmony_ciusing namespace Plugin; 27fa7767c5Sopenharmony_ciusing namespace AuCapturePlugin; 28fa7767c5Sopenharmony_ciusing namespace AudioStandard; 29fa7767c5Sopenharmony_ci 30fa7767c5Sopenharmony_ci#define MAX_TYPE 9 31fa7767c5Sopenharmony_ci#define MP4_URL "http://www.w3school.com.cn/i/movie.mp4" 32fa7767c5Sopenharmony_ci 33fa7767c5Sopenharmony_ciclass AudioCaptureCallback : public Callback { 34fa7767c5Sopenharmony_cipublic: 35fa7767c5Sopenharmony_ci void OnEvent(const PluginEvent &event) 36fa7767c5Sopenharmony_ci { 37fa7767c5Sopenharmony_ci ASSERT_TRUE(static_cast<int>(event.type) >= 0); 38fa7767c5Sopenharmony_ci ASSERT_TRUE(static_cast<int>(event.type) <= MAX_TYPE); 39fa7767c5Sopenharmony_ci } 40fa7767c5Sopenharmony_ci}; 41fa7767c5Sopenharmony_ci 42fa7767c5Sopenharmony_ciHWTEST(AudioCaptureTest, testAudioCapturePluginErrorBranch, TestSize.Level1) 43fa7767c5Sopenharmony_ci{ 44fa7767c5Sopenharmony_ci auto str = std::make_shared<std::string>("audio"); 45fa7767c5Sopenharmony_ci auto audioCapture = std::make_shared<AudioCapturePlugin>(str->c_str()); 46fa7767c5Sopenharmony_ci ASSERT_TRUE(audioCapture != nullptr); 47fa7767c5Sopenharmony_ci 48fa7767c5Sopenharmony_ci auto status = audioCapture->Init(); 49fa7767c5Sopenharmony_ci ASSERT_TRUE(status == Status::OK); 50fa7767c5Sopenharmony_ci 51fa7767c5Sopenharmony_ci auto prepareStatus = audioCapture->Prepare(); 52fa7767c5Sopenharmony_ci ASSERT_TRUE(prepareStatus == Status::OK); 53fa7767c5Sopenharmony_ci 54fa7767c5Sopenharmony_ci auto deInitStatus = audioCapture->Deinit(); 55fa7767c5Sopenharmony_ci ASSERT_TRUE(deInitStatus == Status::OK); 56fa7767c5Sopenharmony_ci 57fa7767c5Sopenharmony_ci auto resetStatus = audioCapture->Reset(); 58fa7767c5Sopenharmony_ci ASSERT_FALSE(resetStatus == Status::OK); 59fa7767c5Sopenharmony_ci 60fa7767c5Sopenharmony_ci auto prepare = audioCapture->Prepare(); 61fa7767c5Sopenharmony_ci ASSERT_FALSE(prepare == Status::OK); 62fa7767c5Sopenharmony_ci 63fa7767c5Sopenharmony_ci auto startStatus = audioCapture->Start(); 64fa7767c5Sopenharmony_ci ASSERT_FALSE(startStatus == Status::OK); 65fa7767c5Sopenharmony_ci 66fa7767c5Sopenharmony_ci auto stopStatus = audioCapture->Stop(); 67fa7767c5Sopenharmony_ci ASSERT_TRUE(stopStatus == Status::OK); 68fa7767c5Sopenharmony_ci} 69fa7767c5Sopenharmony_ci 70fa7767c5Sopenharmony_ciHWTEST(AudioCaptureTest, testAudioCapturePluginStart, TestSize.Level1) 71fa7767c5Sopenharmony_ci{ 72fa7767c5Sopenharmony_ci auto str = std::make_shared<std::string>("audio"); 73fa7767c5Sopenharmony_ci auto audioCapture = std::make_shared<AudioCapturePlugin>(str->c_str()); 74fa7767c5Sopenharmony_ci ASSERT_TRUE(audioCapture != nullptr); 75fa7767c5Sopenharmony_ci 76fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_SAMPLE_RATE, AudioSamplingRate::SAMPLE_RATE_44100); 77fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_CHANNELS, STEREO); 78fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::MEDIA_BITRATE, 3000); 79fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_SAMPLE_FORMAT, SAMPLE_S32LE); 80fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::APP_TOKEN_ID, 2000); 81fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::APP_UID, 300); 82fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::APP_PID, 1000); 83fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_SAMPLE_PER_FRAME, 60); 84fa7767c5Sopenharmony_ci 85fa7767c5Sopenharmony_ci auto initStatus = audioCapture->Init(); 86fa7767c5Sopenharmony_ci ASSERT_TRUE(initStatus == Status::OK); 87fa7767c5Sopenharmony_ci 88fa7767c5Sopenharmony_ci auto prepareSt = audioCapture->Prepare(); 89fa7767c5Sopenharmony_ci ASSERT_TRUE(prepareSt == Status::OK); 90fa7767c5Sopenharmony_ci 91fa7767c5Sopenharmony_ci auto resetStatus2 = audioCapture->Reset(); 92fa7767c5Sopenharmony_ci ASSERT_TRUE(resetStatus2 == Status::OK); 93fa7767c5Sopenharmony_ci 94fa7767c5Sopenharmony_ci auto stopStatus2 = audioCapture->Stop(); 95fa7767c5Sopenharmony_ci ASSERT_TRUE(stopStatus2 == Status::OK); 96fa7767c5Sopenharmony_ci 97fa7767c5Sopenharmony_ci auto startStatus2 = audioCapture->Start(); 98fa7767c5Sopenharmony_ci ASSERT_TRUE(startStatus2 == Status::ERROR_UNKNOWN); 99fa7767c5Sopenharmony_ci 100fa7767c5Sopenharmony_ci auto source = std::make_shared<MediaSource>(MP4_URL); 101fa7767c5Sopenharmony_ci auto sourceSt = audioCapture->SetSource(source); 102fa7767c5Sopenharmony_ci ASSERT_TRUE(sourceSt == Status::ERROR_UNIMPLEMENTED); 103fa7767c5Sopenharmony_ci 104fa7767c5Sopenharmony_ci AudioCaptureCallback pluginCallback {}; 105fa7767c5Sopenharmony_ci auto audioSt = audioCapture->SetCallback(&pluginCallback); 106fa7767c5Sopenharmony_ci ASSERT_TRUE(audioSt == Status::ERROR_UNIMPLEMENTED); 107fa7767c5Sopenharmony_ci 108fa7767c5Sopenharmony_ci auto prepareSt2 = audioCapture->Prepare(); 109fa7767c5Sopenharmony_ci ASSERT_TRUE(prepareSt2 == Status::OK); 110fa7767c5Sopenharmony_ci 111fa7767c5Sopenharmony_ci auto startStatus3 = audioCapture->Start(); 112fa7767c5Sopenharmony_ci ASSERT_TRUE(startStatus3 == Status::ERROR_UNKNOWN); 113fa7767c5Sopenharmony_ci} 114fa7767c5Sopenharmony_ci 115fa7767c5Sopenharmony_ciHWTEST(AudioCaptureTest, testAudioCapturePlugin, TestSize.Level1) 116fa7767c5Sopenharmony_ci{ 117fa7767c5Sopenharmony_ci auto str = std::make_shared<std::string>("audio"); 118fa7767c5Sopenharmony_ci auto audioCapture = std::make_shared<AudioCapturePlugin>(str->c_str()); 119fa7767c5Sopenharmony_ci ASSERT_TRUE(audioCapture != nullptr); 120fa7767c5Sopenharmony_ci 121fa7767c5Sopenharmony_ci auto initStatus = audioCapture->Init(); 122fa7767c5Sopenharmony_ci ASSERT_TRUE(initStatus == Status::OK); 123fa7767c5Sopenharmony_ci 124fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_SAMPLE_RATE, AudioSamplingRate::SAMPLE_RATE_8000); 125fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_CHANNELS, MONO); 126fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::MEDIA_BITRATE, 16666); 127fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_SAMPLE_FORMAT, SAMPLE_S16LE); 128fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::APP_TOKEN_ID, 100000); 129fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::APP_UID, 200); 130fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::APP_PID, 100); 131fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_SAMPLE_PER_FRAME, 30); 132fa7767c5Sopenharmony_ci 133fa7767c5Sopenharmony_ci auto source = std::make_shared<MediaSource>(MP4_URL); 134fa7767c5Sopenharmony_ci auto sourceSt = audioCapture->SetSource(source); 135fa7767c5Sopenharmony_ci ASSERT_TRUE(sourceSt == Status::ERROR_UNIMPLEMENTED); 136fa7767c5Sopenharmony_ci 137fa7767c5Sopenharmony_ci auto prepareSt2 = audioCapture->Prepare(); 138fa7767c5Sopenharmony_ci ASSERT_TRUE(prepareSt2 == Status::OK); 139fa7767c5Sopenharmony_ci 140fa7767c5Sopenharmony_ci auto startStatus3 = audioCapture->Start(); 141fa7767c5Sopenharmony_ci ASSERT_TRUE(startStatus3 == Status::ERROR_UNKNOWN); 142fa7767c5Sopenharmony_ci 143fa7767c5Sopenharmony_ci uint64_t size; 144fa7767c5Sopenharmony_ci auto sizeStatus = audioCapture->GetSize(size); 145fa7767c5Sopenharmony_ci ASSERT_TRUE(size == 1024); 146fa7767c5Sopenharmony_ci ASSERT_TRUE(sizeStatus == Status::OK); 147fa7767c5Sopenharmony_ci 148fa7767c5Sopenharmony_ci std::shared_ptr<Buffer> buffer = std::make_shared<Buffer>(BufferMetaType::AUDIO); 149fa7767c5Sopenharmony_ci size_t expectedLe = 10; 150fa7767c5Sopenharmony_ci auto readStatus = audioCapture->Read(buffer, expectedLe); 151fa7767c5Sopenharmony_ci ASSERT_TRUE(readStatus == Status::ERROR_AGAIN); 152fa7767c5Sopenharmony_ci 153fa7767c5Sopenharmony_ci Seekable seekable = audioCapture->GetSeekable(); 154fa7767c5Sopenharmony_ci ASSERT_EQ(Seekable::UNSEEKABLE, seekable); 155fa7767c5Sopenharmony_ci Status seekSt = audioCapture->SeekToPos(300); 156fa7767c5Sopenharmony_ci ASSERT_EQ(seekSt, Status::ERROR_UNIMPLEMENTED); 157fa7767c5Sopenharmony_ci 158fa7767c5Sopenharmony_ci auto deInitStatus = audioCapture->Deinit(); 159fa7767c5Sopenharmony_ci ASSERT_TRUE(deInitStatus == Status::OK); 160fa7767c5Sopenharmony_ci} 161fa7767c5Sopenharmony_ci 162fa7767c5Sopenharmony_ciHWTEST(AudioCaptureTest, testGetParams, TestSize.Level1) 163fa7767c5Sopenharmony_ci{ 164fa7767c5Sopenharmony_ci auto str = std::make_shared<std::string>("audio"); 165fa7767c5Sopenharmony_ci auto audioCapture = std::make_shared<AudioCapturePlugin>(str->c_str()); 166fa7767c5Sopenharmony_ci ASSERT_TRUE(audioCapture != nullptr); 167fa7767c5Sopenharmony_ci 168fa7767c5Sopenharmony_ci ValueType value; 169fa7767c5Sopenharmony_ci audioCapture->GetParameter(Tag::AUDIO_SAMPLE_RATE, value); 170fa7767c5Sopenharmony_ci 171fa7767c5Sopenharmony_ci auto initStatus = audioCapture->Init(); 172fa7767c5Sopenharmony_ci ASSERT_TRUE(initStatus == Status::OK); 173fa7767c5Sopenharmony_ci 174fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_SAMPLE_RATE, AudioSamplingRate::SAMPLE_RATE_8000); 175fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_CHANNELS, MONO); 176fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::MEDIA_BITRATE, 16666); 177fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_SAMPLE_FORMAT, SAMPLE_S16LE); 178fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::APP_TOKEN_ID, 100000); 179fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::APP_UID, 200); 180fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::APP_PID, 100); 181fa7767c5Sopenharmony_ci audioCapture->SetParameter(Tag::AUDIO_SAMPLE_PER_FRAME, 30); 182fa7767c5Sopenharmony_ci 183fa7767c5Sopenharmony_ci audioCapture->GetParameter(Tag::AUDIO_SAMPLE_RATE, value); 184fa7767c5Sopenharmony_ci ASSERT_TRUE(value.HasValue()); 185fa7767c5Sopenharmony_ci 186fa7767c5Sopenharmony_ci audioCapture->GetParameter(Tag::AUDIO_CHANNELS, value); 187fa7767c5Sopenharmony_ci ASSERT_TRUE(value.HasValue()); 188fa7767c5Sopenharmony_ci 189fa7767c5Sopenharmony_ci audioCapture->GetParameter(Tag::MEDIA_BITRATE, value); 190fa7767c5Sopenharmony_ci ASSERT_TRUE(value.HasValue()); 191fa7767c5Sopenharmony_ci 192fa7767c5Sopenharmony_ci audioCapture->GetParameter(Tag::AUDIO_SAMPLE_FORMAT, value); 193fa7767c5Sopenharmony_ci ASSERT_TRUE(value.HasValue()); 194fa7767c5Sopenharmony_ci 195fa7767c5Sopenharmony_ci audioCapture->GetParameter(Tag::AUDIO_CHANNEL_LAYOUT, value); 196fa7767c5Sopenharmony_ci ASSERT_TRUE(value.HasValue()); 197fa7767c5Sopenharmony_ci 198fa7767c5Sopenharmony_ci audioCapture->GetParameter(Tag::AUDIO_OUTPUT_CHANNELS, value); 199fa7767c5Sopenharmony_ci ASSERT_TRUE(value.HasValue()); 200fa7767c5Sopenharmony_ci 201fa7767c5Sopenharmony_ci audioCapture->GetParameter(Tag::AUDIO_SAMPLE_RATE, value); 202fa7767c5Sopenharmony_ci ASSERT_TRUE(value.HasValue()); 203fa7767c5Sopenharmony_ci} 204fa7767c5Sopenharmony_ci 205fa7767c5Sopenharmony_ciHWTEST(AudioTypeTranslateTest, testSampleRateNum2Enum, TestSize.Level1) 206fa7767c5Sopenharmony_ci{ 207fa7767c5Sopenharmony_ci AudioSamplingRate val; 208fa7767c5Sopenharmony_ci auto res = SampleRateNum2Enum(8000, val); 209fa7767c5Sopenharmony_ci ASSERT_TRUE(val == AudioStandard::SAMPLE_RATE_8000); 210fa7767c5Sopenharmony_ci ASSERT_TRUE(res); 211fa7767c5Sopenharmony_ci 212fa7767c5Sopenharmony_ci auto res2 = SampleRateNum2Enum(9000, val); 213fa7767c5Sopenharmony_ci ASSERT_FALSE(res2); 214fa7767c5Sopenharmony_ci 215fa7767c5Sopenharmony_ci OHOS::AudioStandard::AudioSampleFormat aFmt; 216fa7767c5Sopenharmony_ci auto sampleRes = PluginFmt2SampleFmt(AudioSampleFormat::S16, aFmt); 217fa7767c5Sopenharmony_ci ASSERT_EQ(aFmt, AudioStandard::SAMPLE_S16LE); 218fa7767c5Sopenharmony_ci ASSERT_TRUE(sampleRes); 219fa7767c5Sopenharmony_ci 220fa7767c5Sopenharmony_ci auto sampleRes2 = PluginFmt2SampleFmt(AudioSampleFormat::S24P, aFmt); 221fa7767c5Sopenharmony_ci ASSERT_FALSE(sampleRes2); 222fa7767c5Sopenharmony_ci 223fa7767c5Sopenharmony_ci OHOS::AudioStandard::AudioChannel enumVal; 224fa7767c5Sopenharmony_ci auto channelRes = ChannelNumNum2Enum(1, enumVal); 225fa7767c5Sopenharmony_ci ASSERT_EQ(enumVal, AudioStandard::MONO); 226fa7767c5Sopenharmony_ci ASSERT_TRUE(channelRes); 227fa7767c5Sopenharmony_ci 228fa7767c5Sopenharmony_ci auto channelRes2 = ChannelNumNum2Enum(3, enumVal); 229fa7767c5Sopenharmony_ci ASSERT_FALSE(channelRes2); 230fa7767c5Sopenharmony_ci 231fa7767c5Sopenharmony_ci auto status = Error2Status(OHOS::ERR_OK); 232fa7767c5Sopenharmony_ci ASSERT_EQ(status, Status::OK); 233fa7767c5Sopenharmony_ci 234fa7767c5Sopenharmony_ci auto status2 = Error2Status(OHOS::ERR_OVERFLOW); 235fa7767c5Sopenharmony_ci ASSERT_EQ(status2, Status::ERROR_UNKNOWN); 236fa7767c5Sopenharmony_ci 237fa7767c5Sopenharmony_ci auto status3 = Error2Status(30); 238fa7767c5Sopenharmony_ci ASSERT_EQ(status3, Status::ERROR_UNKNOWN); 239fa7767c5Sopenharmony_ci} 240fa7767c5Sopenharmony_ci 241fa7767c5Sopenharmony_ci} // namespace Test 242fa7767c5Sopenharmony_ci} // namespace Media 243fa7767c5Sopenharmony_ci} // namespace OHOS 244