From: Eunhae Choi Date: Tue, 3 May 2016 05:48:24 +0000 (+0900) Subject: Add msg handling to get num of video out buffer X-Git-Tag: submit/tizen/20160509.073743^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9fa3075c61a2d133fece723690c23b370b5b31e1;p=platform%2Fcore%2Fmultimedia%2Flibmm-player.git Add msg handling to get num of video out buffer Change-Id: I28fcc6757ea1aa84935f796ea869ca38458edf37 Signed-off-by: Eunhae Choi --- diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 909e9b2..5b50f97 100644 --- a/packaging/libmm-player.spec +++ b/packaging/libmm-player.spec @@ -3,7 +3,7 @@ Name: libmm-player Summary: Multimedia Framework Player Library -Version: 0.5.76 +Version: 0.5.77 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_player.h b/src/include/mm_player.h index 95c89e5..821375d 100644 --- a/src/include/mm_player.h +++ b/src/include/mm_player.h @@ -2257,6 +2257,20 @@ 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. + * 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); + /** @} */ diff --git a/src/include/mm_player_priv.h b/src/include/mm_player_priv.h index de46b9f..812962a 100644 --- a/src/include/mm_player_priv.h +++ b/src/include/mm_player_priv.h @@ -508,6 +508,8 @@ typedef struct { guint media_stream_buffer_min_percent[MM_PLAYER_STREAM_TYPE_MAX]; mm_player_media_stream_buffer_status_callback media_stream_buffer_status_cb[MM_PLAYER_STREAM_TYPE_MAX]; mm_player_media_stream_seek_data_callback media_stream_seek_data_cb[MM_PLAYER_STREAM_TYPE_MAX]; + 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; @@ -834,6 +836,7 @@ void * _mm_player_media_packet_video_stream_internal_buffer_ref(void *buffer); void _mm_player_media_packet_video_stream_internal_buffer_unref(void *buffer); int _mmplayer_set_pcm_spec(MMHandleType hplayer, int samplerate, int channel); 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_gst_set_state (mm_player_t* player, GstElement * pipeline, GstState state, gboolean async, gint timeout ); int __mmplayer_set_state(mm_player_t* player, int state); int __mmplayer_check_state(mm_player_t* player, enum PlayerCommandState command); diff --git a/src/mm_player.c b/src/mm_player.c index 9e5c7f9..33119b2 100644 --- a/src/mm_player.c +++ b/src/mm_player.c @@ -1267,3 +1267,19 @@ 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; +} + diff --git a/src/mm_player_es.c b/src/mm_player_es.c index ac5d385..449e675 100644 --- a/src/mm_player_es.c +++ b/src/mm_player_es.c @@ -115,10 +115,13 @@ _parse_media_format (MMPlayerVideoStreamInfo * video, } if (video) { +#define DEFAULT_FRAMERATE_NUM 30 +#define DEFAULT_FRAMERATE_DEN 1 media_format_mimetype_e mime; - int width; - int height; - int avg_bps; + int width = 0; + int height = 0; + int avg_bps = 0; + int frame_rate = 0; if (media_format_get_video_info (format, &mime, &width, &height, &avg_bps, NULL) != MEDIA_FORMAT_ERROR_NONE) { @@ -126,9 +129,17 @@ _parse_media_format (MMPlayerVideoStreamInfo * video, return MM_ERROR_PLAYER_INTERNAL; } + if (media_format_get_video_frame_rate(format, &frame_rate)) { + LOGW ("failed to get video frame rate, will be set 30."); + } + LOGD ("frame_rate %d", frame_rate); + _convert_media_format_video_mime_to_str (video, mime); + video->width = width; video->height = height; + video->framerate_num = (frame_rate>0)?(frame_rate):(DEFAULT_FRAMERATE_NUM); + video->framerate_den = DEFAULT_FRAMERATE_DEN; } return MM_ERROR_NONE; diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index 27965c2..c41917f 100644 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -93,6 +93,7 @@ #define PLAYBACK_RATE_EX_AUDIO_MAX 2.0 #define PLAYBACK_RATE_EX_VIDEO_MIN 0.5 #define PLAYBACK_RATE_EX_VIDEO_MAX 1.5 +#define DEFAULT_NUM_OF_V_OUT_BUFFER 3 #define GST_QUEUE_DEFAULT_TIME 4 #define GST_QUEUE_HLS_TIME 8 @@ -1692,6 +1693,23 @@ __mmplayer_gst_callback(GstBus *bus, GstMessage *msg, gpointer data) // @ if (!structure_name) break; + if (!strcmp(structure_name, "prepare-decode-buffers")) + { + gint num_buffers = 0; + 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); + } + + 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); + } + break; + } + if (!strcmp(structure_name, "Language_list")) { const GValue *lang_list = NULL; @@ -6247,7 +6265,7 @@ __gst_appsrc_seek_data(GstElement *element, guint64 offset, gpointer user_data) MMPLAYER_RETURN_VAL_IF_FAIL ( player, FALSE ); - LOGI("app-src: seek data\n"); + LOGI("app-src: seek data, offset: %llu\n", offset); if(player->media_stream_seek_data_cb[type]) player->media_stream_seek_data_cb[type](type, offset, player->buffer_cb_user_param); @@ -9090,7 +9108,8 @@ _mmplayer_create_player(MMHandleType handle) // @ player->video_share_api_delta = 0; player->video_share_clock_delta = 0; player->has_closed_caption = FALSE; - + player->video_num_buffers = DEFAULT_NUM_OF_V_OUT_BUFFER; + player->video_extra_num_buffers = 0; if (player->ini.dump_element_keyword[0][0] == '\0') { player->ini.set_dump_element_flag= FALSE; @@ -16126,9 +16145,8 @@ _mmplayer_enable_media_packet_video_stream(MMHandleType hplayer, bool enable) mm_player_t* player = (mm_player_t*) hplayer; MMPLAYER_FENTER(); - MMPLAYER_RETURN_VAL_IF_FAIL (player, MM_ERROR_PLAYER_NOT_INITIALIZED); - MMPLAYER_RETURN_VAL_IF_FAIL (enable == TRUE || enable == FALSE, MM_ERROR_INVALID_ARGUMENT); + if(enable) player->bufmgr = tbm_bufmgr_init(-1); else { @@ -16268,7 +16286,7 @@ __gst_seek_audio_data (GstElement * appsrc, guint64 position, gpointer user_data MMPLAYER_RETURN_VAL_IF_FAIL( player, FALSE ); - LOGD("app-src: seek audio data\n"); + LOGD("app-src: seek audio data %llu\n", position); if (player->media_stream_seek_data_cb[type]) { @@ -16286,7 +16304,7 @@ __gst_seek_video_data (GstElement * appsrc, guint64 position, gpointer user_data MMPLAYER_RETURN_VAL_IF_FAIL( player, FALSE ); - LOGD("app-src: seek video data\n"); + LOGD("app-src: seek video data %llu\n", position); if (player->media_stream_seek_data_cb[type]) { @@ -16350,3 +16368,21 @@ int _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) +{ + mm_player_t* player = (mm_player_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)\n", MMPLAYER_CURRENT_STATE(player), *num, *extra_num); + + MMPLAYER_FLEAVE(); + return MM_ERROR_NONE; +} +