• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 /**
17  * @addtogroup Audio
18  * @{
19  *
20  * @brief Defines audio-related APIs, including custom data types and functions for capture drivers function.
21  * accessing a driver adapter, and capturing audios.
22  *
23  * @since 1.0
24  * @version 1.0
25  */
26 
27 /**
28  * @file audio_hdi_common.h
29  *
30  * @brief Declares APIs for operations related to the capturing audio adapter.
31  *
32  * @since 1.0
33  * @version 1.0
34  */
35 
36 #include "audio_hdi_common.h"
37 #include "audio_hdicapture_scene_test.h"
38 
39 using namespace std;
40 using namespace testing::ext;
41 using namespace HMOS::Audio;
42 
43 namespace {
44 const string ADAPTER_NAME_HDMI = "hdmi";
45 const string ADAPTER_NAME_USB = "usb";
46 const string ADAPTER_NAME_INTERNAL = "internal";
47 
48 class AudioHdiCaptureSceneTest : public testing::Test {
49 public:
50     static void SetUpTestCase(void);
51     static void TearDownTestCase(void);
52     void SetUp();
53     void TearDown();
54     static TestAudioManager *(*GetAudioManager)();
55     static void *handleSo;
56 #ifdef AUDIO_MPI_SO
57     static int32_t (*SdkInit)();
58     static void (*SdkExit)();
59     static void *sdkSo;
60 #endif
61     int32_t AudioCaptureStart(const string path, struct AudioCapture *capture) const;
62 };
63 
64 TestAudioManager *(*AudioHdiCaptureSceneTest::GetAudioManager)() = nullptr;
65 void *AudioHdiCaptureSceneTest::handleSo = nullptr;
66 #ifdef AUDIO_MPI_SO
67     int32_t (*AudioHdiCaptureSceneTest::SdkInit)() = nullptr;
68     void (*AudioHdiCaptureSceneTest::SdkExit)() = nullptr;
69     void *AudioHdiCaptureSceneTest::sdkSo = nullptr;
70 #endif
71 
SetUpTestCase(void)72 void AudioHdiCaptureSceneTest::SetUpTestCase(void)
73 {
74 #ifdef AUDIO_MPI_SO
75     char sdkResolvedPath[] = "//system/lib/libhdi_audio_interface_lib_render.z.so";
76     sdkSo = dlopen(sdkResolvedPath, RTLD_LAZY);
77     if (sdkSo == nullptr) {
78         return;
79     }
80     SdkInit = (int32_t (*)())(dlsym(sdkSo, "MpiSdkInit"));
81     if (SdkInit == nullptr) {
82         return;
83     }
84     SdkExit = (void (*)())(dlsym(sdkSo, "MpiSdkExit"));
85     if (SdkExit == nullptr) {
86         return;
87     }
88     SdkInit();
89 #endif
90     handleSo = dlopen(RESOLVED_PATH.c_str(), RTLD_LAZY);
91     if (handleSo == nullptr) {
92         return;
93     }
94     GetAudioManager = (TestAudioManager *(*)())(dlsym(handleSo, FUNCTION_NAME.c_str()));
95     if (GetAudioManager == nullptr) {
96         return;
97     }
98 }
99 
TearDownTestCase(void)100 void AudioHdiCaptureSceneTest::TearDownTestCase(void)
101 {
102 #ifdef AUDIO_MPI_SO
103     SdkExit();
104     if (sdkSo != nullptr) {
105         dlclose(sdkSo);
106         sdkSo = nullptr;
107     }
108     if (SdkInit != nullptr) {
109         SdkInit = nullptr;
110     }
111     if (SdkExit != nullptr) {
112         SdkExit = nullptr;
113     }
114 #endif
115     if (GetAudioManager != nullptr) {
116         GetAudioManager = nullptr;
117     }
118 }
AudioCaptureStart(const string path,struct AudioCapture * capture) const119 int32_t AudioHdiCaptureSceneTest::AudioCaptureStart(const string path, struct AudioCapture *capture) const
120 {
121     int32_t ret = -1;
122     struct AudioSampleAttributes attrs = {};
123 
124     ret = InitAttrs(attrs);
125     if (ret < 0) {
126         return HDF_FAILURE;
127     }
128     FILE *file = fopen(path.c_str(), "wb+");
129     if (file == nullptr) {
130         return HDF_FAILURE;
131     }
132     ret = FrameStartCapture(capture, file, attrs);
133     if (ret < 0) {
134         fclose(file);
135         return HDF_FAILURE;
136     }
137     fclose(file);
138     return HDF_SUCCESS;
139 }
SetUp(void)140 void AudioHdiCaptureSceneTest::SetUp(void) {}
TearDown(void)141 void AudioHdiCaptureSceneTest::TearDown(void) {}
142 
143 /**
144 * @tc.name   Test AudioCaptureCheckSceneCapability API and check scene's capability
145 * @tc.number  SUB_Audio_HDI_CaptureCheckSceneCapability_0001
146 * @tc.desc  Test AudioCaptureCheckSceneCapability interface,return 0 if check scene's capability successful.
147 * @tc.author: ZHANGHAILIN
148 */
149 HWTEST_F(AudioHdiCaptureSceneTest, SUB_Audio_HDI_CaptureCheckSceneCapability_0001, TestSize.Level1)
150 {
151     int32_t ret = -1;
152     bool supported = false;
153     struct AudioSceneDescriptor scenes = {};
154     struct AudioAdapter *adapter = nullptr;
155     struct AudioCapture *capture = nullptr;
156     ASSERT_NE(nullptr, GetAudioManager);
157     TestAudioManager manager = *GetAudioManager();
158     ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME_INTERNAL, &adapter, &capture);
159     ASSERT_EQ(HDF_SUCCESS, ret);
160     scenes.scene.id = 0;
161     scenes.desc.pins = PIN_IN_MIC;
162     ret = capture->scene.CheckSceneCapability(capture, &scenes, &supported);
163     EXPECT_EQ(HDF_SUCCESS, ret);
164     EXPECT_TRUE(supported);
165 
166     adapter->DestroyCapture(adapter, capture);
167     manager.UnloadAdapter(&manager, adapter);
168 }
169 /**
170 * @tc.name   Test checking scene's capability where the scene is not configured in the json.
171 * @tc.number  SUB_Audio_HDI_CaptureCheckSceneCapability_0002
172 * @tc.desc  Test AudioCreateCapture interface,return -1 if the scene is not configured in the json.
173 * @tc.author: ZHANGHAILIN
174 */
175 HWTEST_F(AudioHdiCaptureSceneTest, SUB_Audio_HDI_CaptureCheckSceneCapability_0002, TestSize.Level1)
176 {
177     int32_t ret = -1;
178     bool supported = true;
179     struct AudioSceneDescriptor scenes = {};
180     struct AudioAdapter *adapter = nullptr;
181     struct AudioCapture *capture = nullptr;
182     ASSERT_NE(nullptr, GetAudioManager);
183     TestAudioManager manager = *GetAudioManager();
184     ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME_INTERNAL, &adapter, &capture);
185     ASSERT_EQ(HDF_SUCCESS, ret);
186     scenes.scene.id = 5;
187     scenes.desc.pins = PIN_IN_MIC;
188     ret = capture->scene.CheckSceneCapability(capture, &scenes, &supported);
189     EXPECT_EQ(HDF_FAILURE, ret);
190 
191     adapter->DestroyCapture(adapter, capture);
192     manager.UnloadAdapter(&manager, adapter);
193 }
194 /**
195 * @tc.name   Test checking scene's capability where the capture is empty
196 * @tc.number  SUB_Audio_HDI_CaptureCheckSceneCapability_0003
197 * @tc.desc  Test AudioCreateCapture interface,return -1 if the capture is empty.
198 * @tc.author: ZHANGHAILIN
199 */
200 HWTEST_F(AudioHdiCaptureSceneTest, SUB_Audio_HDI_CaptureCheckSceneCapability_0003, TestSize.Level1)
201 {
202     int32_t ret = -1;
203     bool supported = true;
204     struct AudioSceneDescriptor scenes = {};
205     struct AudioAdapter *adapter = nullptr;
206     struct AudioCapture *capture = nullptr;
207     struct AudioCapture *captureNull = nullptr;
208     ASSERT_NE(nullptr, GetAudioManager);
209     TestAudioManager manager = *GetAudioManager();
210     ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME_INTERNAL, &adapter, &capture);
211     ASSERT_EQ(HDF_SUCCESS, ret);
212     scenes.scene.id = 0;
213     scenes.desc.pins = PIN_IN_MIC;
214     ret = capture->scene.CheckSceneCapability(captureNull, &scenes, &supported);
215     EXPECT_EQ(HDF_FAILURE, ret);
216 
217     ret = AudioCaptureStart(AUDIO_CAPTURE_FILE, capture);
218     EXPECT_EQ(HDF_SUCCESS, ret);
219 
220     capture->control.Stop((AudioHandle)capture);
221     adapter->DestroyCapture(adapter, capture);
222     manager.UnloadAdapter(&manager, adapter);
223 }
224 /**
225 * @tc.name   Test checking scene's capability where the scene is empty
226 * @tc.number  SUB_Audio_HDI_CaptureCheckSceneCapability_0004
227 * @tc.desc  Test AudioCreateCapture interface,return -1 if the scene is empty.
228 * @tc.author: ZHANGHAILIN
229 */
230 HWTEST_F(AudioHdiCaptureSceneTest, SUB_Audio_HDI_CaptureCheckSceneCapability_0004, TestSize.Level1)
231 {
232     int32_t ret = -1;
233     bool supported = true;
234     struct AudioSceneDescriptor *scenes = nullptr;
235     struct AudioAdapter *adapter = nullptr;
236     struct AudioCapture *capture = nullptr;
237     ASSERT_NE(nullptr, GetAudioManager);
238     TestAudioManager manager = *GetAudioManager();
239     ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME_INTERNAL, &adapter, &capture);
240     ASSERT_EQ(HDF_SUCCESS, ret);
241 
242     ret = capture->scene.CheckSceneCapability(capture, scenes, &supported);
243     EXPECT_EQ(HDF_FAILURE, ret);
244 
245     ret = AudioCaptureStart(AUDIO_CAPTURE_FILE, capture);
246     EXPECT_EQ(HDF_SUCCESS, ret);
247 
248     capture->control.Stop((AudioHandle)capture);
249     adapter->DestroyCapture(adapter, capture);
250     manager.UnloadAdapter(&manager, adapter);
251 }
252 /**
253 * @tc.name   Test checking scene's capability where the parameter supported is empty.
254 * @tc.number  SUB_Audio_HDI_CaptureCheckSceneCapability_0005
255 * @tc.desc  Test AudioCreateCapture interface,return -1 if the parameter supported is empty.
256 * @tc.author: ZHANGHAILIN
257 */
258 HWTEST_F(AudioHdiCaptureSceneTest, SUB_Audio_HDI_CaptureCheckSceneCapability_0005, TestSize.Level1)
259 {
260     int32_t ret = -1;
261     struct AudioSceneDescriptor scenes = {};
262     struct AudioAdapter *adapter = nullptr;
263     struct AudioCapture *capture = nullptr;
264     ASSERT_NE(nullptr, GetAudioManager);
265     TestAudioManager manager = *GetAudioManager();
266     ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME_INTERNAL, &adapter, &capture);
267     ASSERT_EQ(HDF_SUCCESS, ret);
268 
269     scenes.scene.id = 0;
270     scenes.desc.pins = PIN_IN_MIC;
271     ret = capture->scene.CheckSceneCapability(capture, &scenes, nullptr);
272     EXPECT_EQ(HDF_FAILURE, ret);
273 
274     adapter->DestroyCapture(adapter, capture);
275     manager.UnloadAdapter(&manager, adapter);
276 }
277 /**
278 * @tc.name  Test AudioCaptureSelectScene API via legal input
279 * @tc.number  SUB_Audio_HDI_AudioCaptureSelectScene_0001
280 * @tc.desc  Test AudioCaptureSelectScene interface,return 0 if select capture's scene successful.
281 * @tc.author: ZHANGHAILIN
282 */
283 HWTEST_F(AudioHdiCaptureSceneTest, SUB_Audio_HDI_AudioCaptureSelectScene_0001, TestSize.Level1)
284 {
285     int32_t ret = -1;
286     struct AudioSceneDescriptor scenes = {};
287     struct AudioAdapter *adapter = nullptr;
288     struct AudioCapture *capture = nullptr;
289     ASSERT_NE(nullptr, GetAudioManager);
290     TestAudioManager manager = *GetAudioManager();
291     ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME_INTERNAL, &adapter, &capture);
292     ASSERT_EQ(HDF_SUCCESS, ret);
293     scenes.scene.id = 0;
294     scenes.desc.pins = PIN_IN_MIC;
295     ret = capture->scene.SelectScene(capture, &scenes);
296     EXPECT_EQ(HDF_SUCCESS, ret);
297 
298     adapter->DestroyCapture(adapter, capture);
299     manager.UnloadAdapter(&manager, adapter);
300 }
301 /**
302 * @tc.name  Test AudioCaptureSelectScene API after capture start.
303 * @tc.number  SUB_Audio_HDI_AudioCaptureSelectScene_0002
304 * @tc.desc  Test AudioCaptureSelectScene, return 0 if select capture's scene successful after capture start.
305 * @tc.author: ZHANGHAILIN
306 */
307 HWTEST_F(AudioHdiCaptureSceneTest, SUB_Audio_HDI_AudioCaptureSelectScene_0002, TestSize.Level1)
308 {
309     int32_t ret = -1;
310     struct AudioSceneDescriptor scenes = {};
311     struct AudioAdapter *adapter = nullptr;
312     struct AudioCapture *capture = nullptr;
313     ASSERT_NE(nullptr, GetAudioManager);
314     TestAudioManager manager = *GetAudioManager();
315     ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME_INTERNAL, &adapter, &capture);
316     ASSERT_EQ(HDF_SUCCESS, ret);
317 
318     ret = AudioCaptureStart(AUDIO_CAPTURE_FILE, capture);
319     EXPECT_EQ(HDF_SUCCESS, ret);
320 
321     scenes.scene.id = 0;
322     scenes.desc.pins = PIN_IN_MIC;
323     ret = capture->scene.SelectScene(capture, &scenes);
324     EXPECT_EQ(HDF_SUCCESS, ret);
325 
326     capture->control.Stop((AudioHandle)capture);
327     adapter->DestroyCapture(adapter, capture);
328     manager.UnloadAdapter(&manager, adapter);
329 }
330 /**
331 * @tc.name  Test AudioCaptureSelectScene API where the parameter handle is empty.
332 * @tc.number  SUB_Audio_HDI_AudioCaptureSelectScene_0003
333 * @tc.desc  Test AudioCaptureSelectScene, return -1 if the parameter handle is empty.
334 * @tc.author: ZHANGHAILIN
335 */
336 HWTEST_F(AudioHdiCaptureSceneTest, SUB_Audio_HDI_AudioCaptureSelectScene_0003, TestSize.Level1)
337 {
338     int32_t ret = -1;
339     struct AudioSceneDescriptor scenes = {};
340     struct AudioAdapter *adapter = nullptr;
341     struct AudioCapture *capture = nullptr;
342     struct AudioCapture *captureNull = nullptr;
343     ASSERT_NE(nullptr, GetAudioManager);
344     TestAudioManager manager = *GetAudioManager();
345     ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME_INTERNAL, &adapter, &capture);
346     ASSERT_EQ(HDF_SUCCESS, ret);
347 
348     scenes.scene.id = 0;
349     scenes.desc.pins = PIN_IN_MIC;
350     ret = capture->scene.SelectScene(captureNull, &scenes);
351     EXPECT_EQ(HDF_FAILURE, ret);
352 
353     adapter->DestroyCapture(adapter, capture);
354     manager.UnloadAdapter(&manager, adapter);
355 }
356 /**
357 * @tc.name  Test AudioCaptureSelectScene API where the parameter scene is empty.
358 * @tc.number  SUB_Audio_HDI_AudioCaptureSelectScene_0004
359 * @tc.desc  Test AudioCaptureSelectScene, return -1 if the parameter scene is empty.
360 * @tc.author: ZHANGHAILIN
361 */
362 HWTEST_F(AudioHdiCaptureSceneTest, SUB_Audio_HDI_AudioCaptureSelectScene_0004, TestSize.Level1)
363 {
364     int32_t ret = -1;
365     struct AudioSceneDescriptor *scenes = nullptr;
366     struct AudioAdapter *adapter = nullptr;
367     struct AudioCapture *capture = nullptr;
368     ASSERT_NE(nullptr, GetAudioManager);
369     TestAudioManager manager = *GetAudioManager();
370     ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME_INTERNAL, &adapter, &capture);
371     ASSERT_EQ(HDF_SUCCESS, ret);
372 
373     ret = capture->scene.SelectScene(capture, scenes);
374     EXPECT_EQ(HDF_FAILURE, ret);
375 
376     adapter->DestroyCapture(adapter, capture);
377     manager.UnloadAdapter(&manager, adapter);
378 }
379 /**
380 * @tc.name  Test AudioCaptureSelectScene API where the scene is not configured in the json.
381 * @tc.number  SUB_Audio_HDI_AudioCaptureSelectScene_0005
382 * @tc.desc  Test AudioCaptureSelectScene, return -1 if the scene is not configured in the json.
383 * @tc.author: ZHANGHAILIN
384 */
385 HWTEST_F(AudioHdiCaptureSceneTest, SUB_Audio_HDI_AudioCaptureSelectScene_0005, TestSize.Level1)
386 {
387     int32_t ret = -1;
388     struct AudioSceneDescriptor scenes = {};
389     struct AudioAdapter *adapter = nullptr;
390     struct AudioCapture *capture = nullptr;
391     ASSERT_NE(nullptr, GetAudioManager);
392     TestAudioManager manager = *GetAudioManager();
393     ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME_INTERNAL, &adapter, &capture);
394     ASSERT_EQ(HDF_SUCCESS, ret);
395 
396     scenes.scene.id = 5;
397     scenes.desc.pins = PIN_OUT_HDMI;
398     ret = capture->scene.SelectScene(capture, &scenes);
399     EXPECT_EQ(HDF_FAILURE, ret);
400 
401     adapter->DestroyCapture(adapter, capture);
402     manager.UnloadAdapter(&manager, adapter);
403 }
404 }