Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Následující obrázek znázorňuje popisovač formátu dat pro vlnový zvukový stream.
Jak je uvedeno na obrázku, množství dalších informací o formátu, které následují za strukturou KSDATAFORMAT , se liší v závislosti na formátu dat.
Zvukové systémy používají tento typ popisovače formátu několika způsoby:
Popisovač formátu, jako je ten zobrazený na předchozím obrázku, se předává jako parametr volání do metody NewStream ovladače miniportu (například viz IMiniportWaveCyclic::NewStream).
ResultantFormat parametr metody IMiniport::DataRangeIntersection odkazuje na vyrovnávací paměť, do které metoda zapisuje popisovač formátu jako ten, který je znázorněn na předchozím obrázku.
Požadavek KSPROPERTY_PIN_DATAINTERSECTION „get-property“ načte popisovač formátu, podobně jako popisovač zobrazený na předchozím obrázku.
Požadavek KSPROPERTY_PIN_PROPOSEDATAFORMAT set-property přijímá popisovač formátu, jako je popisovač zobrazený na předchozím obrázku.
Podobný formát se používá pro parametr volání Connect funkce KsCreatePin. Tento parametr odkazuje na strukturu KSPIN_CONNECT na začátku vyrovnávací paměti, která rovněž zahrnuje popisovač formátu. Popisovač formátu, který bezprostředně následuje za strukturou KSPIN_CONNECT, začíná strukturou KSDATAFORMAT, jako je ta, která je znázorněna na předchozím obrázku.
Informace o formátu, které následují po struktuře KSDATAFORMAT, by měly mít formu struktury WAVEFORMATEXTENSIBLE. WAVEFORMATEXTENSIBLE je rozšířená verze WAVEFORMATEX, která může popsat širší škálu formátů než WAVEFORMATEX.
FUNKCE WAVEFORMAT je zastaralá a není podporována subsystémem ZVUK WDM v žádné verzi systému Microsoft Windows. STRUKTURA PCMWAVEFORMAT je rozšířená verze WAVEFORMAT, která je také zastaralá.
Čtyři struktury vlnových formátů --WAVEFORMAT, PCMWAVEFORMAT, WAVEFORMATEX a WAVEFORMATEXTENSIBLE---all začínají stejnými pěti členy, počínaje wFormatTag. Předchozí obrázek znázorňuje tyto čtyři struktury nad sebou, aby se zvýrazňovaly části struktur, které jsou identické.
WAVEFORMATEXTENSIBLE rozšiřuje WAVEFORMATEX přidáním tří členů, počínaje Samples.wValidBitsPerSample. (Ukázky je union, jehož jiný člen wValidSamplesPerBlock se používá místo wValidBitsPerSample pro některé komprimované formáty.) Člen wFormatTag, který ihned následuje za koncem struktury KSDATAFORMAT ve vyrovnávací paměti, určuje, jaký druh informací formátu následuje KSDATAFORMAT.
Na rozdíl od WAVEFORMATEX může WAVEFORMATEXTENSIBLE provádět následující akce:
Zadejte počet bitů na vzorek odděleně od velikosti ukázkového kontejneru. Například 20bitový vzorek lze uložit zarovnaný vlevo v kontejneru se třemi bajty. WAVEFORMATEX, která nerozlišuje počet datových bitů na vzorek od velikosti kontejneru vzorku, nemůže tento formát jednoznačně popsat.
Přiřaďte konkrétní umístění mluvčího ke zvukovým kanálům ve vícekanálovém streamu. WAVEFORMATEX nemá tuto schopnost a dokáže adekvátně podporovat pouze monofonní a (dvoukanálové) stereo streamy.
Starší verze použití WAVEFORMATEX
Jakýkoliv formát, který je popsán metodou WAVEFORMATEX, lze také popsat metodou WAVEFORMATEXTENSIBLE. Informace o převodu struktury WAVEFORMATEX na WAVEFORMATEXTENSIBLE naleznete v tématu Převod mezi formátovými značkami a identifikátory GUID podformátu.
WAVEFORMATEX je dostačující pro popis formátů s velikostí vzorku 8 nebo 16 bitů, ale WAVEFORMATEXTENSIBLE je nezbytné k adekvátně popsat formáty s přesností vzorku větší než 16 bitů. Zde jsou dva příklady:
Datový proud s přesností vzorku 24 bitů může pro efektivní zpracování použít 32bitovou velikost kontejneru, ale dá se převést na použití 24bitového kontejneru ke zlepšení efektivity úložiště bez ztráty dat.
Při zpracování datového proudu s 24bitovými ukázkovými daty může vykreslovací zařízení, které poskytuje pouze 20 bitů přesnosti, použít dithering ke zlepšení přesnosti výstupního signálu. Dithering však vyžaduje další dobu zpracování a pokud je původní datový proud přesný pouze na 20 bitů, další zpracování není nutné.
V obou těchto příkladech je možné zachovat kvalitu signálu a zároveň dosáhnout správného kompromisu mezi účinností zpracování a ukládání pouze v případě, že je známa přesnost vzorku i velikost kontejneru.
Pokud jednoduchý formát může být jednoznačně popsán metodou WAVEFORMATEX nebo strukturou WAVEFORMATEXTENSIBLE, má zvukový ovladač možnost vybrat některou strukturu pro popis formátu. Ovladače zvuku však obvykle používají WAVEFORMATEX k určení monofonního a (dvoukanálového) stereo PCM formátů s 8bitovými nebo 16bitovými vzorky a některé starší aplikace mohou očekávat, že všechny zvukové ovladače budou používat WAVEFORMATEX k určení těchto formátů.
Pokud ovladač podporuje formát zvuku, který lze jednoznačně zadat jako WAVEFORMATEX nebo WAVEFORMATEXTENSIBLE struktury, ovladač by měl rozpoznat formát bez ohledu na to, které ze dvou struktur klientská aplikace nebo komponenta používá k určení struktury. Pokud například zvukové zařízení podporuje formát 44,1 kHz, 16bitový stereo PCM, měl by miniportní ovladač přijmout tento formát prostřednictvím obslužné rutiny vlastnosti KSPROPERTY_PIN_PROPOSEDATAFORMAT i jeho implementace metody NewStream, a to bez ohledu na to, zda je formát zadán jako struktura WAVEFORMATEX nebo WAVEFORMATEXTENSIBLE.
Pro zjednodušení zpracování dat formátu ovladače obvykle používají struktury WAVEFORMATEXTENSIBLE k internímu znázornění formátů. Tento přístup může vyžadovat převod vstupní struktury WAVEFORMATEX na interní reprezentaci WAVEFORMATEXTENSIBLE nebo převod interního vyjádření WAVEFORMATEXTENSIBLE na výstupní strukturu WAVEFORMATEX.
V waveFORMATEXTENSIBLE je dwBitsPerSample velikost kontejneru a wValidBitsPerSample je počet platných datových bitů na vzorek. Kontejnery jsou v paměti vždy zarovnány na bajtovou hranici a velikost kontejneru musí být určena jako násobek osmi bitů.