summaryrefslogtreecommitdiffstats
path: root/ext/resindvd
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@mad.scientist.com>2008-10-07 21:29:26 +0000
committerJan Schmidt <thaytan@mad.scientist.com>2008-10-07 21:29:26 +0000
commita1b977dc8b3fe18c63cc7edbe2cefd38351b172c (patch)
treef08e92a6afbd70f7bff82c5139883793883671ae /ext/resindvd
parentb398d611a459a674d6d7f097350ce47fe7e721d1 (diff)
downloadgst-plugins-bad-a1b977dc8b3fe18c63cc7edbe2cefd38351b172c.tar.gz
gst-plugins-bad-a1b977dc8b3fe18c63cc7edbe2cefd38351b172c.tar.bz2
gst-plugins-bad-a1b977dc8b3fe18c63cc7edbe2cefd38351b172c.zip
ext/resindvd/resindvdsrc.c: Fix next/prev chapter seeking at the beginning or end.
Original commit message from CVS: * ext/resindvd/resindvdsrc.c: Fix next/prev chapter seeking at the beginning or end. Use 64-bit scaling utility functions for converting MPEG timestamps.
Diffstat (limited to 'ext/resindvd')
-rw-r--r--ext/resindvd/resindvdsrc.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/ext/resindvd/resindvdsrc.c b/ext/resindvd/resindvdsrc.c
index 371624e9..30b4a0d5 100644
--- a/ext/resindvd/resindvdsrc.c
+++ b/ext/resindvd/resindvdsrc.c
@@ -38,8 +38,10 @@ GST_DEBUG_CATEGORY_STATIC (rsndvdsrc_debug);
#define CLOCK_BASE 9LL
#define CLOCK_FREQ CLOCK_BASE * 10000
-#define MPEGTIME_TO_GSTTIME(time) (((time) * (GST_MSECOND/10)) / CLOCK_BASE)
-#define GSTTIME_TO_MPEGTIME(time) (((time) * CLOCK_BASE) / (GST_MSECOND/10))
+#define MPEGTIME_TO_GSTTIME(time) (gst_util_uint64_scale ((time), \
+ GST_MSECOND/10, CLOCK_BASE))
+#define GSTTIME_TO_MPEGTIME(time) (gst_util_uint64_scale ((time), \
+ CLOCK_BASE, GST_MSECOND/10))
typedef enum
{
@@ -1891,8 +1893,16 @@ rsn_dvdsrc_do_seek (RsnBaseSrc * bsrc, GstSegment * segment)
gint32 title, chapters, x;
if (dvdnav_current_title_info (src->dvdnav, &title, &x) ==
DVDNAV_STATUS_OK) {
- if (dvdnav_get_number_of_parts (src->dvdnav, title, &chapters) ==
- DVDNAV_STATUS_OK) {
+ if (segment->start + 1 == x) {
+ dvdnav_prev_pg_search (src->dvdnav);
+ ret = TRUE;
+ src->discont = TRUE;
+ } else if (segment->start == x + 1) {
+ dvdnav_next_pg_search (src->dvdnav);
+ ret = TRUE;
+ src->discont = TRUE;
+ } else if (dvdnav_get_number_of_parts (src->dvdnav, title,
+ &chapters) == DVDNAV_STATUS_OK) {
if (segment->start > 0 && segment->start <= chapters) {
dvdnav_part_play (src->dvdnav, title, segment->start);
ret = TRUE;