Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
[Funkce přidružená k této stránce DirectShow je starší funkce. Byla nahrazena MediaPlayer, IMFMediaEnginea Audio/Video Capture v Media Foundation. Tyto funkce jsou optimalizované pro Windows 10 a Windows 11. Microsoft důrazně doporučuje, aby nový kód používal MediaPlayer, MMFMediaEngine a Audio/Video Capture v Media Foundation místo DirectShow, pokud je to možné. Microsoft navrhuje, aby se stávající kód, který používá starší rozhraní API, přepsal, aby se nová rozhraní API používala, pokud je to možné.]
Filtry podporují metodu IBaseFilter::EnumPins, která vyčísluje špendlíky dostupné ve filtru. Vrátí ukazatel na rozhraní IEnumPins. Metoda IEnumPins::Next načte ukazatele rozhraní IPin.
Následující příklad ukazuje funkci, která na daném filtru najde pin s určeným směrem (vstup nebo výstup). Používá PIN_DIRECTION enumeraci pro určení směru pinů a IPin::QueryDirection metodu k určení směru pro každý vyjmenovaný pin. Pokud tato funkce najde odpovídající pin, vrátí ukazatel rozhraní IPin s počtem referencí, které ještě nebyly uvolněny. Volající zodpovídá za uvolnění rozhraní.
HRESULT GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir, IPin **ppPin)
{
IEnumPins *pEnum = NULL;
IPin *pPin = NULL;
HRESULT hr;
if (ppPin == NULL)
{
return E_POINTER;
}
hr = pFilter->EnumPins(&pEnum);
if (FAILED(hr))
{
return hr;
}
while(pEnum->Next(1, &pPin, 0) == S_OK)
{
PIN_DIRECTION PinDirThis;
hr = pPin->QueryDirection(&PinDirThis);
if (FAILED(hr))
{
pPin->Release();
pEnum->Release();
return hr;
}
if (PinDir == PinDirThis)
{
// Found a match. Return the IPin pointer to the caller.
*ppPin = pPin;
pEnum->Release();
return S_OK;
}
// Release the pin for the next time through the loop.
pPin->Release();
}
// No more pins. We did not find a match.
pEnum->Release();
return E_FAIL;
}
Tuto funkci lze snadno upravit tak, aby vrátila n-tý pin se zadaným směrem nebo n-tý nepřipojený kontakt. (Pokud chcete zjistit, jestli je pin připojený k jinému pinu, zavolejte metodu IPin::ConnectedTo.)
Související témata