次の方法で共有


プラグ可能なターミナルの実装

プラグ可能なターミナル実装の一般的な要件は次のとおりです。

  • プラグ可能なターミナルの基になるストリーミング コードは、目的の MSP の機能と一致している必要があります。
  • ほとんどの MSP を操作するには、ターミナルで DirectShow フィルターを使用する必要があります (これはここから想定されています)。
  • オーディオ端末は、ほとんどの MSP で 8 kHz 16 ビットのモノ リニア PCM をサポートする必要があります。
  • ターミナルでは 、IMarshal を実装することで、フリー スレッド マーシャリングを有効にする必要があります。 これを行うには、COM API CoCreateFreeThreadedMarshaler を呼び出し、返されたポインターに IMarshal を集計します。 ターミナル オブジェクトのデストラクターは IMarshal-Release> を呼び出す必要があります。
  • ターミナルは、適切な追加のターミナル固有のインターフェイスを実装または集計する必要があります。
  • ターミナルの実装はスレッド セーフである必要があります。
  • ターミナルの実装では、 ITTerminalControl の定義に Termmgr.h を#includeする必要があります。 これは、Windows 2000 SP1 の TAPI 3 または TAPI 3 アプリケーションに必要な通常のインクルードとライブラリに加えて行われます。

インターフェイスとメソッドの実装に関する注意事項:

ターミナルは ITTerminal (デュアル インターフェイス vtable + IDispatch) を実装する必要があります。

ITTerminal::get_TerminalClass

ターミナルは、選択したターミナルの種類を識別する GUID の BSTR 表現を返す必要があります。 SysAllocString を使用して BSTR を割り当てます。 GUID から BSTR に変換するには、 StringFromCLSIDSysAllocStringおよび CoTaskMemFree を呼び出します。

ITTerminal::get_TerminalType

通常、アプリケーションがターミナルを実装する場合、ターミナルはTT_DYNAMICを返す必要があります。 TT_STATICを返すこともできます。ターミナルがハードウェア デバイスに対応している場合は、この値を返すのが適切な場合があります。ただし、MSP の静的ターミナル列挙には静的ターミナルが存在しないため、ユーザーが混乱を招く可能性があります。

ITTerminal::get_State

ターミナルの実装で、ターミナルが同時に接続できるストリームの数を任意に制限しない場合、ターミナルは常に TS_NOTINUSEを返す必要があります。

それ以外の場合、ターミナルの実装では、一度に接続できるストリームの数を任意に制限します。 この場合、ターミナルは接続されているストリームの数を保持する必要があります。 ターミナルは、正常な ITTerminalControl::ConnectTerminal 呼び出しでこの内部カウントをインクリメントし、成功した ITTerminalControl::D isconnectTerminal 呼び出しでそれをデクリメントする必要があります。 ITTerminal::get_State では、この数が一度に選択できるストリームの最大数と等しい場合は、TS_INUSEを返す必要があります。それ以外の場合は、TS_NOTINUSEを返す必要があります。 制限が 1 の場合、カウントには単にブール値またはTERMINAL_STATE値を指定できます。

ITTerminal::get_Name

ターミナルは、SysAllocString を介して割り当てられた、選択した BSTR 名を返す必要があります。 この名前はユーザーにとって意味があり、ローカライズする必要があります。

ITTerminal::get_MediaType

ターミナルは、メディアの種類 (TAPIMEDIATYPE_AUDIOまたはTAPIMEDIATYPE_VIDEO) を返す必要があります。

ITTerminal::get_Direction

ターミナルは、ターミナルの方向を示すTERMINAL_DIRECTION列挙値を返します。 ターミナルが双方向 (ブリッジなど) の場合は、TD_BIDIRECTIONALを返す必要があります。

ターミナルは ITTerminalControl を実装する必要があります (vtable のみ)。

ITTerminalControl::get_AddressHandle

アプリケーションによって提供されるターミナルは、常にアドレス ハンドルとして NULL を 返す必要があります。 これは、このターミナルが特定の MSP アドレス オブジェクトに作成されなかったことを MSP に示します。

ITTerminalControl::ConnectTerminal

この呼び出しでは、ターミナルはそのフィルターを特定のグラフに追加し、必要に応じて相互に接続します。 その後、ターミナルは、指定されたストリーム方向に対してターミナルによって公開されるピンを返す必要があります。

複数のストリームへの同時接続をサポートしていないターミナルでは、このメソッドが正常に完了すると、内部変数が TS_INUSE に設定されます。

ターミナルは、この呼び出しの dwTerminalDirection パラメーターを使用して、接続されているストリームの方向を決定できます。 これは双方向端子に必要です。

Note

通常 (MSP 基本クラスおよびすべての既知の MSP) では、ターミナルが 1 つの ConnectTerminal 呼び出しから複数のピンを返した場合、MSP ストリーム コードは接続に失敗します。 接続中に複数のピンを返すターミナルでは、追加のピンを効果的に使用するために、MSP がターミナルに関する特別な知識を持っている必要があるため、これは問題ありません。

 

ITTerminalControl::CompleteConnectTerminal

ターミナルはS_OKを返すだけです。 必要に応じて、ターミナルで接続後の初期化を行うこともできます。

ITTerminalControl::D isconnectTerminal

ターミナルは、グラフの残りの部分からターミナルを切断するために必要な操作を行う必要があります。 通常、これには、グラフからすべてのターミナルフィルターを削除し、ターミナルの状態をTS_NOTINUSEに設定する必要があります。

ITTerminalControl::RunRenderFilter

ターミナルはE_NOTIMPLを返すだけです。

ITTerminalControl::StopRenderFilter

ターミナルはE_NOTIMPLを返すだけです。