/** * @file src/nvenc/nvenc_d3d11.h * @brief Declarations for abstract Direct3D11 NVENC encoder. */ #pragma once #ifdef _WIN32 // platform includes #include // standard includes #include #include // local includes #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_d3d11(); /** * @brief Get input surface texture. * @return Input surface texture. */ virtual ID3D11Texture2D *get_input_texture() = 0; protected: bool init_library(uint32_t api_version) override; bool wait_for_async_event(uint32_t timeout_ms) override; private: HMODULE dll = nullptr; uint32_t function_list_api_version = 0; uint32_t max_driver_api_version = 0; }; } // namespace nvenc #endif