チューニング要求の作成 (C++)
このトピックは Windows XP にのみ適用。
あらかじめ構成したチューニング要求をデータベースから取得することが望ましい。ただし、サポートする対象の特定のネットワーク タイプがわかっている場合は、チューニング要求を最初から新規に作成することができる。
ATSC チューニング要求を作成するには、次のようにすること。
- システム チューニング空間コレクションを作成する。
- チューニング空間を列挙して ATSC チューニング空間を取得する。
- ATSC チューニング空間を使って新しいチューニング要求を作成する。
- ATSC ロケータ オブジェクトを作成する。
- ロケータに物理チャンネル プロパティを設定する。
- ロケータをチューニング要求に関連付ける。
- チューニング要求をビデオ コントロールに渡す。
- ビデオ コントロールを実行する。
次の例ではエラー チェックを省略している。実際のコードでは、常に HRESULT の戻りコードをチェックする必要がある。
long lChannel = 46; // 任意のチャンネル番号を使用する。
HRESULT hr = S_OK;
// チューニング空間コレクションを作成する。
CComPtr<ITuningSpaceContainer> pTuningSpaceContainer;
hr = pTuningSpaceContainer.CoCreateInstance(CLSID_SystemTuningSpaces,
NULL, CLSCTX_INPROC_SERVER);
// チューニング空間コレクション内で ATSC チューニング空間を検索する。
CComPtr<IEnumTuningSpaces> pEnumTuningSpaces;
CComBSTR bstrATSC(L"ATSC");
CComPtr<ITuningSpace> pTuningSpace;
hr = pTuningSpaceContainer->get_EnumTuningSpaces(&pEnumTuningSpaces);
while (S_OK == pEnumTuningSpaces->Next(1, &pTuningSpace, NULL))
{
CComBSTR bstrTemp;
hr = pTuningSpace->get_UniqueName(&bstrTemp);
if (bstrTemp == bstrATSC)
{
break; // 見つかった場合。
}
pTuningSpace = NULL; // 次のループのために解放する。
}
if (pTuningSpace == NULL) // 見つからなかった場合。
{
// エラーを処理する。
}
// ATSC チューニング要求を作成する。
CComPtr<IATSCTuningSpace> pATSCTuningSpace;
pTuningSpace.QueryInterface(&pATSCTuningSpace);
CComPtr<ITuneRequest> pTuneRequest;
hr = pATSCTuningSpace->CreateTuneRequest(&pTuneRequest);
// ATSC ロケータを作成し、物理チャンネルを設定する。
CComPtr<IATSCLocator> pATSCLocator;
pATSCLocator.CoCreateInstance(CLSID_ATSCLocator, NULL,
CLSCTX_INPROC_SERVER);
hr = pATSCLocator->put_PhysicalChannel(lChannel);
// チューニング要求のチャンネル プロパティおよびマイナー チャンネル プロパティを
// -1 に設定する。ネットワーク プロバイダは ATSC チャンネルへのチューニング後に
// これらのプロパティを設定する。
CComPtr<IATSCChannelTuneRequest> pATSCTuneRequest;
pTuneRequest.QueryInterface(&pATSCTuneRequest);
hr = pATSCTuneRequest->put_Channel(-1);
hr = pATSCTuneRequest->put_MinorChannel(-1);
// ロケータをチューニング要求にバインドする。
hr = pATSCTuneRequest->put_Locator(pATSCLocator);
// チューニング要求をビデオ コントロールに渡す。
CComVariant var(pATSCTuneRequest);
hr = pMSVidCtl->View(&var);
hr = pMSVidCtl->Run();
この例に示すように、アプリケーションでチューニング要求を作成するときは、特定のネットワーク タイプをターゲットにしなければならない。一方、アプリケーションが常にデータベースからチューニング要求を取得するのであれば、そのアプリケーションはサポートされている任意のネットワーク タイプに使える。