From 3a37f051fd2ed7613f462714db7439def574d73c Mon Sep 17 00:00:00 2001 From: Eunhae Choi Date: Wed, 15 Nov 2017 16:34:16 +0900 Subject: [PATCH] [0.6.79] make keep the ext storage id the external storage can be multiple. - one sdcard and several usb. Change-Id: Ib6731e336d9a2d0f504858dfc7eaba020acf044c --- packaging/libmm-player.spec | 2 +- src/include/mm_player.h | 2 +- src/include/mm_player_priv.h | 3 ++- src/mm_player.c | 4 ++-- src/mm_player_common_priv.c | 2 +- src/mm_player_priv.c | 14 ++++++++------ src/mm_player_utils.c | 13 ++++++++----- 7 files changed, 23 insertions(+), 17 deletions(-) diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 2e54f17..0049658 100644 --- a/packaging/libmm-player.spec +++ b/packaging/libmm-player.spec @@ -1,6 +1,6 @@ Name: libmm-player Summary: Multimedia Framework Player Library -Version: 0.6.78 +Version: 0.6.79 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_player.h b/src/include/mm_player.h index a2f09c3..cd00a91 100644 --- a/src/include/mm_player.h +++ b/src/include/mm_player.h @@ -2129,7 +2129,7 @@ int mm_player_set_sound_stream_info(MMHandleType player, char *stream_type, int /** * This function is to manage the playback according to the external storage state */ -int mm_player_manage_external_storage_state(MMHandleType player, int state); +int mm_player_manage_external_storage_state(MMHandleType player, int id, int state); /** * These functions are to set/get the max variant of HAS diff --git a/src/include/mm_player_priv.h b/src/include/mm_player_priv.h index 81899d0..e45e05f 100644 --- a/src/include/mm_player_priv.h +++ b/src/include/mm_player_priv.h @@ -426,6 +426,7 @@ typedef struct { storage_type_e type; storage_state_e state; int id; + char path[MM_MAX_URL_LEN]; } MMPlayerStorageInfo; typedef struct { @@ -944,7 +945,7 @@ void _mm_player_video_stream_internal_buffer_unref(void *buffer); int _mmplayer_set_pcm_spec(MMHandleType hplayer, int samplerate, int channel); int _mmplayer_get_timeout(MMHandleType hplayer, int *timeout); int _mmplayer_get_num_of_video_out_buffers(MMHandleType hplayer, int *num, int *extra_num); -int _mmplayer_manage_external_storage_state(MMHandleType hplayer, int state); +int _mmplayer_manage_external_storage_state(MMHandleType hplayer, int id, int state); int __mmplayer_gst_set_state(mm_player_t* player, GstElement * pipeline, GstState state, gboolean async, gint timeout); int __mmplayer_set_state(mm_player_t* player, int state); int __mmplayer_check_state(mm_player_t* player, enum PlayerCommandState command); diff --git a/src/mm_player.c b/src/mm_player.c index 50e5614..53cd41a 100644 --- a/src/mm_player.c +++ b/src/mm_player.c @@ -1242,7 +1242,7 @@ int mm_player_set_sound_stream_info(MMHandleType player, char *stream_type, int return result; } -int mm_player_manage_external_storage_state(MMHandleType player, int state) +int mm_player_manage_external_storage_state(MMHandleType player, int id, int state) { int result = MM_ERROR_NONE; @@ -1250,7 +1250,7 @@ int mm_player_manage_external_storage_state(MMHandleType player, int state) MMPLAYER_CMD_LOCK(player); - result = _mmplayer_manage_external_storage_state(player, state); + result = _mmplayer_manage_external_storage_state(player, id, state); MMPLAYER_CMD_UNLOCK(player); diff --git a/src/mm_player_common_priv.c b/src/mm_player_common_priv.c index 4ee3de0..942ac89 100644 --- a/src/mm_player_common_priv.c +++ b/src/mm_player_common_priv.c @@ -727,7 +727,7 @@ __gst_handle_resource_error(mm_player_t* player, int code, GstMessage * message) /* check storage state */ storage_get_state(player->storage_info[path_type].id, &storage_state); player->storage_info[path_type].state = storage_state; - LOGW("path %d, storage state %d", path_type, storage_state); + LOGW("path %d, storage state %d:%d", path_type, player->storage_info[path_type].id, storage_state); } } /* fall through */ case GST_RESOURCE_ERROR_WRITE: diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index e7683e7..828638b 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -13988,8 +13988,9 @@ __mmplayer_initialize_storage_info(mm_player_t* player, MMPlayerPathType path_ty if (path_type == MMPLAYER_PATH_MAX || path_type == i) { player->storage_info[i].type = STORAGE_TYPE_INTERNAL; - player->storage_info[i].state = STORAGE_STATE_MOUNTED; + player->storage_info[i].state = STORAGE_STATE_UNMOUNTABLE; player->storage_info[i].id = -1; + memset(player->storage_info[i].path, 0x00, MM_MAX_URL_LEN); if (path_type != MMPLAYER_PATH_MAX) break; @@ -13999,7 +14000,7 @@ __mmplayer_initialize_storage_info(mm_player_t* player, MMPlayerPathType path_ty MMPLAYER_FLEAVE(); } -int _mmplayer_manage_external_storage_state(MMHandleType hplayer, int state) +int _mmplayer_manage_external_storage_state(MMHandleType hplayer, int id, int state) { int ret = MM_ERROR_NONE; mm_player_t* player = (mm_player_t*)hplayer; @@ -14008,14 +14009,15 @@ int _mmplayer_manage_external_storage_state(MMHandleType hplayer, int state) MMPLAYER_FENTER(); MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); - LOGD("storage state : %d", state); + LOGW("state changed storage %d:%d", id, state); if (state != STORAGE_STATE_UNMOUNTABLE && state != STORAGE_STATE_REMOVED) return MM_ERROR_NONE; - if ((player->storage_info[MMPLAYER_PATH_VOD].type == STORAGE_TYPE_EXTERNAL) || - (player->storage_info[MMPLAYER_PATH_TEXT].type == STORAGE_TYPE_EXTERNAL)) { - LOGW("external storage is removed."); + /* FIXME: text path should be handled seperately. */ + if (((player->storage_info[MMPLAYER_PATH_VOD].type == STORAGE_TYPE_EXTERNAL) && (player->storage_info[MMPLAYER_PATH_VOD].id == id)) || + ((player->storage_info[MMPLAYER_PATH_TEXT].type == STORAGE_TYPE_EXTERNAL) && (player->storage_info[MMPLAYER_PATH_TEXT].id == id))) { + LOGW("external storage is removed"); if (player->msg_posted == FALSE) { memset(&msg_param, 0, sizeof(MMMessageParamType)); diff --git a/src/mm_player_utils.c b/src/mm_player_utils.c index eae43a3..efa9a10 100644 --- a/src/mm_player_utils.c +++ b/src/mm_player_utils.c @@ -34,7 +34,7 @@ #include #include "mm_player_utils.h" -#define MEDIA_PATH_EXTERNAL tzplatform_getenv(TZ_SYS_STORAGE) /* external storage */ +#define MEDIA_PATH_EXTERNAL tzplatform_getenv(TZ_SYS_STORAGE) /* external storage, sd card, usb */ int util_exist_file_path(const char *file_path) { @@ -317,7 +317,7 @@ static int _util_storage_supported_cb(int storage_id, storage_type_e type, MMPLAYER_RETURN_VAL_IF_FAIL(storage_info, FALSE); - if (type == storage_info->type) { + if (type == storage_info->type && strstr(storage_info->path, path)) { storage_info->id = storage_id; storage_info->state = state; return FALSE; @@ -341,18 +341,21 @@ bool util_get_storage_info(const char *path, MMPlayerStorageInfo *storage_info) else storage_info->type = STORAGE_TYPE_INTERNAL; + memset(storage_info->path, 0x00, MM_MAX_URL_LEN); + g_snprintf(storage_info->path, MM_MAX_URL_LEN, "%s", file_path); + ret = storage_foreach_device_supported((storage_device_supported_cb)_util_storage_supported_cb, storage_info); if (ret != STORAGE_ERROR_NONE) { - LOGE("storage_foreach_device_supported failed 0x%x", ret); + LOGE("failed to check supported storage 0x%x", ret); return false; } if ((storage_info->type == STORAGE_TYPE_EXTERNAL) && (storage_info->state <= STORAGE_STATE_REMOVED)) { - LOGE("need to check the storage state : %d", storage_info->state); + LOGE("need to check the external storage state %d:%d", storage_info->id, storage_info->state); return false; } - LOGD("storage info: type %d, id %d", storage_info->type, storage_info->id); + LOGD("storage info %d:%d:%d", storage_info->type, storage_info->id, storage_info->state); return true; } -- 2.7.4