Dienstschnittstellen
Einige Schnittstellen in Media Foundation müssen durch Aufrufen von IMFGetService::GetService- abgerufen werden, anstatt QueryInterface-aufzurufen. Die GetService--Methode funktioniert wie QueryInterface, jedoch mit den folgenden Unterschieden:
- Zusätzlich zur Schnittstellen-ID wird eine Dienst-ID-GUID verwendet.
- Es kann einen Zeiger auf ein anderes Objekt zurückgeben, das die Schnittstelle implementiert, anstatt einen Zeiger auf das ursprüngliche Objekt zurückzugeben, das abgefragt wird.
Anmerkung
Die IMFGetService--Schnittstelle ähnelt der IServiceProvider- Schnittstelle, die in einigen anderen APIs verwendet wird.
Ein -Dienst- ist eine bestimmte Schnittstelle, die von einer bestimmten Klasse von Objekten über die IMFGetService--Schnittstelle abgerufen wird. Die folgenden Dienste werden definiert.
Dienstbezeichner | Schnittstelle | Objekte, die diesen Dienst möglicherweise verfügbar machen |
---|---|---|
MF_METADATA_PROVIDER_SERVICE | IMFMetadataProvider- | Medienquellen |
MF_MEDIASOURCE_SERVICE | IMFMediaSource- | Unterstützt in Windows 8.1 und höher. |
MF_PMP_SERVER_CONTEXT | IMFPMPServer- | Geschützte Medienpfad (PMP)-Mediensitzung. |
MF_QUALITY_SERVICES | IMFQualityAdvise | Medienquellen. |
MF_RATE_CONTROL_SERVICE | IMFRateControl- | Medienquellen, Mediensitzung |
MF_RATE_CONTROL_SERVICE | IMFRateSupport- | Medienquellen, Mediensenken, Mediensitzung |
MF_REMOTE_PROXY | IMFRemoteProxy- | Proxys für Remoteobjekte. |
MF_SAMI_SERVICE | IMFSAMIStyle- | Synchronisierte Medienquelle für barrierefreie Medienaustausch (Accessible Media Interchange, SAMI). |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | IMFMediaSourcePresentationProvider | Sequenzerquelle |
MF_TIMECODE_SERVICE | IMFTimecodeTranslate- | ASF-Medienquelle. |
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE | IMFTopologyNodeAttributeEditor | Mediensitzung |
MF_WRAPPED_OBJECT | IMFByteStream- | Umschlossene Objekte |
MF_WRAPPED_BUFFER_SERVICE | Unterstützt in Windows 8.1 und höher. |
|
MF_WRAPPED_SAMPLE_SERVIC | Unterstützt in Windows 8.1 und höher. |
|
MF_WORKQUEUE_SERVICES | IMFWorkQueueServices | Mediensitzung |
MFNET_SAVEJOB_SERVICE | IMFSaveJob- | Bytedatenströme |
MFNETSOURCE_STATISTICS_SERVICE | IPropertyStore- | Netzwerkquelle. Verwenden Sie diesen Dienst, um Netzwerkstatistiken abzurufen. Siehe MFNETSOURCE_STATISTICS Eigenschaft. |
MR_AUDIO_POLICY_SERVICE | IMFAudioPolicy- | Audiorenderer |
MR_BUFFER_SERVICE | IDirect3DSurface9- | DirectX-Oberflächenpuffer |
MR_CAPTURE_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Audioaufnahmequelle |
MR_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Audiorenderer |
MR_STREAM_VOLUME_SERVICE | IMFAudioStreamVolume- | Audiorenderer |
MR_VIDEO_ACCELERATION_SERVICE | IDirect3DDeviceManager9, IDirectXVideoAccelerationService | Erweiterter Videorenderer (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfiguration | Eingabenadeln im DirectShow EVR-Filter |
MR_VIDEO_ACCELERATION_SERVICE | IMFVideoSampleAllocator Interface | EVR-Stromsenken. |
MR_VIDEO_MIXER_SERVICE | Verschiedene Schnittstellen, die vom EVR-Mischer verfügbar gemacht werden. Siehe Verwenden der Videomixer-Steuerelemente. | EVR |
MR_VIDEO_RENDER_SERVICE | Verschiedene Schnittstellen, die vom EVR-Referenten verfügbar gemacht werden. Siehe Verwenden der Videoanzeigesteuerelemente. | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE | IAcousticEchoCancellationControl | AEC-Effekte (Acoustic Echo Cancellation). Eingeführt in Windows 11, Version 24H2. |
MF_AUDIO_EFFECTS_MANAGER_SERVICE | IAudioEffectsManager | Medienquellen. Eingeführt in Windows 11, Version 24H2. |
Sie müssen GetService- verwenden, um die in dieser Tabelle aufgeführten Schnittstellen aus den in dieser Tabelle aufgeführten Objekten abzurufen.
In einigen Fällen wird eine Schnittstelle von einer Objektklasse als Dienst zurückgegeben und durch QueryInterface- von einer anderen Objektklasse zurückgegeben. Die Referenzseiten für jede Schnittstelle geben an, wann GetService- und wann QueryInterface-verwendet werden soll.
Vorsicht
Ein Objekt kann so implementiert werden, dass es eine Dienstschnittstelle über QueryInterface- sowie GetService-zurückgibt. Die Verwendung von QueryInterface jedoch, wenn GetService- erforderlich ist, kann später zu Kompatibilitätsproblemen führen.
Die MFGetService--Funktion ist eine Hilfsfunktion, die ein Objekt für IMFGetService- abfragt und dann die GetService-Methode des Objekts aufruft.
Beispiele
Das folgende Beispiel fragt die Mediensitzung für IMFGetService- ab und ruft die IMFRateControl--Schnittstelle ab.
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);
Das folgende Beispiel entspricht dem vorherigen Beispiel, verwendet jedoch die funktion 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);
Verwandte Themen