핀 열거
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media 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 메서드를 호출합니다.
관련 항목