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