IMFRealTimeClient
COM公式ドキュメント
パイプラインオブジェクトに対して、Multimedia Class Scheduler Service (MMCSS) への登録を通知します。(IMFRealTimeClient)
解説(Remarks)
Media Foundation は、トポロジ内のブランチを MMCSS タスクに関連付けるための仕組みをアプリケーションに提供します。トポロジブランチは、トポロジ内のソースノードと、その下流にあるすべてのノードによって定義されます。アプリケーションは、ソースノードに MF_TOPONODE_WORKQUEUE_ID 属性を設定し、続いて IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS を呼び出すことで、トポロジブランチを MMCSS に登録します。
アプリケーションがトポロジブランチを MMCSS に登録すると、Media Session はそのブランチ内のすべてのパイプラインオブジェクトに対して IMFRealTimeClient インターフェイスを照会します。オブジェクトがこのインターフェイスを公開している場合、Media Session は RegisterThreads を呼び出します。
アプリケーションがトポロジブランチの登録を解除すると、Media Session は UnregisterThreads を呼び出します。
パイプラインオブジェクトが独自のワーカースレッドを作成しているにもかかわらずこのインターフェイスを実装していない場合、Media Foundation パイプラインで優先度の逆転が発生する可能性があります。これは、高優先度の処理スレッドが、より低い優先度のスレッド上でコンポーネントがデータを処理するのを待っている間ブロックされる可能性があるためです。
ワーカースレッドを作成しないパイプラインオブジェクトは、このインターフェイスを実装する必要はありません。
Windows 8 では、このインターフェイスは IMFRealTimeClientEx によって拡張されています。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ワーカースレッドを Multimedia Class Scheduler Service (MMCSS) に登録するようオブジェクトに通知します。(IMFRealTimeClient.RegisterThreads)
| dwTaskIndex | DWORD | in | MMCSS タスク識別子。 |
| wszClass | LPWSTR | in | MMCSS タスクの名前。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
オブジェクトのワーカースレッドは、このメソッドで指定されたタスク名および識別子を使用して AvSetMmThreadCharacteristics を呼び出し、自身を MMCSS に登録する必要があります。
ワーカースレッドを Multimedia Class Scheduler Service (MMCSS) から登録解除するようオブジェクトに通知します。(IMFRealTimeClient.UnregisterThreads)
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
オブジェクトのワーカースレッドは、AvRevertMmThreadCharacteristics を呼び出して自身を MMCSS から登録解除する必要があります。
このオブジェクトを含むトポロジブランチのワークキューを指定します。
| dwWorkQueueId | DWORD | in | ワークキューの識別子、または値 MFASYNC_CALLBACK_QUEUE_UNDEFINED。「解説」を参照してください。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
アプリケーションは、プライベートなワークキューを使用するようにトポロジのブランチを登録できます。Media Session は、IMFRealTimeClient をサポートするパイプラインオブジェクトに対して、アプリケーションのワークキュー識別子を指定して SetWorkQueue を呼び出すことで通知します。
アプリケーションがトポロジブランチの登録を解除すると、Media Session は値 MFASYNC_CALLBACK_QUEUE_UNDEFINED を指定して再度 SetWorkQueue を呼び出します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFRealTimeClient "{2347D60B-3FB5-480C-8803-8DF3ADCD3EF0}"
#usecom global IMFRealTimeClient IID_IMFRealTimeClient "{}"
#comfunc global IMFRealTimeClient_RegisterThreads 3 int,wstr
#comfunc global IMFRealTimeClient_UnregisterThreads 4
#comfunc global IMFRealTimeClient_SetWorkQueue 5 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。