resindvd: Use gst_base_src_new_seamless_segment()
authorJan Schmidt <thaytan@noraisin.net>
Sun, 1 Nov 2009 22:17:02 +0000 (23:17 +0100)
committerJan Schmidt <thaytan@noraisin.net>
Mon, 2 Nov 2009 01:54:23 +0000 (02:54 +0100)
When switching to a new seamless segment, use the new
gst_base_src_new_seamless_segment() function, because elements can't
send themselves seek events from the streaming thread.

ext/resindvd/resindvdsrc.c

index 9c2e8fb409d376427ef2ca8b58a45203764eaaac..b3bcdad390d0daf616325826696e5ccfdd0b0baa 100644 (file)
@@ -1310,23 +1310,30 @@ rsn_dvdsrc_create (RsnBaseSrc * bsrc, guint64 offset,
 
   if (src->need_segment) {
     /* Seamless segment update */
-    GstEvent *seek;
+    GstClockTime position = 0;
 
-    g_print ("Starting seamless segment update to %" GST_TIME_FORMAT " -> %"
-        GST_TIME_FORMAT " VOBU %" GST_TIME_FORMAT "\n",
+    if (src->cur_position != GST_CLOCK_TIME_NONE)
+      position += src->cur_position;
+    if (src->cur_vobu_base_ts != GST_CLOCK_TIME_NONE)
+      position += src->cur_vobu_base_ts;
+
+    GST_DEBUG_OBJECT (src,
+        "Starting seamless segment update to %" GST_TIME_FORMAT " -> %"
+        GST_TIME_FORMAT " VOBU %" GST_TIME_FORMAT " position %" GST_TIME_FORMAT,
         GST_TIME_ARGS (src->cur_start_ts), GST_TIME_ARGS (src->cur_end_ts),
-        GST_TIME_ARGS (src->cur_vobu_base_ts));
-    seek = gst_event_new_seek (segment->rate, rsndvd_format,
-        GST_SEEK_FLAG_NONE, GST_SEEK_TYPE_NONE, -1, GST_SEEK_TYPE_NONE, -1);
-    gst_element_send_event (GST_ELEMENT (src), seek);
+        GST_TIME_ARGS (src->cur_vobu_base_ts), GST_TIME_ARGS (position));
+
+    gst_base_src_new_seamless_segment (RSN_BASE_SRC (src),
+        src->cur_start_ts, -1, position);
+
     src->need_segment = FALSE;
   }
 
-  g_mutex_lock (src->dvd_lock);
-
   if (src->cur_end_ts != GST_CLOCK_TIME_NONE)
     gst_segment_set_last_stop (segment, GST_FORMAT_TIME, src->cur_end_ts);
 
+  g_mutex_lock (src->dvd_lock);
+
   if (src->next_buf != NULL) {
     /* Now that we're in the new segment, we can enqueue any nav packet
      * correctly */