Tjänstgränssnitt
Vissa gränssnitt i Media Foundation måste hämtas genom att anropa IMFGetService::GetService i stället för genom att anropa QueryInterface. Metoden GetService fungerar som QueryInterface, men med följande skillnader:
- Det tar ett GUID för tjänstidentifierare utöver gränssnittsidentifieraren.
- Den kan returnera en pekare till ett annat objekt som implementerar gränssnittet, i stället för att returnera en pekare till det ursprungliga objektet som efterfrågas.
Not
Gränssnittet IMFGetService liknar det IServiceProvider- gränssnitt som används i vissa andra API:er.
En tjänst är ett visst gränssnitt som hämtas från en viss objektklass via IMFGetService-gränssnittet. Följande tjänster definieras.
Tjänstidentifierare | Gränssnitt | Objekt som kan exponera den här tjänsten |
---|---|---|
MF_METADATA_PROVIDER_SERVICE | IMFMetadataProvider | Mediekällor |
MF_MEDIASOURCE_SERVICE | IMFMediaSource | Stöds i Windows 8.1 och senare. |
MF_PMP_SERVER_CONTEXT | IMFPMPServer | PmP-mediesession (Protected Media Path). |
MF_QUALITY_SERVICES | IMFQualityAdvise | Mediekällor. |
MF_RATE_CONTROL_SERVICE | IMFRateControl | Mediekällor, Media Session |
MF_RATE_CONTROL_SERVICE | IMFRateSupport | Mediekällor, mediamottagare, mediasession |
MF_REMOTE_PROXY | IMFRemoteProxy | Proxyservrar för fjärrobjekt. |
MF_SAMI_SERVICE | IMFSAMIStyle | Synkroniserad SAMI-mediekälla (Accessible Media Interchange). |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | IMFMediaSourcePresentationProvider | Sequencer-källa |
MF_TIMECODE_SERVICE | IMFTimecodeTranslate | ASF-mediekälla. |
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE | IMFTopologyNodeAttributeEditor | Mediasession |
MF_WRAPPED_OBJECT | IMFByteStream | Omslutna objekt |
MF_WRAPPED_BUFFER_SERVICE | Stöds i Windows 8.1 och senare. |
|
MF_WRAPPED_SAMPLE_SERVIC | Stöds i Windows 8.1 och senare. |
|
MF_WORKQUEUE_SERVICES | IMFWorkQueueServices | Mediasession |
MFNET_SAVEJOB_SERVICE | IMFSaveJob | Byteströmmar |
MFNETSOURCE_STATISTICS_SERVICE | IPropertyStore | Nätverkskälla. Använd den här tjänsten för att hämta nätverksstatistik. Se MFNETSOURCE_STATISTICS egenskap. |
MR_AUDIO_POLICY_SERVICE | IMFAudioPolicy | Ljudåtergivning |
MR_BUFFER_SERVICE | IDirect3DSurface9 | DirectX-ytbuffertar |
MR_CAPTURE_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Ljudinspelningskälla |
MR_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Ljudåtergivning |
MR_STREAM_VOLUME_SERVICE | IMFAudioStreamVolume | Ljudåtergivning |
MR_VIDEO_ACCELERATION_SERVICE | IDirect3DDeviceManager9, IDirectXVideoAccelerationService | Förbättrad videoåtergivning (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfiguration | Indatastift i DirectShow EVR-filtret |
MR_VIDEO_ACCELERATION_SERVICE | IMFVideoSampleAllocator Interface | EVR-strömmottagare. |
MR_VIDEO_MIXER_SERVICE | Olika gränssnitt som exponeras av EVR-mixern. Se Använda videoblandarens kontroller. | EVR |
MR_VIDEO_RENDER_SERVICE | Olika gränssnitt som exponeras av EVR-presentatören. Se Använda videovisningskontrollerna. | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE | IAcousticEchoCancellationControl | AEC-effekter (Acoustic Echo Cancellation). Introducerades i Windows 11, version 24H2. |
MF_AUDIO_EFFECTS_MANAGER_SERVICE | IAudioEffectsManager | Mediekällor. Introducerades i Windows 11, version 24H2. |
Du måste använda GetService- för att hämta gränssnitten i den här tabellen från objekten som anges i den här tabellen.
I vissa fall returneras ett gränssnitt som en tjänst av en objektklass och returneras via QueryInterface av en annan objektklass. Referenssidorna för varje gränssnitt anger när du ska använda GetService och när du ska använda QueryInterface.
Försiktighet
Ett objekt kan implementeras på ett sådant sätt att det returnerar ett tjänstgränssnitt via QueryInterface- samt GetService-. Att använda QueryInterface- när GetService- krävs kan dock leda till kompatibilitetsproblem senare.
Funktionen MFGetService är en hjälpfunktion som frågar ett objekt efter IMFGetService- och sedan anropar objektets GetService--metod.
Exempel
I följande exempel frågar mediasessionen efter IMFGetService- och hämtar IMFRateControl--gränssnittet.
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);
Följande exempel motsvarar föregående exempel men använder funktionen 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);
Relaterade ämnen