Я использую образец Microsoft DX11VideoRenderer для рендеринга видео в реальном времени в Windows 10. Когда я запускаю только один поток, видео выглядит великолепно. Однако, когда я запускаю более 4 или 5 потоков, некоторые видео в соответствующих окнах начинают прерываться. Эффект может быть только часть или все видео окна.
Также я получаю несколько случайных ошибок от этого вызова функции в моем файле журнала:
hr = pVideoContext->VideoProcessorBlt(m_pVideoProcessor, pOutputView, 0, 1, &StreamData );
Возвращена ошибка: E_INVALIDARG Один или несколько аргументов недействительны 0x80070057
Я использую только Presenter.cpp и display.cpp модулей DX11VideoRenderer в моем коде. Источник находится по адресу:
Пример видео рендеринга DirectX
На начальном этапе я подозреваю, что DXVideoRenderer не может быть потокобезопасным. Я нашел эту информацию о многопоточности: Введение в многопоточность в Direct3D 11 , которая гласит:
Хотя использование контекста устройства (ID3D11DeviceContext) не является поточно-ориентированным, использование устройства Direct3D 11 (ID3D11Device) является поточно-ориентированным.
Но, похоже, поскольку я использую отдельные экземпляры класса CPresenter для каждого окна, не должно быть проблем с тем, что ID3D11DeviceContext не является потокобезопасным, поскольку каждое окно должно есть собственный экземпляр ID3D11DeviceContext .
У кого-нибудь есть опыт или идеи по поводу этого образца программного обеспечения DX11VideoRenderer и что может быть причиной этой проблемы?
Спасибо!
-UPDATE-
Мне удалось продублировать проблему только с одним окном, поэтому оно больше не является проблемой с многопоточностью. Если я много раз вручную изменяю размер окна, я иногда могу заставить видео в окне мерцать. Когда это происходит, я вижу в своем журнале, что при одном и том же вызове функции VideoProcessorBlt()
произошла ошибка с тем же кодом возврата, E_INVALIDARG .