Fixed mediademuxer unprepare failed issue after eos 24/117124/4 accepted/tizen/3.0/common/20170320.130519 accepted/tizen/3.0/ivi/20170320.080537 accepted/tizen/3.0/mobile/20170320.075227 accepted/tizen/3.0/tv/20170320.080023 accepted/tizen/3.0/wearable/20170320.080157 submit/tizen_3.0/20170317.034449
authorjuan82.liu <juan82.liu@samsung.com>
Thu, 2 Mar 2017 17:56:12 +0000 (01:56 +0800)
committerjuan82.liu <juan82.liu@samsung.com>
Sun, 5 Mar 2017 23:31:37 +0000 (07:31 +0800)
[Version] 0.1.18
[Profile] Mobile, Wearable, TV
[Issue Type] Fix bugs

Change-Id: I7675199b5a63994280ab6d1a8eda617237f63de3

packaging/capi-mediademuxer.spec
src/port_gst/mediademuxer_port_gst.c

index 4f0c60e..2ee5daf 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       capi-mediademuxer
 Summary:    A Media Demuxer library in Tizen Native API
-Version:    0.1.17
+Version:    0.1.18
 Release:    1
 Group:      Multimedia/API
 License:    Apache-2.0
@@ -41,7 +41,7 @@ export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE"
 %ifarch %{arm}
 export CFLAGS="$CFLAGS -DENABLE_FFMPEG_CODEC"
 %endif
-export CFLAGS="$CFLAGS -DSYSCONFDIR=\\\"%{_sysconfdir}\\\" "
+export CFLAGS="$CFLAGS -DSYSCONFDIR=\\\"%{_sysconfdir}\\\" -DTIZEN_FEATURE_GST_UPSTREAM"
 
 MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
 %cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER}
index b695807..2d0e2b7 100755 (executable)
@@ -459,6 +459,7 @@ int __gst_add_track_info(GstPad *pad, GstCaps *caps, track **head,
                MD_E("factory not able to make appsink");
                goto ERROR;
        }
+       g_object_set(G_OBJECT(temp->appsink), "wait-on-eos", TRUE, NULL);
 
        if (!gst_bin_add(GST_BIN(pipeline), temp->appsink)) {
                gst_object_unref(temp->appsink);
@@ -1020,6 +1021,7 @@ int _gst_set_appsink(track *temp, int index, int loop)
        }
        gst_app_sink_set_max_buffers((GstAppSink *)(temp->appsink), (guint) MAX_APP_BUFFER);
        gst_app_sink_set_drop((GstAppSink *)(temp->appsink), false);
+       gst_app_sink_set_wait_on_eos((GstAppSink *)(temp->appsink), true);
        MEDIADEMUXER_FLEAVE();
        return ret;
 }
@@ -1693,6 +1695,7 @@ int _gst_unset_appsink(track *temp, int index, int loop)
        }
        gst_app_sink_set_max_buffers((GstAppSink *)(temp->appsink), (guint)0);
        gst_app_sink_set_drop((GstAppSink *)(temp->appsink), true);
+       gst_app_sink_set_wait_on_eos((GstAppSink *)(temp->appsink), false);
        MEDIADEMUXER_FLEAVE();
        return ret;
 }
@@ -1778,6 +1781,25 @@ static int gst_demuxer_unprepare(MMHandleType pHandle)
        MEDIADEMUXER_CHECK_NULL(pHandle);
        mdgst_handle_t *gst_handle = (mdgst_handle_t *)pHandle;
 
+       /*Modification : Fix pipeline state change was block by appsink When EOS received and appsink also has many datas*/
+       int indx = 0;
+       track *atrack = gst_handle->info.head;
+       while (atrack) {
+               if ((gst_handle->selected_tracks)[indx] == false) {
+                       MD_I("Track [%d] Not selected\n", indx);
+               } else {
+                       MD_I("Track [%d] to unset appsink...\n", indx);
+                       gst_demuxer_unset_track(pHandle, indx);
+               }
+               if (atrack->next) {
+                       track *next = atrack->next;
+                       atrack = next;
+               } else {
+                       break;
+               }
+               indx++;
+       }
+
        _gst_clear_struct(gst_handle);
        if (gst_handle->bus_watch_id) {
                GSource *source = NULL;