#pragma once #include "video_sink.h" enum class recording_mode { stopped = 0, rpcs3, cell }; namespace utils { class video_provider { public: video_provider() = default; ~video_provider(); bool set_video_sink(std::shared_ptr sink, recording_mode type); void set_pause_time_us(usz pause_time_us); bool can_consume_frame(); void present_frame(std::vector& data, u32 pitch, u32 width, u32 height, bool is_bgra); void present_samples(u8* buf, u32 sample_count, u16 channels); private: recording_mode check_mode(); recording_mode m_type = recording_mode::stopped; std::shared_ptr m_video_sink; shared_mutex m_video_mutex{}; shared_mutex m_audio_mutex{}; atomic_t m_active{false}; atomic_t m_start_time_us{umax}; s64 m_last_video_pts_incoming = -1; s64 m_last_audio_pts_incoming = -1; usz m_pause_time_us = 0; }; } // namespace utils