# HG changeset patch # User nicodvb # Date 1155919943 0 # Node ID e451718727d94b098aae7fccb84bdfd04bb6e661 # Parent 7bddb8ee9decf48441bc58ab7e7efcddce2a3c2f seek to chapter using newly introduced demux_seek_chapter() diff -r 7bddb8ee9dec -r e451718727d9 mplayer.c --- 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