Udostępnij przez


Właściwości filtra, pinezki i węzła

Sterowniki audio systemu Microsoft Windows Driver Model (WDM) reprezentują urządzenie audio jako filtr KS i reprezentują bufor sprzętowy na urządzeniu jako pinezkę filtru. Gdy klient wysyła żądanie właściwości do jednego z tych obiektów filtru lub przypinania, sterownik portu odbiera żądanie i kieruje żądanie do odpowiedniego programu obsługi właściwości w sterowniku portu lub sterownika miniportu.

Urządzenia audio obsługują trzy rodzaje właściwości:

  • Właściwości filtru

    Właściwość filtru jest właściwością całego filtru, a nie właściwością konkretnego pina lub węzła w filtrze. Żądania dotyczące właściwości filtru określają uchwyty filtru, ale nie określają identyfikatorów węzłów.

  • Właściwości przypinania

    Właściwość pinu jest właściwością konkretnego pinu na filtrze. Żądania dotyczące tych właściwości określają uchwyty pinów, ale nie określają identyfikatorów węzłów.

  • Właściwości węzła

    Właściwość węzła jest właściwością węzła topologii w filtrze. Żądanie właściwości węzła określa uchwyt filtru lub uchwyt pinu oraz identyfikator węzła.

To, czy żądanie właściwości węzła dotyczy filtra lub uchwytu pinu, zależy od tego, czy węzeł jest unikatowy dla filtra. Aby uzyskać więcej informacji, zobacz następującą sekcję Właściwości węzła.

Na poniższej ilustracji przedstawiono te trzy rodzaje żądań właściwości: żądanie właściwości pin wysłane do wystąpienia numeru PIN, żądanie właściwości węzła wysłane do węzła (w wystąpieniu filtru lub numeru PIN) oraz żądanie właściwości filtru wysłane do wystąpienia filtru.

Diagram ilustrujący żądania właściwości filtru, pinezki i węzła.

Zazwyczaj sterownik portu obsługuje większość żądań dotyczących właściwości filtru i pinezki, a sterownik miniportu obsługuje żądania dotyczące właściwości węzła.

Sterownik portu dostarcza własne wbudowane elementy obsługi dla właściwości filtru i pinów, które są używane przez sterownik systemowy SysAudio (zobacz KSPROPSETID_Sysaudio i KSPROPSETID_Sysaudio_Pin) oraz sterownik systemowy WDMAud. Sterownik miniportu nie musi implementować procedur obsługi dla właściwości obsługiwanych przez sterownik portu. Typowy sterownik miniportu udostępnia niewiele, jeśli w ogóle, obsługiwaczy dla właściwości filtra i pinów. Sterownik miniportu dostarcza programy obsługi dla właściwości węzła, które reprezentują funkcje zależne od sprzętu urządzenia audio. Sterowniki portów nie udostępniają wbudowanej obsługi właściwości węzła, z wyjątkiem KSPROPERTY_TOPOLOGY_NAME.

Gdy zarówno sterownik portu, jak i sterownik miniportu dostarcza programy obsługi dla tej samej właściwości, sterownik portu używa własnego programu obsługi i ignoruje program obsługi sterownika miniportu.

Deskryptory filtrów

Sterownik portu uzyskuje wskaźniki do procedur obsługi właściwości sterownika miniportu, wywołując metodę IMiniport::GetDescription. Za pomocą tej metody sterownik portu pobiera wskaźnik do deskryptora filtra sterownika miniportu, który jest strukturą o typie PCFILTER_DESCRIPTOR. Ta struktura określa procedury obsługi sterownika miniportu dla właściwości filtrów, pinów i węzłów.

  • Element członkowski tabeli AutomationTable struktury PCFILTER_DESCRIPTOR wskazuje tabelę automatyzacji dla filtru. Ta tabela określa programy obsługi właściwości sterownika miniportu dla właściwości filtru.

  • Składowa pinów struktury PCFILTER_DESCRIPTOR zawiera tabele automatyzacji dla pinów. Każda tabela określa obsługiwane właściwości dla właściwości pinu określonego typu pinu.

  • Element członkowski węzłów struktury PCFILTER_DESCRIPTOR zawiera tabele automatyzacji dla węzłów topologii wewnątrz filtru. Każda tabela określa procedury obsługi właściwości dla właściwości węzła określonego typu węzła.

Właściwości filtru

Sterownik portu uzyskuje dostęp do procedur obsługi właściwości filtru sterownika miniportu za pośrednictwem elementu członkowskiego AutomationTable struktury PCFILTER_DESCRIPTOR. Zazwyczaj ta tabela automatyzacji zawiera niewiele procedur obsługi, ponieważ sterownik portu dostarcza własne wbudowane procedury obsługi dla wszystkich właściwości filtru używanych przez programy SysAudio i WDMAud do wykonywania zapytań i konfigurowania urządzeń audio.

Jednak sterownik miniportu może dostarczać programy obsługi dla właściwości filtru, takich jak KSPROPERTY_GENERAL_COMPONENTID , które zapewniają informacje zależne od sprzętu, które nie są dostępne dla sterownika portu. Dwa z przykładowych sterowników audio w zestawie Microsoft Windows Driver Kit (WDK) obsługują właściwość KSPROPERTY_GENERAL_COMPONENTID. Aby uzyskać więcej informacji, zobacz implementacje sterowników miniportu w przykładowym sterowniku Sysvad, który jest omówiony w przykładowych sterownikach audio.

Wszystkie sterowniki portów w Portcls.sys zapewniają obsługę zestawów właściwości KSPROPSETID_Pin i KSPROPSETID_Topology. Wszystkie właściwości w tych zestawach są właściwościami filtru, z wyjątkiem KSPROPERTY_TOPOLOGY_NAME, która jest właściwością węzła (używającą uchwytu filtru, a nie uchwytu pinu, aby określić element docelowy dla żądania). Sterowniki portów obsługują następujący podzestaw właściwości KSPROPSETID_Pin:

KSPROPERTY_PIN_CATEGORY

KSPROPERTY_PIN_CINSTANCES

KSPROPERTY_PIN_COMMUNICATION

KSPROPERTY_PIN_CONSTRAINEDDATARANGES

KSPROPERTY_PIN_CTYPES

KSPROPERTY_PIN_DATAFLOW

KSPROPERTY_PIN_DATAINTERSECTION

KSPROPERTY_PIN_DATARANGES

KSPROPERTY_PIN_GLOBALCINSTANCES

KSPROPERTY_PIN_INTERFACES

KSPROPERTY_PIN_MEDIUMS

KSPROPERTY_PIN_NAME

KSPROPERTY_PIN_NECESSARYINSTANCES

KSPROPERTY_PIN_PHYSICALCONNECTION

KSPROPERTY_PIN_PROPOSEDATAFORMAT

KSPROPERTY_PIN_PROPOSEDATAFORMAT2

Te właściwości zawierają informacje o fabrykach pinów należących do filtra. Zazwyczaj klienci wysyłają zapytania do filtra dotyczące tych właściwości przed utworzeniem instancji pinów. Sterowniki portów obsługują wszystkie cztery właściwości KSPROPSETID_Topology, które zawierają informacje o wewnętrznej topologii filtru.

Ponadto sterownik portu DMus udostępnia procedurę obsługi właściwości KSPROPERTY_SYNTH_MASTERCLOCK , która jest właściwością get-only filtru DirectMusic. KSPROPERTY_SYNTH_MASTERCLOCK jest członkiem zestawu właściwości KSPROPSETID_SynthClock .

Właściwości pinu

Sterownik portu uzyskuje dostęp do obsługi właściwości pin sterownika miniportu za pośrednictwem elementu członkowskiego Pins PCFILTER_DESCRIPTOR. Ten element członkowski wskazuje tablicę deskryptorów pinów, a każdy z nich odnosi się do tabeli automatyzacji dla danego typu pinu (identyfikowanego przez identyfikator pinu, który jest po prostu indeksem tablicy).

Zazwyczaj te tabele automatyzacji zawierają niewiele wpisów, ponieważ sterownik portu dostarcza własne obsługujące dla wszystkich właściwości pinów używanych przez SysAudio i WDMAud. Sterownik miniportu ma możliwość dostarczania procedur obsługi dla jednej lub większej liczby właściwości pinu, których sterownik portu nie obsługuje. Jednak tylko klienci, którzy znają te właściwości, mogą wysyłać żądania dotyczące tych właściwości.

Z wyjątkiem sterownika portu topologii, wszystkie sterowniki portów w Portcls.sys dostarczają wbudowane obsługi programów dla następujących właściwości wtyku:

KSPROPERTY_CONNECTION_STATE

KSPROPERTY_CONNECTION_DATAFORMAT

KSPROPERTY_CONNECTION_ALLOCATORFRAMING

KSPROPERTY_STREAM_ALLOCATOR

KSPROPERTY_STREAM_MASTERCLOCK

KSPROPERTY_AUDIO_POSITION

KSPROPERTY_DRMAUDIOSTREAM_CONTENTID

Niektóre właściwości na tej liście wymagają informacji zależnych od sprzętu ze sterownika miniportu. Gdy sterownik portu odbiera protokół IRP zawierający żądanie dla jednej z tych właściwości, nie przekazuje protokołu IRP do sterownika miniportu. Zamiast tego sterownik portu obsługuje samo żądanie, ale jego program obsługi uzyskuje informacje potrzebne przez wywołanie punktu wejścia w sterowniku miniportu. Na przykład sterownik portu dostarcza własny mechanizm obsługi właściwości dla żądań KSPROPERTY_AUDIO_POSITION. Ta procedura obsługi po prostu wywołuje metodę GetPosition strumienia sterownika miniportu (na przykład IMiniportWavePciStream::GetPosition), aby uzyskać bieżącą pozycję.

Właściwości węzła

Sterownik portu uzyskuje dostęp do programów obsługi właściwości węzła sterownika miniportu za pośrednictwem członka Węzły PCFILTER_DESCRIPTOR. Ten element członkowski wskazuje tablicę deskryptorów węzłów, a każdy deskryptor wskazuje tabelę automatyzacji dla typu węzła (identyfikowanego przez identyfikator węzła, który jest po prostu indeksem tablicy). Zazwyczaj wszystkie lub większość programów obsługi właściwości należących do sterownika miniportu znajduje się w tablicy Węzły . Sterownik audio reprezentuje kontrolki sprzętowe w urządzeniu audio jako węzły topologii i używa mechanizmu właściwości w celu zapewnienia klientom dostępu do ustawień sterowania zależnych od sprzętu.

Jak opisano wcześniej, klient wysyła żądanie dotyczące właściwości filtru do uchwytu filtru, a żądanie dotyczące właściwości pinu do uchwytu pinu. W przeciwieństwie do instancji filtru lub przypięcia, węzeł nie jest obiektem jądra i nie ma uchwytu. Klient wysyła żądanie właściwości węzła do uchwytu pin lub uchwytu filtru, ale żądanie określa również identyfikator węzła, które wskazuje, że żądanie dotyczy właściwości węzła, a nie właściwości pin lub filtru.

Poniżej przedstawiono ogólne reguły określania, czy właściwość węzła powinna używać uchwytu filtra czy uchwytu pinu:

  • Jeśli filtr zawiera kilka wystąpień określonego typu pinu, a każdy pin tego typu ma węzeł o określonym identyfikatorze węzła, to każde wystąpienie pinu zawiera wystąpienie tego węzła. W takim przypadku żądanie właściwości węzła musi określać uchwyt pina (a nie tylko uchwyt filtra), aby odróżnić kilka instancji tego samego typu węzła. Kombinacja uchwytu pin i identyfikatora węzła jednoznacznie identyfikuje konkretne wystąpienie węzła jako docelowe dla żądania.

  • Jeśli filtr zawiera tylko jedno wystąpienie określonego węzła, żądanie dotyczące właściwości węzła podaje uchwyt filtru. Kombinacja uchwytu filtru i identyfikatora węzła jest wystarczająca do jednoznacznego zidentyfikowania węzła, który jest obiektem docelowym żądania.

Przed zaimplementowaniem procedury obsługi dla określonej właściwości węzła, autor sterownika powinien jednak odwołać się do Zestawów Właściwości Sterowników Audio, aby sprawdzić, czy element docelowy dla właściwości powinien być określony jako uchwyt filtru lub uchwyt pin.

Sterowniki portów w Portcls.sys obecnie nie zapewniają wbudowanej obsługi właściwości węzła, z wyjątkiem właściwości KSPROPERTY_TOPOLOGY_NAME.

Nadmiernie określone i niedookreślone żądania właściwości

Kierowcy powinni być przygotowani do spełniania próśb dotyczących własności od klientów, którzy nie przestrzegają powyższych reguł. Żądania mogą być nadmiernie określone lub nieokreślone:

  • Nadmiernie wyspecyfikowane żądania

    Jeśli żądanie właściwości wymaga tylko dojścia filtru, ale klient wysyła żądanie do uchwytu pinu, cel żądania jest zbyt szczegółowo określony. Jednak sterowniki zazwyczaj traktują żądanie jako prawidłowe; oznacza to, że traktują żądanie tak, jakby zostało wysłane do filtru zawierającego numer PIN.

  • Nieokreślone żądania

    Jeśli żądanie właściwości wymaga uchwytu pinu, ale klient wysyła żądanie do uchwytu filtru, element docelowy żądania jest nieokreślony. Na przykład, jeśli filtr zawiera kilka instancji pinów o tym samym typie węzła, a klient wysyła żądanie dotyczące właściwości tego typu węzła do uchwytu filtra zamiast do uchwytu pinu, sterownik nie ma możliwości określenia, która instancja węzła powinna otrzymać to żądanie. W takim przypadku zachowanie zależy od sterownika. Zamiast automatycznie odrzucać wszystkie niedookreślone żądania, niektóre sterowniki traktują żądanie ustawienia właściwości jako prawidłowe. W takim przypadku interpretacja polega na tym, że żądanie ustawia wartość domyślną dla określonego identyfikatora węzła. Gdy fabryka pinezek tworzy nową instancję węzła, ustawienia tej instancji są początkowo ustalane na wartości domyślne. Żądanie, które zmienia wartość domyślną, nie ma wpływu na instancje węzła utworzone przed żądaniem. Ponadto sterowniki jednolicie zawodzą przy niedoprecyzowanych żądaniach get-property, ponieważ program obsługi nie ma sposobu na określenie, które wystąpienie węzła należy sprawdzić w celu uzyskania właściwości.

wyjątki od reguł

Ze względów historycznych kilka właściwości dźwięku ma dziwactwa behawioralne, które naruszają te ogólne zasady. Poniżej znajdują się przykłady:

  • Zgodnie z opisem w rozdziale zatytułowanym Stosowanie ustawień Speaker-Configuration, klient może zmienić konfigurację głośnika urządzenia audio, ustawiając właściwość KSPROPERTY_AUDIO_CHANNEL_CONFIG węzła 3-D (KSNODETYPE_3D_EFFECTS). Ustawienie konfiguracji głośników jest globalne, ponieważ zmienia konfigurację głośników dla wszystkich strumieni, które są częścią odtwarzanego przez urządzenie miksu za pośrednictwem głośników. Zgodnie z ogólną regułą żądanie właściwości węzła, które wpływa na filtr jako całość, powinno określać uchwyt filtru (plus identyfikator węzła). Jednak ta konkretna właściwość wymaga uchwytu pinowego zamiast uchwytu filtracyjnego. Uchwyt pinu wyznacza wystąpienie pinu zawierającego węzeł 3-D, który jest celem żądania.

  • KSPROPERTY_SYNTH_VOLUME i KSPROPERTY_SYNTH_MASTERCLOCK są właściwościami węzła synth (KSNODETYPE_SYNTHESIZER). Mimo że oba są właściwościami węzła, żądania dotyczące tych właściwości nie obejmują identyfikatorów węzłów. (Zwróć uwagę, że deskryptor właściwości dla żądania jest strukturą typu KSPROPERTY, a nie KSNODEPROPERTY). To zachowanie narusza ogólną regułę, że właściwość node wymaga identyfikatora węzła. Pomimo tej rozbieżności sterownik miniportu obsługujący jedną z właściwości powinien dostarczyć program obsługi właściwości za pośrednictwem elementu członkowskiego Węzły PCFILTER_DESCRIPTOR (zamiast elementu członkowskiego Pinezki ).