#pragma once #include #include #include #include #ifndef NO_FFMPEG extern "C" { #include #include #include #include } #endif using Microsoft::WRL::ComPtr; class VideoEncoder { public: VideoEncoder(); ~VideoEncoder(); bool Initialize(ID3D11Device* device, int width, int height, int fps, int bitrate); bool Reinitialize(int width, int height, int fps, int bitrate); bool EncodeFrame(ID3D11Texture2D* texture, std::vector& outputData, bool& isKeyFrame); void Release(); private: ID3D11Device* device_ = nullptr; ID3D11DeviceContext* context_ = nullptr; ComPtr stagingTexture_; #ifndef NO_FFMPEG AVCodecContext* codecContext_ = nullptr; AVFrame* frame_ = nullptr; AVPacket* packet_ = nullptr; SwsContext* swsContext_ = nullptr; #else void* codecContext_ = nullptr; void* frame_ = nullptr; void* packet_ = nullptr; void* swsContext_ = nullptr; #endif int width_ = 0; int height_ = 0; int pts_ = 0; };