#pragma once #include #include #include #include #include #include #include #include class mpv_handle; class mpv_opengl_cb_context; namespace QuickMedia { class VideoInitializationException : public std::runtime_error { public: VideoInitializationException(const std::string &errMsg) : std::runtime_error(errMsg) {} }; class VideoPlayer { public: // Throws VideoInitializationException on error VideoPlayer(unsigned int width, unsigned int height, const char *file, bool loop = false); ~VideoPlayer(); void setPosition(float x, float y); bool resize(const sf::Vector2i &size); void draw(sf::RenderWindow &window); // This counter is incremented when mpv wants to redraw content std::atomic_int redrawCounter; private: sf::Context context; mpv_handle *mpv; mpv_opengl_cb_context *mpvGl; std::thread renderThread; std::mutex renderMutex; sf::Sprite sprite; sf::Texture texture; sf::Uint8 *textureBuffer; bool alive; sf::Vector2i video_size; sf::Vector2i desired_size; }; }