From 4c0748f9f492782c7be35699bec1745d4e7293fc Mon Sep 17 00:00:00 2001 From: Eunhae Choi Date: Mon, 29 Aug 2016 15:15:26 +0900 Subject: add setting buffer duration before push Change-Id: I26df277d2771b5ce92bfaa854853da431c80ff07 --- packaging/libmm-player.spec | 2 +- src/mm_player_es.c | 28 +++++++++++++++++++++------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 6721aa3..d58a534 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.96 +Version: 0.5.97 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_player_es.c b/src/mm_player_es.c index 5033f13..c90924c 100644 --- a/src/mm_player_es.c +++ b/src/mm_player_es.c @@ -33,11 +33,14 @@ #include /*--------------------------------------------------------------------------- -| LOCAL VARIABLE DEFINITIONS for internal | +| LOCAL VARIABLE DEFINITIONS for internal | ---------------------------------------------------------------------------*/ +#define DEFAULT_FRAMERATE_NUM 30 +#define DEFAULT_FRAMERATE_DEN 1 +#define DEFAULT_VIDEO_FRAME_DURATION 33 /* ms */ /*--------------------------------------------------------------------------- -| LOCAL FUNCTION PROTOTYPES: | +| LOCAL FUNCTION PROTOTYPES: | ---------------------------------------------------------------------------*/ static int __parse_media_format(MMPlayerVideoStreamInfo * video, MMPlayerAudioStreamInfo * audio, media_format_h format); static int __convert_media_format_video_mime_to_str(MMPlayerVideoStreamInfo * video, media_format_mimetype_e mime); @@ -115,8 +118,6 @@ __parse_media_format(MMPlayerVideoStreamInfo * video, } if (video) { -#define DEFAULT_FRAMERATE_NUM 30 -#define DEFAULT_FRAMERATE_DEN 1 media_format_mimetype_e mime; int width = 0; int height = 0; @@ -478,6 +479,7 @@ _mmplayer_submit_packet(MMHandleType hplayer, media_packet_h packet) if (buf != NULL && size > 0) { GstMapInfo buff_info = GST_MAP_INFO_INIT; uint64_t pts = 0; + uint64_t duration = 0; /* get size */ _buffer = gst_buffer_new_and_alloc(size); @@ -506,13 +508,25 @@ _mmplayer_submit_packet(MMHandleType hplayer, media_packet_h packet) } media_format_unref(fmt); } + + /* get duration */ + if (media_packet_get_duration(packet, &duration) != MEDIA_PACKET_ERROR_NONE) { + LOGW("failed to get duration info"); + /* keep push without error handling */ + } + + if (duration == 0) { + duration = DEFAULT_VIDEO_FRAME_DURATION * GST_MSECOND; + } + + GST_BUFFER_DURATION(_buffer) = (GstClockTime)duration; } /* get pts */ if (media_packet_get_pts(packet, &pts) != MEDIA_PACKET_ERROR_NONE) { - LOGE("failed to get pts info"); - ret = MM_ERROR_PLAYER_INTERNAL; - goto ERROR; + LOGE("failed to get pts info"); + ret = MM_ERROR_PLAYER_INTERNAL; + goto ERROR; } GST_BUFFER_PTS(_buffer) = (GstClockTime)pts; gst_app_src_push_buffer(GST_APP_SRC(element), _buffer); -- cgit v1.2.3