diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-12-07 16:11:22 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-12-07 16:11:25 +0100 |
commit | c6959918f6ce82ae9a4a60af869f63ffa43f596d (patch) | |
tree | 2cd570fd9ddcaa1228af4fdff5cd7393e3c2a726 | |
parent | e8ac905daea47572abf90c873cd184dbfbbf34a7 (diff) | |
parent | ad01fae86d80c8a7ac87f6203d87418b898e62ab (diff) | |
download | ffmpeg-c6959918f6ce82ae9a4a60af869f63ffa43f596d.tar.gz |
Merge remote-tracking branch 'cus/stable'
* cus/stable:
ffplay: set default window size before starting audio
ffplay: factor out function setting default window size
ffplay: remove no longer necessary codec flush
ffplay: do not wait for flushing the picture queue on flush packet
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | ffplay.c | 37 |
1 files changed, 21 insertions, 16 deletions
@@ -1066,20 +1066,24 @@ static void sigterm_handler(int sig) exit(123); } +static void set_default_window_size(VideoPicture *vp) +{ + SDL_Rect rect; + calculate_display_rect(&rect, 0, 0, INT_MAX, vp->height, vp); + default_width = rect.w; + default_height = rect.h; +} + static int video_open(VideoState *is, int force_set_video_mode, VideoPicture *vp) { int flags = SDL_HWSURFACE | SDL_ASYNCBLIT | SDL_HWACCEL; int w,h; - SDL_Rect rect; if (is_full_screen) flags |= SDL_FULLSCREEN; else flags |= SDL_RESIZABLE; - if (vp && vp->width) { - calculate_display_rect(&rect, 0, 0, INT_MAX, vp->height, vp); - default_width = rect.w; - default_height = rect.h; - } + if (vp && vp->width) + set_default_window_size(vp); if (is_full_screen && fs_screen_width) { w = fs_screen_width; @@ -1376,10 +1380,14 @@ retry: if (vp->serial != is->videoq.serial) { pictq_next_picture(is); + is->video_current_pos = -1; redisplay = 0; goto retry; } + if (lastvp->serial != vp->serial && !redisplay) + is->frame_timer = av_gettime() / 1000000.0; + if (is->paused) goto display; @@ -1670,15 +1678,6 @@ static int get_video_frame(VideoState *is, AVFrame *frame, AVPacket *pkt, int *s if (pkt->data == flush_pkt.data) { avcodec_flush_buffers(is->video_st->codec); - - SDL_LockMutex(is->pictq_mutex); - // Make sure there are no long delay timers (ideally we should just flush the queue but that's harder) - while (is->pictq_size && !is->videoq.abort_request) { - SDL_CondWait(is->pictq_cond, is->pictq_mutex); - } - is->video_current_pos = -1; - is->frame_timer = (double)av_gettime() / 1000000.0; - SDL_UnlockMutex(is->pictq_mutex); return 0; } @@ -1995,7 +1994,6 @@ static int video_thread(void *arg) goto the_end; } the_end: - avcodec_flush_buffers(is->video_st->codec); #if CONFIG_AVFILTER avfilter_graph_free(&graph); #endif @@ -2820,6 +2818,13 @@ static int read_thread(void *arg) } is->show_mode = show_mode; + if (st_index[AVMEDIA_TYPE_VIDEO] >= 0) { + AVStream *st = ic->streams[st_index[AVMEDIA_TYPE_VIDEO]]; + AVCodecContext *avctx = st->codec; + VideoPicture vp = {.width = avctx->width, .height = avctx->height, .sar = av_guess_sample_aspect_ratio(ic, st, NULL)}; + if (vp.width) + set_default_window_size(&vp); + } /* open the streams */ if (st_index[AVMEDIA_TYPE_AUDIO] >= 0) { |