Remise de la fin du flux

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Lorsque la broche d’entrée reçoit une notification de fin de flux, elle propage l’appel en aval. Tous les filtres en aval qui reçoivent des données de cette broche d’entrée doivent également recevoir la notification de fin de flux. Là encore, prenez le verrou de diffusion en continu et non le verrou de filtre. Si le filtre contient des données en attente qui n’ont pas encore été remises, le filtre doit les remettre maintenant, avant d’envoyer la notification de fin de flux. Il ne doit pas envoyer de données après la fin du flux.

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;
}

La méthode CBaseOutputPin::D eliverEndOfStream appelle IPin::EndOfStream sur la broche d’entrée en aval.

Threads et sections critiques