2013-09-17 1 views
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);

или является ли это стандарт, чтобы пользователь может выбрать как тюнер и захват устройства в их конфигурации.

ответ

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. 
} 

Если какие-либо из устройств захвата успешного подключения булавки, а затем концы петли и которые захватывают фильтр используются в графике.

Я пошел в этом направлении, начиная с пользовательского выбора тюнера, потому что видел несколько продуктов, которые возвращали более одного устройства тюнера, и при попытке подключения в обратном порядке (захват, затем тюнер) мне казалось всегда успешно подключите неправильный тюнер.

Смежные вопросы