return 0;
}
-static int __callmgr_audio_get_sound_device(sound_device_type_e device_type, sound_device_h *sound_device)
+static int __callmgr_audio_get_sound_device(sound_device_type_e device_type, sound_device_list_h device_list, sound_device_h *sound_device)
{
- sound_device_list_h device_list = NULL;
+// sound_device_list_h device_list = NULL;
sound_device_h device = NULL;
sound_device_type_e o_device_type;
int ret = -1;
+/* move to _callmgr_audio_set_audio_route() for free device list after using device_list info*/
+#if 0
ret = sound_manager_get_device_list(SOUND_DEVICE_ALL_MASK, &device_list);
if (ret != SOUND_MANAGER_ERROR_NONE) {
err("sound_manager_get_device_list() failed. [%d][%s]", ret, get_error_message(ret));
return -1;
}
+#else
+ if (device_list == NULL) {
+ err("device_list is NULL!");
+ return -1;
+ }
+#endif
while (1) {
ret = sound_manager_get_next_device(device_list, &device);
}
} else {
err("sound_manager_get_next_device() failed with err[%d]", ret);
- sound_manager_free_device_list(device_list);
+ //sound_manager_free_device_list(device_list);
return -1;
}
}
int _callmgr_audio_set_audio_route(callmgr_audio_handle_h audio_handle, callmgr_audio_route_e route)
{
int ret = -1;
+ sound_device_list_h device_list = NULL;
sound_device_h sound_device = NULL;
sound_device_type_e device_type;
if ((audio_handle->current_route == SOUND_DEVICE_BUILTIN_SPEAKER)
|| (audio_handle->current_route == SOUND_DEVICE_BUILTIN_RECEIVER)) {
dbg("Remove Built-in mic device");
- __callmgr_audio_get_sound_device(SOUND_DEVICE_BUILTIN_MIC, &sound_device);
+
+ ret = sound_manager_get_device_list(SOUND_DEVICE_ALL_MASK, &device_list);
+ if (ret != SOUND_MANAGER_ERROR_NONE) {
+ err("sound_manager_get_device_list() failed. [%d][%s]", ret, get_error_message(ret));
+ return -1;
+ }
+
+ __callmgr_audio_get_sound_device(SOUND_DEVICE_BUILTIN_MIC, device_list, &sound_device);
ret = sound_manager_remove_device_for_stream_routing(audio_handle->sound_stream_handle, sound_device);
if (ret != SOUND_MANAGER_ERROR_NONE)
err("sound_manager_remove_device_for_stream_routing() failed:[%d]", ret);
+
+ sound_manager_free_device_list(device_list);
+ device_list = NULL;
+
}
dbg("Remove current device [%s]", __callmgr_audio_convert_device_type_to_string(audio_handle->current_route));
- __callmgr_audio_get_sound_device(audio_handle->current_route, &sound_device);
+
+ ret = sound_manager_get_device_list(SOUND_DEVICE_ALL_MASK, &device_list);
+ if (ret != SOUND_MANAGER_ERROR_NONE) {
+ err("sound_manager_get_device_list() failed. [%d][%s]", ret, get_error_message(ret));
+ return -1;
+ }
+ __callmgr_audio_get_sound_device(audio_handle->current_route, device_list, &sound_device);
ret = sound_manager_remove_device_for_stream_routing(audio_handle->sound_stream_handle, sound_device);
if (ret != SOUND_MANAGER_ERROR_NONE) {
err("sound_manager_remove_device_for_stream_routing() failed:[%d]", ret);
}
audio_handle->current_route = -1;
+
+ sound_manager_free_device_list(device_list);
+ device_list = NULL;
+
}
dbg("Add new device [%s]", __callmgr_audio_convert_device_type_to_string(device_type));
- __callmgr_audio_get_sound_device(device_type, &sound_device);
+
+ ret = sound_manager_get_device_list(SOUND_DEVICE_ALL_MASK, &device_list);
+ if (ret != SOUND_MANAGER_ERROR_NONE) {
+ err("sound_manager_get_device_list() failed. [%d][%s]", ret, get_error_message(ret));
+ return -1;
+ }
+
+ __callmgr_audio_get_sound_device(device_type, device_list, &sound_device);
__callmgr_audio_set_audio_control_state(audio_handle, sound_device);
ret = sound_manager_add_device_for_stream_routing(audio_handle->sound_stream_handle, sound_device);
if (ret != SOUND_MANAGER_ERROR_NONE) {
err("sound_manager_add_device_for_stream_routing() failed:[%d]", ret);
+ sound_manager_free_device_list(device_list);
return -1;
}
if ((route == CALLMGR_AUDIO_ROUTE_SPEAKER_E) || (route == CALLMGR_AUDIO_ROUTE_RECEIVER_E)) {
dbg("Add Built-in mic device");
- __callmgr_audio_get_sound_device(SOUND_DEVICE_BUILTIN_MIC, &sound_device);
+ __callmgr_audio_get_sound_device(SOUND_DEVICE_BUILTIN_MIC, device_list, &sound_device);
ret = sound_manager_add_device_for_stream_routing(audio_handle->sound_stream_handle, sound_device);
if (ret != SOUND_MANAGER_ERROR_NONE) {
err("sound_manager_add_device_for_stream_routing() failed:[%d]", ret);
+ sound_manager_free_device_list(device_list);
return -1;
}
}
+ sound_manager_free_device_list(device_list);
+
ret = sound_manager_apply_stream_routing(audio_handle->sound_stream_handle);
if (ret != SOUND_MANAGER_ERROR_NONE) {
err("sound_manager_apply_stream_routing() failed:[%d]", ret);