#pragma once #include #include #include #include #include #include namespace ZShell::wallpaper { class VideoDecoder { public: virtual ~VideoDecoder(); void setReadyCallback(std::function callback); void setFrameCallback(std::function callback); virtual bool start(const QString& path) = 0; virtual void stop() = 0; virtual bool importCurrentFrame() = 0; virtual void deleteTexture() = 0; [[nodiscard]] uint32_t textureId() const; [[nodiscard]] uint32_t chromaTextureId() const; [[nodiscard]] int colorMatrix() const; [[nodiscard]] int colorRange() const; [[nodiscard]] QSize frameSize() const; [[nodiscard]] virtual const char* backendName() const = 0; protected: std::function m_readyCb; std::function m_frameCb; uint32_t m_texY = 0; uint32_t m_texUV = 0; int m_matrix = 1; int m_range = 0; QSize m_size; }; enum class VideoBackend { Auto, Nvidia, Vaapi, None, }; std::unique_ptr createVideoDecoder( EGLDisplay display, VideoBackend hint = VideoBackend::Auto); const char* resolveBackendName(VideoBackend hint = VideoBackend::Auto); } // namespace ZShell::wallpaper