Commit b36bc81c authored by Anton Khirnov's avatar Anton Khirnov

avplay: add support for seeking to chapter marks

parent f548f9f9
...@@ -2601,6 +2601,33 @@ static void toggle_audio_display(void) ...@@ -2601,6 +2601,33 @@ static void toggle_audio_display(void)
} }
} }
static void seek_chapter(VideoState *is, int incr)
{
int64_t pos = get_master_clock(is) * AV_TIME_BASE;
int i;
if (!is->ic->nb_chapters)
return;
/* find the current chapter */
for (i = 0; i < is->ic->nb_chapters; i++) {
AVChapter *ch = is->ic->chapters[i];
if (av_compare_ts(pos, AV_TIME_BASE_Q, ch->start, ch->time_base) < 0) {
i--;
break;
}
}
i += incr;
i = FFMAX(i, 0);
if (i >= is->ic->nb_chapters)
return;
av_log(NULL, AV_LOG_VERBOSE, "Seeking to chapter %d.\n", i);
stream_seek(is, av_rescale_q(is->ic->chapters[i]->start, is->ic->chapters[i]->time_base,
AV_TIME_BASE_Q), 0, 0);
}
/* handle an event sent by the GUI */ /* handle an event sent by the GUI */
static void event_loop(void) static void event_loop(void)
{ {
...@@ -2646,6 +2673,12 @@ static void event_loop(void) ...@@ -2646,6 +2673,12 @@ static void event_loop(void)
case SDLK_w: case SDLK_w:
toggle_audio_display(); toggle_audio_display();
break; break;
case SDLK_PAGEUP:
seek_chapter(cur_stream, 1);
break;
case SDLK_PAGEDOWN:
seek_chapter(cur_stream, -1);
break;
case SDLK_LEFT: case SDLK_LEFT:
incr = -10.0; incr = -10.0;
goto do_seek; goto do_seek;
......
...@@ -147,6 +147,9 @@ Seek backward/forward 10 seconds. ...@@ -147,6 +147,9 @@ Seek backward/forward 10 seconds.
@item down/up @item down/up
Seek backward/forward 1 minute. Seek backward/forward 1 minute.
@item PGDOWN/PGUP
Seek to the previous/next chapter.
@item mouse click @item mouse click
Seek to percentage in file corresponding to fraction of width. Seek to percentage in file corresponding to fraction of width.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment