Получение буферов

[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменён MediaPlayer, IMFMediaEngineи аудио- и видеозахватом в «Media Foundation». Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует для новых программ использовать MediaPlayer, IMFMediaEngine и захват аудио и видео в Media Foundation, когда это возможно, вместо DirectShow. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Если ваш фильтр имеет специальный распределитель, использующий ресурсы фильтра, метод IMemAllocator::GetBuffer должен содержать блокировку потоковой передачи, как и другие методы потоковой передачи:

HRESULT CMyInputAllocator::GetBuffer(
    IMediaSample **ppBuffer,
    REFERENCE_TIME *pStartTime, 
    REFERENCE_TIME *pEndTime,
    DWORD dwFlags)
{
    CAutoLock cObjectLock(&m_csReceive);

    /* Use resources. */

    return CMemAllocator::GetBuffer(ppBuffer, pStartTime, pEndTime, dwFlags);    
}

Нити и критические секции