#ifndef AVVIDEODECODER_HPP #define AVVIDEODECODER_HPP #include "Printer/BambuTunnel.h" extern "C" { #include #include } #include #include #include #include class wxBitmap; class AVVideoDecoder { public: AVVideoDecoder(); ~AVVideoDecoder(); public: int open(Bambu_StreamInfo const &info); int open(AVCodecParameters const ¶meters); int decode(Bambu_Sample const &sample); int decode(AVPacket const &packet); int flush(); void close(); bool toWxImage(wxImage &image, wxSize const &size); bool toWxBitmap(wxBitmap &bitmap, wxSize const & size); // Native size of the most recently decoded frame, or an unspecified size if // nothing has decoded yet. Lets a caller learn the video dimensions when the // container/probe could not report them up front. wxSize decoded_frame_size() const { return got_frame_ && frame_ ? wxSize{frame_->width, frame_->height} : wxSize{}; } private: AVCodecContext *codec_ctx_ = nullptr; AVFrame * frame_ = nullptr; SwsContext * sws_ctx_ = nullptr; bool got_frame_ = false; int width_ { 0 }; // scale result width std::vector bits_; }; #endif // AVVIDEODECODER_HPP