既然使用ffmpeg gdigrab可以实现辅屏的采集,那么必须适配一下DXGI的多屏幕采集(先前实现参考《【音视频】WIN8|WIN10的桌面采集技术-DXGI(一)》)。
1、修改初始化d3d函数
将获取的IDXGIAdapter和IDXGIOutput保存为成员
int DuplicationCaptor::initD3d()
{
int err = ERROR_CODE_OK;
do {
err = getAdapter(&m_adapter, &m_output, m_outputIndex);
HCMDR_ERROR_CODE_BREAK(err);
err = createD3dDevice(m_adapter, &m_d3dDevice);
HCMDR_ERROR_CODE_BREAK(err);
} while (0);
return err;
}
其中getAdapter实现修改如下:
int DuplicationCaptor::getAdapter(IDXGIAdapter** adapter, IDXGIOutput** output, uint32_t& outputIndex)
{
int err = ERROR_CODE_OK;
do {
std::list<IDXGIAdapter*> adapters;
err = getAdapters(adapters);
HCMDR_ERROR_CODE_BREAK(err);
if (adapters.empty()) {
err = ERROR_CODE_DXGI_FOUND_ADAPTER_FAILED;
break;
}
bool found = false;
for (std::list<IDXGIAdapter*>::iterator it = adapters.begin(); it != adapters.end(); it++