mirror of https://git.ffmpeg.org/ffmpeg.git
avplay: add support for seeking to chapter marks
This commit is contained in:
parent
f548f9f9e7
commit
b36bc81cca
33
avplay.c
33
avplay.c
|
@ -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 */
|
||||
static void event_loop(void)
|
||||
{
|
||||
|
@ -2646,6 +2673,12 @@ static void event_loop(void)
|
|||
case SDLK_w:
|
||||
toggle_audio_display();
|
||||
break;
|
||||
case SDLK_PAGEUP:
|
||||
seek_chapter(cur_stream, 1);
|
||||
break;
|
||||
case SDLK_PAGEDOWN:
|
||||
seek_chapter(cur_stream, -1);
|
||||
break;
|
||||
case SDLK_LEFT:
|
||||
incr = -10.0;
|
||||
goto do_seek;
|
||||
|
|
|
@ -147,6 +147,9 @@ Seek backward/forward 10 seconds.
|
|||
@item down/up
|
||||
Seek backward/forward 1 minute.
|
||||
|
||||
@item PGDOWN/PGUP
|
||||
Seek to the previous/next chapter.
|
||||
|
||||
@item mouse click
|
||||
Seek to percentage in file corresponding to fraction of width.
|
||||
|
||||
|
|
Loading…
Reference in New Issue