From 8a9a8be2621351ff39be9bc6526200dc47fbdf71 Mon Sep 17 00:00:00 2001 From: Gilbok Lee Date: Fri, 15 May 2020 17:29:54 +0900 Subject: [PATCH] [0.6.231] Always release resource when called resource_release_cb remove unused log Change-Id: I27a3555df10752950570439c3911ed66b5589d7a --- packaging/libmm-player.spec | 2 +- src/mm_player_priv.c | 86 ++++++++++++--------------------------------- src/mm_player_utils.c | 15 +------- 3 files changed, 24 insertions(+), 79 deletions(-) diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 9179855..cf0f4ba 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.230 +Version: 0.6.231 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index b472ad2..10a1c23 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -4544,55 +4544,6 @@ _mmplayer_parse_profile(const char *uri, void *param, mmplayer_parse_profile_t * return ret; } -static gboolean -__mmplayer_can_do_interrupt(mmplayer_t *player) -{ - if (!player || !player->pipeline || !player->attrs) { - LOGW("not initialized"); - goto FAILED; - } - - if (player->audio_decoded_cb) { - LOGW("not support in pcm extraction mode"); - goto FAILED; - } - - /* check if seeking */ - if (player->seek_state != MMPLAYER_SEEK_NONE) { - MMMessageParamType msg_param; - memset(&msg_param, 0, sizeof(MMMessageParamType)); - msg_param.code = MM_ERROR_PLAYER_SEEK; - player->seek_state = MMPLAYER_SEEK_NONE; - MMPLAYER_POST_MSG(player, MM_MESSAGE_ERROR, &msg_param); - goto FAILED; - } - - /* check other thread */ - if (!MMPLAYER_CMD_TRYLOCK(player)) { - LOGW("locked already, cmd state : %d", player->cmd); - - /* check application command */ - if (player->cmd == MMPLAYER_COMMAND_START || player->cmd == MMPLAYER_COMMAND_RESUME) { - LOGW("playing.. should wait cmd lock then, will be interrupted"); - - /* lock will be released at mrp_resource_release_cb() */ - MMPLAYER_CMD_LOCK(player); - goto INTERRUPT; - } - LOGW("nothing to do"); - goto FAILED; - } else { - LOGW("can interrupt immediately"); - goto INTERRUPT; - } - -FAILED: /* with CMD UNLOCKED */ - return FALSE; - -INTERRUPT: /* with CMD LOCKED, will do UNLOCK at __resource_release_cb() */ - return TRUE; -} - static int __resource_release_cb(mm_resource_manager_h rm, mm_resource_manager_res_h res, void *user_data) @@ -4606,14 +4557,25 @@ __resource_release_cb(mm_resource_manager_h rm, mm_resource_manager_res_h res, if (!user_data) { LOGE("user_data is null"); - return FALSE; + return TRUE; } + player = (mmplayer_t *)user_data; - if (!__mmplayer_can_do_interrupt(player)) { - LOGW("no need to interrupt, so leave"); - /* FIXME: there is no way to avoid releasing resource. */ - return FALSE; + if (!player->pipeline || !player->attrs) { + LOGW("not initialized"); + return TRUE; + } + + LOGD("cmd lock player, cmd state : %d", player->cmd); + MMPLAYER_CMD_LOCK(player); + LOGD("cmd locked player"); + + if (MMPLAYER_CURRENT_STATE(player) == MM_PLAYER_STATE_NULL + || MMPLAYER_CURRENT_STATE(player) == MM_PLAYER_STATE_NONE) { + LOGW("player alreay destoryed"); + MMPLAYER_CMD_UNLOCK(player); + return TRUE; } player->interrupted_by_resource = TRUE; @@ -4631,7 +4593,6 @@ __resource_release_cb(mm_resource_manager_h rm, mm_resource_manager_res_h res, if (_mmplayer_unrealize((MMHandleType)player) != MM_ERROR_NONE) LOGE("failed to unrealize"); - /* lock is called in __mmplayer_can_do_interrupt() */ MMPLAYER_CMD_UNLOCK(player); for (res_idx = MMPLAYER_RESOURCE_TYPE_VIDEO_DECODER; res_idx < MMPLAYER_RESOURCE_TYPE_MAX; res_idx++) { @@ -5161,6 +5122,8 @@ _mmplayer_unrealize(MMHandleType hplayer) { mmplayer_t *player = (mmplayer_t *)hplayer; int ret = MM_ERROR_NONE; + int rm_ret = MM_ERROR_NONE; + mmplayer_resource_type_e res_idx = MMPLAYER_RESOURCE_TYPE_MAX; MMPLAYER_FENTER(); @@ -5182,15 +5145,10 @@ _mmplayer_unrealize(MMHandleType hplayer) /* unrealize pipeline */ ret = __mmplayer_gst_unrealize(player); - if (!player->interrupted_by_resource) { - int rm_ret = MM_ERROR_NONE; - mmplayer_resource_type_e res_idx = MMPLAYER_RESOURCE_TYPE_MAX; - - for (res_idx = MMPLAYER_RESOURCE_TYPE_VIDEO_DECODER; res_idx < MMPLAYER_RESOURCE_TYPE_MAX; res_idx++) { - rm_ret = __mmplayer_release_hw_resource(player, res_idx); - if (rm_ret != MM_ERROR_NONE) - LOGE("failed to release [%d] resources", res_idx); - } + for (res_idx = MMPLAYER_RESOURCE_TYPE_VIDEO_DECODER; res_idx < MMPLAYER_RESOURCE_TYPE_MAX; res_idx++) { + rm_ret = __mmplayer_release_hw_resource(player, res_idx); + if (rm_ret != MM_ERROR_NONE) + LOGE("failed to release [%d] resources", res_idx); } player->interrupted_by_resource = FALSE; diff --git a/src/mm_player_utils.c b/src/mm_player_utils.c index 0620af0..b7acd33 100644 --- a/src/mm_player_utils.c +++ b/src/mm_player_utils.c @@ -662,26 +662,22 @@ gboolean _mmplayer_use_decodebin(mmplayer_t *player) /* MMPLAYER_USE_DECODEBIN(p void _mmplayer_cmd_lock_init(mmplayer_t *player) { - MMPLAYER_FENTER(); MMPLAYER_RETURN_IF_FAIL(player); player->cmd_lock = g_new0(mmplayer_ticket_lock_t, 1); g_mutex_init(&player->cmd_lock->ticket_mutex); g_cond_init(&player->cmd_lock->ticket_cond); player->cmd_lock->ticket_queue_head = 0; player->cmd_lock->ticket_queue_tail = 0; - MMPLAYER_FLEAVE(); } void _mmplayer_cmd_lock_deinit(mmplayer_t *player) { - MMPLAYER_FENTER(); MMPLAYER_RETURN_IF_FAIL(player && player->cmd_lock); g_mutex_clear(&player->cmd_lock->ticket_mutex); g_cond_clear(&player->cmd_lock->ticket_cond); player->cmd_lock->ticket_queue_head = 0; player->cmd_lock->ticket_queue_tail = 0; g_free(player->cmd_lock); - MMPLAYER_FLEAVE(); } void _mmplayer_cmd_lock(mmplayer_t *player) @@ -690,7 +686,6 @@ void _mmplayer_cmd_lock(mmplayer_t *player) GCond *cond; GMutex *mutex; - MMPLAYER_FENTER(); MMPLAYER_RETURN_IF_FAIL(player && player->cmd_lock); cond = &player->cmd_lock->ticket_cond; @@ -701,32 +696,26 @@ void _mmplayer_cmd_lock(mmplayer_t *player) while (queue_me != player->cmd_lock->ticket_queue_head) g_cond_wait(cond, mutex); g_mutex_unlock(mutex); - MMPLAYER_FLEAVE(); } gboolean _mmplayer_cmd_trylock(mmplayer_t *player) { GMutex *mutex; - MMPLAYER_FENTER(); MMPLAYER_RETURN_VAL_IF_FAIL(player && player->cmd_lock, FALSE); mutex = &player->cmd_lock->ticket_mutex; - if (!g_mutex_trylock(mutex)) { - MMPLAYER_FLEAVE(); + if (!g_mutex_trylock(mutex)) return FALSE; - } if (player->cmd_lock->ticket_queue_tail != player->cmd_lock->ticket_queue_head) { g_mutex_unlock(mutex); - MMPLAYER_FLEAVE(); return FALSE; } g_mutex_unlock(mutex); _mmplayer_cmd_lock(player); - MMPLAYER_FLEAVE(); return TRUE; } @@ -735,7 +724,6 @@ void _mmplayer_cmd_unlock(mmplayer_t *player) GCond *cond; GMutex *mutex; - MMPLAYER_FENTER(); MMPLAYER_RETURN_IF_FAIL(player && player->cmd_lock); cond = &player->cmd_lock->ticket_cond; @@ -746,5 +734,4 @@ void _mmplayer_cmd_unlock(mmplayer_t *player) (player->cmd_lock->ticket_queue_head + 1) % CMD_LOCK_TICKET_MAX; g_cond_broadcast(cond); g_mutex_unlock(mutex); - MMPLAYER_FLEAVE(); } -- 2.7.4