mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-11 17:55:21 +00:00
ffplay: create the window and the renderer before starting playback
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
626d200e76
commit
84d31e2475
@ -361,6 +361,7 @@ static AVPacket flush_pkt;
|
|||||||
|
|
||||||
static SDL_Window *window;
|
static SDL_Window *window;
|
||||||
static SDL_Renderer *renderer;
|
static SDL_Renderer *renderer;
|
||||||
|
static SDL_RendererInfo renderer_info = {0};
|
||||||
|
|
||||||
static const struct TextureFormatEntry {
|
static const struct TextureFormatEntry {
|
||||||
enum AVPixelFormat format;
|
enum AVPixelFormat format;
|
||||||
@ -1320,38 +1321,15 @@ static int video_open(VideoState *is)
|
|||||||
h = default_height;
|
h = default_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!window) {
|
if (!window_title)
|
||||||
int flags = SDL_WINDOW_SHOWN;
|
window_title = input_filename;
|
||||||
if (!window_title)
|
SDL_SetWindowTitle(window, window_title);
|
||||||
window_title = input_filename;
|
|
||||||
if (is_full_screen)
|
|
||||||
flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
|
|
||||||
if (borderless)
|
|
||||||
flags |= SDL_WINDOW_BORDERLESS;
|
|
||||||
else
|
|
||||||
flags |= SDL_WINDOW_RESIZABLE;
|
|
||||||
window = SDL_CreateWindow(window_title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, w, h, flags);
|
|
||||||
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
|
|
||||||
if (window) {
|
|
||||||
SDL_RendererInfo info;
|
|
||||||
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
|
||||||
if (!renderer) {
|
|
||||||
av_log(NULL, AV_LOG_WARNING, "Failed to initialize a hardware accelerated renderer: %s\n", SDL_GetError());
|
|
||||||
renderer = SDL_CreateRenderer(window, -1, 0);
|
|
||||||
}
|
|
||||||
if (renderer) {
|
|
||||||
if (!SDL_GetRendererInfo(renderer, &info))
|
|
||||||
av_log(NULL, AV_LOG_VERBOSE, "Initialized %s renderer.\n", info.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
SDL_SetWindowSize(window, w, h);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!window || !renderer) {
|
SDL_SetWindowSize(window, w, h);
|
||||||
av_log(NULL, AV_LOG_FATAL, "SDL: could not set video mode - exiting\n");
|
SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
|
||||||
do_exit(is);
|
if (is_full_screen)
|
||||||
}
|
SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP);
|
||||||
|
SDL_ShowWindow(window);
|
||||||
|
|
||||||
is->width = w;
|
is->width = w;
|
||||||
is->height = h;
|
is->height = h;
|
||||||
@ -1362,7 +1340,7 @@ static int video_open(VideoState *is)
|
|||||||
/* display the current picture, if any */
|
/* display the current picture, if any */
|
||||||
static void video_display(VideoState *is)
|
static void video_display(VideoState *is)
|
||||||
{
|
{
|
||||||
if (!window)
|
if (!is->width)
|
||||||
video_open(is);
|
video_open(is);
|
||||||
|
|
||||||
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
|
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
|
||||||
@ -3744,6 +3722,31 @@ int main(int argc, char **argv)
|
|||||||
av_init_packet(&flush_pkt);
|
av_init_packet(&flush_pkt);
|
||||||
flush_pkt.data = (uint8_t *)&flush_pkt;
|
flush_pkt.data = (uint8_t *)&flush_pkt;
|
||||||
|
|
||||||
|
if (!display_disable) {
|
||||||
|
int flags = SDL_WINDOW_HIDDEN;
|
||||||
|
if (borderless)
|
||||||
|
flags |= SDL_WINDOW_BORDERLESS;
|
||||||
|
else
|
||||||
|
flags |= SDL_WINDOW_RESIZABLE;
|
||||||
|
window = SDL_CreateWindow(program_name, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, default_width, default_height, flags);
|
||||||
|
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
|
||||||
|
if (window) {
|
||||||
|
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||||
|
if (!renderer) {
|
||||||
|
av_log(NULL, AV_LOG_WARNING, "Failed to initialize a hardware accelerated renderer: %s\n", SDL_GetError());
|
||||||
|
renderer = SDL_CreateRenderer(window, -1, 0);
|
||||||
|
}
|
||||||
|
if (renderer) {
|
||||||
|
if (!SDL_GetRendererInfo(renderer, &renderer_info))
|
||||||
|
av_log(NULL, AV_LOG_VERBOSE, "Initialized %s renderer.\n", renderer_info.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!window || !renderer) {
|
||||||
|
av_log(NULL, AV_LOG_FATAL, "Failed to create window or renderer: %s", SDL_GetError());
|
||||||
|
do_exit(NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
is = stream_open(input_filename, file_iformat);
|
is = stream_open(input_filename, file_iformat);
|
||||||
if (!is) {
|
if (!is) {
|
||||||
av_log(NULL, AV_LOG_FATAL, "Failed to initialize VideoState!\n");
|
av_log(NULL, AV_LOG_FATAL, "Failed to initialize VideoState!\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user