From 49fcc09cfead50dc72c2f19327cd1d3a2034cc96 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Thu, 3 Sep 2020 20:13:54 +0900 Subject: [PATCH] Implement new interface for sending streaming mode to dependency module Change-Id: I7d01effab7dae6380f3525dbbec595a041376d20 Signed-off-by: Suyeon Hwang --- audio-manager/inc/vc_audio_manager.h | 1 + audio-manager/src/vc_audio_manager.cpp | 15 +++++++++++++ server/dependency_audio_manager.cpp | 31 ++++++++++++++++++++++++++ server/dependency_audio_manager.h | 5 +++++ server/vcd_dbus_server.c | 2 +- server/vcd_recorder.c | 10 +++++++++ server/vcd_recorder.h | 2 ++ server/vcd_server.c | 4 +++- server/vcd_server.h | 2 +- 9 files changed, 69 insertions(+), 3 deletions(-) diff --git a/audio-manager/inc/vc_audio_manager.h b/audio-manager/inc/vc_audio_manager.h index 59354e2..4c41777 100644 --- a/audio-manager/inc/vc_audio_manager.h +++ b/audio-manager/inc/vc_audio_manager.h @@ -30,6 +30,7 @@ int vcd_dependency_initialize(sound_stream_info_h stream_info_h, dependency_audi int vcd_dependency_deinitialize(void); int vcd_dependency_set_audio_info(sound_stream_info_h stream_info_h, const char* audio_source_type, vce_audio_type_e type, int rate, int channel); int vcd_dependency_get_audio_source_type(char** audio_source_type); +int vcd_dependency_set_streaming_mode(vc_audio_streaming_mode_e mode); int vcd_dependency_start_recording(void); int vcd_dependency_stop_recording(void); diff --git a/audio-manager/src/vc_audio_manager.cpp b/audio-manager/src/vc_audio_manager.cpp index e1253ae..c595f01 100644 --- a/audio-manager/src/vc_audio_manager.cpp +++ b/audio-manager/src/vc_audio_manager.cpp @@ -25,6 +25,7 @@ #include #include "vce.h" +#include "voice_control_manager.h" #include "vc_audio_manager_dlog.h" #include "vc_audio_manager.h" @@ -38,6 +39,7 @@ static dependency_audio_manager_feed_audio_data g_feed_audio_data = nullptr; static audio_in_h g_audio_h = nullptr; static vce_audio_type_e g_audio_type = VCE_AUDIO_TYPE_PCM_S16_LE; +static vc_audio_streaming_mode_e g_streaming_mode = VC_AUDIO_STREAMING_MODE_VC_SERVICE; static int g_audio_rate = 0; static int g_audio_channel = 0; @@ -133,6 +135,7 @@ int vcd_dependency_initialize(sound_stream_info_h stream_info_h, dependency_audi { int ret = 0; + g_streaming_mode = VC_AUDIO_STREAMING_MODE_VC_SERVICE; g_audio_type = VCE_AUDIO_TYPE_PCM_S16_LE; g_audio_rate = 16000; g_audio_channel = 1; @@ -261,6 +264,18 @@ int vcd_dependency_get_audio_source_type(char** audio_source_type) return VCE_ERROR_NONE; } +int vcd_dependency_set_streaming_mode(vc_audio_streaming_mode_e mode) +{ + if (nullptr == g_audio_h) { + VCAM_LOGE("[ERROR] g_audio_h is not created"); + return VCE_ERROR_INVALID_STATE; + } + + g_streaming_mode = mode; + + return VCE_ERROR_NONE; +} + int vcd_dependency_start_recording(void) { VCAM_LOGI(""); diff --git a/server/dependency_audio_manager.cpp b/server/dependency_audio_manager.cpp index 762a813..8e2f6b0 100644 --- a/server/dependency_audio_manager.cpp +++ b/server/dependency_audio_manager.cpp @@ -67,6 +67,8 @@ int dependency_audio_manager_initialize(sound_stream_info_h stream_info_h, depen (vcd_dependency_set_audio_info)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_SET_AUDIO_INFO); g_interface.get_audio_source_type = (vcd_dependency_get_audio_source_type)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_GET_AUDIO_SOURCE_TYPE); + g_interface.set_streaming_mode = + (vcd_dependency_set_streaming_mode)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_SET_STREAMING_MODE); g_interface.start_recording = (vcd_dependency_start_recording)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_START_RECORDING); g_interface.stop_recording = @@ -188,6 +190,35 @@ int dependency_audio_manager_get_audio_source_type(char** audio_source_type) return ret; } +int dependency_audio_manager_set_streaming_mode(vc_audio_streaming_mode_e mode) +{ + SLOG(LOG_DEBUG, LOG_TAG, "@@@ Set streaming mode"); + int ret = 0; + if (NULL != g_lib_handle) { + vcd_dependency_set_streaming_mode func = g_interface.set_streaming_mode; + + if (NULL == func) { + SLOG(LOG_ERROR, LOG_TAG, "[ERROR] symbol lookup failed : %s", VCD_DEPENDENCY_FUNC_SET_STREAMING_MODE); + } else { + try { + ret = func(mode); + } catch (const std::exception& e) { + SLOG(LOG_ERROR, LOG_TAG, "[ERROR] %s of dependency module threw exception : %s", + VCD_DEPENDENCY_FUNC_SET_STREAMING_MODE, e.what()); + } + + if (0 != ret) { + SLOG(LOG_ERROR, LOG_TAG, "[ERROR] Fail to set streaming mode, ret(%d)", ret); + } + } + } else { + SLOG(LOG_ERROR, LOG_TAG, "[ERROR] g_lib_handle is not valid"); + } + + SLOG(LOG_DEBUG, LOG_TAG, "@@@"); + return ret; +} + int dependency_audio_manager_start_recording(void) { SLOG(LOG_DEBUG, LOG_TAG, "@@@ Start recording"); diff --git a/server/dependency_audio_manager.h b/server/dependency_audio_manager.h index 5f5ce7b..0eb5ebd 100644 --- a/server/dependency_audio_manager.h +++ b/server/dependency_audio_manager.h @@ -21,6 +21,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -45,6 +46,8 @@ typedef int (*vcd_dependency_deinitialize)(void); typedef int (*vcd_dependency_set_audio_info)(sound_stream_info_h stream_info_h, const char* audio_source_type, vce_audio_type_e type, int rate, int channel); #define VCD_DEPENDENCY_FUNC_GET_AUDIO_SOURCE_TYPE "vcd_dependency_get_audio_source_type" typedef int (*vcd_dependency_get_audio_source_type)(char** audio_source_type); +#define VCD_DEPENDENCY_FUNC_SET_STREAMING_MODE "vcd_dependency_set_streaming_mode" +typedef int (*vcd_dependency_set_streaming_mode)(vc_audio_streaming_mode_e mode); #define VCD_DEPENDENCY_FUNC_START_RECORDING "vcd_dependency_start_recording" typedef int (*vcd_dependency_start_recording)(void); #define VCD_DEPENDENCY_FUNC_STOP_RECORDING "vcd_dependency_stop_recording" @@ -56,6 +59,7 @@ typedef struct { vcd_dependency_deinitialize deinitialize; vcd_dependency_set_audio_info set_audio_info; vcd_dependency_get_audio_source_type get_audio_source_type; + vcd_dependency_set_streaming_mode set_streaming_mode; vcd_dependency_start_recording start_recording; vcd_dependency_stop_recording stop_recording; } vcd_dependency_module_interface; @@ -65,6 +69,7 @@ int dependency_audio_manager_initialize(sound_stream_info_h stream_info_h, depen int dependency_audio_manager_deinitialize(void); int dependency_audio_manager_set_audio_info(sound_stream_info_h stream_info_h, const char* audio_source_type, vce_audio_type_e type, int rate, int channel); int dependency_audio_manager_get_audio_source_type(char** audio_source_type); +int dependency_audio_manager_set_streaming_mode(vc_audio_streaming_mode_e mode); int dependency_audio_manager_start_recording(void); int dependency_audio_manager_stop_recording(void); diff --git a/server/vcd_dbus_server.c b/server/vcd_dbus_server.c index d7314de..d30dd2b 100755 --- a/server/vcd_dbus_server.c +++ b/server/vcd_dbus_server.c @@ -114,7 +114,7 @@ int vcd_dbus_server_mgr_initialize(DBusConnection* conn, DBusMessage* msg) ret = VCD_ERROR_OPERATION_FAILED; } else { vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)streaming_mode); - ret = vcd_server_mgr_initialize(pid); + ret = vcd_server_mgr_initialize(pid, streaming_mode); service_state = vcd_server_get_service_state(); foreground = vcd_server_get_foreground(); daemon_pid = getpid(); diff --git a/server/vcd_recorder.c b/server/vcd_recorder.c index 74875e8..fc06fec 100644 --- a/server/vcd_recorder.c +++ b/server/vcd_recorder.c @@ -368,6 +368,16 @@ int vcd_recorder_get(char** audio_type) return VCD_ERROR_NONE; } +int vcd_recorder_set_audio_streaming_mode(vcd_audio_streaming_mode_e mode) +{ + if (0 != dependency_audio_manager_set_streaming_mode((vc_audio_streaming_mode_e)mode)) { + SLOG(LOG_WARN, TAG_VCD, "[Recorder] Fail to set audio mode to dependency module(%d)", mode); + return VCD_ERROR_OPERATION_FAILED; + } + + return VCD_ERROR_NONE; +} + Eina_Bool __read_test_func(void *data) { if (VCD_RECORDER_STATE_RECORDING != g_recorder_state) { diff --git a/server/vcd_recorder.h b/server/vcd_recorder.h index 8e1b015..f075cae 100644 --- a/server/vcd_recorder.h +++ b/server/vcd_recorder.h @@ -43,6 +43,8 @@ int vcd_recorder_set(const char* audio_type, vce_audio_type_e type, int rate, in int vcd_recorder_get(char** audio_type); +int vcd_recorder_set_audio_streaming_mode(vcd_audio_streaming_mode_e mode); + int vcd_recorder_start_streaming(); int vcd_recorder_send_streaming(const void* buffer, const unsigned int length); diff --git a/server/vcd_server.c b/server/vcd_server.c index 8c290cf..a89732f 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -1659,7 +1659,7 @@ static Eina_Bool __vcd_send_service_state(void *data) /* * API for manager */ -int vcd_server_mgr_initialize(int pid) +int vcd_server_mgr_initialize(int pid, vcd_audio_streaming_mode_e mode) { /* check if pid is valid */ if (false == vcd_client_manager_is_valid(pid)) { @@ -1678,6 +1678,8 @@ int vcd_server_mgr_initialize(int pid) if (0 != vcdc_send_manager_pid(pid)) SLOG(LOG_WARN, TAG_VCD, "[Server WARNING] Fail to send manager pid"); + vcd_recorder_set_audio_streaming_mode(mode); + ecore_timer_add(0.05, __vcd_send_service_state, NULL); SLOG(LOG_ERROR, TAG_VCD, "[Server Success] Manager initialize : pid(%d)", pid); diff --git a/server/vcd_server.h b/server/vcd_server.h index e675b0b..7597b3d 100644 --- a/server/vcd_server.h +++ b/server/vcd_server.h @@ -45,7 +45,7 @@ int vcd_server_get_foreground(); /* * For manager */ -int vcd_server_mgr_initialize(int pid); +int vcd_server_mgr_initialize(int pid, vcd_audio_streaming_mode_e mode); int vcd_server_mgr_finalize(int pid); -- 2.34.1