DirectX pEnum-> Next(1,& pPin,NULL)返回S_FALSE

时间:2014-06-01 11:35:42

标签: c++ winapi video directshow video-capture

我已经在图形编辑中为USB TV TUNER构建了过滤器,并且在graphedit中工作正常。

当我将其转换为C ++代码时,电视调谐器滤镜似乎没问题,因为我通过调用 pEnum->Next(1,&pPin,NULL) 来连接引脚但是对于USB电视音频接口我无法找到引脚,因为我始终获得S_FALSE来致电pEnum->Next(1,&pPin,NULL)

我看过不同网站上的帖子告诉人们需要使用枚举,但没有给出示例。 另外,我不能理解为什么调谐器滤波器引脚可以在同一设备上访问而其他设备不可访问。 这是我的代码。请告诉我如何更改它以进行枚举。

  HRESULT hr=S_OK;
    CComPtr<ICaptureGraphBuilder2> pBuilder;
    hr=pBuilder.CoCreateInstance(CLSID_CaptureGraphBuilder2);
    hr=pBuilder->SetFiltergraph(pGraph);

    //now add tuner
    CComPtr<IBaseFilter> pGadmeiAnalogTvTuner0001;
    hr=pGadmeiAnalogTvTuner0001.CoCreateInstance(CLSID_GadmeiAnalogTvTuner0001);
    if(hr<0) 
        return -1;
    hr=pGraph->AddFilter(pGadmeiAnalogTvTuner0001,L"Gadmei Analog TvTuner 0001");
    if(hr!=S_OK)
        return -1;
    printf("added tuner to graph \n");

    //now add tv audio
    CComPtr<IBaseFilter> pGadmeiAnalogTvAudiof;
    hr=pGadmeiAnalogTvAudiof.CoCreateInstance(CLSID_GadmeiAnalogTvAudio);
    if(hr<0) 
        return -1;
    hr=pGraph->AddFilter(pGadmeiAnalogTvAudiof,L"GadmeiAnalogTvAudio");
    if(hr!=S_OK)
        return -1;

    printf("added Tv Audio to graph \n");
    //connect tv tuner and audio
    hr=pGraph->ConnectDirect(GetPin(pGadmeiAnalogTvTuner0001,L"Analog Audio"), GetPin(pGadmeiAnalogTvAudiof,L"TVAudio In"),NULL);

    if(hr!=S_OK)
        printf("Can't Connect \n");

1 个答案:

答案 0 :(得分:1)

捕获过滤器是通过枚举器创建的,它们在适当的上下文中实例化。 CoCreateInstanceCLSID为您提供了一个包装器对象而不将其绑定到感兴趣的硬件上,然后您就会看到有效的接口指针的典型症状,但没有可用的引脚。