changeset 19436:e451718727d9

seek to chapter using newly introduced demux_seek_chapter()
author nicodvb
date Fri, 18 Aug 2006 16:52:23 +0000
parents 7bddb8ee9dec
children c73bf418b291
files mplayer.c
diffstat 1 files changed, 19 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- a/mplayer.c	Fri Aug 18 16:48:22 2006 +0000
+++ b/mplayer.c	Fri Aug 18 16:52:23 2006 +0000
@@ -4820,46 +4820,27 @@
     case MP_CMD_SEEK_CHAPTER : {
         int seek = cmd->args[0].v.i;
         int abs = (cmd->nargs > 1) ? cmd->args[1].v.i : 0;
-        int total;
-        int current;
-
-        if (!demuxer->num_chapters || !demuxer->chapters) {
-            if (seek > 0) {
-                abs_seek_pos = 0;
-                rel_seek_secs = 1000000000.;
-            } else
-                set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, MSGTR_OSDChapter, 0, MSGTR_Unknown);
-            break;
-        }
-
-        total = demuxer->num_chapters;
-
-        if (abs) {
-            current = seek;
+        int chap;
+        float next_pts = 0;
+
+        rel_seek_secs = 0;
+        abs_seek_pos = 0;
+        chap = demuxer_seek_chapter(demuxer, seek, abs, &next_pts);
+        if(chap != -1) {
+            if(next_pts > -1.0) {
+                abs_seek_pos = 1;
+                rel_seek_secs = next_pts;
+            }
+            if(demuxer->num_chapters > chap)
+                set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, MSGTR_OSDChapter,
+                chap, demuxer->chapters[chap].name);
         } else {
-            uint64_t now;
-            now = (sh_video ? sh_video->pts : (sh_audio ? sh_audio->pts : 0.)) * 1000 + .5;
-
-            for (current = total - 1; current >= 0; --current) {
-                demux_chapter_t* chapter = demuxer->chapters + current;
-                if (chapter->start <= now)
-                    break;
-            }
-            current += seek;
+            if (seek > 0)
+                rel_seek_secs = 1000000000.;
+            else
+                set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, MSGTR_OSDChapter, 0, MSGTR_Unknown);
         }
-        
-        if (current < 0) current = 0;
-        if (current >= total) {
-            current = total - 1;
-            abs_seek_pos = 0;
-            rel_seek_secs = 1000000000.;
-        } else {
-            abs_seek_pos = 1;
-            rel_seek_secs = demuxer->chapters[current].start / 1000.;
-        }
-
-        set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, MSGTR_OSDChapter,
-                current, demuxer->chapters[current].name);
+        break;
     } break;
     default : {
 #ifdef HAVE_NEW_GUI