From dbd653b6aaeee277ed3c6ffd6f940413c49a2489 Mon Sep 17 00:00:00 2001 From: "juan82.liu" Date: Tue, 28 Mar 2017 01:22:57 +0800 Subject: [PATCH] Patch to only send one seek event for the pipeline [Version] 0.1.19 [Profile] Mobile, Wearable, TV [Issue Type] Fix bugs Change-Id: I4fa0af2debcbeccc59cbb17e9a57c2e1e3ba08e8 --- packaging/capi-mediademuxer.spec | 2 +- src/port_gst/mediademuxer_port_gst.c | 25 +++++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/packaging/capi-mediademuxer.spec b/packaging/capi-mediademuxer.spec index 2ee5daf..b39adf5 100755 --- a/packaging/capi-mediademuxer.spec +++ b/packaging/capi-mediademuxer.spec @@ -1,6 +1,6 @@ Name: capi-mediademuxer Summary: A Media Demuxer library in Tizen Native API -Version: 0.1.18 +Version: 0.1.19 Release: 1 Group: Multimedia/API License: Apache-2.0 diff --git a/src/port_gst/mediademuxer_port_gst.c b/src/port_gst/mediademuxer_port_gst.c index 2d0e2b7..61be3e3 100755 --- a/src/port_gst/mediademuxer_port_gst.c +++ b/src/port_gst/mediademuxer_port_gst.c @@ -1627,6 +1627,7 @@ static int gst_demuxer_seek(MMHandleType pHandle, gint64 pos1) track *temp = head_track->head; track *temp_track = head_track->head; int indx = 0; + bool is_seek = FALSE; /* Setting each appsink to paused state before seek */ while (temp_track) { @@ -1652,20 +1653,23 @@ static int gst_demuxer_seek(MMHandleType pHandle, gint64 pos1) indx = 0; while (temp) { - MD_I("Got one element %p\n", temp->appsink); + MD_I("Got one element %p {%s}\n", temp->appsink, GST_ELEMENT_NAME(temp->appsink)); if (gst_handle->selected_tracks[indx] == true) { temp->need_codec_data = TRUE; - if (!gst_element_seek(temp->appsink, rate, GST_FORMAT_TIME, - GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT | GST_SEEK_FLAG_SNAP_BEFORE, - GST_SEEK_TYPE_SET, pos, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) { - MD_E("Seek failed!\n"); - goto ERROR; - } else { - MD_I("Seek success...setting appsink to playing state\n"); - if (gst_element_set_state(temp->appsink, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) { - MD_E("Failed to set into PLAYING state"); + + if (!is_seek) { + if (!gst_element_seek(temp->appsink, rate, GST_FORMAT_TIME, + GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT | GST_SEEK_FLAG_SNAP_BEFORE, + GST_SEEK_TYPE_SET, pos, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) { + MD_E("Seek failed!\n"); goto ERROR; } + is_seek = TRUE; + } + MD_I("Seek success...setting appsink to playing state\n"); + if (gst_element_set_state(temp->appsink, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) { + MD_E("Failed to set into PLAYING state"); + goto ERROR; } } indx++; @@ -1676,6 +1680,7 @@ static int gst_demuxer_seek(MMHandleType pHandle, gint64 pos1) temp = NULL; } } + MEDIADEMUXER_FLEAVE(); return MD_ERROR_NONE; ERROR: -- 2.7.4