Share via


핀 열거

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

필터는 필터에서 사용할 수 있는 핀을 열거하는 IBaseFilter::EnumPins 메서드를 지원합니다. IEnumPins 인터페이스에 대한 포인터를 반환합니다. IEnumPins::Next 메서드는 IPin 인터페이스 포인터를 검색합니다.

다음 예제에서는 지정된 필터에서 지정된 방향(입력 또는 출력)이 있는 핀을 찾는 함수를 보여 줍니다. PIN_DIRECTION 열거형을 사용하여 핀 방향을 지정하고 IPin::QueryDirection 메서드를 사용하여 열거된 각 핀의 방향을 찾습니다. 이 함수는 일치하는 핀을 찾으면 미해결 참조 수가 있는 IPin 인터페이스 포인터를 반환합니다. 호출자는 인터페이스 해제를 담당합니다.

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

이 함수는 지정된 방향 또는 n번째 연결되지 않은 핀을 사용하여 n번째 핀을 반환하도록 쉽게 수정할 수 있습니다. 핀이 다른 핀에 연결되어 있는지 확인하려면 IPin::ConnectedTo 메서드를 호출합니다.

필터 그래프에서 개체 열거

필터에서 연결되지 않은 핀 찾기

일반 Graph-Building 기술

Pin 속성 집합