Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sterownik minidriver AVStream może wykorzystywać funkcje sterownika klasy AVStream, aby podzielić strumień danych na kilka kopii, gdy strumień przechodzi przez dany pin. Ten proces dzielenia może być przydatny, jeśli sterownik musi skopiować strumień wejściowy w celu wygenerowania dwóch identycznych strumieni wyjściowych.
Aby to zrobić, ustaw KSPIN_FLAG_SPLITTER w elemencie Flags struktury KSPIN_DESCRIPTOR_EX pinu. Gdy ta flaga jest ustawiona na pin, pin działa jako automatyczny rozdzielacz. Funkcja AVStream automatycznie kopiuje wszystkie dane niezbędne do podzielenia strumienia.
W wersjach nowszych niż DirectX8.0 flaga KSPIN_FLAG_SPLITTER działa dla pinów zarówno w filtrach cechujących się filtrem, jak i w filtrach cechujących się pinem. Poprzednie wersje obsługują tę flagę tylko dla pinek w filtrach skupionych na filtrowaniu.
Na poniższym diagramie przedstawiono konfigurację filtru, w którym pin wejściowy rozdziela strumień na dwa piny wyjściowe. Filtry podrzędne tego wyprowadzenia wyjściowego zmieniają dane bezpośrednio.
Ramki docierają do wejściowego pin i są umieszczane w kolejce wejściowej. Minidriver współdziała tylko z kolejką wejściową i kolejką wyjściową oryginalnego pinu. AVStream automatycznie kopiuje dane z kolejki pierwszego pinu do kolejki drugiego pinu.
Dla uproszczenia ten diagram nie pokazuje sposobu, w jaki ramki są dostarczane do pinu wyjściowego. Aby dostarczyć ramki do pinu wyjściowego, na przykład może istnieć element żądający i alokator skojarzony z każdą kolejką i należący do tego segmentu potoku. Alternatywnie ramki mogą pochodzić z filtru podrzędnego.
W strukturze KSFILTER_DISPATCH minidriver określa wskaźnik do procedury wywołania zwrotnego AVStrMiniFilterProcess dostarczonej przez dostawcę. Ta rutyna wywołania zwrotnego polega na tym, że minidriver otrzymuje wskaźnik do struktury KSPROCESSPIN_INDEXENTRY zawierającej tablicę struktur KSPROCESSPIN przedstawionych poniżej.
Na tym diagramie pokazano, w jaki sposób minidriver rozróżnia dwa piny wyjściowe na liście wyjść procesowych.
Na tym diagramie baza danych odwołuje się do elementu członkowskiego DelegateBranch struktury KSPROCESSPIN , a CS odwołuje się do elementu członkowskiego CopySource . Zarówno elementy członkowskie DelegateBranch, jak i CopySource wejściowego pina i pierwszego pina wyjściowego mają wartość NULL. Oznacza to, że minidriver jest odpowiedzialny za obsługę ramek na tych pinach.
Drugi pin wyjściowy zawiera jednak element CopySource, który wskazuje z powrotem na pierwszy pin wyjściowy. Oznacza to, że drugi pin wyjściowy znajduje się w osobnym potoku od pierwszego pinu wyjściowego i że AVStream automatycznie kopiuje wszystkie dane umieszczone w kolejce pierwszego pinu wyjściowego do kolejki drugiego pinu wyjściowego.
Bardziej skomplikowane przypadki podziału mogą wystąpić, gdy dwa wyjścia są zamontowane w tym samym przewodzie. Minidriver może zawierać dwa wyjścia typu rozgałęźnika w tym samym potoku, na przykład tak długo, jak filtry podrzędne nie zmieniają danych wysyłanych z tych pinów. Ponieważ dane nie są modyfikowane, piny wyjściowe są uznawane za tylko do odczytu; oba filtry w dolnym toku otrzymują te same bufory.
Istnieje również możliwość, że niektóre filtry podrzędne, które są automatycznie dołączane do pinezki rozdzielacza, zmieniają dane, a inne nie.
W takim przypadku układ filtru może być podobny do poniższego diagramu, który przedstawia filtr zawierający trzy wystąpienia rozgałęzionego pinu wyjściowego.
Wyprowadzenia A i B są przypisane do tego samego potoku, ponieważ filtry znajdujące się poniżej w strumieniu nie zmieniają danych; filtry znajdujące się poniżej w strumieniu od wyprowadzeń A i B odbierają te same wskaźniki buforu.
Minidriver współdziała tylko z kolejką wejściową i pojedynczą kolejką wyjściową. AVStream automatycznie kopiuje z kolejki A/B i kolejki C. Tworzy również obiekt rozdzielający, który wysyła te same ramki danych przez pin A oraz pin B (zwróć uwagę, że nagłówki strumienia różnią się).
Tablica struktur KSPROCESSPIN jest następująca:
Jedynym przypięciem, z którego minidriver musi korzystać w normalnych okolicznościach, jest przypięcie A.
Aby uprościć powyższe diagramy, osoby żądające i alokatory zostały pominięte na diagramach. Diagramy mają przedstawiać tylko proces dzielenia ramek.