diff options
author | Jan Schmidt <thaytan@mad.scientist.com> | 2008-10-07 21:29:26 +0000 |
---|---|---|
committer | Jan Schmidt <thaytan@mad.scientist.com> | 2008-10-07 21:29:26 +0000 |
commit | a1b977dc8b3fe18c63cc7edbe2cefd38351b172c (patch) | |
tree | f08e92a6afbd70f7bff82c5139883793883671ae | |
parent | b398d611a459a674d6d7f097350ce47fe7e721d1 (diff) | |
download | gst-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.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | ext/resindvd/resindvdsrc.c | 18 |
2 files changed, 21 insertions, 4 deletions
@@ -1,3 +1,10 @@ +2008-10-07 Jan Schmidt <jan.schmidt@sun.com> + + * ext/resindvd/resindvdsrc.c: + Fix next/prev chapter seeking at the beginning or end. + Use 64-bit scaling utility functions for converting MPEG + timestamps. + 2008-10-07 Wim Taymans <wim.taymans@collabora.co.uk> Patch by: HÃ¥vard Graff <havard dot graff at tandberg dot com> 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; |