Interfacce di servizio
Alcune interfacce in Media Foundation devono essere ottenute chiamando IMFGetService::GetService anziché chiamando QueryInterface. Il metodoGetServicefunziona come QueryInterface, ma con le differenze seguenti:
- Accetta un GUID dell'identificatore del servizio oltre all'identificatore di interfaccia.
- Può restituire un puntatore a un altro oggetto che implementa l'interfaccia, anziché restituire un puntatore all'oggetto originale su cui viene eseguita una query.
Nota
L'interfacciaIMFGetServiceè molto simile all'interfaccia IServiceProvider di usata in altre API.
Un servizio è una particolare interfaccia ottenuta da una particolare classe di oggetti tramite l'interfaccia IMFGetService. Sono definiti i servizi seguenti.
Identificatore del servizio | Interfaccia | Oggetti che potrebbero esporre questo servizio |
---|---|---|
MF_METADATA_PROVIDER_SERVICE | IMFMetadataProvider | Origini multimediali |
MF_MEDIASOURCE_SERVICE | IMFMediaSource | Supportato in Windows 8.1 e versioni successive. |
MF_PMP_SERVER_CONTEXT | IMFPMPServer | Sessione multimediale con percorso multimediale protetto (PMP). |
MF_QUALITY_SERVICES | IMFQualityAdvise | Origini multimediali. |
MF_RATE_CONTROL_SERVICE | IMFRateControl | Origini multimediali, Sessione multimediale |
MF_RATE_CONTROL_SERVICE | IMFRateSupport | Origini multimediali, sink multimediali, sessione multimediale |
MF_REMOTE_PROXY | IMFRemoteProxy | Proxy per oggetti remoti. |
MF_SAMI_SERVICE | IMFSAMIStyle | Origine multimediale SAMI (Accessible Media Interchange) sincronizzata. |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | IMFMediaSourcePresentationProvider | Origine sequencer |
MF_TIMECODE_SERVICE | IMFTimecodeTranslate | Origine multimediale ASF. |
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE | IMFTopologyNodeAttributeEditor | Sessione multimediale |
MF_WRAPPED_OBJECT | IMFByteStream | Oggetti di cui è stato eseguito il wrapping |
MF_WRAPPED_BUFFER_SERVICE | Supportato in Windows 8.1 e versioni successive. |
|
MF_WRAPPED_SAMPLE_SERVIC | Supportato in Windows 8.1 e versioni successive. |
|
MF_WORKQUEUE_SERVICES | IMFWorkQueueServices | Sessione multimediale |
MFNET_SAVEJOB_SERVICE | IMFSaveJob | Flussi di byte |
MFNETSOURCE_STATISTICS_SERVICE | IPropertyStore | Origine di rete. Usare questo servizio per recuperare le statistiche di rete. Vedere MFNETSOURCE_STATISTICS Proprietà. |
MR_AUDIO_POLICY_SERVICE | IMFAudioPolicy | Renderer audio |
MR_BUFFER_SERVICE | IDirect3DSurface9 | Buffer di superficie DirectX |
MR_CAPTURE_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Origine di acquisizione audio |
MR_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Renderer audio |
MR_STREAM_VOLUME_SERVICE | IMFAudioStreamVolume | Renderer audio |
MR_VIDEO_ACCELERATION_SERVICE | IDirect3DDeviceManager9, IDirectXVideoAccelerationService | Renderer video avanzato (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfiguration | Pin di input nel filtro EVR DirectShow |
MR_VIDEO_ACCELERATION_SERVICE | interfaccia IMFVideoSampleAllocator | Sink di flusso EVR. |
MR_VIDEO_MIXER_SERVICE | Varie interfacce esposte dal mixer EVR. Vedere uso dei controlli mixer video. | EVR |
MR_VIDEO_RENDER_SERVICE | Varie interfacce esposte dal relatore EVR. Vedere uso dei controlli di visualizzazione video. | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE | IAcousticEchoCancellationControl | Effetti acoustic echo cancellation (AEC). Introdotto in Windows 11 versione 24H2. |
MF_AUDIO_EFFECTS_MANAGER_SERVICE | IAudioEffectsManager | Origini multimediali. Introdotto in Windows 11 versione 24H2. |
È necessario usare GetService per ottenere le interfacce elencate in questa tabella dagli oggetti elencati in questa tabella.
In alcuni casi, un'interfaccia viene restituita come servizio da una classe di oggetti e restituita tramite QueryInterface da un'altra classe di oggetti. Le pagine di riferimento per ogni interfaccia indicano quando usare GetService e quando usare QueryInterface.
Cautela
Un oggetto può essere implementato in modo che restituisca un'interfaccia del servizio tramite QueryInterface e GetService. Tuttavia, l'uso di QueryInterface quando è necessario GetService potrebbe causare problemi di compatibilità in un secondo momento.
La funzioneMFGetServiceè una funzione helper che esegue una query su un oggetto per IMFGetService e quindi chiama il metodo GetService GetService dell'oggetto.
Esempi
Nell'esempio seguente viene richiesta la sessione multimediale per IMFGetService e viene recuperata l'interfacciaIMFRateControl.
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);
L'esempio seguente equivale all'esempio precedente, ma usa la funzioneMFGetService.
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);
Argomenti correlati
-
interfaccia IMFGetService