[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