From 85bbaaf404e4afaeb7daf81a538705135de1f0a8 Mon Sep 17 00:00:00 2001 From: Eunhye Choi Date: Tue, 30 Apr 2019 16:25:43 +0900 Subject: [PATCH] [0.6.187] apply gapless for looping function - fix uri condition error for looping with gapless - release video decoder resource before building new source path Change-Id: I61ac7d34e3a528e19f39522bd4ee0655b9c21cd9 --- packaging/libmm-player.spec | 2 +- src/mm_player_priv.c | 33 ++++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 3e66c54..dba7a4e 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.186 +Version: 0.6.187 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index 2020cbc..2f41371 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -600,6 +600,7 @@ static void __mmplayer_initialize_gapless_play(mmplayer_t *player) { int i; + int rm_ret = MM_RESOURCE_MANAGER_ERROR_NONE; MMPLAYER_FENTER(); @@ -651,6 +652,23 @@ __mmplayer_initialize_gapless_play(mmplayer_t *player) player->audio_decoders = NULL; } + /* release video decoder resource */ + if (player->video_decoder_resource != NULL) { + rm_ret = mm_resource_manager_mark_for_release(player->resource_manager, + player->video_decoder_resource); + if (rm_ret != MM_RESOURCE_MANAGER_ERROR_NONE) { + LOGE("failed to mark the video decoder resource for release, ret(0x%x)", rm_ret); + return; + } + player->video_decoder_resource = NULL; + } + + rm_ret = mm_resource_manager_commit(player->resource_manager); + if (rm_ret != MM_RESOURCE_MANAGER_ERROR_NONE) { + LOGE("failed to commit of resource, ret(0x%x)", rm_ret); + return; + } + MMPLAYER_FLEAVE(); } @@ -6407,14 +6425,15 @@ __mmplayer_get_next_uri(mmplayer_t *player) static gboolean __mmplayer_verify_gapless_play_path(mmplayer_t *player) { -#define REPEAT_COUNT_INFINITELY -1 +#define REPEAT_COUNT_INFINITE -1 #define REPEAT_COUNT_MIN 2 +#define ORIGINAL_URI_ONLY 1 MMHandleType attrs = 0; gint video = 0; gint count = 0; gint gapless = 0; - guint num_of_list = 0; + guint num_of_uri = 0; int profile_tv = -1; MMPLAYER_FENTER(); @@ -6449,16 +6468,16 @@ __mmplayer_verify_gapless_play_path(mmplayer_t *player) /* check repeat count in case of audio */ if (!gapless && - (video || (count != REPEAT_COUNT_INFINITELY && count < REPEAT_COUNT_MIN))) { + (video || (count != REPEAT_COUNT_INFINITE && count < REPEAT_COUNT_MIN))) { LOGW("gapless is disabled"); goto ERROR; } - num_of_list = g_list_length(player->uri_info.uri_list); + num_of_uri = g_list_length(player->uri_info.uri_list); - LOGD("repeat count = %d, num_of_list = %d", count, num_of_list); + LOGD("repeat count = %d, num_of_list = %d", count, num_of_uri); - if (num_of_list == 0) { + if (num_of_uri == ORIGINAL_URI_ONLY) { /* audio looping path */ if (count >= REPEAT_COUNT_MIN) { /* decrease play count */ @@ -6469,7 +6488,7 @@ __mmplayer_verify_gapless_play_path(mmplayer_t *player) if (mm_attrs_commit_all(attrs)) LOGE("failed to commit attribute"); - } else if (count != REPEAT_COUNT_INFINITELY) { + } else if (count != REPEAT_COUNT_INFINITE) { LOGD("there is no next uri and no repeat"); goto ERROR; } -- 2.34.1