From: Younghwan Ahn Date: Wed, 22 May 2013 04:08:31 +0000 (+0900) Subject: add key frame seek X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8abc146d1cc0230f5a784c49675a07a02ab0f6fa;p=platform%2Fcore%2Fmultimedia%2Flibmm-player.git add key frame seek --- diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index 50dd46d..c68ad1d 100644 --- a/packaging/libmm-player.spec +++ b/packaging/libmm-player.spec @@ -1,7 +1,7 @@ Name: libmm-player Summary: Multimedia Framework Player Library Version: 0.2.20 -Release: 0 +Release: 1 Group: System/Libraries License: Apache-2.0 URL: http://source.tizen.org diff --git a/src/include/mm_player_capture.h b/src/include/mm_player_capture.h old mode 100755 new mode 100644 diff --git a/src/mm_player_attrs.c b/src/mm_player_attrs.c index 8e00ab3..4bf0319 100644 --- a/src/mm_player_attrs.c +++ b/src/mm_player_attrs.c @@ -931,6 +931,15 @@ _mmplayer_construct_attribute(MMHandleType handle) MM_ATTRS_VALID_TYPE_NONE, 0, 0 + }, + { + "accurate_seek", + MM_ATTRS_TYPE_INT, + MM_ATTRS_FLAG_RW, + (void *) 0, + MM_ATTRS_VALID_TYPE_INT_RANGE, + 0, + 1 } }; diff --git a/src/mm_player_capture.c b/src/mm_player_capture.c old mode 100755 new mode 100644 diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c old mode 100755 new mode 100644 index 8659350..fa95004 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -5485,6 +5485,8 @@ __gst_set_position(mm_player_t* player, int format, unsigned long position, gboo gint64 dur_nsec = 0; gint64 pos_nsec = 0; gboolean ret = TRUE; + gboolean accurated = FALSE; + GstSeekFlags seek_flags = GST_SEEK_FLAG_FLUSH; debug_fenter(); return_val_if_fail ( player && player->pipeline, MM_ERROR_PLAYER_NOT_INITIALIZED ); @@ -5519,6 +5521,16 @@ __gst_set_position(mm_player_t* player, int format, unsigned long position, gboo debug_log("playback rate: %f\n", player->playback_rate); + mm_attrs_get_int_by_name(player->attrs,"accurate_seek", &accurated); + if (accurated) + { + seek_flags |= GST_SEEK_FLAG_ACCURATE; + } + else + { + seek_flags |= GST_SEEK_FLAG_KEY_UNIT; + } + /* do seek */ switch ( format ) { @@ -5541,7 +5553,7 @@ __gst_set_position(mm_player_t* player, int format, unsigned long position, gboo pos_nsec = position * G_GINT64_CONSTANT(1000000); ret = __gst_seek ( player, player->pipeline->mainbin[MMPLAYER_M_PIPE].gst, player->playback_rate, - GST_FORMAT_TIME, ( GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE ), + GST_FORMAT_TIME, seek_flags, GST_SEEK_TYPE_SET, pos_nsec, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE ); if ( !ret ) { @@ -5567,7 +5579,7 @@ __gst_set_position(mm_player_t* player, int format, unsigned long position, gboo /* FIXIT : why don't we use 'GST_FORMAT_PERCENT' */ pos_nsec = (gint64) ( ( position * player->duration ) / 100 ); ret = __gst_seek ( player, player->pipeline->mainbin[MMPLAYER_M_PIPE].gst, player->playback_rate, - GST_FORMAT_TIME, ( GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE ), + GST_FORMAT_TIME, seek_flags, GST_SEEK_TYPE_SET, pos_nsec, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE ); if ( !ret ) {