Feed utterance audio only to the selected wakeup engine 58/233358/1
authorJi-hoon Lee <dalton.lee@samsung.com>
Thu, 14 May 2020 06:32:17 +0000 (15:32 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Thu, 14 May 2020 06:32:17 +0000 (15:32 +0900)
Change-Id: I0ca917128e28ab77d5a37b033ecd62ea8d0d4123

plugins/wakeup-manager/inc/wakeup_engine_manager.h
plugins/wakeup-manager/src/wakeup_engine_manager.cpp

index fb668a9cb446e2538e88912500965fc4d01c34d1..4c196eba9936f1f15b50df5ecc234375c1ef936b 100644 (file)
@@ -206,6 +206,7 @@ private:
 
        thread mStreamingThread;
        atomic_bool mStopStreamingThread{false};
+       wakeup_manager_state_e mWakeupManagerState{WAKEUP_MANAGER_STATE_INACTIVE};
 
        bool mWakeWordAudioRequired{false};
 };
index aa31ab7f6ef82bfdf55c1ff83ddbc95ac4c8fd47..d9181dc0d6dd0a843a1e968784c6ac21a16ec26c 100644 (file)
@@ -510,6 +510,7 @@ void CWakeupEngineManager::update_manager_state(wakeup_manager_state_e state)
                        }
                }
        }
+       mWakeupManagerState = state;
 }
 
 void CWakeupEngineManager::update_recognition_result(string appid, int result)
@@ -598,9 +599,19 @@ void CWakeupEngineManager::engine_feed_audio_data(long time, void* data, int len
                        info.audio_data_require_status &&
                        info.interface.feed_audio_data) {
                        try {
-                               int ret = info.interface.feed_audio_data(time, data, len);
-                               if (0 != ret) {
-                                       LOGE("[ERROR] Fail to feed speech data, ret(%d) : %s", ret, info.engine_name.c_str());
+                               bool filtered_out = false;
+                               /* After a wakeup event, wakeup engines other than the selected one
+                                  does not need to receive audio data. */
+                               if (WAKEUP_MANAGER_STATE_UTTERANCE == mWakeupManagerState) {
+                                       if (mSelectedEngine && &info != mSelectedEngine) {
+                                               filtered_out = true;
+                                       }
+                               }
+                               if (!filtered_out) {
+                                       int ret = info.interface.feed_audio_data(time, data, len);
+                                       if (0 != ret) {
+                                               LOGE("[ERROR] Fail to feed speech data, ret(%d) : %s", ret, info.engine_name.c_str());
+                                       }
                                }
                        } catch (const std::exception& e) {
                                MWR_LOGE("[ERROR] wakeup engine %s threw exception : %s",