IMFWorkQueueServices
COM公式ドキュメント
Media Session によって作成されるワークキューを制御します。
解説(Remarks)
アプリケーションが保護されたメディアパス (PMP) セッションを使用している場合、このインターフェイスのメソッドは呼び出しを PMP プロセスへ自動的にマーシャリングします。
メソッド 12
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
トポロジーのワークキューを Multimedia Class Scheduler Service (MMCSS) に登録します。
| pCallback | IMFAsyncCallback* | in | コールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元がこのインターフェイスを実装する必要があります。 |
| pState | IUnknown* | in | 呼び出し元が定義する状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL でもかまいません。このオブジェクトは状態情報を保持するために使用できます。コールバックが呼び出されるときに、このオブジェクトが呼び出し元へ返されます。 |
戻り値
このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。
解説(Remarks)
トポロジー内の各ソースノードは、トポロジーの 1 つのブランチを定義します。ブランチには、そのノードからデータを受け取るすべてのトポロジーノードが含まれます。アプリケーションはトポロジーの各ブランチに独自のワークキューを割り当て、それらのワークキューを MMCSS タスクに関連付けることができます。
このメソッドを使用するには、次の手順を実行します。
- トポロジーを作成します。
- トポロジー内のソースノードに次の属性を設定します。
- MF_TOPONODE_WORKQUEUE_ID。ワークキューの識別子を指定します。 Media Session が新しいワークキューを割り当てます。
- MF_TOPONODE_WORKQUEUE_MMCSS_CLASS。MMCSS クラスを指定します。
- MF_TOPONODE_WORKQUEUE_MMCSS_TASKID。MMCSS タスク識別子を指定します (省略可能)。この属性が設定されていない場合、MMCSS は新しいタスク識別子を割り当てます。
- IMFMediaSession::SetTopology を呼び出してトポロジーをキューに登録します。
- MF_TOPOSTATUS_READY ステータスを伴う MESessionTopologyStatus イベントを待機します。
- BeginRegisterTopologyWorkQueuesWithMMCSS を呼び出します。このメソッドは、トポロジーのすべてのワークキューを MMCSS に登録します。
トポロジーのワークキューを MMCSS から登録解除するには、IMFWorkQueueServices::BeginUnregisterTopologyWorkQueuesWithMMCSS を呼び出します。
トポロジーのワークキューを Multimedia Class Scheduler Service (MMCSS) に登録する非同期要求を完了します。
| pResult | IMFAsyncResult* | in | IMFAsyncResult インターフェイスへのポインター。コールバックオブジェクトが IMFAsyncCallback::Invoke メソッドで受け取ったのと同じポインターを渡します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS メソッドが非同期に完了したときに、このメソッドを呼び出します。
トポロジーのワークキューを Multimedia Class Scheduler Service (MMCSS) から登録解除します。
| pCallback | IMFAsyncCallback* | in | コールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元がこのインターフェイスを実装する必要があります。 |
| pState | IUnknown* | in | 呼び出し元が定義する状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL でもかまいません。このオブジェクトは状態情報を保持するために使用できます。コールバックが呼び出されるときに、このオブジェクトが呼び出し元へ返されます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは非同期です。操作が完了すると、コールバックオブジェクトの IMFAsyncCallback::Invoke メソッドが呼び出されます。その時点で、アプリケーションは IMFWorkQueueServices::EndUnregisterTopologyWorkQueuesWithMMCSS を呼び出して非同期要求を完了する必要があります。
トポロジーのワークキューを Multimedia Class Scheduler Service (MMCSS) から登録解除する非同期要求を完了します。
| pResult | IMFAsyncResult* | in | IMFAsyncResult インターフェイスへのポインター。コールバックオブジェクトが IMFAsyncCallback::Invoke メソッドで受け取ったのと同じポインターを渡します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
IMFWorkQueueServices::BeginRegisterTopologyWorkQueuesWithMMCSS メソッドが非同期に完了したときに、このメソッドを呼び出します。
現在のトポロジーの指定されたブランチについて、Multimedia Class Scheduler Service (MMCSS) クラスを取得します。
| dwTopologyWorkQueueId | DWORD | in | このトポロジーブランチに割り当てられているワークキューを識別します。アプリケーションは、ブランチのソースノードに MF_TOPONODE_WORKQUEUE_ID 属性を設定することで、この値を定義します。 |
| pwszClass | LPWSTR | out | MMCSS クラスの名前を受け取るバッファーへのポインター。このパラメーターは NULL でもかまいません。 |
| pcchClass | DWORD* | inout | 入力時には pwszClass バッファーのサイズを文字数単位で指定します。出力時には、必要なバッファーのサイズを文字数単位で受け取ります。このサイズには終端の null 文字が含まれます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 指定された識別子を持つワークキューが存在しません。 | |
| pwszClass バッファーが小さすぎて、クラス名を受け取ることができません。 |
現在のトポロジーの指定されたブランチについて、Multimedia Class Scheduler Service (MMCSS) タスク識別子を取得します。
| dwTopologyWorkQueueId | DWORD | in | このトポロジーブランチに割り当てられているワークキューを識別します。アプリケーションは、ブランチのソースノードに MF_TOPONODE_WORKQUEUE_ID 属性を設定することで、この値を定義します。 |
| pdwTaskId | DWORD* | out | タスク識別子を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
プラットフォームワークキューを Multimedia Class Scheduler Service (MMCSS) タスクに関連付けます。
| dwPlatformWorkQueue | DWORD | in | MMCSS に登録するプラットフォームワークキュー。Work Queue Identifiers を参照してください。 すべての標準ワークキューを同じ MMCSS タスクに登録するには、このパラメーターを MFASYNC_CALLBACK_QUEUE_ALL に設定します。 |
| wszClass | LPWSTR | in | 実行する MMCSS タスクの名前。 |
| dwTaskId | DWORD | in | 一意のタスク識別子。新しいタスク識別子を取得するには、この値を 0 に設定します。 |
| pCallback | IMFAsyncCallback* | in | コールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元がこのインターフェイスを実装する必要があります。 |
| pState | IUnknown* | in | 呼び出し元が定義する状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL でもかまいません。このオブジェクトは状態情報を保持するために使用できます。コールバックが呼び出されるときに、このオブジェクトが呼び出し元へ返されます。 |
戻り値
このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは非同期です。操作が完了すると、コールバックオブジェクトの IMFAsyncCallback::Invoke メソッドが呼び出されます。その時点で、アプリケーションは IMFWorkQueueServices::EndRegisterPlatformWorkQueueWithMMCSS を呼び出して非同期要求を完了する必要があります。
ワークキューを MMCSS クラスから登録解除するには、IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS を呼び出します。
プラットフォームワークキューを Multimedia Class Scheduler Service (MMCSS) タスクに関連付ける非同期要求を完了します。
| pResult | IMFAsyncResult* | in | IMFAsyncResult インターフェイスへのポインター。コールバックオブジェクトが IMFAsyncCallback::Invoke メソッドで受け取ったのと同じポインターを渡します。 |
| pdwTaskId | DWORD* | out | 一意のタスク識別子。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS メソッドが非同期に完了したときに、この関数を呼び出します。
ワークキューを MMCSS クラスから登録解除するには、IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS を呼び出します。
プラットフォームワークキューを Multimedia Class Scheduler Service (MMCSS) タスクから登録解除します。
| dwPlatformWorkQueue | DWORD | in | MMCSS に登録するプラットフォームワークキュー。IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS を参照してください。 |
| pCallback | IMFAsyncCallback* | in | コールバックオブジェクトの IMFAsyncCallback インターフェイスへのポインター。呼び出し元がこのインターフェイスを実装する必要があります。 |
| pState | IUnknown* | in | 呼び出し元が定義する状態オブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL でもかまいません。このオブジェクトは状態情報を保持するために使用できます。コールバックが呼び出されるときに、このオブジェクトが呼び出し元へ返されます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは非同期です。操作が完了すると、コールバックオブジェクトの IMFAsyncCallback::Invoke メソッドが呼び出されます。その時点で、アプリケーションは IMFWorkQueueServices::EndUnregisterPlatformWorkQueueWithMMCSS を呼び出して非同期要求を完了する必要があります。
プラットフォームワークキューを Multimedia Class Scheduler Service (MMCSS) タスクから登録解除する非同期要求を完了します。
| pResult | IMFAsyncResult* | in | IMFAsyncResult インターフェイスへのポインター。コールバックオブジェクトが IMFAsyncCallback::Invoke メソッドで受け取ったのと同じポインターを渡します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
IMFWorkQueueServices::BeginUnregisterPlatformWorkQueueWithMMCSS メソッドが非同期に完了したときに、このメソッドを呼び出します。
指定されたプラットフォームワークキューについて、Multimedia Class Scheduler Service (MMCSS) クラスを取得します。
| dwPlatformWorkQueueId | DWORD | in | 照会するプラットフォームワークキュー。IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS を参照してください。 |
| pwszClass | LPWSTR | out | MMCSS クラスの名前を受け取るバッファーへのポインター。このパラメーターは NULL でもかまいません。 |
| pcchClass | DWORD* | inout | 入力時には pwszClass バッファーのサイズを文字数単位で指定します。出力時には、必要なバッファーのサイズを文字数単位で受け取ります。このサイズには終端の null 文字が含まれます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pwszClass バッファーが小さすぎて、クラス名を受け取ることができません。 |
指定されたプラットフォームワークキューについて、Multimedia Class Scheduler Service (MMCSS) タスク識別子を取得します。
| dwPlatformWorkQueueId | DWORD | in | 照会するプラットフォームワークキュー。IMFWorkQueueServices::BeginRegisterPlatformWorkQueueWithMMCSS を参照してください。 |
| pdwTaskId | DWORD* | out | タスク識別子を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFWorkQueueServices "{35FE1BB8-A3A9-40FE-BBEC-EB569C9CCCA3}" #usecom global IMFWorkQueueServices IID_IMFWorkQueueServices "{}" #comfunc global IMFWorkQueueServices_BeginRegisterTopologyWorkQueuesWithMMCSS 3 sptr,sptr #comfunc global IMFWorkQueueServices_EndRegisterTopologyWorkQueuesWithMMCSS 4 sptr #comfunc global IMFWorkQueueServices_BeginUnregisterTopologyWorkQueuesWithMMCSS 5 sptr,sptr #comfunc global IMFWorkQueueServices_EndUnregisterTopologyWorkQueuesWithMMCSS 6 sptr #comfunc global IMFWorkQueueServices_GetTopologyWorkQueueMMCSSClass 7 int,var,var #comfunc global IMFWorkQueueServices_GetTopologyWorkQueueMMCSSTaskId 8 int,var #comfunc global IMFWorkQueueServices_BeginRegisterPlatformWorkQueueWithMMCSS 9 int,wstr,int,sptr,sptr #comfunc global IMFWorkQueueServices_EndRegisterPlatformWorkQueueWithMMCSS 10 sptr,var #comfunc global IMFWorkQueueServices_BeginUnregisterPlatformWorkQueueWithMMCSS 11 int,sptr,sptr #comfunc global IMFWorkQueueServices_EndUnregisterPlatformWorkQueueWithMMCSS 12 sptr #comfunc global IMFWorkQueueServices_GetPlaftormWorkQueueMMCSSClass 13 int,var,var #comfunc global IMFWorkQueueServices_GetPlatformWorkQueueMMCSSTaskId 14 int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFWorkQueueServices "{35FE1BB8-A3A9-40FE-BBEC-EB569C9CCCA3}" #usecom global IMFWorkQueueServices IID_IMFWorkQueueServices "{}" #comfunc global IMFWorkQueueServices_BeginRegisterTopologyWorkQueuesWithMMCSS 3 sptr,sptr #comfunc global IMFWorkQueueServices_EndRegisterTopologyWorkQueuesWithMMCSS 4 sptr #comfunc global IMFWorkQueueServices_BeginUnregisterTopologyWorkQueuesWithMMCSS 5 sptr,sptr #comfunc global IMFWorkQueueServices_EndUnregisterTopologyWorkQueuesWithMMCSS 6 sptr #comfunc global IMFWorkQueueServices_GetTopologyWorkQueueMMCSSClass 7 int,sptr,sptr #comfunc global IMFWorkQueueServices_GetTopologyWorkQueueMMCSSTaskId 8 int,sptr #comfunc global IMFWorkQueueServices_BeginRegisterPlatformWorkQueueWithMMCSS 9 int,wstr,int,sptr,sptr #comfunc global IMFWorkQueueServices_EndRegisterPlatformWorkQueueWithMMCSS 10 sptr,sptr #comfunc global IMFWorkQueueServices_BeginUnregisterPlatformWorkQueueWithMMCSS 11 int,sptr,sptr #comfunc global IMFWorkQueueServices_EndUnregisterPlatformWorkQueueWithMMCSS 12 sptr #comfunc global IMFWorkQueueServices_GetPlaftormWorkQueueMMCSSClass 13 int,sptr,sptr #comfunc global IMFWorkQueueServices_GetPlatformWorkQueueMMCSSTaskId 14 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。