[vlc-devel] [PATCH 2/7] qt: add API to detach video surface in the Compositor
Steve Lhomme
robux4 at ycbcr.xyz
Mon Aug 17 08:57:28 CEST 2020
On 2020-08-14 18:49, Pierre Lamot wrote:
> ---
> modules/gui/qt/Makefile.am | 1 +
> modules/gui/qt/maininterface/compositor.hpp | 29 ++++++++++++++++++-
> .../gui/qt/maininterface/compositor_dcomp.cpp | 17 +++++++++++
> .../gui/qt/maininterface/compositor_dcomp.hpp | 6 +++-
> .../gui/qt/maininterface/compositor_dummy.cpp | 19 +++++++++++-
> .../gui/qt/maininterface/compositor_dummy.hpp | 6 +++-
> 6 files changed, 74 insertions(+), 4 deletions(-)
>
> diff --git a/modules/gui/qt/Makefile.am b/modules/gui/qt/Makefile.am
> index 35f0d34f5e..86add9398b 100644
> --- a/modules/gui/qt/Makefile.am
> +++ b/modules/gui/qt/Makefile.am
> @@ -291,6 +291,7 @@ nodist_libqt_plugin_la_SOURCES = \
> gui/qt/dialogs/sout/sout.moc.cpp \
> gui/qt/dialogs/sout/sout_widgets.moc.cpp \
> gui/qt/dialogs/toolbar/toolbareditor.moc.cpp \
> + gui/qt/maininterface/compositor.moc.cpp \
> gui/qt/maininterface/compositor_dummy.moc.cpp \
> gui/qt/maininterface/interface_window_handler.moc.cpp \
> gui/qt/maininterface/main_interface.moc.cpp \
> diff --git a/modules/gui/qt/maininterface/compositor.hpp b/modules/gui/qt/maininterface/compositor.hpp
> index aef4e11a32..d5f2494fdd 100644
> --- a/modules/gui/qt/maininterface/compositor.hpp
> +++ b/modules/gui/qt/maininterface/compositor.hpp
> @@ -32,8 +32,21 @@ class MainInterface;
>
> namespace vlc {
>
> -class Compositor {
> +class Compositor : public QObject {
> + Q_OBJECT
> public:
> + enum VideoSurfaceTarget {
> + UNDEF = 0x0, //video not embed
This doesn't seem like a good name for that.
> + EMBED = 0x1, //embed in the main interface
> + WINDOWED = 0x2, //in a separate window
> + FULLSCREEN = 0x4, //in a fullscreen window (this is diffenrent than setting the main window fullscreen)
*different
> + };
> + Q_ENUM(VideoSurfaceTarget)
> +
> +
> + inline Compositor(QObject* parent)
> + : QObject(parent)
> + {}
>
> virtual ~Compositor() = default;
>
> @@ -42,8 +55,22 @@ public:
>
> virtual bool setupVoutWindow(vout_window_t *p_wnd) = 0;
>
> + /**
> + * @brief setVideoSurface move the video to a different surface
> + * @param target the destination (embed, windowed, ...)
> + * @param targetParam dependent on @a target
> + */
> + virtual void setVideoSurface(VideoSurfaceTarget target, QVariant targetParam = QVariant()) = 0;
> + virtual VideoSurfaceTarget getVideoSurface(QVariant* param = nullptr) = 0;
> +
> + /// returns a bitmask of supported video surface target modes
> + virtual VideoSurfaceTarget getSupportedVideoSurfaceModes() const = 0;
> +
> //factory
> static Compositor* createCompositor(intf_thread_t *p_intf);
> +
> +signals:
> + virtual void videoSurfaceChanged(VideoSurfaceTarget target, QVariant targetParam);
> };
>
>
> diff --git a/modules/gui/qt/maininterface/compositor_dcomp.cpp b/modules/gui/qt/maininterface/compositor_dcomp.cpp
> index 27d4a9d026..1b0b3d6517 100644
> --- a/modules/gui/qt/maininterface/compositor_dcomp.cpp
> +++ b/modules/gui/qt/maininterface/compositor_dcomp.cpp
> @@ -307,4 +307,21 @@ bool CompositorDirectComposition::setupVoutWindow(vout_window_t *p_wnd)
> return true;
> }
>
> +Compositor::VideoSurfaceTarget CompositorDirectComposition::getSupportedVideoSurfaceModes() const
> +{
> + return VideoSurfaceTarget::UNDEF;
By default the video is not embeded ?
> +}
> +
> +void CompositorDirectComposition::setVideoSurface(VideoSurfaceTarget target, QVariant targetParam)
> +{
> + //N/A
> +}
> +
> +Compositor::VideoSurfaceTarget CompositorDirectComposition::getVideoSurface(QVariant* param)
> +{
> + if (param)
> + *param = QVariant();
> + return VideoSurfaceTarget::UNDEF;
> +}
> +
> }
> diff --git a/modules/gui/qt/maininterface/compositor_dcomp.hpp b/modules/gui/qt/maininterface/compositor_dcomp.hpp
> index 1c415daf2a..47ab504fb2 100644
> --- a/modules/gui/qt/maininterface/compositor_dcomp.hpp
> +++ b/modules/gui/qt/maininterface/compositor_dcomp.hpp
> @@ -38,7 +38,7 @@ class MainInterface;
>
> namespace vlc {
>
> -class CompositorDirectComposition : public QObject, public Compositor
> +class CompositorDirectComposition : public Compositor
> {
> Q_OBJECT
> public:
> @@ -52,6 +52,10 @@ public:
>
> bool setupVoutWindow(vout_window_t *p_wnd) override;
>
> + void setVideoSurface(VideoSurfaceTarget target, QVariant targetParam = QVariant()) override;
> + VideoSurfaceTarget getVideoSurface(QVariant* param = nullptr) override;
> + virtual VideoSurfaceTarget getSupportedVideoSurfaceModes() const override;
> +
> private:
> static int window_enable(struct vout_window_t *, const vout_window_cfg_t *);
> static void window_disable(struct vout_window_t *);
> diff --git a/modules/gui/qt/maininterface/compositor_dummy.cpp b/modules/gui/qt/maininterface/compositor_dummy.cpp
> index 81e5d3f867..0f21b89a33 100644
> --- a/modules/gui/qt/maininterface/compositor_dummy.cpp
> +++ b/modules/gui/qt/maininterface/compositor_dummy.cpp
> @@ -24,7 +24,7 @@
> namespace vlc {
>
> CompositorDummy::CompositorDummy(intf_thread_t *p_intf, QObject* parent)
> - : QObject(parent)
> + : Compositor(parent)
> , m_intf(p_intf)
> {
> }
> @@ -55,6 +55,23 @@ void CompositorDummy::destroyMainInterface()
> }
> }
>
> +void CompositorDummy::setVideoSurface(VideoSurfaceTarget, QVariant)
> +{
> + //N/A
> +}
> +
> +Compositor::VideoSurfaceTarget CompositorDummy::getSupportedVideoSurfaceModes() const
> +{
> + return VideoSurfaceTarget::UNDEF;
By default the video is not embeded ?
> +}
> +
> +Compositor::VideoSurfaceTarget CompositorDummy::getVideoSurface(QVariant* param)
> +{
> + if (param)
> + *param = QVariant();
> + return VideoSurfaceTarget::UNDEF;
> +}
> +
> bool CompositorDummy::setupVoutWindow(vout_window_t*)
> {
> //dummy compositor doesn't handle window intergration
> diff --git a/modules/gui/qt/maininterface/compositor_dummy.hpp b/modules/gui/qt/maininterface/compositor_dummy.hpp
> index 51647d1ac0..39b033536c 100644
> --- a/modules/gui/qt/maininterface/compositor_dummy.hpp
> +++ b/modules/gui/qt/maininterface/compositor_dummy.hpp
> @@ -29,7 +29,7 @@ class MainInterface;
>
> namespace vlc {
>
> -class CompositorDummy : public QObject, public Compositor
> +class CompositorDummy : public Compositor
> {
> Q_OBJECT
> public:
> @@ -39,6 +39,10 @@ public:
> virtual MainInterface *makeMainInterface() override;
> virtual void destroyMainInterface() override;
>
> + virtual void setVideoSurface(VideoSurfaceTarget target, QVariant targetParam = QVariant()) override;
> + VideoSurfaceTarget getSupportedVideoSurfaceModes() const override;
> + VideoSurfaceTarget getVideoSurface(QVariant* param = nullptr) override;
> +
> bool setupVoutWindow(vout_window_t *p_wnd) override;
>
> protected:
> --
> 2.25.1
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
>
More information about the vlc-devel
mailing list