Message ID | 20190510101217.871-1-daniel.kucera@gmail.com |
---|---|
State | Superseded |
Headers | show |
On 10-05-2019 03:42 PM, Daniel Kucera wrote: > From: Daniel Kucera <github@danman.eu> > > Signed-off-by: Daniel Kucera <github@danman.eu> > --- > doc/ffplay.texi | 2 ++ > fftools/ffplay.c | 4 ++++ > 2 files changed, 6 insertions(+) > > diff --git a/doc/ffplay.texi b/doc/ffplay.texi > index c305465078..a37c02dc0d 100644 > --- a/doc/ffplay.texi > +++ b/doc/ffplay.texi > @@ -66,6 +66,8 @@ Set custom interval, in seconds, for seeking using left/right keys. Default is 1 > Disable graphical display. > @item -noborder > Borderless window. > +@item -alwaysontop > +Window always on top. > @item -volume > Set the startup volume. 0 means silence, 100 means no volume reduction or > amplification. Negative values are treated as 0, values above 100 are treated > diff --git a/fftools/ffplay.c b/fftools/ffplay.c > index 8f050e16e6..931dc08e2d 100644 > --- a/fftools/ffplay.c > +++ b/fftools/ffplay.c > @@ -324,6 +324,7 @@ static int seek_by_bytes = -1; > static float seek_interval = 10; > static int display_disable; > static int borderless; > +static int alwaysontop; > static int startup_volume = 100; > static int show_status = 1; > static int av_sync_type = AV_SYNC_AUDIO_MASTER; > @@ -3581,6 +3582,7 @@ static const OptionDef options[] = { > { "seek_interval", OPT_FLOAT | HAS_ARG, { &seek_interval }, "set seek interval for left/right keys, in seconds", "seconds" }, > { "nodisp", OPT_BOOL, { &display_disable }, "disable graphical display" }, > { "noborder", OPT_BOOL, { &borderless }, "borderless window" }, > + { "alwaysontop", OPT_BOOL, { &alwaysontop }, "window always on top" }, > { "volume", OPT_INT | HAS_ARG, { &startup_volume}, "set startup volume 0=min 100=max", "volume" }, > { "f", HAS_ARG, { .func_arg = opt_format }, "force format", "fmt" }, > { "pix_fmt", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = opt_frame_pix_fmt }, "set pixel format", "format" }, > @@ -3722,6 +3724,8 @@ int main(int argc, char **argv) > > if (!display_disable) { > int flags = SDL_WINDOW_HIDDEN; > + if (alwaysontop) > + flags |= SDL_WINDOW_ALWAYS_ON_TOP; > if (borderless) > flags |= SDL_WINDOW_BORDERLESS; > else Can you also add a keypress event to make it switchable during play? Thanks, Gyan
> Can you also add a keypress event to make it switchable during play? > > Thanks, > Gyan I haven't found a function which would allow to modify window flags after creation: https://wiki.libsdl.org/SDL_GetWindowFlags
On Fri, May 10, 2019 at 12:12:17PM +0200, Daniel Kucera wrote: > From: Daniel Kucera <github@danman.eu> > > Signed-off-by: Daniel Kucera <github@danman.eu> > --- > doc/ffplay.texi | 2 ++ > fftools/ffplay.c | 4 ++++ > 2 files changed, 6 insertions(+) > > diff --git a/doc/ffplay.texi b/doc/ffplay.texi > index c305465078..a37c02dc0d 100644 > --- a/doc/ffplay.texi > +++ b/doc/ffplay.texi > @@ -66,6 +66,8 @@ Set custom interval, in seconds, for seeking using left/right keys. Default is 1 > Disable graphical display. > @item -noborder > Borderless window. > +@item -alwaysontop > +Window always on top. > @item -volume > Set the startup volume. 0 means silence, 100 means no volume reduction or > amplification. Negative values are treated as 0, values above 100 are treated > diff --git a/fftools/ffplay.c b/fftools/ffplay.c > index 8f050e16e6..931dc08e2d 100644 > --- a/fftools/ffplay.c > +++ b/fftools/ffplay.c > @@ -324,6 +324,7 @@ static int seek_by_bytes = -1; > static float seek_interval = 10; > static int display_disable; > static int borderless; > +static int alwaysontop; > static int startup_volume = 100; > static int show_status = 1; > static int av_sync_type = AV_SYNC_AUDIO_MASTER; > @@ -3581,6 +3582,7 @@ static const OptionDef options[] = { > { "seek_interval", OPT_FLOAT | HAS_ARG, { &seek_interval }, "set seek interval for left/right keys, in seconds", "seconds" }, > { "nodisp", OPT_BOOL, { &display_disable }, "disable graphical display" }, > { "noborder", OPT_BOOL, { &borderless }, "borderless window" }, > + { "alwaysontop", OPT_BOOL, { &alwaysontop }, "window always on top" }, > { "volume", OPT_INT | HAS_ARG, { &startup_volume}, "set startup volume 0=min 100=max", "volume" }, > { "f", HAS_ARG, { .func_arg = opt_format }, "force format", "fmt" }, > { "pix_fmt", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = opt_frame_pix_fmt }, "set pixel format", "format" }, > @@ -3722,6 +3724,8 @@ int main(int argc, char **argv) > > if (!display_disable) { > int flags = SDL_WINDOW_HIDDEN; > + if (alwaysontop) > + flags |= SDL_WINDOW_ALWAYS_ON_TOP; fails to build fftools/ffplay.c: In function ‘main’: fftools/ffplay.c:3728:22: error: ‘SDL_WINDOW_ALWAYS_ON_TOP’ undeclared (first use in this function) flags |= SDL_WINDOW_ALWAYS_ON_TOP; [...]
On 11-05-2019 09:03 PM, Michael Niedermayer wrote: > On Fri, May 10, 2019 at 12:12:17PM +0200, Daniel Kucera wrote: >> From: Daniel Kucera <github@danman.eu> >> >> Signed-off-by: Daniel Kucera <github@danman.eu> >> --- >> doc/ffplay.texi | 2 ++ >> fftools/ffplay.c | 4 ++++ >> 2 files changed, 6 insertions(+) >> >> diff --git a/doc/ffplay.texi b/doc/ffplay.texi >> index c305465078..a37c02dc0d 100644 >> --- a/doc/ffplay.texi >> +++ b/doc/ffplay.texi >> @@ -66,6 +66,8 @@ Set custom interval, in seconds, for seeking using left/right keys. Default is 1 >> Disable graphical display. >> @item -noborder >> Borderless window. >> +@item -alwaysontop >> +Window always on top. >> @item -volume >> Set the startup volume. 0 means silence, 100 means no volume reduction or >> amplification. Negative values are treated as 0, values above 100 are treated >> diff --git a/fftools/ffplay.c b/fftools/ffplay.c >> index 8f050e16e6..931dc08e2d 100644 >> --- a/fftools/ffplay.c >> +++ b/fftools/ffplay.c >> @@ -324,6 +324,7 @@ static int seek_by_bytes = -1; >> static float seek_interval = 10; >> static int display_disable; >> static int borderless; >> +static int alwaysontop; >> static int startup_volume = 100; >> static int show_status = 1; >> static int av_sync_type = AV_SYNC_AUDIO_MASTER; >> @@ -3581,6 +3582,7 @@ static const OptionDef options[] = { >> { "seek_interval", OPT_FLOAT | HAS_ARG, { &seek_interval }, "set seek interval for left/right keys, in seconds", "seconds" }, >> { "nodisp", OPT_BOOL, { &display_disable }, "disable graphical display" }, >> { "noborder", OPT_BOOL, { &borderless }, "borderless window" }, >> + { "alwaysontop", OPT_BOOL, { &alwaysontop }, "window always on top" }, >> { "volume", OPT_INT | HAS_ARG, { &startup_volume}, "set startup volume 0=min 100=max", "volume" }, >> { "f", HAS_ARG, { .func_arg = opt_format }, "force format", "fmt" }, >> { "pix_fmt", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = opt_frame_pix_fmt }, "set pixel format", "format" }, >> @@ -3722,6 +3724,8 @@ int main(int argc, char **argv) >> >> if (!display_disable) { >> int flags = SDL_WINDOW_HIDDEN; >> + if (alwaysontop) >> + flags |= SDL_WINDOW_ALWAYS_ON_TOP; > fails to build > > fftools/ffplay.c: In function ‘main’: > fftools/ffplay.c:3728:22: error: ‘SDL_WINDOW_ALWAYS_ON_TOP’ undeclared (first use in this function) > flags |= SDL_WINDOW_ALWAYS_ON_TOP; Is qualified as 'X11 only, >= SDL 2.0.5' at https://wiki.libsdl.org/SDL_WindowFlags Gyan
Dňa so 11. 5. 2019, 18:00 Gyan <ffmpeg@gyani.pro> napísal(a): > > > On 11-05-2019 09:03 PM, Michael Niedermayer wrote: > > On Fri, May 10, 2019 at 12:12:17PM +0200, Daniel Kucera wrote: > >> From: Daniel Kucera <github@danman.eu> > >> > >> Signed-off-by: Daniel Kucera <github@danman.eu> > >> --- > >> doc/ffplay.texi | 2 ++ > >> fftools/ffplay.c | 4 ++++ > >> 2 files changed, 6 insertions(+) > >> > >> diff --git a/doc/ffplay.texi b/doc/ffplay.texi > >> index c305465078..a37c02dc0d 100644 > >> --- a/doc/ffplay.texi > >> +++ b/doc/ffplay.texi > >> @@ -66,6 +66,8 @@ Set custom interval, in seconds, for seeking using > left/right keys. Default is 1 > >> Disable graphical display. > >> @item -noborder > >> Borderless window. > >> +@item -alwaysontop > >> +Window always on top. > >> @item -volume > >> Set the startup volume. 0 means silence, 100 means no volume > reduction or > >> amplification. Negative values are treated as 0, values above 100 are > treated > >> diff --git a/fftools/ffplay.c b/fftools/ffplay.c > >> index 8f050e16e6..931dc08e2d 100644 > >> --- a/fftools/ffplay.c > >> +++ b/fftools/ffplay.c > >> @@ -324,6 +324,7 @@ static int seek_by_bytes = -1; > >> static float seek_interval = 10; > >> static int display_disable; > >> static int borderless; > >> +static int alwaysontop; > >> static int startup_volume = 100; > >> static int show_status = 1; > >> static int av_sync_type = AV_SYNC_AUDIO_MASTER; > >> @@ -3581,6 +3582,7 @@ static const OptionDef options[] = { > >> { "seek_interval", OPT_FLOAT | HAS_ARG, { &seek_interval }, "set > seek interval for left/right keys, in seconds", "seconds" }, > >> { "nodisp", OPT_BOOL, { &display_disable }, "disable graphical > display" }, > >> { "noborder", OPT_BOOL, { &borderless }, "borderless window" }, > >> + { "alwaysontop", OPT_BOOL, { &alwaysontop }, "window always on > top" }, > >> { "volume", OPT_INT | HAS_ARG, { &startup_volume}, "set startup > volume 0=min 100=max", "volume" }, > >> { "f", HAS_ARG, { .func_arg = opt_format }, "force format", "fmt" > }, > >> { "pix_fmt", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = > opt_frame_pix_fmt }, "set pixel format", "format" }, > >> @@ -3722,6 +3724,8 @@ int main(int argc, char **argv) > >> > >> if (!display_disable) { > >> int flags = SDL_WINDOW_HIDDEN; > >> + if (alwaysontop) > >> + flags |= SDL_WINDOW_ALWAYS_ON_TOP; > > fails to build > > > > fftools/ffplay.c: In function ‘main’: > > fftools/ffplay.c:3728:22: error: ‘SDL_WINDOW_ALWAYS_ON_TOP’ undeclared > (first use in this function) > > flags |= SDL_WINDOW_ALWAYS_ON_TOP; > > Is qualified as 'X11 only, >= SDL 2.0.5' at > https://wiki.libsdl.org/SDL_WindowFlags > > Gyan > Since 2.0.6 it works on Windows too. >
>> >> Is qualified as 'X11 only, >= SDL 2.0.5' at >> https://wiki.libsdl.org/SDL_WindowFlags >> >> Gyan > > > Since 2.0.6 it works on Windows too. Ping.
On 13-05-2019 12:49 PM, Daniel Kučera wrote: >>> Is qualified as 'X11 only, >= SDL 2.0.5' at >>> https://wiki.libsdl.org/SDL_WindowFlags >>> >>> Gyan >> >> Since 2.0.6 it works on Windows too. > Ping. Michael needs to confirm whether the build failure he had was due to his SDL version < 2.0.5 Gyan
On Mon, May 13, 2019 at 12:54:58 +0530, Gyan wrote: > >> Since 2.0.6 it works on Windows too. > > Ping. > > Michael needs to confirm whether the build failure he had was due to his > SDL version < 2.0.5 I can at least confirm that 2.0.4, which I have installed on one machine, doesn't define this in the provided headers, and that ffmpeg doesn't build against 2.0.4 with this patch. So there should be an #ifdef SDL_WINDOW_ALWAYS_ON_TOP guard around this, and possibly around the options definition. (And the docs should mention it?) https://hg.libsdl.org/SDL/annotate/3beca914a2ad/include/SDL_video.h Not sure how Windows behaves if compiled against 2.0.5 with availability of the flag, but not the feature. ;-) [*] BTW, would this also be an option which could go into the "sdl2" output device? (I'm not happy with separate code bases for these, personally.) Moritz [*] My guess is that Windows just ignored this flag before its implementation: https://hg.libsdl.org/SDL/rev/2653833db94e
> > I can at least confirm that 2.0.4, which I have installed on one > machine, doesn't define this in the provided headers, and that ffmpeg > doesn't build against 2.0.4 with this patch. So there should be an > #ifdef SDL_WINDOW_ALWAYS_ON_TOP guard around this, and possibly around > the options definition. (And the docs should mention it?) > > https://hg.libsdl.org/SDL/annotate/3beca914a2ad/include/SDL_video.h > > Not sure how Windows behaves if compiled against 2.0.5 with > availability of the flag, but not the feature. ;-) [*] > > BTW, would this also be an option which could go into the "sdl2" output > device? (I'm not happy with separate code bases for these, personally.) > > Moritz > Thanks Moritz, I submited a new patch according to your recommendations. This patch compiles with 2.0.5 on Windows but doesn't have any effect (tested). I updated the docs to make this clear. Regarding libavdevice/sdl2 - this doesn't share the implementation of windows creation (which is shame) so this is a separate task to implement.
diff --git a/doc/ffplay.texi b/doc/ffplay.texi index c305465078..a37c02dc0d 100644 --- a/doc/ffplay.texi +++ b/doc/ffplay.texi @@ -66,6 +66,8 @@ Set custom interval, in seconds, for seeking using left/right keys. Default is 1 Disable graphical display. @item -noborder Borderless window. +@item -alwaysontop +Window always on top. @item -volume Set the startup volume. 0 means silence, 100 means no volume reduction or amplification. Negative values are treated as 0, values above 100 are treated diff --git a/fftools/ffplay.c b/fftools/ffplay.c index 8f050e16e6..931dc08e2d 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -324,6 +324,7 @@ static int seek_by_bytes = -1; static float seek_interval = 10; static int display_disable; static int borderless; +static int alwaysontop; static int startup_volume = 100; static int show_status = 1; static int av_sync_type = AV_SYNC_AUDIO_MASTER; @@ -3581,6 +3582,7 @@ static const OptionDef options[] = { { "seek_interval", OPT_FLOAT | HAS_ARG, { &seek_interval }, "set seek interval for left/right keys, in seconds", "seconds" }, { "nodisp", OPT_BOOL, { &display_disable }, "disable graphical display" }, { "noborder", OPT_BOOL, { &borderless }, "borderless window" }, + { "alwaysontop", OPT_BOOL, { &alwaysontop }, "window always on top" }, { "volume", OPT_INT | HAS_ARG, { &startup_volume}, "set startup volume 0=min 100=max", "volume" }, { "f", HAS_ARG, { .func_arg = opt_format }, "force format", "fmt" }, { "pix_fmt", HAS_ARG | OPT_EXPERT | OPT_VIDEO, { .func_arg = opt_frame_pix_fmt }, "set pixel format", "format" }, @@ -3722,6 +3724,8 @@ int main(int argc, char **argv) if (!display_disable) { int flags = SDL_WINDOW_HIDDEN; + if (alwaysontop) + flags |= SDL_WINDOW_ALWAYS_ON_TOP; if (borderless) flags |= SDL_WINDOW_BORDERLESS; else