Delen via


Uitbreidbare Wave-Format Descriptors

In de volgende afbeelding ziet u de beschrijving van de gegevensindeling voor een golfaudiostream.

Diagram met een descriptor voor een golfvorm voor een audiostream.

Zoals aangegeven in de afbeelding, varieert de hoeveelheid aanvullende indelingsgegevens volgens de structuur KSDATAFORMAT , afhankelijk van de gegevensindeling.

Audiosystemen gebruiken dit type indelingsdescriptor op verschillende manieren:

  • Een indelingsdescriptor zoals in de vorige afbeelding wordt weergegeven, wordt doorgegeven als een aanroepparameter voor de NewStream-methode van een minipoortstuurprogramma (zie bijvoorbeeld IMiniportWaveCyclic::NewStream).

  • De parameter ResultantFormat van de methode IMiniport::D ataRangeIntersection verwijst naar een buffer waarin de methode een indelingsdescriptor schrijft zoals in de voorgaande afbeelding.

  • Met het opvragen van de KSPROPERTY_PIN_DATAINTERSECTION get-property wordt een formaatbeschrijving opgehaald, vergelijkbaar met degene in de vorige afbeelding.

  • De KSPROPERTY_PIN_PROPOSEDATAFORMAT aanvraag voor set-eigenschap accepteert een indelingsdescriptor zoals in de vorige afbeelding.

  • Een vergelijkbare indeling wordt gebruikt voor de verbindingsparameter van de functie KsCreatePin. Deze parameter verwijst naar de KSPIN_CONNECT structuur aan het begin van een buffer die ook een indelingsdescriptor bevat. De indelingsdescriptor, die direct volgt op de KSPIN_CONNECT structuur, begint met een KSDATAFORMAT-structuur zoals in de voorgaande afbeelding.

De indelingsinformatie die volgt op de structuur KSDATAFORMAT moet een WAVEFORMATEXTENSIBLE-structuur zijn. WAVEFORMATEXTENSIBLE is een uitgebreide versie van WAVEFORMATEX die een breder scala aan indelingen kan beschrijven dan WAVEFORMATEX.

WAVEFORMAT is verouderd en wordt niet ondersteund door het WDM-audiosubsysteem in een versie van Microsoft Windows. PCMWAVEFORMAT-structuur is een uitgebreide versie van WAVEFORMAT die ook verouderd is.

De vier waveformformat-structuren--WAVEFORMAT, PCMWAVEFORMAT, WAVEFORMATEX en WAVEFORMATEXTENSIBLE--beginnen allemaal met dezelfde vijf elementen, beginnend met wFormatTag. In de voorgaande afbeelding ziet u dat deze vier structuren elkaar vervangen om de gedeelten van de structuren te markeren die identiek zijn.

WAVEFORMATEXTENSIBLE breidt WAVEFORMATEX uit door drie leden toe te voegen, te beginnen met Samples.wValidBitsPerSample. (Voorbeelden is een samenvoeging waarvan het andere lid wValidSamplesPerBlock wordt gebruikt in plaats van wValidBitsPerSample voor bepaalde gecomprimeerde indelingen.) Het lid wFormatTag , dat onmiddellijk na het einde van de KSDATAFORMAT-structuur in de buffer volgt, geeft aan welk soort indelingsinformatie KSDATAFORMAT volgt.

In tegenstelling tot WAVEFORMATEX kan WAVEFORMATEXTENSIBLE het volgende doen:

  1. Geef het aantal bits per steekproef afzonderlijk op van de grootte van de voorbeeldcontainer. Een 20-bits sample kan links worden uitgelijnd opgeslagen in een container van drie bytes. WAVEFORMATEX, dat het aantal gegevensbits per steekproef niet kan onderscheiden van de grootte van de steekproefcontainer, kan een dergelijke indeling niet ondubbelzinnig beschrijven.

  2. Wijs specifieke sprekerlocaties toe aan audiokanalen in meerdere kanalen. WAVEFORMATEX heeft deze mogelijkheid niet en kan alleen mono- en (tweekanaals) stereostreams adequaat ondersteunen.

Verouderd gebruik van WAVEFORMATEX

Elke indeling die door WAVEFORMATEX wordt beschreven, kan ook worden beschreven door WAVEFORMATEXTENSIBLE. Zie Converting Between Format Tags and Subformat GUIDs voor informatie over het converteren van een WAVEFORMATEXEX STRUCTUUR naar WAVEFORMATEXTENSIBLE.

WAVEFORMATEX is voldoende voor het beschrijven van indelingen met steekproefgrootten van 8 of 16 bits, maar WAVEFORMATEXTENSIBLE is nodig om indelingen met een steekproefprecisie van meer dan 16 bits adequaat te beschrijven. Hieronder vindt u twee voorbeelden:

  • Een stream met een steekproefprecisie van 24 bits kan een 32-bits containergrootte gebruiken voor efficiënte verwerking, maar kan worden geconverteerd naar een 24-bits container om de opslagefficiëntie te verbeteren zonder gegevensverlies.

  • Bij het verwerken van een stroom met 24-bits voorbeeldgegevens kan een renderingapparaat dat slechts 20 bits precisie biedt, dithering gebruiken om de betrouwbaarheid van het uitvoersignaal te verbeteren. Dithering vereist echter extra verwerkingstijd en als de oorspronkelijke stroom slechts 20 bits nauwkeurig is, is de extra verwerking niet nodig.

In beide voorbeelden is het behouden van de signaalkwaliteit terwijl het juiste compromis tussen verwerking en opslagefficiëntie alleen mogelijk is als zowel de steekproefprecisie als de containergrootte bekend zijn.

Als een eenvoudige indeling ondubbelzinnig kan worden beschreven door een WAVEFORMATEX of een WAVEFORMATEXTENSIBLE-structuur, heeft een audiostuurprogramma de mogelijkheid om een van beide structuren te selecteren om de indeling te beschrijven. Audiostuurprogramma's hebben echter meestal WAVEFORMATEX gebruikt om mono- en (tweekanaals) stereo PCM-indelingen op te geven met 8-bits of 16-bits voorbeelden, en sommige oudere toepassingen verwachten dat alle audiostuurprogramma's WAVEFORMATEX gebruiken om deze indelingen op te geven.

Als een stuurprogramma een audio-indeling ondersteunt die ondubbelzinnig kan worden opgegeven als een WAVEFORMATEX of een WAVEFORMATEXTENSIBLE-structuur, moet het stuurprogramma de indeling herkennen, ongeacht welke van de twee structuren een clienttoepassing of onderdeel gebruikt om de structuur op te geven. Als een audioapparaat bijvoorbeeld een 44,1-kHz, 16-bits, stereo-PCM-indeling ondersteunt, moet de KSPROPERTY_PIN_PROPOSEDATAFORMAT eigenschapshandler van het minipoortstuurprogramma en de implementatie van de NewStream-methode deze indeling accepteren, ongeacht of de indeling is opgegeven als waveformatex of een WAVEFORMATEXTENSIBLE-structuur.

Om de verwerking van indelingsgegevens te vereenvoudigen, gebruiken stuurprogramma's doorgaans WAVEFORMATEXTENSIBLE-structuren om indelingen intern weer te geven. Deze benadering vereist mogelijk de conversie van een input WAVEFORMATEX-structuur naar een interne WAVEFORMATEXTENSIBLE-weergave of de conversie van een interne WAVEFORMATEXTENSIBLE-weergave naar een uitvoer WAVEFORMATEX-structuur.

In WAVEFORMATEXTENSIBLE is dwBitsPerSample de containergrootte en wValidBitsPerSample is het aantal geldige gegevensbits per steekproef. Containers worden altijd byte uitgelijnd in het geheugen en de containergrootte moet worden opgegeven als een veelvoud van acht bits.