Dela via


Räkna upp pins

[Funktionen som är associerad med den här sidan, DirectShow, är en äldre funktion. Det har ersatts av MediaPlayer, IMFMediaEngineoch Audio / Video Capture i Media Foundation. Dessa funktioner har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder MediaPlayer, IMFMediaEngine och Audio/Video Capture i Media Foundation i stället för DirectShow, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]

Filter stöder metoden IBaseFilter::EnumPins, som räknar upp de stift som är tillgängliga i filtret. Den returnerar en pekare till gränssnittet IEnumPins. Metoden IEnumPins::Next hämtar IPin gränssnittspekare.

I följande exempel visas en funktion som letar upp en pin-kod med en angiven riktning (indata eller utdata) i ett visst filter. Den använder PIN_DIRECTION uppräkningstyp för att specificera pin-riktningen och metoden IPin::QueryDirection för att hitta riktningen för varje uppräknad pinne. Om den här funktionen hittar en matchande pin-kod returneras en IPin- gränssnittspekare med ett utestående referensantal. Anroparen ansvarar för att frigöra gränssnittet.

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;  
}

Den här funktionen kan enkelt ändras för att returnera den n:e stiftet med den angivna riktningen, eller nth unconnected pin. (Om du vill ta reda på om en pin-kod är ansluten till en annan pin anropar du metoden IPin::ConnectedTo.)

räkna upp objekt i ett filterdiagram

Hitta en pin-kod som inte är ansluten till ett filter

Allmänna Graph-Building tekniker

Pin-egenskapsuppsättning