From: Mok Jeongho Date: Tue, 3 Nov 2015 05:32:26 +0000 (+0900) Subject: Get allocated device list and add deallocate interface X-Git-Tag: submit/tizen/20151209.054020^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F45%2F52245%2F9;p=platform%2Fcore%2Fapi%2Fsound-manager.git Get allocated device list and add deallocate interface Previously when we get device list, it is maintained on global variable. We fixed that not to use global variable then allocate memory for device list. And now it needs deallocate interface also, so we added it. [Version] Release 0.3.34 [profile] Common [Issue Type] code clean-up Change-Id: Ica8f0df6a76e02e613072026e2d54aa034d49d6c --- diff --git a/include/sound_manager.h b/include/sound_manager.h index 0dfc347..7cc7a1b 100644 --- a/include/sound_manager.h +++ b/include/sound_manager.h @@ -1047,7 +1047,8 @@ int sound_manager_unset_session_interrupted_cb(void); * @param[in] device_mask The mask value * @param[out] device_list The list of connected devices * - * @remarks Use sound_manager_get_next_device() to get the first node of the list. + * @remarks @a device_list should be freed using sound_manager_free_device_list() since 3.0.\n + * Use sound_manager_get_next_device() to get the first node of the list. * * @return @c 0 on success, * otherwise a negative error value @@ -1062,9 +1063,34 @@ int sound_manager_unset_session_interrupted_cb(void); * @see sound_manager_get_device_id() * @see sound_manager_get_device_name() * @see sound_manager_get_device_state() + * @see sound_manager_free_device_list() */ int sound_manager_get_current_device_list(sound_device_mask_e device_mask, sound_device_list_h *device_list); +/** + * @brief Frees device list and each item of list. + * @since_tizen 3.0 + * @param[in] device_list The device list got with sound_manager_get_current_device_list. + * + * @remarks This API will deallocate not only device list itself but also each item. + * + * @return @c 0 on success, + * otherwise a negative error value + * @retval #SOUND_MANAGER_ERROR_NONE Success + * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter + * + * + * @see sound_manager_get_current_device_list() + * @see sound_manager_get_next_device() + * @see sound_manager_get_prev_device() + * @see sound_manager_get_device_type() + * @see sound_manager_get_device_io_direction() + * @see sound_manager_get_device_id() + * @see sound_manager_get_device_name() + * @see sound_manager_get_device_state() + */ +int sound_manager_free_device_list(sound_device_list_h device_list); + /** * @brief Gets the next item of the device list. * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif @@ -1082,6 +1108,7 @@ int sound_manager_get_current_device_list(sound_device_mask_e device_mask, sound * @see sound_manager_get_device_id() * @see sound_manager_get_device_name() * @see sound_manager_get_device_state() + * @see sound_manager_free_device_list() */ int sound_manager_get_next_device(sound_device_list_h device_list, sound_device_h *device); @@ -1102,6 +1129,7 @@ int sound_manager_get_next_device(sound_device_list_h device_list, sound_device_ * @see sound_manager_get_device_id() * @see sound_manager_get_device_name() * @see sound_manager_get_device_state() + * @see sound_manager_free_device_list() */ int sound_manager_get_prev_device(sound_device_list_h device_list, sound_device_h *device); @@ -1121,6 +1149,7 @@ int sound_manager_get_prev_device(sound_device_list_h device_list, sound_device_ * @see sound_manager_get_device_id() * @see sound_manager_get_device_name() * @see sound_manager_get_device_state() + * @see sound_manager_free_device_list() */ int sound_manager_get_device_type(sound_device_h device, sound_device_type_e *type); @@ -1140,6 +1169,7 @@ int sound_manager_get_device_type(sound_device_h device, sound_device_type_e *ty * @see sound_manager_get_device_id() * @see sound_manager_get_device_name() * @see sound_manager_get_device_state() + * @see sound_manager_free_device_list() */ int sound_manager_get_device_io_direction(sound_device_h device, sound_device_io_direction_e *io_direction); @@ -1159,6 +1189,7 @@ int sound_manager_get_device_io_direction(sound_device_h device, sound_device_io * @see sound_manager_get_device_io_direction() * @see sound_manager_get_device_name() * @see sound_manager_get_device_state() + * @see sound_manager_free_device_list() */ int sound_manager_get_device_id(sound_device_h device, int *id); @@ -1179,6 +1210,7 @@ int sound_manager_get_device_id(sound_device_h device, int *id); * @see sound_manager_get_device_io_direction() * @see sound_manager_get_device_id() * @see sound_manager_get_device_state() + * @see sound_manager_free_device_list() */ int sound_manager_get_device_name(sound_device_h device, char **name); @@ -1198,6 +1230,7 @@ int sound_manager_get_device_name(sound_device_h device, char **name); * @see sound_manager_get_device_io_direction() * @see sound_manager_get_device_id() * @see sound_manager_get_device_name() + * @see sound_manager_free_device_list() */ int sound_manager_get_device_state(sound_device_h device, sound_device_state_e *state); diff --git a/packaging/capi-media-sound-manager.spec b/packaging/capi-media-sound-manager.spec index 56ea073..0eaa721 100755 --- a/packaging/capi-media-sound-manager.spec +++ b/packaging/capi-media-sound-manager.spec @@ -1,6 +1,6 @@ Name: capi-media-sound-manager Summary: Sound Manager library -Version: 0.3.33 +Version: 0.3.34 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/sound_manager.c b/src/sound_manager.c index 368db9f..2e808dc 100644 --- a/src/sound_manager.c +++ b/src/sound_manager.c @@ -926,6 +926,14 @@ int sound_manager_get_current_device_list(sound_device_mask_e device_mask, sound return _convert_sound_manager_error_code(__func__, ret); } +int sound_manager_free_device_list(sound_device_list_h device_list) +{ + int ret = MM_ERROR_NONE; + ret = mm_sound_free_device_list(device_list); + + return _convert_sound_manager_error_code(__func__, ret); +} + int sound_manager_get_next_device(sound_device_list_h device_list, sound_device_h *device) { int ret = MM_ERROR_NONE; diff --git a/src/sound_manager_private.c b/src/sound_manager_private.c index 02e66a2..06e3fb9 100644 --- a/src/sound_manager_private.c +++ b/src/sound_manager_private.c @@ -1273,6 +1273,7 @@ int _set_session_mode(_session_mode_e mode) } else goto ERROR_CASE; } + mm_sound_free_device_list(device_list); break; } g_cached_session_mode = mode; diff --git a/test/sound_manager_test.c b/test/sound_manager_test.c index 0e6ea7e..3af3e53 100644 --- a/test/sound_manager_test.c +++ b/test/sound_manager_test.c @@ -50,6 +50,7 @@ enum { CURRENT_STATUS_SET_DEVICE_MASK, CURRENT_STATUS_GET_DEVICE_MASK, CURRENT_STATUS_GET_DEVICE_LIST, + CURRENT_STATUS_FREE_DEVICE_LIST, CURRENT_STATUS_GET_DEVICE_NEXT, CURRENT_STATUS_GET_DEVICE_PREV, CURRENT_STATUS_SET_DEVICE_CONNECTED_CB, @@ -176,6 +177,8 @@ void _interpret_main_menu(char *cmd) g_menu_state = CURRENT_STATUS_GET_DEVICE_MASK; else if (strncmp(cmd, "gl", 3) == 0) g_menu_state = CURRENT_STATUS_GET_DEVICE_LIST; + else if (strncmp(cmd, "fl", 3) == 0) + g_menu_state = CURRENT_STATUS_FREE_DEVICE_LIST; else if (strncmp(cmd, "gn", 3) == 0) g_menu_state = CURRENT_STATUS_GET_DEVICE_NEXT; else if (strncmp(cmd, "gp", 3) == 0) @@ -274,7 +277,8 @@ void display_sub_basic() g_print("-----------------------------------------------------------------------------------------\n"); g_print("sk. Set Devices Mask(default ALL)\t"); g_print("gk. Get Devices Mask\n"); - g_print("gl. Get Devices List\n"); + g_print("gl. Get Devices List\t"); + g_print("fl. Free Devices List\n"); g_print("gn. Get Next Device\t\t"); g_print("gp. Get Prev Device\n"); g_print("sd. Set Device Connenected CB\t\t"); @@ -362,6 +366,8 @@ static void displaymenu() g_print("*** press enter to get device mask\n"); else if (g_menu_state == CURRENT_STATUS_GET_DEVICE_LIST) g_print("*** press enter to get device list\n"); + else if (g_menu_state == CURRENT_STATUS_FREE_DEVICE_LIST) + g_print("*** press enter to free device list\n"); else if (g_menu_state == CURRENT_STATUS_GET_DEVICE_NEXT) g_print("*** press enter to get next device from the list\n"); else if (g_menu_state == CURRENT_STATUS_GET_DEVICE_PREV) @@ -869,6 +875,18 @@ static void interpret(char *cmd) reset_menu_state(); break; } + case CURRENT_STATUS_FREE_DEVICE_LIST: { + int ret = SOUND_MANAGER_ERROR_NONE; + if (!(ret = sound_manager_free_device_list(g_device_list))) { + g_print("success to free device list\n"); + g_device_list = NULL; + g_print("device list freed\n"); + } else { + g_print("fail to free device list, ret[0x%x]\n", ret); + } + reset_menu_state(); + break; + } case CURRENT_STATUS_GET_DEVICE_NEXT: { sound_device_h device; sound_device_type_e type;