add key frame seek
authorYounghwan Ahn <younghwan_.an@samsung.com>
Wed, 22 May 2013 04:08:31 +0000 (13:08 +0900)
committerYounghwan Ahn <younghwan_.an@samsung.com>
Wed, 22 May 2013 04:08:31 +0000 (13:08 +0900)
packaging/libmm-player.spec
src/include/mm_player_capture.h [changed mode: 0755->0644]
src/mm_player_attrs.c
src/mm_player_capture.c [changed mode: 0755->0644]
src/mm_player_priv.c [changed mode: 0755->0644]

index 50dd46d..c68ad1d 100644 (file)
@@ -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
old mode 100755 (executable)
new mode 100644 (file)
index 8e00ab3..4bf0319 100644 (file)
@@ -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
                }
        };
 
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 8659350..fa95004
@@ -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  )
                        {