サービス インターフェイス
Media Foundation の一部のインターフェイスは、QueryInterface 呼び出す代わりに、IMFGetService::GetService を呼び出して取得する必要があります。 GetService メソッドは QueryInterface と同様に動作しますが、次の違いがあります。
- インターフェイス識別子に加えて、サービス識別子 GUID を受け取ります。
- 照会された元のオブジェクトへのポインターを返す代わりに、インターフェイスを実装する別のオブジェクトへのポインターを返すことができます。
手記
IMFGetService インターフェイスは、他の API で使用される IServiceProvider インターフェイスによく似ています。
サービス は、IMFGetService インターフェイスを介してオブジェクトの特定のクラスから取得された特定のインターフェイスです。 次のサービスが定義されています。
サービス識別子 | インターフェイス | このサービスを公開する可能性があるオブジェクト |
---|---|---|
MF_METADATA_PROVIDER_SERVICE | IMFMetadataProviderをする | メディア ソース |
MF_MEDIASOURCE_SERVICE | IMFMediaSourceの | Windows 8.1 以降でサポートされています。 |
MF_PMP_SERVER_CONTEXT | IMFPMPServerの | 保護されたメディア パス (PMP) メディア セッション。 |
MF_QUALITY_SERVICES | IMFQualityAdvise | メディア ソース。 |
MF_RATE_CONTROL_SERVICE | IMFRateControlの | メディア ソース、メディア セッション |
MF_RATE_CONTROL_SERVICE | IMFRateSupportをする | メディア ソース、メディア シンク、メディア セッション |
MF_REMOTE_PROXY | IMFRemoteProxyの | リモート オブジェクトのプロキシ。 |
MF_SAMI_SERVICE | IMFSAMIStyle | 同期されたアクセス可能なメディア インターチェンジ (SAMI) メディア ソース。 |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | IMFMediaSourcePresentationProviderの | Sequencer ソース |
MF_TIMECODE_SERVICE | IMFTimecodeTranslateの | ASF メディア ソース。 |
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE | IMFTopologyNodeAttributeEditor | メディア セッション |
MF_WRAPPED_OBJECT | IMFByteStreamの | ラップされたオブジェクト |
MF_WRAPPED_BUFFER_SERVICE | Windows 8.1 以降でサポートされています。 |
|
MF_WRAPPED_SAMPLE_SERVIC | Windows 8.1 以降でサポートされています。 |
|
MF_WORKQUEUE_SERVICES | IMFWorkQueueServicesをする | メディア セッション |
MFNET_SAVEJOB_SERVICE | IMFSaveJobの | バイト ストリーム |
MFNETSOURCE_STATISTICS_SERVICE | IPropertyStore を する | ネットワーク ソース。 このサービスを使用して、ネットワーク統計情報を取得します。 プロパティMFNETSOURCE_STATISTICS 参照してください。 |
MR_AUDIO_POLICY_SERVICE | IMFAudioPolicyをする | オーディオ レンダラー |
MR_BUFFER_SERVICE | IDirect3DSurface9 の | DirectX サーフェス バッファー |
MR_CAPTURE_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolumeの | オーディオ キャプチャ ソース |
MR_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolumeの | オーディオ レンダラー |
MR_STREAM_VOLUME_SERVICE | IMFAudioStreamVolumeの | オーディオ レンダラー |
MR_VIDEO_ACCELERATION_SERVICE | IDirect3DDeviceManager9、IDirectXVideoAccelerationService | 拡張ビデオ レンダラー (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfigurationの | DirectShow EVR フィルターの入力ピン |
MR_VIDEO_ACCELERATION_SERVICE | IMFVideoSampleAllocator インターフェイスの | EVR ストリーム シンク。 |
MR_VIDEO_MIXER_SERVICE | EVR ミキサーによって公開されるさまざまなインターフェイス。 ビデオ ミキサー コントロール の使用に関するを参照してください。 | EVR |
MR_VIDEO_RENDER_SERVICE | EVR 発表者によって公開されるさまざまなインターフェイス。 ビデオディスプレイコントロール を使用するを参照してください。 | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE | IAcousticEchoCancellationControl | Acoustic Echo Cancellation (AEC) 効果。 Windows 11 バージョン 24H2 で導入されました。 |
MF_AUDIO_EFFECTS_MANAGER_SERVICE | IAudioEffectsManagerの | メディア ソース。 Windows 11 バージョン 24H2 で導入されました。 |
GetService を使用して、この表に示すオブジェクトからこの表に示されているインターフェイスを取得する必要があります。
場合によっては、インターフェイスは、あるクラスのオブジェクトによってサービスとして返され、別のクラスのオブジェクトによって QueryInterface を介して返されます。 各インターフェイスの参照ページは、GetService を使用するタイミングと、QueryInterfaceを使用するタイミングを示します。
注意
オブジェクトは、QueryInterface と GetServiceを介してサービス インターフェイスを返すように実装できます。 ただし、GetService 必要な場合 QueryInterface を使用すると、後で互換性の問題が発生する可能性があります。
MFGetService 関数は、IMFGetServiceのオブジェクトクエリを実行し、オブジェクトの GetService メソッドを呼び出すヘルパー関数です。
例
次の例では、メディア セッション IMFGetService を照会し、IMFRateControl インターフェイスを取得します。
IMFGetService *pGetService = NULL;
IMFRateControl *pRateControl = NULL;
HRESULT hr = S_OK;
hr = pMediaSession->QueryInterface(
IID_IMFGetService,
(void**)&pGetService);
if (SUCCEEDED(hr))
{
hr = pGetService->GetService(
MF_RATE_CONTROL_SERVICE,
IID_IMFRateControl,
(void**)&pRateControl);
}
if (SUCCEEDED(hr))
{
// Use IMFRateControl. (Not shown.)
}
// Clean up.
SAFE_REELEASE(pGetService);
SAFE_RELEASE(pRateControl);
次の例は前の例と同じですが、MFGetService 関数を使用します。
IMFRateControl *pRateControl = NULL;
HRESULT hr = S_OK;
hr = MFGetService(
pMediaSession,
MF_RATE_CONTROL_SERVICE,
IID_IMFRateControl,
(void**) &pRateCtl
);
if (SUCCEEDED(hr))
{
// Use IMFRateControl. (Not shown.)
}
// Clean up.
SAFE_RELEASE(pRateControl);
関連トピック
-
IMFGetService インターフェイスの