Udostępnij przez


Fabryki szpilek

Fabryki pinów filtru audio opisują wszystkie piny, które filtr może utworzyć. Jak wspomniano wcześniej, sterownik miniportu audio przechowuje informacje o pinach w tablicy struktur PCPIN_DESCRIPTOR. Każda struktura określa fabrykę pinezek, a fabryka pinezek jest identyfikowana przez jej indeks w tablicy. Ten indeks jest często określany jako ID pinu.

Struktura PCPIN_DESCRIPTOR zawiera tabelę automatyzacji i strukturę KSPIN_DESCRIPTOR .

Struktura KSPIN_DESCRIPTOR zawiera następujące informacje o pinach w fabryce pinów:

  • Kierunek przepływu danych względem filtra

  • Kierunek przepływu komunikacji względem filtru (we wszystkich bieżących wersjach systemu Windows filtry KS używają IRPs do komunikacji).

  • Przypnij kategorię

  • Przyjazna nazwa

  • Możliwości wystąpienia

  • Możliwości formatowania danych

Elementy członkowskie Kategoria i Nazwa struktury określają kategorię pinów fabryki pinów i przyjazną dla użytkownika nazwę. Dla każdej fabryki pinów w filtrze sterownik miniportu określa kombinację identyfikatorów GUID kategorii i nazwy, które razem jednoznacznie identyfikują fabrykę pinów. Jeśli co najmniej dwie fabryki pinezek mają taką samą wartość Kategorii, każda fabryka pinezek ma wartość Nazwa, która ją odróżnia od innych. Jeśli tylko jedna fabryka pinezek ma określoną wartość Kategoria, ta wartość jest wystarczająca do zidentyfikowania fabryki, a wartość Nazwa dla tej fabryki pinezek może być ustawiona na NULL. Aby zapoznać się z przykładem kodowania, zobacz Uwidacznianie topologii filtru. Aby uzyskać informacje na temat kategorii przypinania, zobacz Właściwość kategorii przypinania.

Fabryka pinezek określa zakres formatów danych, które obsługuje jako tablicę rozszerzonych struktur KSDATARANGE :

  • Fabryka pinów, która obsługuje szereg formatów danych typu Wave lub DirectSound dla strumienia wejściowego lub wyjściowego, określa tablicę struktur KSDATARANGE_AUDIO.

  • Fabryka szpilek, która obsługuje różne formaty danych MIDI lub DirectMusic dla strumienia wejściowego lub wyjściowego, określa tablicę struktur KSDATARANGE_MUSIC.

KSDATARANGE_AUDIO i KSDATARANGE_MUSIC są rozszerzone wersje KSDATARANGE. Aby zapoznać się z przykładami obu typów zakresów danych, zobacz Formaty danych audio i Zakresy danych.

Przed połączeniem pinu zlewu na jednym filtrze z pinem źródła na innym filtrze, konstruktor grafów (na przykład sterownik systemu SysAudio) może przeszukać zakresy danych w poszukiwaniu zgodnego formatu. Konstruktor grafu zwykle wywołuje procedurę obsługi przecięcia danych filtru, która umożliwia samemu filtrowi wybranie zgodnego formatu.

Filtr może zawierać wiele fabryk gniazd, a fabryka gniazd może obsługiwać wiele instancji gniazd.

  • Posiadanie wielu fabryk pinów w filtrze jest przydatne do rozróżniania oddzielnych ścieżek danych dla różnych typów danych, które przepływają przez filtr. Na przykład jedna jednostka pinów może obsługiwać strumienie danych PCM, a inna jednostka może obsługiwać strumienie AC-3.

  • Pojedynczy filtr może obsługiwać renderowanie i przechwytywanie strumieni jednocześnie. Ścieżki renderowania i przechwytywania mają oddzielne zestawy fabryk filtrów.

  • Posiadanie wielu instancji wejść w fabryce wyjść pinów często oznacza mieszanie, co oznacza, że filtr zawiera węzeł SUM (KSNODETYPE_SUM).

Podobnie jak filtry, piny są obiektami jądra i są identyfikowane przez uchwyty jądra. Uchwyt dla instancji pin jest tworzony przez wywołanie funkcji KsCreatePin. Jako obiekt jądra, pin można określić jako element docelowy IRP. Klient sterownika określa uchwyt pinu podczas wysyłania żądania IOCTL do pinu.

Podczas tworzenia wykresu filtru audio, SysAudio łączy jeden filtr z innym, łącząc ich piny. Koniec źródłowy z jednego filtra można podłączyć do końca docelowego innego filtra. Dane i IRP przepływają ze złącza wejściowego do złącza wyjściowego przez to połączenie. Aby nawiązać połączenie, konstruktor grafu (zazwyczaj SysAudio) najpierw tworzy pin źródłowy przez wywołanie metody KsCreatePin, a następnie tworzy pin do odbioru przez wywołanie metody KsCreatePin. Jednak w drugim wywołaniu klient określa, że nowy pin odbiorczy ma być podłączony do pinu źródłowego, który został stworzony podczas pierwszego wywołania.