웹캠의 소스 필터를 사용하고 있습니다. graphstudio에서 필터를 사용할 때 두 개의 출력 핀이 있습니다. 그러나 코드에서 IEnumPins-> next에 대한 호출은 항상 S_FALSE를 반환합니다. 핀을 만들 수 있지만 그런 것을 찾지 못했던 다른 인터페이스를 찾았습니다.코드에 graphstudio에서 사용 가능한 핀이 없습니다.
어떻게 웹캠 필터에 핀을 추가하는 방법은 무엇입니까? 그들은 graphstudio에서 사용할 수 있다면 그들은 너무 코드에 있어야 맞죠?
여기 내 코드입니다. 반환 값을 확인한 다음 확인되지 않은 경우 반환했습니다. 또한
IPin *GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir)
{
BOOL bFound = FALSE;
IEnumPins *pEnum;
IPin *pPin;
pFilter->EnumPins(&pEnum);
while (pEnum->Next(1, &pPin, 0) == S_OK)
{
PIN_DIRECTION PinDirThis;
pPin->QueryDirection(&PinDirThis);
if (bFound = (PinDir == PinDirThis))
break;
pPin->Release();
}
pEnum->Release();
return (bFound ? pPin : 0);
}
, 나는이 생각하지 않습니다 : 웹캠 필터
이CoInitialize(NULL);
IGraphBuilder* graphBuilder = NULL;
IMediaControl* mediaControl = NULL;
IMediaEvent* mediaEvent = NULL;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IFilterGraph, (void **)&graphBuilder);
HANDLE fileHandle = CreateFile(L"D:\\TEMP\\debug1.log", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, NULL, NULL);
graphBuilder->SetLogFile((DWORD_PTR)fileHandle);
graphBuilder->QueryInterface(IID_IMediaControl, (void **)&mediaControl);
graphBuilder->QueryInterface(IID_IMediaEvent, (void **)&mediaEvent);
IBaseFilter* source = NULL;
static const GUID CLSID_Webcam =
{ 0x17CCA71B, 0xECD7, 0x11D0, { 0xB9, 0x08, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 } };
hr = CoCreateInstance(CLSID_Webcam, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **)&source);
if (FAILED(hr))
return hr;
hr = graphBuilder->AddFilter(source, L"logitech");
if (FAILED(hr))
return hr;
IPin* camOut = GetPin(source, PINDIR_OUTPUT);
...
GetPin 기능은 핀을 찾을 EnumPins 방법을 사용하는 모든 핀을 반환하지 않는 것을 제외하고는 그러나 모든 것이 잘 작동하는 것 같다 32/64bit 문제입니다. x64로 컴파일하고 graphstudionext의 64 비트 버전도 사용했습니다. 그리고 나는 또한 웹캠 필터의 guid가 정확한지 확인했습니다. (적어도 graphstudionext를 신뢰할 수있는 경우)