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 tym temacie przedstawiono niektóre funkcje pomocnicze służące do łączenia filtrów DirectShow.
Aby połączyć dwa filtry, należy znaleźć niepodłączone wyprowadzenie wyjściowe w filtrze nadrzędnym i niepodłączone wyprowadzenie wejściowe w filtrze podrzędnym.
Jeśli masz już wskaźniki do obu wyprowadzeń, wywołaj metodę IGraphBuilder::Connect, aby je połączyć. Jeśli pinezki nie mogą łączyć się bezpośrednio ze sobą, IGraphBuilder::Connect metoda może wstawić dodatkowe filtry, aby zakończyć połączenie. Aby uzyskać więcej informacji, zobacz Intelligent Connect.
Jeśli masz wskaźnik do filtrów, ale nie pinezki, musisz użyć metody IBaseFilter::EnumPins, aby znaleźć pinezki. (Zobacz Wyliczanie pinezek.) Funkcje pomocnicze w tym temacie przedstawiają tę technikę.
Wyprowadzenie wyjściowe do filtru
Poniższa funkcja przyjmuje dwa parametry: wskaźnik do wyprowadzenia wyjściowego i wskaźnik do filtru. Funkcja łączy wyprowadzenie wyjściowe z pierwszym dostępnym numerem PIN w filtrze.
// Connect output pin to filter.
HRESULT ConnectFilters(
IGraphBuilder *pGraph, // Filter Graph Manager.
IPin *pOut, // Output pin on the upstream filter.
IBaseFilter *pDest) // Downstream filter.
{
IPin *pIn = NULL;
// Find an input pin on the downstream filter.
HRESULT hr = FindUnconnectedPin(pDest, PINDIR_INPUT, &pIn);
if (SUCCEEDED(hr))
{
// Try to connect them.
hr = pGraph->Connect(pOut, pIn);
pIn->Release();
}
return hr;
}
Ta funkcja wykonuje następujące czynności:
- Wywołuje funkcję
FindUnconnectedPin, aby uzyskać niezwiązany numer PIN wejściowy. Ta funkcja jest wyświetlana w temacie Find an Unconnected Pin on a Filter. - Wywołuje metodę IGraphBuilder::Connect w celu połączenia dwóch wyprowadzeń.
Filtruj do numeru PIN wejściowego
Następna funkcja pobiera wskaźnik do filtru i wskaźnik do numeru PIN wejściowego. Łączy on numer PIN wejściowy z pierwszym dostępnym numerem PIN wyjściowym filtru.
// Connect filter to input pin.
HRESULT ConnectFilters(IGraphBuilder *pGraph, IBaseFilter *pSrc, IPin *pIn)
{
IPin *pOut = NULL;
// Find an output pin on the upstream filter.
HRESULT hr = FindUnconnectedPin(pSrc, PINDIR_OUTPUT, &pOut);
if (SUCCEEDED(hr))
{
// Try to connect them.
hr = pGraph->Connect(pOut, pIn);
pOut->Release();
}
return hr;
}
Filtruj do filtru
Trzecia funkcja pobiera wskaźnik do filtru nadrzędnego i wskaźnika do filtru podrzędnego i próbuje połączyć oba filtry.
// Connect filter to filter
HRESULT ConnectFilters(IGraphBuilder *pGraph, IBaseFilter *pSrc, IBaseFilter *pDest)
{
IPin *pOut = NULL;
// Find an output pin on the first filter.
HRESULT hr = FindUnconnectedPin(pSrc, PINDIR_OUTPUT, &pOut);
if (SUCCEEDED(hr))
{
hr = ConnectFilters(pGraph, pOut, pDest);
pOut->Release();
}
return hr;
}
Tematy pokrewne