#pragma once #include "WallpaperEngine/Core/CVideo.h" #include "WallpaperEngine/Render/CWallpaper.h" extern "C" { #include #include #include #include } namespace WallpaperEngine::Render { class CVideo : public CWallpaper { public: CVideo (Core::CVideo* video, CContainer* container); void render () override; Core::CVideo* getVideo (); protected: friend class CWallpaper; static const std::string Type; private: void setSize (int width, int height); void restartStream (); void getNextFrame (); void writeFrameToImage (); AVFormatContext* m_formatCtx = nullptr; AVCodecContext* m_codecCtx = nullptr; AVFrame* m_videoFrame = nullptr; AVFrame* m_videoFrameRGB = nullptr; SwsContext* m_swsCtx = nullptr; uint8_t* m_buffer = nullptr; int m_videoStream = -1, m_audioStream = -1; }; };