Výčet pinů

[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.)

Číslování Objektů v Grafu Filtru

Najděte nepřipojený pin na filtru

obecné techniky Graph-Building

vlastnost připnutí sada