From 888271ea04ade12f346768fc2cb1ff7c71df0632 Mon Sep 17 00:00:00 2001 From: Eunhye Choi Date: Mon, 13 Apr 2020 20:47:38 +0900 Subject: [PATCH] apply 'use decodebin' option - uridecodebin3 path is default. however, if 'use decodebin' option is enabled in ini, decodebin2 path will be enabled. Change-Id: I20bee3094b91314a49ed6e1c7941e99e011d50b2 --- src/include/mm_player_ini.h | 4 ++-- src/include/mm_player_utils.h | 4 ++-- src/mm_player_gst.c | 9 +++++---- src/mm_player_ini.c | 6 +++--- src/mm_player_priv.c | 22 +++++++++++----------- src/mm_player_tracks.c | 8 ++++---- src/mm_player_utils.c | 12 ++++++------ 7 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/include/mm_player_ini.h b/src/include/mm_player_ini.h index aadf7f8..ab4d4a9 100644 --- a/src/include/mm_player_ini.h +++ b/src/include/mm_player_ini.h @@ -88,7 +88,7 @@ typedef struct { gint localplayback_state_change_timeout; gint delay_before_repeat; gint eos_delay; - gboolean use_uridecodebin3; /* experimental feature */ + gboolean use_decodebin; gchar gst_param[5][PLAYER_INI_MAX_PARAM_STRLEN]; gchar exclude_element_keyword[PLAYER_INI_MAX_ELEMENT][PLAYER_INI_MAX_STRLEN]; @@ -176,7 +176,7 @@ typedef struct { #define DEFAULT_SUPPORT_PCM_EXPORTING FALSE /* with HW audio codec */ #define DEFAULT_SUPPORT_PITCH_CONTROL FALSE /* with HW audio codec */ #define DEFAULT_SUPPORT_REPLAYGAIN_CONTROL FALSE /* with HW audio codec */ -#define DEFAULT_USE_URIDECODEBIN3 FALSE +#define DEFAULT_USE_DECODEBIN FALSE /* http streaming */ #define DEFAULT_HTTPSRC "souphttpsrc" diff --git a/src/include/mm_player_utils.h b/src/include/mm_player_utils.h index 6b68bd6..88cd995 100644 --- a/src/include/mm_player_utils.h +++ b/src/include/mm_player_utils.h @@ -290,7 +290,7 @@ #define MMPLAYER_STREAM_TYPE_GET_NAME(type) _mmplayer_get_stream_type_name(type) -#define MMPLAYER_USE_URIDECODEBIN3(x_player) _mmplayer_use_uridecodebin3(x_player) +#define MMPLAYER_USE_DECODEBIN(x_player) _mmplayer_use_decodebin(x_player) /*=========================================================================================== | | @@ -311,7 +311,7 @@ gboolean _mmplayer_is_smooth_streaming(mmplayer_t *player); gboolean _mmplayer_is_ms_buff_src(mmplayer_t *player); gboolean _mmplayer_has_suffix(mmplayer_t *player, const gchar *suffix); gboolean _mmplayer_is_videosink_ready(mmplayer_t *player, int surface_type); -gboolean _mmplayer_use_uridecodebin3(mmplayer_t *player); +gboolean _mmplayer_use_decodebin(mmplayer_t *player); gboolean _mmplayer_post_message(mmplayer_t *player, enum MMMessageType msgtype, MMMessageParamType *param); gboolean _mmplayer_dump_pipeline_state(mmplayer_t *player); diff --git a/src/mm_player_gst.c b/src/mm_player_gst.c index bb16882..154e97e 100644 --- a/src/mm_player_gst.c +++ b/src/mm_player_gst.c @@ -227,7 +227,7 @@ __mmplayer_gst_transform_gsterror(mmplayer_t *player, GstMessage *message, GErro LOGD("error code=%d, msg=%s, src element=%s, class=%s", error->code, error->message, src_element_name, klass); - if (!MMPLAYER_USE_URIDECODEBIN3(player) && + if (MMPLAYER_USE_DECODEBIN(player) && !__mmplayer_check_error_posted_from_activated_track(player, src_element_name)) return MM_ERROR_NONE; @@ -973,7 +973,7 @@ __mmplayer_gst_check_useful_message(mmplayer_t *player, GstMessage *message) } case GST_MESSAGE_STREAMS_SELECTED: { - if (!MMPLAYER_USE_URIDECODEBIN3(player)) + if (MMPLAYER_USE_DECODEBIN(player)) break; /* drop msg */ if ((MMPLAYER_IS_HTTP_STREAMING(player)) && @@ -2994,7 +2994,8 @@ __mmplayer_gst_select_stream (GstElement * uridecodebin, GstStreamCollection * c EXIT: g_free(caps_str); - gst_caps_unref(caps); + if (caps) + gst_caps_unref(caps); LOGD("ret %d", ret); return ret; @@ -3705,7 +3706,7 @@ _mmplayer_gst_pause(mmplayer_t *player, gboolean async) return ret; } - if (!MMPLAYER_USE_URIDECODEBIN3(player)) { + if (MMPLAYER_USE_DECODEBIN(player)) { if ((!MMPLAYER_IS_RTSP_STREAMING(player)) && (!player->video_decoded_cb) && (!player->pipeline->videobin) && (!player->pipeline->audiobin)) return MM_ERROR_PLAYER_CODEC_NOT_FOUND; diff --git a/src/mm_player_ini.c b/src/mm_player_ini.c index fb552c0..d9acefe 100644 --- a/src/mm_player_ini.c +++ b/src/mm_player_ini.c @@ -133,7 +133,7 @@ mm_player_ini_load(mmplayer_ini_t *ini) ini->pcm_buffer_size = iniparser_getint(dict, "general:pcm buffer size", DEFAULT_PCM_BUFFER_SIZE); ini->num_of_video_bo = iniparser_getint(dict, "general:video bo max", DEFAULT_NUM_OF_VIDEO_BO); ini->video_bo_timeout = iniparser_getint(dict, "general:video bo timeout", DEFAULT_TIMEOUT_OF_VIDEO_BO); - ini->use_uridecodebin3 = iniparser_getboolean(dict, "general:use uridecodebin3", DEFAULT_USE_URIDECODEBIN3); + ini->use_decodebin = iniparser_getboolean(dict, "general:use decodebin", DEFAULT_USE_DECODEBIN); ini->support_audio_effect = iniparser_getboolean(dict, "general:support audio effect", DEFAULT_SUPPORT_AUDIO_EFFECT); ini->support_pcm_exporting = iniparser_getboolean(dict, "general:support pcm exporting", DEFAULT_SUPPORT_PCM_EXPORTING); ini->support_pitch_control = iniparser_getboolean(dict, "general:use pitch control", DEFAULT_SUPPORT_PITCH_CONTROL); @@ -205,7 +205,7 @@ mm_player_ini_load(mmplayer_ini_t *ini) ini->pcm_buffer_size = DEFAULT_PCM_BUFFER_SIZE; ini->num_of_video_bo = DEFAULT_NUM_OF_VIDEO_BO; ini->video_bo_timeout = DEFAULT_TIMEOUT_OF_VIDEO_BO; - ini->use_uridecodebin3 = DEFAULT_USE_URIDECODEBIN3; + ini->use_decodebin = DEFAULT_USE_DECODEBIN; ini->support_audio_effect = DEFAULT_SUPPORT_AUDIO_EFFECT; ini->support_pcm_exporting = DEFAULT_SUPPORT_PCM_EXPORTING; ini->support_pitch_control = DEFAULT_SUPPORT_PITCH_CONTROL; @@ -288,7 +288,7 @@ mm_player_ini_load(mmplayer_ini_t *ini) LOGD("gst param3 : %s", ini->gst_param[2]); LOGD("gst param4 : %s", ini->gst_param[3]); LOGD("gst param5 : %s", ini->gst_param[4]); - LOGD("use uridecodebin3 : %d", ini->use_uridecodebin3); + LOGD("use decodebin : %d", ini->use_decodebin); for (idx = 0; ini->exclude_element_keyword[idx][0] != '\0'; idx++) LOGD("exclude_element_keyword [%d] : %s", idx, ini->exclude_element_keyword[idx]); diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index 575f839..c9ce7a9 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -1238,7 +1238,7 @@ _mmplayer_gst_decode_pad_added(GstElement *elem, GstPad *pad, gpointer data) LOGD("surface type : %d", stype); - if (MMPLAYER_IS_MS_BUFF_SRC(player) || MMPLAYER_USE_URIDECODEBIN3(player)) { + if (MMPLAYER_IS_MS_BUFF_SRC(player) || !MMPLAYER_USE_DECODEBIN(player)) { __mmplayer_gst_create_sinkbin(elem, pad, player); goto DONE; } @@ -1257,7 +1257,7 @@ _mmplayer_gst_decode_pad_added(GstElement *elem, GstPad *pad, gpointer data) gint samplerate = 0; gint channels = 0; - if (MMPLAYER_IS_MS_BUFF_SRC(player) || MMPLAYER_USE_URIDECODEBIN3(player) || player->build_audio_offload) { + if (MMPLAYER_IS_MS_BUFF_SRC(player) || !MMPLAYER_USE_DECODEBIN(player) || player->build_audio_offload) { if (player->build_audio_offload) player->no_more_pad = TRUE; /* remove state holder */ __mmplayer_gst_create_sinkbin(elem, pad, player); @@ -1311,7 +1311,7 @@ _mmplayer_gst_decode_pad_added(GstElement *elem, GstPad *pad, gpointer data) g_object_set(selector, "active-pad", sinkpad, NULL); } - if (!MMPLAYER_USE_URIDECODEBIN3(player)) + if (MMPLAYER_USE_DECODEBIN(player)) _mmplayer_track_update_stream(player, stream_type, sinkpad); DONE: @@ -1423,7 +1423,7 @@ __mmplayer_create_audio_sink_path(mmplayer_t *player, GstElement *audio_selector } /* apply the audio track information */ - if (!MMPLAYER_USE_URIDECODEBIN3(player)) + if (MMPLAYER_USE_DECODEBIN(player)) __mmplayer_set_decode_track_info(player, MM_PLAYER_TRACK_TYPE_AUDIO); /* create audio sink path */ @@ -4180,10 +4180,10 @@ __mmplayer_gst_create_pipeline(mmplayer_t *player) if (MMPLAYER_IS_MS_BUFF_SRC(player)) { ret = _mmplayer_gst_build_es_pipeline(player); } else { - if (player->ini.use_uridecodebin3) - ret = _mmplayer_gst_build_pipeline_with_src(player); + if (MMPLAYER_USE_DECODEBIN(player)) + ret = _mmplayer_gst_build_pipeline(player); /* TEMP: previous pipeline, will be removed.*/ else - ret = _mmplayer_gst_build_pipeline(player); + ret = _mmplayer_gst_build_pipeline_with_src(player); } if (ret != MM_ERROR_NONE) { @@ -8355,10 +8355,10 @@ _mmplayer_change_track_language(MMHandleType hplayer, mmplayer_track_type_e type goto EXIT; } - if (MMPLAYER_USE_URIDECODEBIN3(player)) { - result = __mmplayer_switch_stream(player, type, index); - } else { + if (MMPLAYER_USE_DECODEBIN(player)) { result = __mmplayer_change_selector_pad(player, type, index); + } else { + result = __mmplayer_switch_stream(player, type, index); } if (result != MM_ERROR_NONE) { LOGE("failed to change track"); @@ -8367,7 +8367,7 @@ _mmplayer_change_track_language(MMHandleType hplayer, mmplayer_track_type_e type player->track[type].active_track_index = index; - if (!MMPLAYER_USE_URIDECODEBIN3(player)) { + if (MMPLAYER_USE_DECODEBIN(player)) { GstEvent *event = NULL; if (current_state == GST_STATE_PLAYING) { event = gst_event_new_seek(player->playback_rate, GST_FORMAT_TIME, diff --git a/src/mm_player_tracks.c b/src/mm_player_tracks.c index effb483..bd40911 100644 --- a/src/mm_player_tracks.c +++ b/src/mm_player_tracks.c @@ -388,12 +388,12 @@ __mmplayer_track_get_language(mmplayer_t *player, mmplayer_track_type_e type, gi *code = (gchar *)g_malloc0(LANGUAGE_CODE_SIZE * sizeof(char)); - if (MMPLAYER_USE_URIDECODEBIN3(player)) { - GstStream *stream = g_ptr_array_index(player->track[type].streams, stream_index); - tag_list = gst_stream_get_tags (stream); - } else { + if (MMPLAYER_USE_DECODEBIN(player)) { GstPad *sinkpad = g_ptr_array_index(player->track[type].streams, stream_index); g_object_get(sinkpad, "tags", &tag_list, NULL); + } else { + GstStream *stream = g_ptr_array_index(player->track[type].streams, stream_index); + tag_list = gst_stream_get_tags (stream); } if (tag_list) diff --git a/src/mm_player_utils.c b/src/mm_player_utils.c index 4d273d3..60a258e 100644 --- a/src/mm_player_utils.c +++ b/src/mm_player_utils.c @@ -646,15 +646,15 @@ media_format_mimetype_e _mmplayer_convert_audio_pcm_str_to_media_format_mime(con } } -gboolean _mmplayer_use_uridecodebin3(mmplayer_t *player) /* MMPLAYER_USE_URIDECODEBIN3(player) */ +gboolean _mmplayer_use_decodebin(mmplayer_t *player) /* MMPLAYER_USE_DECODEBIN(player) */ { + int audio_offload = 0; MMPLAYER_RETURN_VAL_IF_FAIL(player, FALSE); - if (MMPLAYER_IS_MS_BUFF_SRC(player)) - return FALSE; + mm_attrs_get_int_by_name(player->attrs, MM_PLAYER_AUDIO_OFFLOAD, &audio_offload); /* user requirement */ - if (!player->ini.use_uridecodebin3) - return FALSE; + if (MMPLAYER_IS_MS_BUFF_SRC(player) || player->ini.use_decodebin || audio_offload) + return TRUE; - return TRUE; + return FALSE; } -- 2.7.4