3

在构建数字电视图的过程中,我需要:

Network Provider -> Tuner -> Capture -> MPEG2-Demux -> MPEG2 TIF
                                                    -> MPEG2 Sections
                                                    -> Video Decoder -> VMR9
                                                    -> Audio Decoder -> DirectSound

对我来说很明显,我可以以提供者的名义进行Microsoft Network Provider硬编码(与用户选择的捕获设备相对应的调谐器?

基本上我在问是否存在类似于以下内容的 API 调用:

IMoniker *pTuner = GetTunerForCaptureDevice(pIMonikerSelectedCaptureDevice);

或者让用户在他们的配置中选择调谐器和捕获设备是否是标准的。

4

1 回答 1

0

大多数应用程序处理这个问题的方式似乎是相反的。出于配置的目​​的,它们提供了该类别中所有设备的列表,KSCATEGORY_BDA_NETWORK_TUNER并允许用户选择其中一个调谐器。

将该设备添加到图表后,将枚举所有设备的类别KSCATEGORY_BDA_RECEIVER_COMPONENT。对于返回的每个项目,捕获设备项目被添加到图表中,并在调谐器输出引脚和捕获输入引脚之间调用连接。粗略的代码:(没有必要Releases()的)

for (fFound=FALSE; !fFound; )
{
     IMoniker *pIMoniker;
     IBaseFilter *ppIBaseFilter;
     hr = pIEnumMoniker->Next(1, &pIMoniker, NULL);
     if (hr!=S_OK)
           break;

     hr = pIMoniker->BindToObject(NULL, NULL, __uuidof(IBaseFilter), 
                  (void **)&ppIBaseFilter);
     hr = m_pIGraphBuilder->AddFilter(*ppIBaseFilter, L"Capture filter");
     hr = ConnectFilters(m_pIGraphBuilder, pITunerFilter, ppIBaseFilter)));
     if (hr != S_OK)
     {
          m_pIGraphBuilder->RemoveFilter(ppIBaseFilter);
          goto NextMoniker;
     }

     fFound = TRUE;
NextMoniker:
   // release things here.
}

如果任何捕获设备成功连接引脚,则循环结束并在图中使用该捕获过滤器。

我从用户选择调谐器开始,因为我看到有几种产品返回了多个调谐器设备,并且当尝试以相反的顺序连接(捕获,然后是调谐器)时,我似乎总是成功连接调谐器错误。

于 2014-02-06T04:26:42.660 回答