[audio] add testcases for pcm read 70/187570/2 accepted/tizen/unified/20180827.160610 submit/tizen/20180827.065040
authorSeungbae Shin <seungbae.shin@samsung.com>
Fri, 24 Aug 2018 08:04:25 +0000 (17:04 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Fri, 24 Aug 2018 08:05:57 +0000 (17:05 +0900)
[Version] 0.0.15
[Profile] Common
[Issue Type] Add
[Dependency module] N/A

Change-Id: Ic486fa9cfe58c8c328b639c9fff4331b0b46731d

packaging/mm-hal-interface.spec
testcase/audio/audio_haltests.cpp

index 3f3fb14..9bd31b1 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       mm-hal-interface
 Summary:    Multimedia HAL Interface
-Version:    0.0.14
+Version:    0.0.15
 Release:    0
 Group:      Multimedia/Development
 License:    Apache-2.0
index b11aa61..4a9f628 100644 (file)
@@ -71,7 +71,9 @@ class AudioHalTest : public testing::Test
 
        protected:
                void SetRouteToSpeaker();
+               void SetRouteToMicrophone();
                int32_t WritePcmFromFile(pcm_handle pcm_h);
+               int32_t ReadPcmFromDevice(pcm_handle pcm_h);
                uint32_t BytesToFrames(uint32_t bytes, audio_pcm_sample_spec_t *spec);
                uint32_t BytesToFrames(uint32_t bytes);
                uint32_t FramesToBytes(uint32_t frames, audio_pcm_sample_spec_t *spec);
@@ -146,6 +148,30 @@ void AudioHalTest::SetRouteToSpeaker()
        free(info.device_infos);
 }
 
+void AudioHalTest::SetRouteToMicrophone()
+{
+       hal_route_info info;
+       int32_t num_of_devices = 1;
+
+       memset(&info, 0, sizeof(hal_route_info));
+
+       info.role = "media";
+       info.device_infos = (hal_device_info*)malloc(sizeof(hal_device_info) * num_of_devices);
+       if (info.device_infos == nullptr) {
+               cout << "malloc error!!! : " << errno << endl;
+               return;
+       }
+       info.device_infos[0].direction = DIRECTION_IN;
+       info.device_infos[0].type = "builtin-mic";
+       info.device_infos[0].id = 100;
+       info.num_of_devices = num_of_devices;
+
+       int32_t ret = audio_hal_interface_update_route(m_h, &info);
+       cout << "update route : " << ret << endl;
+
+       free(info.device_infos);
+}
+
 int32_t AudioHalTest::WritePcmFromFile(pcm_handle pcm_h)
 {
        int32_t ret = AUDIO_HAL_SUCCESS;
@@ -221,6 +247,37 @@ int32_t AudioHalTest::WritePcmFromFile(pcm_handle pcm_h)
        return ret;
 }
 
+int32_t AudioHalTest::ReadPcmFromDevice(pcm_handle pcm_h)
+{
+       int32_t ret = AUDIO_HAL_SUCCESS;
+       uint32_t avail_frames = 0;
+       char buffer[65536];
+       int iter_left = 100;
+
+       cout << "start to record for few seconds..." << endl;
+
+       do {
+               ret = audio_hal_interface_pcm_available(m_h, pcm_h, &avail_frames);
+               if (ret == AUDIO_HAL_ERROR)
+                       break;
+
+               if (avail_frames == 0) {
+                       usleep(20000); // 20ms
+                       continue;
+               }
+
+               ret = audio_hal_interface_pcm_read(m_h, pcm_h, buffer, avail_frames);
+               if (ret == AUDIO_HAL_ERROR)
+                       break;
+
+               cout << iter_left << ", read success, avail frames : " << avail_frames << endl;
+       } while (--iter_left);
+
+       cout << "Done!!!" << endl;
+
+       return ret;
+}
+
 uint32_t AudioHalTest::BytesToFrames(uint32_t bytes, audio_pcm_sample_spec_t *spec)
 {
        // ToDo : support various sample format
@@ -888,6 +945,42 @@ TEST_F(AudioHalTest, PcmOpenWriteCloseP)
 }
 
 /**
+ * @testcase           PcmOpenReadCloseP
+ * @since_tizen                4.0
+ * @author                     SR(seungbae.shin)
+ * @reviewer           SR(sc11.lee)
+ * @type                       auto
+ * @description                Positive, open pcm handle, start pcm handle, read pcm buffers, stop pcm handle and close pcm_handle
+ * @apicovered         audio_pcm_open, audio_pcm_start, audio_pcm_avail, audio_pcm_read, audio_pcm_stop, audio_pcm_close
+ * @passcase           XXX
+ * @failcase           YYY
+ * @precondition       None
+ * @postcondition      None
+ */
+TEST_F(AudioHalTest, PcmOpenReadCloseP)
+{
+       pcm_handle pcm_h = nullptr;
+
+       SetRouteToMicrophone();
+
+       int32_t ret = audio_hal_interface_pcm_open(m_h, default_card.c_str(), default_device.c_str(),
+                                                                                       DIRECTION_IN, &m_spec, GetDefaultFrames(), default_periods, &pcm_h);
+       ASSERT_EQ(ret, AUDIO_HAL_SUCCESS);
+
+       ret = audio_hal_interface_pcm_start(m_h, pcm_h);
+       EXPECT_EQ(ret, AUDIO_HAL_SUCCESS);
+
+       ret = ReadPcmFromDevice(pcm_h);
+       EXPECT_EQ(ret, AUDIO_HAL_SUCCESS);
+
+       ret = audio_hal_interface_pcm_stop(m_h, pcm_h);
+       EXPECT_EQ(ret, AUDIO_HAL_SUCCESS);
+
+       ret = audio_hal_interface_pcm_close(m_h, pcm_h);
+       EXPECT_EQ(ret, AUDIO_HAL_SUCCESS);
+}
+
+/**
  * @testcase           PcmRecoverN
  * @since_tizen                4.0
  * @author                     SR(seungbae.shin)