导读
本文适合对FFmpeg和DX有所了解的新手。
以下的文章包括从FFmpeg解码到DirectComposition上屏的两种实现方式。
正文
一、利用SwapChain上屏
1.创建设备并绑定交换链
//创建DXGI工厂
ComPtr<IDXGIFactory4> factory;
CreateDXGIFactory1(IID_PPV_ARGS(&factory));
//创建D3D设备
D3D_FEATURE_LEVEL featureLevelSupported;
D3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, D3D11_CREATE_DEVICE_BGRA_SUPPORT, nullptr, 0, D3D11_SDK_VERSION, d3dDevice.GetAddressOf(), &featureLevelSupported, nullptr);
ComPtr<IDXGIDevice> dxgiDevice;
d3dDevice.As(&dxgiDevice);
//创建DirectComposition设备
ComPtr<IDCompositionDesktopDevice> pDcomDevice;
DCompositionCreateDevice3(dxgiDevice.Get(), IID_PPV_ARGS(&pDcomDevice));
// 交换链描述符
DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {};
swapChainDesc.BufferCount = 2;
swapChainDesc.Width = m_width;
swapChainDesc.Height = m_height;
swapChainDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
sw