Sync with 2.4 [Fixed seek issue]. 30/53330/1
authorDeepak Srivastava <srivastava.d@samsung.com>
Fri, 4 Dec 2015 03:48:54 +0000 (09:18 +0530)
committerDeepak Srivastava <srivastava.d@samsung.com>
Fri, 4 Dec 2015 03:49:47 +0000 (09:19 +0530)
Change-Id: I78a4939f10222436d133290e3a7f0a9db0993e45
Signed-off-by: Deepak Srivastava <srivastava.d@samsung.com>
src/port_gst/mediademuxer_port_gst.c

index 8adc11f5f7257533c3233ac9bd0588dcbdffdf08..8ef0e1bc2ce10a781a53ae3c3e2ca9473de01d64 100755 (executable)
@@ -1281,6 +1281,29 @@ static int gst_demuxer_seek(MMHandleType pHandle, gint64 pos1)
 
        gint64 pos = 0, len = 0;
        gdouble rate = 1;
+       track_info *head_track = &(gst_handle->info);
+       track *temp = head_track->head;
+       track *temp_track = head_track->head;
+       int indx = 0;
+
+       /* Setting each appsink to paused state before seek */
+       while (temp_track) {
+               if (gst_handle->selected_tracks[indx] == true) {
+                       if (gst_element_set_state(temp_track->appsink, GST_STATE_PAUSED) == GST_STATE_CHANGE_FAILURE) {
+                               MD_E("Failed to set into PAUSED state");
+                               goto ERROR;
+                       }
+                       MD_I("set the state to paused\n");
+               }
+               indx++;
+               if (temp_track->next) {
+                       track *next = temp_track->next;
+                       temp_track = next;
+               } else {
+                       temp_track = NULL;
+               }
+       }
+
        if (gst_element_query_position(gst_handle->pipeline, GST_FORMAT_TIME, &pos) &&
             gst_element_query_duration(gst_handle->pipeline, GST_FORMAT_TIME, &len)) {
                MD_I("Time: %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT "\r",
@@ -1293,9 +1316,7 @@ static int gst_demuxer_seek(MMHandleType pHandle, gint64 pos1)
        MD_I("NEW Time: %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT "\r",
             GST_TIME_ARGS(pos1), GST_TIME_ARGS(len));
 
-       track_info *head_track = &(gst_handle->info);
-       track *temp = head_track->head;
-       int indx = 0;
+       indx = 0;
        while (temp) {
                MD_I("Got one element %p\n", temp->appsink);
                if (gst_handle->selected_tracks[indx] == true) {
@@ -1305,7 +1326,11 @@ static int gst_demuxer_seek(MMHandleType pHandle, gint64 pos1)
                                MD_E("Seek failed!\n");
                                goto ERROR;
                        } else {
-                               MD_I("Seek success\n");
+                               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++;