X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=avplay.c;h=816733fe43119caeb3b5e54b08f99e199dcb6ffb;hb=d4ae8ac92f619507aadd021bb67b517d39d3a36f;hp=432db978236dbdd84ff69a72fb6ef76c664a5450;hpb=84f131921ffb43d8070d5680e91f6a24d66ccac4;p=ffmpeg diff --git a/avplay.c b/avplay.c index 432db978236..816733fe431 100644 --- a/avplay.c +++ b/avplay.c @@ -1323,6 +1323,8 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts, int64_t vp = &is->pictq[is->pictq_windex]; + vp->sar = src_frame->sample_aspect_ratio; + /* alloc or resize hardware picture buffer */ if (!vp->bmp || vp->reallocate || #if CONFIG_AVFILTER @@ -1386,7 +1388,7 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts, int64_t is->img_convert_ctx = sws_getCachedContext(is->img_convert_ctx, vp->width, vp->height, vp->pix_fmt, vp->width, vp->height, dst_pix_fmt, sws_flags, NULL, NULL, NULL); - if (is->img_convert_ctx == NULL) { + if (!is->img_convert_ctx) { fprintf(stderr, "Cannot initialize the conversion context\n"); exit(1); } @@ -2601,6 +2603,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 +2675,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;