mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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>
This commit is contained in:
commit
c6959918f6
41
ffplay.c
41
ffplay.c
@ -1066,21 +1066,25 @@ static void sigterm_handler(int sig)
|
|||||||
exit(123);
|
exit(123);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int video_open(VideoState *is, int force_set_video_mode, VideoPicture *vp)
|
static void set_default_window_size(VideoPicture *vp)
|
||||||
{
|
{
|
||||||
int flags = SDL_HWSURFACE | SDL_ASYNCBLIT | SDL_HWACCEL;
|
|
||||||
int w,h;
|
|
||||||
SDL_Rect rect;
|
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);
|
calculate_display_rect(&rect, 0, 0, INT_MAX, vp->height, vp);
|
||||||
default_width = rect.w;
|
default_width = rect.w;
|
||||||
default_height = rect.h;
|
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;
|
||||||
|
|
||||||
|
if (is_full_screen) flags |= SDL_FULLSCREEN;
|
||||||
|
else flags |= SDL_RESIZABLE;
|
||||||
|
|
||||||
|
if (vp && vp->width)
|
||||||
|
set_default_window_size(vp);
|
||||||
|
|
||||||
if (is_full_screen && fs_screen_width) {
|
if (is_full_screen && fs_screen_width) {
|
||||||
w = fs_screen_width;
|
w = fs_screen_width;
|
||||||
h = fs_screen_height;
|
h = fs_screen_height;
|
||||||
@ -1376,10 +1380,14 @@ retry:
|
|||||||
|
|
||||||
if (vp->serial != is->videoq.serial) {
|
if (vp->serial != is->videoq.serial) {
|
||||||
pictq_next_picture(is);
|
pictq_next_picture(is);
|
||||||
|
is->video_current_pos = -1;
|
||||||
redisplay = 0;
|
redisplay = 0;
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (lastvp->serial != vp->serial && !redisplay)
|
||||||
|
is->frame_timer = av_gettime() / 1000000.0;
|
||||||
|
|
||||||
if (is->paused)
|
if (is->paused)
|
||||||
goto display;
|
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) {
|
if (pkt->data == flush_pkt.data) {
|
||||||
avcodec_flush_buffers(is->video_st->codec);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1995,7 +1994,6 @@ static int video_thread(void *arg)
|
|||||||
goto the_end;
|
goto the_end;
|
||||||
}
|
}
|
||||||
the_end:
|
the_end:
|
||||||
avcodec_flush_buffers(is->video_st->codec);
|
|
||||||
#if CONFIG_AVFILTER
|
#if CONFIG_AVFILTER
|
||||||
avfilter_graph_free(&graph);
|
avfilter_graph_free(&graph);
|
||||||
#endif
|
#endif
|
||||||
@ -2820,6 +2818,13 @@ static int read_thread(void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
is->show_mode = show_mode;
|
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 */
|
/* open the streams */
|
||||||
if (st_index[AVMEDIA_TYPE_AUDIO] >= 0) {
|
if (st_index[AVMEDIA_TYPE_AUDIO] >= 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user