Add noise suppression functionality 19/288019/6 accepted/tizen/unified/20230215.155629
authorJaechul Lee <jcsing.lee@samsung.com>
Thu, 9 Feb 2023 06:16:18 +0000 (15:16 +0900)
committerJaechul Lee <jcsing.lee@samsung.com>
Mon, 13 Feb 2023 01:59:51 +0000 (10:59 +0900)
[Version] 0.5.54
[Issue Type] New feature

Change-Id: I635096c4e1d7bc573008dafbf2dcd074351bc09b
Signed-off-by: Jaechul Lee <jcsing.lee@samsung.com>
include/CAudioInfo.h
packaging/capi-media-audio-io.spec
src/cpp/CAudioIO.cpp
src/cpp/CAudioInfo.cpp
src/cpp/CPulseAudioClient.cpp

index c0215ab..4800cad 100644 (file)
@@ -141,6 +141,8 @@ namespace tizen_media_audio {
         int getSampleSize() noexcept;
         void bindEchoCancelReferenceDeviceId(int id) noexcept;
         int getEchoCancelReferenceDeviceId() noexcept;
+        void setNoiseSuppression(bool enable) noexcept;
+        bool getNoiseSuppression() noexcept;
 
         /* Setter & Getter Utilities */
         const char* getConvertedStreamType();
@@ -197,6 +199,7 @@ namespace tizen_media_audio {
         EAudioType   __mAudioType;
         int          __mAudioIndex;
         int          __mReferenceDeviceId;
+        bool         __mNoiseSuppression;
     };
 
 
index 9e5fb3f..42ed89c 100644 (file)
@@ -1,6 +1,6 @@
 Name:           capi-media-audio-io
 Summary:        An Audio Input & Audio Output library in Tizen Native API
-Version:        0.5.53
+Version:        0.5.54
 Release:        0
 Group:          Multimedia/API
 License:        Apache-2.0
index 0907dcf..0131b4e 100644 (file)
@@ -226,11 +226,19 @@ void CAudioIO::setStreamInfo(sound_stream_info_h stream_info) {
 
     if (mDirection == CAudioInfo::EAudioDirection::AUDIO_DIRECTION_IN) {
         int device_id;
+        bool enabled;
 
         if ((errorCode = sound_manager_get_echo_cancel_reference_device(stream_info, &device_id)) != SOUND_MANAGER_ERROR_NONE)
             THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Can't get reference device [ret:%d]", errorCode); //LCOV_EXCL_LINE
 
         if (device_id != SOUND_MANAGER_STREAM_NO_REFERENCE_DEVICE)
             getAudioInfo().bindEchoCancelReferenceDeviceId(device_id);
+
+        if ((errorCode = sound_manager_get_noise_suppression(stream_info, &enabled)) != SOUND_MANAGER_ERROR_NONE)
+            THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Can't get noise suppression status [ret:%d]", errorCode); //LCOV_EXCL_LINE
+
+        if (enabled)
+            getAudioInfo().setNoiseSuppression(enabled);
+
     }
 }
index 3c0e19b..1fb506b 100644 (file)
@@ -33,7 +33,8 @@ CAudioInfo::CAudioInfo() :
     __mSampleType(ESampleType::SAMPLE_TYPE_U8),
     __mAudioType(EAudioType::AUDIO_IN_TYPE_MEDIA),
     __mAudioIndex(-1),
-    __mReferenceDeviceId(0) {
+    __mReferenceDeviceId(0),
+    __mNoiseSuppression(false) {
 }
 
 CAudioInfo::CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sampleType, EAudioType audioType, int audioIndex) :
@@ -42,7 +43,8 @@ CAudioInfo::CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sa
     __mSampleType(sampleType),
     __mAudioType(audioType),
     __mAudioIndex(audioIndex),
-    __mReferenceDeviceId(0) {
+    __mReferenceDeviceId(0),
+    __mNoiseSuppression(false) {
     // Check to invalid AudioInfo
     if (sampleRate < CAudioInfo::MIN_SYSTEM_SAMPLERATE ||
         sampleRate > CAudioInfo::MAX_SYSTEM_SAMPLERATE)
@@ -131,6 +133,14 @@ int CAudioInfo::getEchoCancelReferenceDeviceId() noexcept {
     return __mReferenceDeviceId;
 }
 
+void CAudioInfo::setNoiseSuppression(bool enable) noexcept {
+    __mNoiseSuppression = enable;
+}
+
+bool CAudioInfo::getNoiseSuppression() noexcept {
+    return __mNoiseSuppression;
+}
+
 const char* CAudioInfo::getConvertedStreamType() {
     if (__mAudioType < CAudioInfo::EAudioType::AUDIO_IN_TYPE_MEDIA ||
         __mAudioType >= CAudioInfo::EAudioType::AUDIO_TYPE_MAX)
index f57c592..e222b64 100644 (file)
@@ -402,10 +402,15 @@ void CPulseAudioClient::initialize() {
         if (index >= 0)
             pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_PARENT_ID, "%u", (unsigned int) index);
 
-        int reference_id = __mSpec.getAudioInfo().getEchoCancelReferenceDeviceId();
-        if (reference_id > 0) {
-            pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_ECHO_CANCEL_METHOD, "%s", ec_method);
-            pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_ECHO_CANCEL_REFERENCE_DEVICE, "%d", reference_id);
+        if (__mDirection == EStreamDirection::STREAM_DIRECTION_RECORD) {
+            int reference_id = __mSpec.getAudioInfo().getEchoCancelReferenceDeviceId();
+            if (reference_id > 0) {
+                pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_ECHO_CANCEL_METHOD, "%s", ec_method);
+                pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_ECHO_CANCEL_REFERENCE_DEVICE, "%d", reference_id);
+            }
+
+            if (__mSpec.getAudioInfo().getNoiseSuppression())
+                pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_NOISE_SUPPRESSION_ENABLE, "%d", true);
         }
 
         // Adds latency on proplist for delivery to PULSEAUDIO