From: Eunhye Choi Date: Wed, 8 May 2019 10:55:44 +0000 (+0900) Subject: [0.6.189] keep the number of video buffer at attrs X-Git-Tag: submit/tizen/20190509.085544^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9b91b65156e62b98168722d4787ee363e64dbc6c;p=platform%2Fcore%2Fmultimedia%2Flibmm-player.git [0.6.189] keep the number of video buffer at attrs - Use attrs to keep the number of video buffers. - It has to be considered when player export the 'video decoded buffer' to client to avoid decoding error by buffer starvation. Change-Id: I28d019b62df00266c3beccd63ad111f97563689d --- diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 426cda7..cbf3ffe 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.188 +Version: 0.6.189 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_player.h b/src/include/mm_player.h index a022aee..cda397a 100644 --- a/src/include/mm_player.h +++ b/src/include/mm_player.h @@ -241,6 +241,16 @@ */ #define MM_PLAYER_AUDIO_CODEC_TYPE "audio_codec_type" +/** + * MM_PLAYER_VIDEO_BUFFER_TOTAL_SIZE (int) + */ +#define MM_PLAYER_VIDEO_BUFFER_TOTAL_SIZE "video_buffer_total_size" + +/** + * MM_PLAYER_VIDEO_BUFFER_EXTRA_SIZE (int) + */ +#define MM_PLAYER_VIDEO_BUFFER_EXTRA_SIZE "video_buffer_extra_size" + /** * MM_PLAYER_PREBUFFER_MS * @@ -1378,20 +1388,6 @@ int mm_player_set_video_stream_changed_callback(MMHandleType player, mm_player_s */ int mm_player_get_timeout(MMHandleType player, int *timeout); -/** - * This function is to get the number of video output buffers. \n - * It's only supported when video stream is included in file. \n - * - * @param player [in] Handle of player. - * @param num [out] num of buffers. - * @param extra_num [out] extra num of buffers. - * - * @return This function returns zero on success, or negative value with error - * code. - * @since 3.0 - */ -int mm_player_get_num_of_video_out_buffers(MMHandleType player, int *num, int *extra_num); - /** * This function is to set the dynamic resolution information. \n * It's only supported when video stream is included in file. \n diff --git a/src/include/mm_player_priv.h b/src/include/mm_player_priv.h index 673d9ff..78cc1f8 100644 --- a/src/include/mm_player_priv.h +++ b/src/include/mm_player_priv.h @@ -69,6 +69,8 @@ #define VIDEO360_MAX_ZOOM 10.0f +#define DEFAULT_NUM_OF_V_OUT_BUFFER 3 + /*--------------------------------------------------------------------------- | GLOBAL CONSTANT DEFINITIONS: | ---------------------------------------------------------------------------*/ @@ -588,9 +590,6 @@ typedef struct { mm_player_media_stream_seek_data_callback media_stream_seek_data_cb[MM_PLAYER_STREAM_TYPE_MAX]; GMutex media_stream_cb_lock; - int video_num_buffers; /* total num of buffers in vcodec */ - int video_extra_num_buffers; /* extra num of buffers in vcodec */ - void *buffer_cb_user_param[MM_PLAYER_STREAM_TYPE_MAX]; void *seek_cb_user_param[MM_PLAYER_STREAM_TYPE_MAX]; @@ -869,7 +868,6 @@ int _mmplayer_get_next_uri(MMHandleType hplayer, char **uri); int _mmplayer_has_closed_caption(MMHandleType hplayer, bool *exist); void _mm_player_video_stream_internal_buffer_unref(void *buffer); 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 id, int state); int _mmplayer_video_stream_release_bo(mmplayer_t *player, void *bo); int _mmplayer_get_adaptive_variant_info(MMHandleType hplayer, int *num, char **var_info); diff --git a/src/mm_player.c b/src/mm_player.c index 991378b..566c1d4 100644 --- a/src/mm_player.c +++ b/src/mm_player.c @@ -915,22 +915,6 @@ int mm_player_get_timeout(MMHandleType player, int *timeout) return result; } -int mm_player_get_num_of_video_out_buffers(MMHandleType player, int *num, int *extra_num) -{ - int result = MM_ERROR_NONE; - - MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); - MMPLAYER_RETURN_VAL_IF_FAIL(num && extra_num, MM_ERROR_COMMON_INVALID_ARGUMENT); - - MMPLAYER_CMD_LOCK(player); - - result = _mmplayer_get_num_of_video_out_buffers(player, num, extra_num); - - MMPLAYER_CMD_UNLOCK(player); - - return result; -} - int mm_player_set_media_stream_dynamic_resolution(MMHandleType player, bool drc) { int result = MM_ERROR_NONE; diff --git a/src/mm_player_attrs.c b/src/mm_player_attrs.c index 7831a18..edf5c15 100644 --- a/src/mm_player_attrs.c +++ b/src/mm_player_attrs.c @@ -745,6 +745,24 @@ _mmplayer_construct_attribute(MMHandleType handle) MM_PLAYER_CODEC_TYPE_DEFAULT, MM_PLAYER_CODEC_TYPE_SW }, + { + "video_buffer_total_size", + MM_ATTRS_TYPE_INT, + MM_ATTRS_FLAG_RW, + (void *)DEFAULT_NUM_OF_V_OUT_BUFFER, + MM_ATTRS_VALID_TYPE_INT_RANGE, + MMPLAYER_MIN_INT, + MMPLAYER_MAX_INT + }, + { + "video_buffer_extra_size", + MM_ATTRS_TYPE_INT, + MM_ATTRS_FLAG_RW, + (void *)DEFAULT_NUM_OF_V_OUT_BUFFER, + MM_ATTRS_VALID_TYPE_INT_RANGE, + MMPLAYER_MIN_INT, + MMPLAYER_MAX_INT + }, { "prebuffer_ms", /* user setting */ MM_ATTRS_TYPE_INT, diff --git a/src/mm_player_gst.c b/src/mm_player_gst.c index ad60ea5..500de92 100644 --- a/src/mm_player_gst.c +++ b/src/mm_player_gst.c @@ -1797,13 +1797,13 @@ __mmplayer_gst_handle_element_message(mmplayer_t *player, GstMessage *msg) gint extra_num_buffers = 0; if (gst_structure_get_int(gst_message_get_structure(msg), "num_buffers", &num_buffers)) { - player->video_num_buffers = num_buffers; - LOGD("video_num_buffers : %d", player->video_num_buffers); + LOGD("video_num_buffers : %d", num_buffers); + mm_attrs_set_int_by_name(player->attrs, MM_PLAYER_VIDEO_BUFFER_TOTAL_SIZE, num_buffers); } if (gst_structure_get_int(gst_message_get_structure(msg), "extra_num_buffers", &extra_num_buffers)) { - player->video_extra_num_buffers = extra_num_buffers; LOGD("num_of_vout_extra num buffers : %d", extra_num_buffers); + mm_attrs_set_int_by_name(player->attrs, MM_PLAYER_VIDEO_BUFFER_EXTRA_SIZE, extra_num_buffers); } return; } diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index 952f8fa..be48238 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -89,7 +89,6 @@ #define MM_PLAYER_FADEOUT_TIME_DEFAULT 0 #define DEFAULT_PLAYBACK_RATE 1.0 -#define DEFAULT_NUM_OF_V_OUT_BUFFER 3 #define PLAYER_DISPLAY_MODE_DST_ROI 5 @@ -3252,16 +3251,14 @@ __mmplayer_video_stream_get_bo(mmplayer_t *player, int size) } /* update video num buffers */ - player->video_num_buffers = idx; - if (idx == player->ini.num_of_video_bo) - player->video_extra_num_buffers = player->ini.num_of_video_bo/2; + LOGD("video_num_buffers : %d", idx); + mm_attrs_set_int_by_name(player->attrs, MM_PLAYER_VIDEO_BUFFER_TOTAL_SIZE, idx); + mm_attrs_set_int_by_name(player->attrs, MM_PLAYER_VIDEO_BUFFER_EXTRA_SIZE, MAX(DEFAULT_NUM_OF_V_OUT_BUFFER, (idx/2))); if (idx == 0) { MMPLAYER_VIDEO_BO_UNLOCK(player); return NULL; } - - LOGD("Num of video buffers(%d/%d)", player->video_num_buffers, player->video_extra_num_buffers); } while (TRUE) { @@ -4725,8 +4722,6 @@ _mmplayer_create_player(MMHandleType handle) player->play_subtitle = FALSE; player->has_closed_caption = FALSE; - player->video_num_buffers = DEFAULT_NUM_OF_V_OUT_BUFFER; - player->video_extra_num_buffers = DEFAULT_NUM_OF_V_OUT_BUFFER; player->pending_resume = FALSE; if (player->ini.dump_element_keyword[0][0] == '\0') player->ini.set_dump_element_flag = FALSE; @@ -8419,25 +8414,6 @@ _mmplayer_get_timeout(MMHandleType hplayer, int *timeout) return MM_ERROR_NONE; } -int -_mmplayer_get_num_of_video_out_buffers(MMHandleType hplayer, int *num, int *extra_num) -{ - mmplayer_t *player = (mmplayer_t *)hplayer; - - MMPLAYER_FENTER(); - - MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); - MMPLAYER_RETURN_VAL_IF_FAIL(num && extra_num, MM_ERROR_COMMON_INVALID_ARGUMENT); - - *num = player->video_num_buffers; - *extra_num = player->video_extra_num_buffers; - - LOGD("state %d, num %d(%d)", MMPLAYER_CURRENT_STATE(player), *num, *extra_num); - - MMPLAYER_FLEAVE(); - return MM_ERROR_NONE; -} - static void __mmplayer_initialize_storage_info(mmplayer_t *player, mmplayer_path_type_e path_type) {