#ifndef VIDEOSERVICE_H #define VIDEOSERVICE_H #include "thread_queue.h" #include #include #include #include extern "C" { #include #include #include } void AVFormatContextDeleter(AVFormatContext *context); void AVCodecContextDeleter(AVCodecContext *context); class VideoService { private: std::shared_ptr texture; std::unique_ptr> formatContext; std::unique_ptr> codecContext; ThreadQueue packetQueue; ThreadQueue frameQueue; ThreadQueue audioQueue; std::string_view filename; std::jthread decodeThread; int videoStreamIndex; int audioStreamIndex; int waitDelay = 50; unsigned int width; unsigned int height; std::stop_source stopSource; public: VideoService(std::string_view filename); ~VideoService() { if (decodeThread.joinable()) { decodeThread.join(); } } void InitContext(); void Decode(); }; #endif