Visual c++ 选择数字电视设备需要哪些用户输入?
在构建数字电视图像的过程中,我需要:Visual c++ 选择数字电视设备需要哪些用户输入?,visual-c++,directshow,tv-tuner,Visual C++,Directshow,Tv Tuner,在构建数字电视图像的过程中,我需要: Network Provider -> Tuner -> Capture -> MPEG2-Demux -> MPEG2 TIF -> MPEG2 Sections -> Video Decoder -> VMR
Network Provider -> Tuner -> Capture -> MPEG2-Demux -> MPEG2 TIF
-> MPEG2 Sections
-> Video Decoder -> VMR9
-> Audio Decoder -> DirectSound
很明显,我可以以提供商的名义进行硬编码(Microsoft Network provider
),但我是否需要提示用户从可用设备列表中选择调谐器和捕获设备,或者我是否可以查询与用户选择的捕获设备相对应的调谐器
基本上,我是在询问是否存在类似于以下内容的API调用:
IMoniker*pTuner=GetTunerForCaptureDevice(pIMonikerSelectedCaptureDevice)代码>
或者让用户在其配置中同时选择调谐器和捕获设备是否是标准的。大多数应用程序处理此问题的方式似乎是相反的。出于配置目的,它们提供类别KSCATEGORY\u BDA\u NETWORK\u TUNER
中所有设备的列表,并允许用户选择其中一个调谐器
将该设备添加到图形后,将为KSCATEGORY\u BDA\u RECEIVER\u组件的类别枚举所有设备。对于返回的每个项目,将捕获设备项目添加到图形中,并在调谐器输出引脚和捕获输入引脚之间调用connect。粗略代码:(没有必要的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.
}