dashdemux: do not send bogus duration messages when mediaPresentationDuration is...
authorGianluca Gennari <gennarone@gmail.com>
Fri, 19 Oct 2012 17:03:41 +0000 (19:03 +0200)
committerThiago Santos <thiago.sousa.santos@collabora.com>
Wed, 8 May 2013 21:14:03 +0000 (18:14 -0300)
ext/dash/gstdashdemux.c
ext/dash/gstmpdparser.c

index bf1655a..0832e7b 100644 (file)
@@ -673,12 +673,15 @@ gst_dash_demux_sink_event (GstPad * pad, GstEvent * event)
       if (!gst_mpd_client_is_live (demux->client)) {
         GstClockTime duration = gst_mpd_client_get_duration (demux->client);
 
-        GST_DEBUG_OBJECT (demux, "Sending duration message : %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (duration));
-        if (duration != GST_CLOCK_TIME_NONE)
+        if (duration != GST_CLOCK_TIME_NONE) {
+          GST_DEBUG_OBJECT (demux, "Sending duration message : %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (duration));
           gst_element_post_message (GST_ELEMENT (demux),
               gst_message_new_duration (GST_OBJECT (demux),
                   GST_FORMAT_TIME, duration));
+        } else {
+          GST_DEBUG_OBJECT (demux, "mediaPresentationDuration unknown, can not send the duration message");
+        }
       }
       gst_dash_demux_resume_download_task (demux);
       gst_dash_demux_resume_stream_task (demux);
index e508ff5..e0ffbb1 100644 (file)
@@ -2934,9 +2934,10 @@ gst_mpd_client_get_duration (GstMpdClient * client)
   g_return_val_if_fail (client != NULL, GST_CLOCK_TIME_NONE);
 
   GST_MPD_CLIENT_LOCK (client);
-  duration = client->mpd_node->mediaPresentationDuration * GST_MSECOND;
-  /* We can only get the duration for on-demand streams */
-  if (!duration) {
+  if (client->mpd_node->mediaPresentationDuration != -1) {
+    duration = client->mpd_node->mediaPresentationDuration * GST_MSECOND;
+  } else {
+    /* We can only get the duration for on-demand streams */
     duration = GST_CLOCK_TIME_NONE;
   }
   GST_MPD_CLIENT_UNLOCK (client);