mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-27 13:30:45 +00:00
avdevice/sdl2: add option to set window position
Allows arrangement of multiple windows such as: ffmpeg -re -f lavfi -i mandelbrot -f sdl -window_x 1 -window_y 1 mandelbrot -vf waveform,format=yuv420p -f sdl -window_x 641 -window_y 1 waveform -vf vectorscope,format=yuv420p -f sdl -window_x 1 -window_y 481 vectorscop Some changes by Marton Balint: - allow negative position (partially or fully out-of-screen positions seem to be sanitized automatically by SDL (or my WM?), so no special handling is needed) - only show window after the position is set - do not use resizable and borderless flags at the same time, that caused issues in ffplay - add docs Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
3f2103ec73
commit
110b4a4918
@ -398,6 +398,10 @@ Set the SDL window size, can be a string of the form
|
||||
If not specified it defaults to the size of the input video,
|
||||
downscaled according to the aspect ratio.
|
||||
|
||||
@item window_x
|
||||
@item window_y
|
||||
Set the position of the window on the screen.
|
||||
|
||||
@item window_fullscreen
|
||||
Set fullscreen mode when non-zero value is provided.
|
||||
Default value is zero.
|
||||
|
@ -40,6 +40,7 @@ typedef struct {
|
||||
SDL_Renderer *renderer;
|
||||
char *window_title;
|
||||
int window_width, window_height; /**< size of the window */
|
||||
int window_x, window_y; /**< position of the window */
|
||||
int window_fullscreen;
|
||||
int window_borderless;
|
||||
int enable_quit_action;
|
||||
@ -155,8 +156,6 @@ static int sdl2_write_trailer(AVFormatContext *s)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define SDL_BASE_FLAGS (SDL_SWSURFACE|SDL_WINDOW_RESIZABLE)
|
||||
|
||||
static int sdl2_write_header(AVFormatContext *s)
|
||||
{
|
||||
SDLContext *sdl = s->priv_data;
|
||||
@ -196,8 +195,9 @@ static int sdl2_write_header(AVFormatContext *s)
|
||||
}
|
||||
|
||||
/* resize texture to width and height from the codec context information */
|
||||
flags = SDL_BASE_FLAGS | (sdl->window_fullscreen ? SDL_WINDOW_FULLSCREEN : 0) |
|
||||
(sdl->window_borderless ? SDL_WINDOW_BORDERLESS : 0);
|
||||
flags = SDL_WINDOW_HIDDEN |
|
||||
(sdl->window_fullscreen ? SDL_WINDOW_FULLSCREEN : 0) |
|
||||
(sdl->window_borderless ? SDL_WINDOW_BORDERLESS : SDL_WINDOW_RESIZABLE);
|
||||
|
||||
/* initialization */
|
||||
if (!sdl->inited){
|
||||
@ -216,6 +216,8 @@ static int sdl2_write_header(AVFormatContext *s)
|
||||
}
|
||||
|
||||
SDL_SetWindowTitle(sdl->window, sdl->window_title);
|
||||
SDL_SetWindowPosition(sdl->window, sdl->window_x, sdl->window_y);
|
||||
SDL_ShowWindow(sdl->window);
|
||||
|
||||
sdl->texture = SDL_CreateTexture(sdl->renderer, sdl->texture_fmt, SDL_TEXTUREACCESS_STREAMING,
|
||||
codecpar->width, codecpar->height);
|
||||
@ -337,6 +339,8 @@ static int sdl2_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
static const AVOption options[] = {
|
||||
{ "window_title", "set SDL window title", OFFSET(window_title), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, AV_OPT_FLAG_ENCODING_PARAM },
|
||||
{ "window_size", "set SDL window forced size", OFFSET(window_width), AV_OPT_TYPE_IMAGE_SIZE, { .str = NULL }, 0, 0, AV_OPT_FLAG_ENCODING_PARAM },
|
||||
{ "window_x", "set SDL window x position", OFFSET(window_x), AV_OPT_TYPE_INT, { .i64 = SDL_WINDOWPOS_CENTERED }, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM },
|
||||
{ "window_y", "set SDL window y position", OFFSET(window_y), AV_OPT_TYPE_INT, { .i64 = SDL_WINDOWPOS_CENTERED }, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM },
|
||||
{ "window_fullscreen", "set SDL window fullscreen", OFFSET(window_fullscreen), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_ENCODING_PARAM },
|
||||
{ "window_borderless", "set SDL window border off", OFFSET(window_borderless), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_ENCODING_PARAM },
|
||||
{ "window_enable_quit", "set if quit action is available", OFFSET(enable_quit_action), AV_OPT_TYPE_INT, {.i64=1}, 0, 1, AV_OPT_FLAG_ENCODING_PARAM },
|
||||
|
@ -29,7 +29,7 @@
|
||||
|
||||
#define LIBAVDEVICE_VERSION_MAJOR 58
|
||||
#define LIBAVDEVICE_VERSION_MINOR 4
|
||||
#define LIBAVDEVICE_VERSION_MICRO 105
|
||||
#define LIBAVDEVICE_VERSION_MICRO 106
|
||||
|
||||
#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
|
||||
LIBAVDEVICE_VERSION_MINOR, \
|
||||
|
Loading…
Reference in New Issue
Block a user