IMFRealTimeClientEx
COM公式ドキュメント
パイプラインオブジェクトに対して、Multimedia Class Scheduler Service (MMCSS) への自身の登録を通知します。(IMFRealTimeClientEx)
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
オブジェクトに対して、ワーカースレッドを Multimedia Class Scheduler Service (MMCSS) に登録するよう通知します。(IMFRealTimeClientEx.RegisterThreadsEx)
| pdwTaskIndex | DWORD* | inout | MMCSS タスク識別子です。入力時にこの値が 0 の場合、オブジェクトは新しい MCCSS タスクグループを作成する必要があります。「解説」を参照してください。 |
| wszClassName | LPWSTR | in | MMCSS タスクの名前です。 |
| lBasePriority | INT | in | スレッドの基本優先度です。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
オブジェクトがワーカースレッドを作成しない場合、このメソッドは単に S_OK を返し、それ以上の処理を行わないようにしてください。
それ以外の場合で、入力時に *pdwTaskIndex の値が 0 のときは、オブジェクトは次の手順を実行する必要があります。
- 1 つのワーカースレッドが AvSetMmThreadCharacteristics を呼び出して、新しい MMCSS タスク識別子を作成します。この値を保存します。
- 追加のワーカースレッドは、新しいタスク識別子を使用して AvSetMmThreadCharacteristics を呼び出します。
*pdwTaskIndexにそのタスク識別子を設定することで、新しいタスク識別子を呼び出し元に返します。
*pdwTaskIndex の値が 0 以外の場合、このパラメーターには既存の MMCSS タスク識別子が含まれています。その場合、オブジェクトのすべてのワーカースレッドは、AvSetMmThreadCharacteristics を呼び出して、そのタスクに自身を登録する必要があります。オブジェクトに対して、ワーカースレッドを Multimedia Class Scheduler Service (MMCSS) から登録解除するよう通知します。(IMFRealTimeClientEx.UnregisterThreads)
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
このオブジェクトが非同期ワークアイテムに使用すべきワークキューを指定します。
| dwMultithreadedWorkQueueId | DWORD | in | ワークキュー識別子です。 |
| lWorkItemBasePriority | INT | in | ワークアイテムの基本優先度です。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
オブジェクトは、新しいワークアイテムをキューに登録する際に dwMultithreadedWorkQueueId と lWorkItemBasePriority の値を使用する必要があります。ワークアイテムをキューに登録するには、MFPutWorkItem2 関数または MFPutWorkItemEx2 関数を使用してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFRealTimeClientEx "{03910848-AB16-4611-B100-17B88AE2F248}" #usecom global IMFRealTimeClientEx IID_IMFRealTimeClientEx "{}" #comfunc global IMFRealTimeClientEx_RegisterThreadsEx 3 var,wstr,int #comfunc global IMFRealTimeClientEx_UnregisterThreads 4 #comfunc global IMFRealTimeClientEx_SetWorkQueueEx 5 int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFRealTimeClientEx "{03910848-AB16-4611-B100-17B88AE2F248}" #usecom global IMFRealTimeClientEx IID_IMFRealTimeClientEx "{}" #comfunc global IMFRealTimeClientEx_RegisterThreadsEx 3 sptr,wstr,int #comfunc global IMFRealTimeClientEx_UnregisterThreads 4 #comfunc global IMFRealTimeClientEx_SetWorkQueueEx 5 int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。