2 * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
26 #include "dependency_audio_manager.h"
31 #define LOG_TAG "dependency_am"
34 static void *g_lib_handle = NULL;
35 static vcd_dependency_module_interface g_interface = { NULL, };
38 int dependency_audio_manager_initialize(sound_stream_info_h stream_info_h, dependency_audio_manager_feed_audio_data callback)
40 SLOG(LOG_DEBUG, LOG_TAG, "@@@ initialize");
42 const int FILEPATH_LEN = 512;
43 char filepath[FILEPATH_LEN] = {'\0', };
44 const char *module_directory_path = VCD_DEPENDENCY_MODULE_DIRECTORY_PATH;
45 char *module_library_name = vconf_get_str(VCD_DEPENDENCY_MODULE_NAME);
46 if (module_library_name) {
47 snprintf(filepath, FILEPATH_LEN - 1, "%s/%s", module_directory_path, module_library_name);
48 free(module_library_name);
50 snprintf(filepath, FILEPATH_LEN - 1, "%s/%s", module_directory_path, VCD_DEPENDENCY_DEFAULT_FILENAME);
52 filepath[FILEPATH_LEN - 1] = '\0';
56 g_lib_handle = dlopen(filepath, RTLD_LAZY);
57 if (NULL != (error = dlerror())) {
58 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] Fail to dlopen(%s), error(%s)", filepath, error);
59 return -1; //MAS_ERROR_OPERATION_FAILED;
62 g_interface.initialize =
63 (vcd_dependency_initialize)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_INITIALIZE);
64 g_interface.deinitialize =
65 (vcd_dependency_deinitialize)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_DEINITIALIZE);
66 g_interface.set_audio_info =
67 (vcd_dependency_set_audio_info)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_SET_AUDIO_INFO);
68 g_interface.get_audio_source_type =
69 (vcd_dependency_get_audio_source_type)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_GET_AUDIO_SOURCE_TYPE);
70 g_interface.set_streaming_mode =
71 (vcd_dependency_set_streaming_mode)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_SET_STREAMING_MODE);
72 g_interface.start_recording =
73 (vcd_dependency_start_recording)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_START_RECORDING);
74 g_interface.stop_recording =
75 (vcd_dependency_stop_recording)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_STOP_RECORDING);
78 if (NULL != g_lib_handle) {
79 vcd_dependency_initialize func = g_interface.initialize;
82 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] symbol lookup failed : %s", VCD_DEPENDENCY_FUNC_INITIALIZE);
85 ret = func(stream_info_h, callback);
86 } catch (const std::exception& e) {
87 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] %s of dependency module threw exception : %s",
88 VCD_DEPENDENCY_FUNC_INITIALIZE, e.what());
92 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] Fail to initialize, ret(%d)", ret);
96 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] g_lib_handle is not valid");
99 SLOG(LOG_DEBUG, LOG_TAG, "@@@");
103 int dependency_audio_manager_deinitialize(void)
105 SLOG(LOG_DEBUG, LOG_TAG, "@@@ Deinitialize");
107 if (NULL != g_lib_handle) {
108 vcd_dependency_deinitialize func = g_interface.deinitialize;
111 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] symbol lookup failed : %s", VCD_DEPENDENCY_FUNC_DEINITIALIZE);
115 } catch (const std::exception& e) {
116 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] %s of dependency module threw exception : %s",
117 VCD_DEPENDENCY_FUNC_DEINITIALIZE, e.what());
121 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] Fail to initialize, ret(%d)", ret);
125 dlclose(g_lib_handle);
128 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] g_lib_handle is not valid");
131 SLOG(LOG_DEBUG, LOG_TAG, "@@@");
135 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)
137 SLOG(LOG_DEBUG, LOG_TAG, "@@@ Set audio information");
139 if (NULL != g_lib_handle) {
140 vcd_dependency_set_audio_info func = g_interface.set_audio_info;
143 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] symbol lookup failed : %s", VCD_DEPENDENCY_FUNC_SET_AUDIO_INFO);
146 ret = func(stream_info_h, audio_source_type, type, rate, channel);
147 } catch (const std::exception& e) {
148 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] %s of dependency module threw exception : %s",
149 VCD_DEPENDENCY_FUNC_SET_AUDIO_INFO, e.what());
153 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] Fail to initialize, ret(%d)", ret);
157 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] g_lib_handle is not valid");
160 SLOG(LOG_DEBUG, LOG_TAG, "@@@");
164 int dependency_audio_manager_get_audio_source_type(char** audio_source_type)
166 SLOG(LOG_DEBUG, LOG_TAG, "@@@ Get audio source type");
168 if (NULL != g_lib_handle) {
169 vcd_dependency_get_audio_source_type func = g_interface.get_audio_source_type;
172 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] symbol lookup failed : %s", VCD_DEPENDENCY_FUNC_GET_AUDIO_SOURCE_TYPE);
175 ret = func(audio_source_type);
176 } catch (const std::exception& e) {
177 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] %s of dependency module threw exception : %s",
178 VCD_DEPENDENCY_FUNC_GET_AUDIO_SOURCE_TYPE, e.what());
182 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] Fail to initialize, ret(%d)", ret);
186 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] g_lib_handle is not valid");
189 SLOG(LOG_DEBUG, LOG_TAG, "@@@");
193 int dependency_audio_manager_set_streaming_mode(vc_audio_streaming_mode_e mode)
195 SLOG(LOG_DEBUG, LOG_TAG, "@@@ Set streaming mode");
197 if (NULL != g_lib_handle) {
198 vcd_dependency_set_streaming_mode func = g_interface.set_streaming_mode;
201 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] symbol lookup failed : %s", VCD_DEPENDENCY_FUNC_SET_STREAMING_MODE);
205 } catch (const std::exception& e) {
206 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] %s of dependency module threw exception : %s",
207 VCD_DEPENDENCY_FUNC_SET_STREAMING_MODE, e.what());
211 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] Fail to set streaming mode, ret(%d)", ret);
215 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] g_lib_handle is not valid");
218 SLOG(LOG_DEBUG, LOG_TAG, "@@@");
222 int dependency_audio_manager_start_recording(void)
224 SLOG(LOG_DEBUG, LOG_TAG, "@@@ Start recording");
226 if (NULL != g_lib_handle) {
227 vcd_dependency_start_recording func = g_interface.start_recording;
230 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] symbol lookup failed : %s", VCD_DEPENDENCY_FUNC_START_RECORDING);
234 } catch (const std::exception& e) {
235 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] %s of dependency module threw exception : %s",
236 VCD_DEPENDENCY_FUNC_START_RECORDING, e.what());
240 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] Fail to initialize, ret(%d)", ret);
244 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] g_lib_handle is not valid");
247 SLOG(LOG_DEBUG, LOG_TAG, "@@@");
252 int dependency_audio_manager_stop_recording(void)
254 SLOG(LOG_DEBUG, LOG_TAG, "@@@ Stop recording");
256 if (NULL != g_lib_handle) {
257 vcd_dependency_stop_recording func = g_interface.stop_recording;
260 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] symbol lookup failed : %s", VCD_DEPENDENCY_FUNC_STOP_RECORDING);
264 } catch (const std::exception& e) {
265 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] %s of dependency module threw exception : %s",
266 VCD_DEPENDENCY_FUNC_STOP_RECORDING, e.what());
270 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] Fail to initialize, ret(%d)", ret);
274 SLOG(LOG_ERROR, LOG_TAG, "[ERROR] g_lib_handle is not valid");
277 SLOG(LOG_DEBUG, LOG_TAG, "@@@");