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.
In een audiofiltergrafiek kan een audiostream stromen van de bronpin van het ene filter naar de sinkpin van een ander filter als de twee pinnen een gemeenschappelijke indeling voor de stream ondersteunen. Op dezelfde manier kan een client een audiostream verzenden naar een sinkpin op een filter of een audiostream ontvangen van een bronpin op een filter, alleen als de client en pin een gemeenschappelijke streamindeling ondersteunen. Audiofilters gebruiken een techniek genaamd gegevensknooppunt (kort voor snijpunt van gegevensbereik) om een stroomindeling te identificeren die gebruikelijk is voor twee pinnen of voor een client en een pin.
In Windows Server 2003, Windows XP, Windows 2000 en Windows Me/98 gebruikt het SysAudio-systeemstuurprogramma bijvoorbeeld de techniek voor gegevensknooppunten om een audiofiltergrafiek te maken door paren filterpinnen te verbinden die compatibele audiogegevensindelingen ondersteunen.
Een pin-fabriek specificeert de set formaten die elke pin ondersteunt als een array van gegevensbereiken, waarbij elk gegevensbereik een structuur van het type KSDATARANGE_AUDIO is. Een datarange stelt een algemeen indelingstype vast, dat kan zijn KSDATAFORMAT_WAVEFORMATEX of KSDATAFORMAT_DSOUND. Daarnaast geeft het gegevensbereik een bereik van waarden op voor elk van de volgende parameters:
Bits per voorbeeld
Voorbeeldfrequentie
Aantal kanalen
De KSDATARANGE_AUDIO structuur geeft zowel minimum- als maximumwaarden op voor de bits-per-sample- en samplefrequentiebereiken, maar alleen een maximum voor het aantal kanalen. Het minimale aantal kanalen is impliciet één.
De taak van het onderhandelen over een gemeenschappelijke gegevensindeling voor twee pinnen bestaat uit het vinden van twee gegevensbereiken- één van elke pin- die elkaar kruisen. Twee gegevensbereiken snijden elkaar als:
Ze ondersteunen dezelfde algemene golfindeling (KSDATAFORMAT_WAVEFORMATEX of KSDATAFORMAT_DSOUND).
De bits-per-samplebereiken overlappen elkaar.
Hun steekproeffrequentiebereiken overlappen.
Zoals eerder vermeld, impliceert de KSDATAFORMAT_AUDIO-structuur een hardwaremodel waarin het minimale aantal kanalen dat wordt ondersteund door een speld altijd één is. Volgens dit model moet het aantal kanalen voor twee pinnen altijd overlappen, omdat beide pinnen ten minste één kanaal ondersteunen. Een hardwareadapter met een minimum aantal kanalen groter dan één voldoet uiteraard niet aan dit model, maar het adapterstuurprogramma kan een eigen handler voor gegevensknooppunten bevatten om dit type probleem aan te pakken (zie het voorbeeld in Eigen Data-Intersection Handlers).
Bij het vinden van een paar overlappende gegevensbereiken voor de twee pinnen, selecteert de handler een gemeenschappelijke gegevensindeling uit de overlappingsregio.
Het aantal bits per sample wordt gekozen uit het gebied waarin de twee bits-per-sample-bereiken elkaar overlappen.
De steekproeffrequentie wordt geselecteerd in de regio waarin de twee steekproeffrequentiebereiken elkaar overlappen.
Het aantal kanalen wordt geselecteerd uit het gebied waarin de twee aantal kanalen reeksen elkaar overlappen.
Bij het onderhandelen over een gemeenschappelijke indeling voor de sinkpin van een audiopoortstuurprogramma en de bronpin van een ander filter (meestal het stuurprogramma van het KMixer-systeem), verkrijgt SysAudio eerst de gegevensbereikmatrix van de bronpin. SysAudio verzendt vervolgens een KSPROPERTY_PIN_DATAINTERSECTION aanvraag naar de sinkpin en bevat de gegevensbereikmatrix van de bronpin met deze aanvraag. De kernelstreaminglaag onderschept de aanvraag en roept iteratief de gegevenskruisingshandler van het poortstuurprogramma één keer aan voor elk opeenvolgend element in de gegevensbereiklijst van de bronpin, te beginnen met het eerste element, totdat de handler slaagt in het vinden van een gegevenskruising.
Bij elke aanroep die SysAudio uitvoert op de gegevensknooppunthandler van het poortstuurprogramma, verkrijgt de handler eerst de matrix van het gegevensbereik van de sinkpin uit het minipoortstuurprogramma. Vervolgens wordt de array doorlopen, beginnend met het eerste element, totdat het lukt een snijpunt te vinden tussen het gegevensbereik van een sinkpin en het huidige gegevensbereik van de bronpin. De handler selecteert een gemeenschappelijke indeling die zich binnen het snijpunt bevindt en deze indeling naar de aanroeper uitvoert.
Bij elke stap in de iteratie roept het poortstuurprogramma de eigen handler voor gegevensknooppunten van het minipoortstuurprogramma aan met de twee gegevensbereiken- één voor elk van de twee pinnen. Als bij een stap de eigen handler weigert om een controle van het gegevensknooppunt tussen de twee gegevensbereiken af te handelen, voert de handler voor het gegevensknooppunt van het poortstuurprogramma in plaats daarvan de controle uit.
Samenvattend is het zoeken naar een snijpunt tussen een gegevensbereik van een bronpin en een sink-pingegevensbereik een iteratief proces:
In de buitenste lus doorloopt de kernelstreaminglaag opeenvolgende elementen in de gegevensbereikmatrix van de bronpin, te beginnen met het eerste matrixelement.
In de binnenste lus doorloopt het poortstuurprogramma opeenvolgende elementen in de gegevensbereikmatrix van de sinkpin, te beginnen met het eerste matrixelement.
De zoekopdracht stopt bij het vinden van het eerste gegevensknooppunt. Dit proces geeft meestal de voorkeur aan de elementen aan het begin van de gegevensbereikmatrix van elke pin. Wanneer u een matrix met gegevensbereiken voor een speld opgeeft, moet een adapterstuurprogramma de matrixelementen ordenen door gegevensbereiken te plaatsen voor voorkeursindelingen aan het begin van de matrix.