/** * @file src/nvenc/nvenc_d3d11.h * @brief Declarations for abstract Direct3D11 NVENC encoder. */ #pragma once #ifdef _WIN32 #include #include #include "nvenc_base.h" namespace nvenc { _COM_SMARTPTR_TYPEDEF(ID3D11Device, IID_ID3D11Device); _COM_SMARTPTR_TYPEDEF(ID3D11Texture2D, IID_ID3D11Texture2D); _COM_SMARTPTR_TYPEDEF(IDXGIDevice, IID_IDXGIDevice); _COM_SMARTPTR_TYPEDEF(IDXGIAdapter, IID_IDXGIAdapter); /** * @brief Abstract Direct3D11 NVENC encoder. * Encapsulates common code used by native and interop implementations. */ class nvenc_d3d11: public nvenc_base { public: explicit nvenc_d3d11(NV_ENC_DEVICE_TYPE device_type): nvenc_base(device_type) {} ~nvenc_d3d11(); /** * @brief Get input surface texture. * @return Input surface texture. */ virtual ID3D11Texture2D * get_input_texture() = 0; protected: bool init_library() override; private: HMODULE dll = NULL; }; } // namespace nvenc #endif