Поделиться через


Доставка конца потока

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

Когда пин-код ввода получает уведомление об окончании потока, он распространяет вызов ниже. Все подчиненные фильтры, получающие данные из этого входного пин-кода, также должны получать уведомление об окончании потока. Опять же, примите блокировку потоковой передачи, а не блокировку фильтра. Если фильтр содержит ожидающие данные, которые еще не были доставлены, фильтр должен доставить их сейчас, прежде чем отправлять уведомление об окончании потока. Он не должен отправлять данные после окончания потока.

HRESULT CMyInputPin::EndOfStream()
{
    CAutoLock lock_it(&m_csReceive);

    /* If the pin has not delivered all of the data in the stream 
       (based on what it received previously), do so now.  */

    // Propagate EndOfStream call downstream, via your output pin(s).
    for (each output pin)
    {    
        hr = pOutputPin->DeliverEndOfStream();
    }
    return S_OK;
}

Метод CBaseOutputPin::D eliverEndOfStream вызывает IPin::EndOfStream в нисходящем входном контакте.

Потоки и критические разделы