ITuner
COM公式ドキュメント
ITuner インターフェイスは、Microsoft BDA Network Provider フィルターに実装されています。
解説(Remarks)
このインターフェイスのインターフェイス識別子 (IID) を宣言するには、__uuidof 演算子を使用します: __uuidof(ITuner)。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
get_TuningSpace メソッドは、現在 Network Provider に対して有効なチューニングスペースを取得します。
| TuningSpace | ITuningSpace** | out | 現在のチューニングスペースが設定される ITuningSpace インターフェイスポインターのアドレス。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
put_TuningSpace メソッドは、Network Provider のチューニングスペースを設定します。
| TuningSpace | ITuningSpace* | in | Network Provider に設定するチューニングスペースへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
EnumTuningSpaces メソッドは、この実装が優先するチューニングスペースのコレクションを作成します。
| ppEnum | IEnumTuningSpaces** | out | 返されるコレクションが設定される IEnumTuningSpaces インターフェイスポインターのアドレス。 |
戻り値
成功した場合は S_OK を返します。メソッドが失敗した場合、エラー情報は標準の COM IErrorInfo インターフェイスを使用して取得できます。
解説(Remarks)
このリストは、この実装に対して互換性のあるチューニングスペースのサブセットです。
get_TuneRequest メソッドは、現在 Network Provider に対して有効なチューン要求を取得します。
| TuneRequest | ITuneRequest** | out | 返されるオブジェクトが設定される ITuneRequest インターフェイスポインターのアドレス。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
チューン要求が Tuner に送信されると、その Components コレクションが設定されます。プログラムへのチューニング後に get_TuneRequest を呼び出すことで、アプリケーションはそのプログラムに対して現在利用可能なコンポーネントを判別でき、コレクション内の Component オブジェクトに対して IComponent::put_Status メソッドを使用して、それらを有効化または無効化できます。たとえば、アプリケーションが英語のオーディオストリームからスペイン語のオーディオストリームに切り替えるのはこの方法によります。
put_TuneRequest メソッドは、現在 Network Provider に対して有効なチューン要求を設定します。
| TuneRequest | ITuneRequest* | in | Network Provider の設定に使用される ITuneRequest オブジェクトへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドを呼び出すと、チューン要求のプロパティに基づいてチューニング操作が開始されます。チューニング操作は非同期に試行される場合があります。
Validate メソッドは、チューン要求を実行できることを示す値を返します。
| TuneRequest | ITuneRequest* | in | チューン要求オブジェクトへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
Network Provider は、まず優先するチューン要求インターフェイスに対してクエリを行います。いずれかが見つかった場合、Network Provider はそのチューン要求が実行可能であることを検証します。いずれも利用できない場合は、次に優先するチューニングスペースインターフェイスに対してクエリを行います。いずれかが見つかった場合、Network Provider は指定されたチューニングスペースに対して自身を構成できることを検証します。
get_PreferredComponentTypes メソッドは、既定のコンポーネント選択に使用される ComponentType オブジェクトのコレクションを取得します。
| ComponentTypes | IComponentTypes** | out | ComponentType オブジェクトのコレクションを受け取る IComponentTypes インターフェイスポインターのアドレス。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
プログラムが終了すると、新しいストリームコンポーネントのセットが利用可能になる場合があります。そのため、その時点でチューナーは優先コンポーネントタイプのリストを自動的に調べ、そのリストに基づいてコンポーネントを選択します。リストが利用できない場合、チューナーは他の要因に基づいて選択を行います。アプリケーションは、現在のリストを調べるためにこのメソッドを呼び出すだけです。
put_PreferredComponentTypes メソッドは、既定のコンポーネント選択に使用される ComponentType オブジェクトのコレクションを設定します。
| ComponentTypes | IComponentTypes* | in | ComponentType オブジェクトのコレクションを含む IComponentTypes インターフェイスへのポインター。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
アプリケーションは、空の ComponentTypes コレクションをインスタンス化して内容を埋め、put_PreferredComponentTypes を使用して Tuner に送信することで、優先コンポーネントタイプのリストを作成します。
get_SignalStrength メソッドは、Network Provider 固有の信号強度メトリックを取得します。
| Strength | INT* | out | 信号強度を受け取ります。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
値 -1 は判別不能、0 は未チューニング、最大値は最良の信号を意味します。デジタルチューナーの場合、この値には FEC のビット誤り率 (BER) も反映されます。
TriggerSignalEvents メソッドは、信号の状態が変化したときにチューナーがイベントを発生させることを有効にします。
| Interval | INT | in | タイムアウト間隔をミリ秒単位で指定します。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
タイムアウト間隔が満了するまでに信号状態が変化しなかった場合、チューナーはタイムアウト間隔の終了時に信号状態変化イベントを発生させます。呼び出し元が間隔として INFINITE を指定した場合、チューナーは信号状態が変化するまでイベントを発生させず、変化が起こるまでに経過する時間の長さには関係しません。値 0 を指定すると、信号状態が変化したかどうかに関係なく、信号状態変化イベントが直ちに発生します。
TriggerSignalEvents の各呼び出しでは、イベントを 1 回だけ発生させることができます。一連の信号状態変化に応じてイベントを複数回発生させるには、TriggerSignalEvents を連続して呼び出す必要があります。
複数のイベントシンクオブジェクトが、信号状態が変化したときに発生するイベントをチューナーが発生させるのを待機できます。詳細については、IBroadcastEvent Interface を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITuner "{28C52640-018A-11D3-9D8E-00C04F72D980}" #usecom global ITuner IID_ITuner "{}" #comfunc global ITuner_get_TuningSpace 3 sptr #comfunc global ITuner_put_TuningSpace 4 sptr #comfunc global ITuner_EnumTuningSpaces 5 sptr #comfunc global ITuner_get_TuneRequest 6 sptr #comfunc global ITuner_put_TuneRequest 7 sptr #comfunc global ITuner_Validate 8 sptr #comfunc global ITuner_get_PreferredComponentTypes 9 sptr #comfunc global ITuner_put_PreferredComponentTypes 10 sptr #comfunc global ITuner_get_SignalStrength 11 var #comfunc global ITuner_TriggerSignalEvents 12 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITuner "{28C52640-018A-11D3-9D8E-00C04F72D980}" #usecom global ITuner IID_ITuner "{}" #comfunc global ITuner_get_TuningSpace 3 sptr #comfunc global ITuner_put_TuningSpace 4 sptr #comfunc global ITuner_EnumTuningSpaces 5 sptr #comfunc global ITuner_get_TuneRequest 6 sptr #comfunc global ITuner_put_TuneRequest 7 sptr #comfunc global ITuner_Validate 8 sptr #comfunc global ITuner_get_PreferredComponentTypes 9 sptr #comfunc global ITuner_put_PreferredComponentTypes 10 sptr #comfunc global ITuner_get_SignalStrength 11 sptr #comfunc global ITuner_TriggerSignalEvents 12 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。