resindvd: send duration message on duration updates
authorStefan Sauer <ensonic@users.sf.net>
Tue, 13 Dec 2011 22:43:59 +0000 (23:43 +0100)
committerStefan Sauer <ensonic@users.sf.net>
Sun, 4 Mar 2012 18:57:14 +0000 (19:57 +0100)
When we know a new duration, report it. Add more logging.

ext/resindvd/resindvdsrc.c

index 5332075..76139aa 100644 (file)
@@ -1036,6 +1036,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
       break;
     case DVDNAV_CELL_CHANGE:{
       dvdnav_cell_change_event_t *event = (dvdnav_cell_change_event_t *) data;
+      GstMessage *message;
 
       src->pgc_duration = MPEGTIME_TO_GSTTIME (event->pgc_length);
       /* event->cell_start has the wrong time - it doesn't handle
@@ -1049,6 +1050,10 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
           GST_TIME_FORMAT, GST_TIME_ARGS (src->pgc_duration),
           GST_TIME_ARGS (src->cur_position));
 
+      message = gst_message_new_duration (GST_OBJECT (src), GST_FORMAT_TIME,
+          src->pgc_duration);
+      gst_element_post_message (GST_ELEMENT (src), message);
+
       rsn_dvdsrc_prepare_streamsinfo_event (src);
       src->need_tag_update = TRUE;
 
@@ -2485,6 +2490,9 @@ rsn_dvdsrc_src_query (GstBaseSrc * basesrc, GstQuery * query)
       if (format == GST_FORMAT_TIME) {
         if (src->pgc_duration != GST_CLOCK_TIME_NONE) {
           val = src->pgc_duration;
+
+          GST_DEBUG_OBJECT (src, "duration : %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (val));
           gst_query_set_duration (query, format, val);
           res = TRUE;
         }