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