summaryrefslogtreecommitdiffstats
path: root/ext/resindvd/resindvdsrc.h
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@mad.scientist.com>2008-06-20 13:07:56 +0000
committerJan Schmidt <thaytan@mad.scientist.com>2008-06-20 13:07:56 +0000
commitdebbed3bff170171fb62938067259d931a041222 (patch)
treeb972c2124059d55e11a1b8c6d27b813ac09db2be /ext/resindvd/resindvdsrc.h
parentd190f3cf8406edf4686a2f7c9f633cca6b32f54f (diff)
downloadgst-plugins-bad-debbed3bff170171fb62938067259d931a041222.tar.gz
gst-plugins-bad-debbed3bff170171fb62938067259d931a041222.tar.bz2
gst-plugins-bad-debbed3bff170171fb62938067259d931a041222.zip
ext/resindvd/resindvdsrc.*: Schedule NAV packets and activate them with an async clock callback at the right moment. ...
Original commit message from CVS: * ext/resindvd/resindvdsrc.c: * ext/resindvd/resindvdsrc.h: Schedule NAV packets and activate them with an async clock callback at the right moment. This makes delayed menu highlights appear at the correct time and fixes Back To The Future. When outputting new segment in do_seek(), calculate our position value properly, so we report the right time when popping in and out of the menus. * ext/resindvd/rsnbasesrc.c: When handling a non-flushing seek, accumulate the segment, rather than having every seek start from 0 and messing with sync
Diffstat (limited to 'ext/resindvd/resindvdsrc.h')
-rw-r--r--ext/resindvd/resindvdsrc.h22
1 files changed, 21 insertions, 1 deletions
diff --git a/ext/resindvd/resindvdsrc.h b/ext/resindvd/resindvdsrc.h
index c0272c81..0b273da7 100644
--- a/ext/resindvd/resindvdsrc.h
+++ b/ext/resindvd/resindvdsrc.h
@@ -29,6 +29,7 @@
#include <dvdnav/dvdnav.h>
#include <dvdread/ifo_read.h>
+#include <dvdread/nav_read.h>
#else
@@ -36,7 +37,7 @@
#include <dvdnav/ifo_read.h>
#include <dvdnav/dvdnav.h>
-#include <dvdnav/nav_print.h>
+#include <dvdnav/nav_read.h>
#endif
@@ -84,16 +85,25 @@ struct _resinDvdSrc
gboolean running;
gboolean discont;
+ gboolean flushing_seek;
gboolean need_segment;
gboolean active_highlight;
GstBuffer *alloc_buf;
GstBuffer *next_buf;
+ /* TRUE if the next_buf is a nav block that needs enqueueing */
+ gboolean next_is_nav_block;
+ /* PTS for activating the pending nav block in next_buf */
+ GstClockTime next_nav_ts;
+ /* Track accumulated segment position, cleared by flushing */
+ GstSegment src_segment;
/* Start timestamp of the previous NAV block */
GstClockTime cur_start_ts;
/* End timestamp of the previous NAV block */
GstClockTime cur_end_ts;
+ /* base ts is cur_start_ts - cell_time for each VOBU */
+ GstClockTime cur_vobu_base_ts;
/* Position info of the previous NAV block */
GstClockTime cur_position;
/* Duration of the current PGC */
@@ -108,6 +118,16 @@ struct _resinDvdSrc
GstEvent *spu_select_event;
GstEvent *audio_select_event;
GstEvent *highlight_event;
+
+ /* GList of NAV packets awaiting activation, and the
+ * running times to activate them. */
+ GSList *pending_nav_blocks;
+ GSList *pending_nav_blocks_end;
+
+ GstClockID nav_clock_id;
+
+ gboolean have_pci;
+ pci_t cur_pci;
};
struct _resinDvdSrcClass