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.
[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]
Gdy nawiąż połączenie z dwoma wyprowadzeniami, potrzebują mechanizmu wymiany danych multimedialnych. Ten mechanizm jest nazywany transportem. Ogólnie rzecz biorąc, architektura DirectShow jest neutralna w przypadku transportu. Dwa filtry mogą zgodzić się na połączenie przy użyciu dowolnego transportu, który obsługuje oba te filtry.
Najczęstszym transportem jest transport pamięci lokalnej, w którym dane nośnika znajdują się w pamięci głównej. Istnieją dwa warianty transportu pamięci lokalnej, model wypychania i model ściągania . W modelu wypychania filtr źródłowy wypycha dane do filtru podrzędnego przy użyciu interfejsu IMemInputPin na numer pin wejściowy filtru podrzędnego. W modelu ściągania podrzędny filtr żąda danych z filtru źródłowego przy użyciu interfejsu IAsyncReader na wyprowadzeniu wyjściowym filtru źródłowego. Aby uzyskać więcej informacji na temat tych dwóch modeli przepływu danych, zobacz Przepływ danych w grafie filtru.
W przypadku transportu pamięci lokalnej obiekt odpowiedzialny za przydzielanie pamięci jest nazywany alokatorem . Alokator obsługuje interfejsIMemAllocator. Oba pinezki współdzielą jeden alokator. Każde przypinanie może zapewnić alokator, ale wyprowadzenie wyjściowe wybiera, który alokator ma być używany.
Wyprowadzenie wyjściowe ustawia również właściwości alokatora, które określają liczbę tworzonych przez alokator, rozmiar każdego buforu i wyrównanie pamięci. Wyprowadzenie wyjściowe może odroczyć numer PIN wejściowy dla wymagań buforu.
W połączeniu IMemInputPin negocjacje alokatora działają w następujący sposób:
- Opcjonalnie wyjściowe wywołania numeru PIN IMemInputPin::GetAllocatorRequirements. Ta metoda pobiera wymagania buforu numeru PIN wejściowego, takie jak wyrównanie pamięci. Ogólnie rzecz biorąc, wyprowadzenie danych wyjściowych powinno honorować żądanie numeru PIN wejściowego, chyba że istnieje dobry powód, aby nie.
- Opcjonalnie wyprowadzenia wyjściowe wywołania IMemInputPin::GetAllocator. Ta metoda żąda alokatora z numeru PIN wejściowego. Numer PIN danych wejściowych udostępnia jeden lub zwraca kod błędu.
- Wyprowadzenia wyjściowego wybiera alokator. Może on używać elementu dostarczonego przez numer PIN danych wejściowych lub utworzyć własne.
- Wyprowadzenie wyjściowe wywołuje IMemAllocator::SetProperties, aby ustawić właściwości alokatora. Jednak alokator może nie honorować żądanych właściwości. (Na przykład może się to zdarzyć, jeśli numer PIN danych wejściowych udostępnia alokator). Alokator zwraca rzeczywiste właściwości jako parametr wyjściowy w metodzie SetProperties.
- Odpinanie wywołuje IMemInputPin::NotifyAllocator w celu poinformowania wejściowego numeru PIN zaznaczenia.
- Wyprowadzenie wejściowe powinno wywołać IMemAllocator::GetProperties, aby sprawdzić, czy właściwości alokatora są dopuszczalne.
- Wyprowadzenie danych wyjściowych jest odpowiedzialne za zatwierdzanie i anulowanie alokacji. Dzieje się tak w przypadku uruchamiania i zatrzymywania przesyłania strumieniowego.
W połączeniu IAsyncReader negocjacje alokatora działają w następujący sposób:
- Wejściowe wywołania numeru PIN IAsyncReader::RequestAllocator na wyprowadzeniu wyjściowym. Numer PIN wejściowy określa wymagania dotyczące buforu, a opcjonalnie udostępnia alokator.
- Wyprowadzenia wyjściowego wybiera alokator. Może on używać elementu dostarczonego przez numer PIN danych wejściowych, jeśli istnieje, lub utworzyć własne.
- Wyprowadzenie wyjściowe zwraca alokator jako parametr wychodzący w metodzie RequestAllocator. Numer PIN danych wejściowych powinien sprawdzać właściwości alokatora.
- Numer PIN danych wejściowych jest odpowiedzialny za zatwierdzanie i anulowanie alokacji.
- W dowolnym momencie procesu negocjacji alokatora może zakończyć się niepowodzeniem połączenia.
- Jeśli wyprowadzenie wyjściowe używa alokatora wyprowadzenia wejściowego, może użyć tego alokatora tylko do dostarczenia przykładów do tego numeru PIN wejściowego. Filtr właścicieli nie może używać alokatora do dostarczania przykładów do innych numerów PIN.
Tematy pokrewne
-
dostarczanie niestandardowej alokatora