3

デジタル TV グラフを作成するプロセスでは、次のものが必要です。

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、ユーザーがチューナーの 1 つを選択できるようにします。

そのデバイスがグラフに追加されると、すべてのデバイスが のカテゴリで列挙されますKSCATEGORY_BDA_RECEIVER_COMPONENT。返されたアイテムごとに、キャプチャ デバイス アイテムがグラフに追加され、チューナー出力ピンとキャプチャ入力ピンの間で connect が呼び出されます。大まかなコード: (必要なReleases()'s なし)

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 に答える