Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
[De functie die is gekoppeld aan deze pagina, DirectShow, is een verouderde functie. Het is vervangen door MediaPlayer, IMFMediaEngineen Audio/Video Capture in Media Foundation. Deze functies zijn geoptimaliseerd voor Windows 10 en Windows 11. Microsoft raadt ten zeerste aan om nieuwe code te gebruiken MediaPlayer, IMFMediaEngine en Audio/Video Capture in Media Foundation in plaats van DirectShow, indien mogelijk. Microsoft stelt voor dat bestaande code die gebruikmaakt van de verouderde API's, indien mogelijk opnieuw worden geschreven om de nieuwe API's te gebruiken.]
Een filterketen is een reeks filters die aan de volgende voorwaarden voldoen:
- Elk filter in de keten heeft maximaal één verbonden invoerpin en één verbonden uitvoerpin.
- Het is mogelijk om elk filter in de keten te doorlopen zonder filters buiten de keten te doorlopen.
In het volgende diagram zijn bijvoorbeeld filters A-B, C–D en F–G–H filterketens. Elke subketen in F–G–H (F–G en G–H) is ook een filterketen. Een filterketen kan bestaan uit één filter, zodat filters A, B, C, D, F, G en H ook verschillende filterketens zijn. Filter E heeft twee invoerverbindingen, dus elke reeks filters die filter E bevat, is geen filterketen.
De interface IFilterChain biedt de volgende methoden voor het beheren van filterketens:
| Etiket | Waarde |
|---|---|
| IFilterChain::StartChain | Start een ketting. |
| IFilterChain::StopChain | Stopt een ketting. |
| IFilterChain::P auseChain | Onderbreekt een ketting. |
| IFilterChain::RemoveChain | Hiermee verwijdert u een keten uit de grafiek. |
Er is geen specifieke methode voor het toevoegen van een keten. Als u een keten wilt toevoegen, voegt u de nieuwe filters in met behulp van de methode IFilterGraph::AddFilter. Verbind vervolgens de filters door IGraphBuilder::Connect, IGraphBuilder::Renderof vergelijkbare methoden aan te roepen.
Wanneer de grafiek wordt uitgevoerd, kan een filterketen schakelen tussen actief en gestopt. Wanneer de grafiek is onderbroken, kan deze schakelen tussen onderbroken en gestopt. Dit zijn de enige statusovergangen die mogelijk zijn met filterketens.
Richtlijnen voor filterketens
Wanneer u IFilterChain methoden gebruikt, is het belangrijk om ervoor te zorgen dat de filters in de grafiek filterketenbewerkingen kunnen ondersteunen. Anders kunt u impasses of grafiekfouten veroorzaken. Filters die zijn verbonden met de keten, moeten correct functioneren nadat de status van de keten is gewijzigd.
De beste manier om IFilterChain te gebruiken, is met een set filters die u specifiek hebt ontworpen voor ketening. Gebruik de volgende richtlijnen om ervoor te zorgen dat uw filters veilig zijn voor filterketenbewerkingen. Deze punten verwijzen naar het volgende diagram.
- Voordat de status van de filterketen wordt gewijzigd, moeten alle aanroepen voor gegevensverwerking aan de grens van de filterketen worden voltooid. Deze regel is van toepassing op de methoden IMemInputPin::Receive, IPin::NewSegmenten IPin::EndOfStream. Filters in de keten moeten worden geretourneerd van aanroepen naar deze methoden die worden gemaakt door filters buiten de keten; en filters buiten de keten moeten worden geretourneerd uit aanroepen die zijn gedaan door filters binnen de keten.
In het vorige diagram moet filter B bijvoorbeeld alle aanroepen voor gegevensverwerking van filter A voltooien en moet filter E alle aanroepen van filter D voltooien. Als de spelden de IPinFlowControl en IPinConnection interfaces beschikbaar maken, kunt u de gegevens via de grafiek pushen door de IPinFlowControl::Block en IGraphConfig::P ushThroughData methoden aan te roepen, zoals beschreven in Dynamic Reconnection. Filters ondersteunen mogelijk ook privémethoden voor het pushen van de gegevens.
- Upstream-filters moeten verwachten dat de status van de keten verandert. Stel dat de keten in het vorige diagram is gestopt, maar dat A-aanroepen IMemInputPin::Receiveworden gefilterd. De aanroep mislukt en het antwoord van filter A is stoppen met streamen. Wanneer de toepassing de keten opnieuw start, heeft deze geen effect omdat filter A geen gegevens meer streamt.
- Downstreamfilters moeten ook verwachten dat de status van de keten verandert. Zo niet, dan kan het downstreamfilter worden geblokkeerd terwijl er wordt gewacht op voorbeelden die nooit binnenkomen. Zo vereisen multiplexer-filters (MUX) vaak gegevens uit al hun invoerpinnen. Het stoppen van de gegevensstroom van de ene invoerpin kan verhinderen dat de andere stromen worden verwerkt. Dit kan ertoe leiden dat de grafiek een impasse veroorzaakt.
- Elke pinverbinding van een filter buiten de keten naar een filter binnen de keten moet een eigen allocator hebben, die niet wordt gedeeld door andere verbindingen. Wanneer de keten de status wijzigt of uit de grafiek wordt verwijderd, wordt de allocator mogelijk gedecommitteerd. Als andere verbindingen dezelfde allocator gebruikten, kunnen ze geen voorbeelden meer verwerken.
- Verwijder geen keten tenzij de filters die zijn verbonden met de keten dynamische ontkoppeling ondersteunen. Normaal gesproken ondersteunen de verbonden filters de IPinConnection- of IPinFlowControl interface, maar kunnen in plaats daarvan privéinterfaces worden ondersteund.
Verwante onderwerpen