From: Eunhae Choi Date: Wed, 29 Jun 2016 08:03:51 +0000 (+0900) Subject: add checking resource state when acquire and remove unused code X-Git-Tag: submit/tizen/20160630.084032^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=21c4b11ff80bc17018db6257858814bee2d7e5f9;p=platform%2Fcore%2Fmultimedia%2Flibmm-player.git add checking resource state when acquire and remove unused code Change-Id: Id560551ff6d69dcb378d468f66994d5f2b0b0ed8 --- diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 07f012c..1db0997 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.5.85 +Version: 0.5.86 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_player_ini.h b/src/include/mm_player_ini.h index 4a0933b..f849a4f 100644 --- a/src/include/mm_player_ini.h +++ b/src/include/mm_player_ini.h @@ -63,9 +63,8 @@ typedef struct __mm_player_ini gchar videosink_element_overlay[PLAYER_INI_MAX_STRLEN]; gchar videosink_element_evas[PLAYER_INI_MAX_STRLEN]; gchar videosink_element_fake[PLAYER_INI_MAX_STRLEN]; - gchar videosink_element_remote[PLAYER_INI_MAX_STRLEN]; - gchar videosrc_element_remote[PLAYER_INI_MAX_STRLEN]; gchar videoconverter_element[PLAYER_INI_MAX_STRLEN]; + gchar videocodec_element_hw[PLAYER_INI_MAX_STRLEN]; gchar audioresampler_element[PLAYER_INI_MAX_STRLEN]; gchar audiosink_element[PLAYER_INI_MAX_STRLEN]; gboolean skip_rescan; @@ -144,12 +143,11 @@ typedef struct __mm_player_ini #define DEFAULT_VIDEOSINK_OVERLAY "waylandsink" #define DEFAULT_VIDEOSINK_EVAS "evasimagesink" #define DEFAULT_VIDEOSINK_FAKE "fakesink" -#define DEFAULT_VIDEOSINK_REMOTE "shmsink" -#define DEFAULT_VIDEOSRC_REMOTE "shmsrc" #define DEFAULT_AUDIORESAMPLER "audioresample" #define DEFAULT_AUDIOSINK "pulsesink" +#define DEFAULT_VIDEOCODEC_HW "" #define DEFAULT_GST_PARAM "" -#define DEFAULT_EXCLUDE_KEYWORD "" +#define DEFAULT_EXCLUDE_KEYWORD "" #define DEFAULT_ASYNC_START TRUE #define DEFAULT_DISABLE_SEGTRAP TRUE #define DEFAULT_VIDEO_CONVERTER "" diff --git a/src/include/mm_player_resource.h b/src/include/mm_player_resource.h index f8d0dc7..b0f42ee 100644 --- a/src/include/mm_player_resource.h +++ b/src/include/mm_player_resource.h @@ -29,6 +29,18 @@ extern "C" { #endif +#define MMPLAYER_RESOURCE_ACQUIRE_TIMEOUT 5 + +#define MMPLAYER_GET_RESOURCE_LOCK(rm) (&((MMPlayerResourceManager *)rm)->lock) +#define MMPLAYER_RESOURCE_LOCK(rm) (g_mutex_lock(MMPLAYER_GET_RESOURCE_LOCK(rm))) +#define MMPLAYER_RESOURCE_UNLOCK(rm) (g_mutex_unlock(MMPLAYER_GET_RESOURCE_LOCK(rm))) + +#define MMPLAYER_GET_RESOURCE_COND(rm) (&((MMPlayerResourceManager *)rm)->cond) +#define MMPLAYER_RESOURCE_WAIT(rm) g_cond_wait(MMPLAYER_GET_RESOURCE_COND(rm), MMPLAYER_GET_RESOURCE_LOCK(rm) +#define MMPLAYER_RESOURCE_WAIT_UNTIL(rm, end_time) \ + g_cond_wait_until(MMPLAYER_GET_RESOURCE_COND(rm), MMPLAYER_GET_RESOURCE_LOCK(rm), end_time) +#define MMPLAYER_RESOURCE_SIGNAL(rm) g_cond_signal(MMPLAYER_GET_RESOURCE_COND(rm)); + typedef enum { RESOURCE_TYPE_VIDEO_DECODER, RESOURCE_TYPE_VIDEO_OVERLAY, @@ -42,7 +54,6 @@ typedef enum { RESOURCE_STATE_MAX, } MMPlayerResourceState; - typedef struct { mrp_mainloop_t *mloop; mrp_res_context_t *context; @@ -51,6 +62,8 @@ typedef struct { bool is_connected; void *user_data; bool by_rm_cb; + GCond cond; + GMutex lock; } MMPlayerResourceManager; int _mmplayer_resource_manager_init(MMPlayerResourceManager *resource_manager, void *user_data); diff --git a/src/mm_player_ini.c b/src/mm_player_ini.c index f2e1352..41e05ec 100644 --- a/src/mm_player_ini.c +++ b/src/mm_player_ini.c @@ -184,10 +184,9 @@ mm_player_ini_load(mm_player_ini_t* ini) MMPLAYER_INI_GET_STRING(dict, ini->videosink_element_overlay, "general:videosink element overlay", DEFAULT_VIDEOSINK_OVERLAY); MMPLAYER_INI_GET_STRING(dict, ini->videosink_element_evas, "general:videosink element evas", DEFAULT_VIDEOSINK_EVAS); MMPLAYER_INI_GET_STRING(dict, ini->videosink_element_fake, "general:videosink element fake", DEFAULT_VIDEOSINK_FAKE); - MMPLAYER_INI_GET_STRING(dict, ini->videosink_element_remote, "general:videosink element remote", DEFAULT_VIDEOSINK_REMOTE); - MMPLAYER_INI_GET_STRING(dict, ini->videosrc_element_remote, "general:videosrc element remote", DEFAULT_VIDEOSRC_REMOTE); MMPLAYER_INI_GET_STRING(dict, ini->audioresampler_element, "general:audio resampler element", DEFAULT_AUDIORESAMPLER ); MMPLAYER_INI_GET_STRING(dict, ini->audiosink_element, "general:audiosink element", DEFAULT_AUDIOSINK ); + MMPLAYER_INI_GET_STRING(dict, ini->videocodec_element_hw, "general:video codec element hw", DEFAULT_VIDEOCODEC_HW); MMPLAYER_INI_GET_STRING(dict, ini->videoconverter_element, "general:video converter element", DEFAULT_VIDEO_CONVERTER ); __get_element_list(ini, @@ -224,8 +223,6 @@ mm_player_ini_load(mm_player_ini_t* ini) strncpy( ini->videosink_element_overlay, DEFAULT_VIDEOSINK_OVERLAY, PLAYER_INI_MAX_STRLEN - 1 ); strncpy( ini->videosink_element_evas, DEFAULT_VIDEOSINK_EVAS, PLAYER_INI_MAX_STRLEN - 1 ); strncpy( ini->videosink_element_fake, DEFAULT_VIDEOSINK_FAKE, PLAYER_INI_MAX_STRLEN - 1 ); - strncpy( ini->videosink_element_remote, DEFAULT_VIDEOSINK_REMOTE, PLAYER_INI_MAX_STRLEN - 1 ); - strncpy( ini->videosrc_element_remote, DEFAULT_VIDEOSRC_REMOTE, PLAYER_INI_MAX_STRLEN - 1 ); ini->generate_dot = DEFAULT_GENERATE_DOT; ini->use_system_clock = DEFAULT_USE_SYSTEM_CLOCK; ini->live_state_change_timeout = DEFAULT_LIVE_STATE_CHANGE_TIMEOUT; @@ -240,6 +237,7 @@ mm_player_ini_load(mm_player_ini_t* ini) strncpy( ini->audioresampler_element, DEFAULT_AUDIORESAMPLER, PLAYER_INI_MAX_STRLEN -1 ); strncpy( ini->audiosink_element, DEFAULT_AUDIOSINK, PLAYER_INI_MAX_STRLEN -1 ); + strncpy( ini->videocodec_element_hw, DEFAULT_VIDEOCODEC_HW, PLAYER_INI_MAX_STRLEN - 1 ); strncpy( ini->videoconverter_element, DEFAULT_VIDEO_CONVERTER, PLAYER_INI_MAX_STRLEN -1 ); __get_element_list(ini, DEFAULT_EXCLUDE_KEYWORD, KEYWORD_EXCLUDE); @@ -276,9 +274,8 @@ mm_player_ini_load(mm_player_ini_t* ini) LOGD("videosink element overlay: %s\n", ini->videosink_element_overlay); LOGD("videosink element evas: %s\n", ini->videosink_element_evas); LOGD("videosink element fake: %s\n", ini->videosink_element_fake); - LOGD("videosink element remote: %s\n", ini->videosink_element_remote); - LOGD("videosrc element remote: %s\n", ini->videosrc_element_remote); LOGD("video converter element : %s\n", ini->videoconverter_element); + LOGD("video codec element(hw) : %s\n", ini->videocodec_element_hw); LOGD("audio resampler element : %s\n", ini->audioresampler_element); LOGD("audiosink element : %s\n", ini->audiosink_element); LOGD("generate dot : %d\n", ini->generate_dot); diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index 3688d3d..17f4f73 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -11251,19 +11251,6 @@ DONE: return; } -#ifdef _MM_PLAYER_ALP_PARSER -void check_name (void *data, void *user_data) -{ - mm_player_t* player = user_data; - - if (g_strrstr((gchar*)data, "mpegaudioparse")) - { - LOGD("mpegaudioparse - set alp-mp3dec\n"); - g_object_set(player->pipeline->mainbin[MMPLAYER_M_DEMUX].gst, "alp-mp3dec", TRUE, NULL); - } -} -#endif - static GstElement * __mmplayer_create_decodebin (mm_player_t* player) { @@ -11772,11 +11759,6 @@ __mmplayer_try_to_plug(mm_player_t* player, GstPad *pad, const GstCaps *caps) // factory = element_facory; name_to_plug = GST_OBJECT_NAME(factory); } - - /* make parser alp mode */ - #ifdef _MM_PLAYER_ALP_PARSER - g_list_foreach (player->parsers, check_name, player); - #endif } } } @@ -13025,27 +13007,17 @@ GstCaps* caps, GstElementFactory* factory, gpointer data) __mmplayer_set_audio_attrs (player, caps); } } - else if ((g_strrstr(klass, "Codec/Decoder/Video"))) + else if (g_strrstr(klass, "Codec/Decoder/Video")) { - if (g_strrstr(factory_name, "omx")) + if ((strlen(player->ini.videocodec_element_hw) > 0) && + (g_strrstr(factory_name, player->ini.videocodec_element_hw))) { - char *env = getenv ("MM_PLAYER_HW_CODEC_DISABLE"); - if (env != NULL) - { - if (strncasecmp(env, "yes", 3) == 0) - { - LOGD ("skipping [%s] by disabled\n", factory_name); - result = GST_AUTOPLUG_SELECT_SKIP; - goto DONE; - } - } - /* prepare resource manager for video decoder */ MMPlayerResourceState resource_state = RESOURCE_STATE_NONE; if (_mmplayer_resource_manager_get_state(&player->resource_manager, &resource_state) == MM_ERROR_NONE) { - /* prepare resource manager for video overlay */ + /* prepare resource manager for video decoder */ if (resource_state >= RESOURCE_STATE_INITIALIZED) { if (_mmplayer_resource_manager_prepare(&player->resource_manager, RESOURCE_TYPE_VIDEO_DECODER) @@ -13284,32 +13256,8 @@ __mmplayer_gst_element_added (GstElement *bin, GstElement *element, gpointer dat g_object_set(G_OBJECT(element), "http-pull-mp3dec", TRUE, NULL); } } - else if (g_strrstr(factory_name, "omx")) + else if (g_strrstr(factory_name, player->ini.videocodec_element_hw)) { - if (g_strrstr(klass, "Codec/Decoder/Video")) - { - gboolean ret = FALSE; - - if (player->v_stream_caps != NULL) - { - GstPad *pad = gst_element_get_static_pad(element, "sink"); - - if (pad) - { - ret = gst_pad_set_caps(pad, player->v_stream_caps); - LOGD("found omx decoder, setting gst_pad_set_caps for omx (ret:%d)", ret); - MMPLAYER_LOG_GST_CAPS_TYPE(player->v_stream_caps); - gst_object_unref (pad); - } - } - g_object_set (G_OBJECT(element), "state-tuning", TRUE, NULL); - } -#ifdef _MM_PLAYER_ALP_PARSER - if (g_strrstr(factory_name, "omx_mp3dec")) - { - g_list_foreach (player->parsers, check_name, player); - } -#endif player->pipeline->mainbin[MMPLAYER_M_DEC1].gst = element; } diff --git a/src/mm_player_resource.c b/src/mm_player_resource.c index f922738..aecb7ab 100644 --- a/src/mm_player_resource.c +++ b/src/mm_player_resource.c @@ -162,14 +162,19 @@ static void mrp_rset_state_callback(mrp_res_context_t *cx, const mrp_res_resourc MMPLAYER_FENTER(); - if(!mrp_res_equal_resource_set(rs, player->resource_manager.rset)){ + if(!mrp_res_equal_resource_set(rs, player->resource_manager.rset)) { LOGW("- resource set(%p) is not same as this player handle's(%p)", rs, player->resource_manager.rset); return; } - if (rs->state == MRP_RES_RESOURCE_ACQUIRED) + if (rs->state == MRP_RES_RESOURCE_ACQUIRED) { player->resource_manager.state = RESOURCE_STATE_ACQUIRED; + MMPLAYER_RESOURCE_LOCK(&player->resource_manager); + MMPLAYER_RESOURCE_SIGNAL(&player->resource_manager); + MMPLAYER_RESOURCE_UNLOCK(&player->resource_manager); + } + LOGD(" - resource set state of player(%p) is changed to [%s]\n", player, state_to_str(rs->state)); for (i = 0; i < MRP_RESOURCE_MAX; i++) { @@ -335,6 +340,8 @@ int _mmplayer_resource_manager_init(MMPlayerResourceManager *resource_manager, v } resource_manager->state = RESOURCE_STATE_INITIALIZED; + g_mutex_init(&resource_manager->lock); + g_cond_init(&resource_manager->cond); MMPLAYER_FLEAVE(); @@ -394,12 +401,29 @@ int _mmplayer_resource_manager_acquire(MMPlayerResourceManager *resource_manager } else { + MMPLAYER_RESOURCE_LOCK(resource_manager); + ret = mrp_res_acquire_resource_set(resource_manager->rset); if (ret) { LOGE("- could not acquire resource, ret(%d)\n", ret); ret = MM_ERROR_RESOURCE_INTERNAL; } + else + { + gint64 end_time = g_get_monotonic_time() + MMPLAYER_RESOURCE_ACQUIRE_TIMEOUT*G_TIME_SPAN_SECOND; + + LOGD("- acquire resource waiting..%p till %lld\n", resource_manager, end_time); + if (!MMPLAYER_RESOURCE_WAIT_UNTIL(resource_manager, end_time)) + { + LOGE("- could not acquire resource\n"); + ret = MM_ERROR_RESOURCE_INTERNAL; + } else { + LOGD("- resources are acquired\n"); + } + } + + MMPLAYER_RESOURCE_UNLOCK(resource_manager); } } @@ -498,6 +522,8 @@ int _mmplayer_resource_manager_deinit(MMPlayerResourceManager *resource_manager) } resource_manager->state = RESOURCE_STATE_NONE; + g_mutex_clear(&resource_manager->lock); + g_cond_clear(&resource_manager->cond); MMPLAYER_FLEAVE();