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.]
W tej sekcji opisano, jak klasa CBasePin implementuje proces połączenia pin.
Menedżer filtrów programu Graph inicjuje wszystkie połączenia przypinania. Wywołuje on metodę IPin::Connect wyprowadzenia wyjściowego, określając numer PIN wejściowy. Wyprowadzenie wyjściowe kończy połączenie przez wywołanie metody IPin::ReceiveConnection numeru PIN wejściowego. Numer PIN danych wejściowych może zaakceptować lub odrzucić połączenie.
Menedżer filtru programu Graph może również określić typ nośnika dla połączenia. Jeśli tak, pinezki spróbują nawiązać połączenie z tym typem. Jeśli nie, pinezki muszą negocjować typ. Menedżer filtru programu Graph może również określić typ nośnika częściowego, który ma wartość GUID_NULL dla typu głównego, podtypu lub typu formatu. W takim przypadku pinezki próbują dopasować określoną część typu nośnika; wartość GUID_NULL działa jako symbol wieloznaczny.
Metoda CBasePin::Connect rozpoczyna się od sprawdzenia, czy numer PIN może zaakceptować połączenie. Na przykład sprawdza, czy numer PIN nie jest jeszcze połączony. Delegowanie pozostałej części procesu połączenia do metody CBasePin::AgreeMediaType. Wszystko, co następuje, jest wykonywane przez AgreeMediaType.
Jeśli typ nośnika jest w pełni określony, numer PIN wywołuje metodę CBasePin::AttemptConnection, aby spróbować nawiązać połączenie. W przeciwnym razie próbuje nośników w następującej kolejności:
- Preferowane typy numeru PIN wejściowego.
- Preferowane typy wyprowadzenia wyjściowego.
Tę kolejność można cofnąć, ustawiając flagę CBasePin::m_bTryMyTypesFirst na true.
W każdym przypadku przypinanie wywołuje metodę IPin::EnumMediaTypes w celu wyliczenia typów multimediów. Ta metoda pobiera obiekt modułu wyliczającego, który jest przekazywany do metody CBasePin::TryMediaTypes. Metoda TryMediaTypes przechodzi przez każdy typ nośnika i wywołuje AttemptConnection dla każdego typu.
W metodzie AttemptConnection wyprowadzenie wyjściowe wywołuje następujące metody:
- Wywołuje CBasePin::CheckConnect się, aby sprawdzić, czy numer PIN wejściowy jest odpowiedni.
- Wywołuje on CBasePin::CheckMediaType w celu zweryfikowania typu nośnika.
- Wywołuje IPin::ReceiveConnection wejściowego numeru PIN. Numer PIN wejściowy używa tej metody, aby określić, czy powinno zaakceptować połączenie.
- Wywołuje on CBasePin::CompleteConnect na siebie w celu ukończenia połączenia.
Zwróć uwagę na następujące kwestie:
- CheckConnect to metoda wirtualna. W klasie bazowej ta metoda sprawdza, czy kierunki pinezki są zgodne. Wyprowadzenia wyjściowe muszą łączyć się z wyprowadzeniami wejściowymi i odwrotnie. Klasa pochodnego numeru PIN zwykle zastępuje tę metodę, aby wykonać inne kontrole. Na przykład może wysłać zapytanie do innego numeru PIN dla interfejsu wymaganego dla połączenia. Jeśli klasa pochodna zastępuje CheckConnect, powinna również wywołać metodę CBasePin.
- CheckMediaType to czysta metoda wirtualna, którą klasa pochodna musi zaimplementować.
- CompleteConnect to metoda wirtualna, która nie wykonuje niczego w klasie bazowej. Klasy pochodne mogą zastąpić tę metodę, aby wykonać dodatkową pracę wymaganą do ukończenia połączenia, taką jak podjęcie decyzji o alokatorze pamięci.
Jeśli którykolwiek z tych kroków zakończy się niepowodzeniem, wyprowadzenie wyjściowe wywołuje metodę CBasePin::BreakConnect, aby cofnąć wszystkie kroki podjęte przez CheckConnect.
Metoda ReceiveConnection numeru PIN wejściowego wywołuje metody CheckConnect, CheckMediaTypei CompleteConnect metod. Jeśli którykolwiek z tych nie powiedzie się, próba połączenia również zakończy się niepowodzeniem.
Na poniższym diagramie przedstawiono proces połączenia w CBasePin:
Tematy pokrewne