Interfacce di servizio
Alcune interfacce in Media Foundation devono essere ottenute chiamando IMFGetService::GetService anziché chiamando QueryInterface. Il metodo GetService funziona 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'interfaccia IMFGetService è molto simile all'interfaccia IServiceProvider 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_edizione Standard RVICE | IMFMetadataProvider | Origini multimediali |
MF_MEDIASOURCE_edizione Standard RVICE | IMFMediaSource | Supportato in Windows 8.1 e versioni successive. |
MF_PMP_edizione Standard RVER_CONTEXT | IMFPMPServer | Sessione multimediale con percorso multimediale protetto (PMP). |
MF_QUALITY_edizione Standard RVICES | IMFQualityAdvise | Origini multimediali. |
MF_RATE_CONTROL_edizione Standard RVICE | IMFRateControl | Origini multimediali, Sessione multimediale |
MF_RATE_CONTROL_edizione Standard RVICE | IMFRateSupport | Origini multimediali, sink multimediali, sessione multimediale |
MF_REMOTE_PROXY | IMFRemoteProxy | Proxy per oggetti remoti. |
MF_SAMI_edizione Standard RVICE | IMFSAMIStyle | Origine multimediale SAMI (Accessible Media Interchange) sincronizzata. |
MF_SOURCE_PRE edizione Standard NTATION_PROVIDER_edizione Standard RVICE | IMFMediaSourcePresentationProvider | Origine sequencer |
MF_TIMECODE_edizione Standard RVICE | IMFTimecodeTranslate | Origine multimediale ASF. |
MF_TOPONODE_ATTRIBUTE_EDITOR_edizione Standard RVICE | IMFTopologyNodeAttributeEditor | Sessione multimediale |
MF_WRAPPED_OBJECT | IMFByteStream | Oggetti di cui è stato eseguito il wrapping |
MF_WRAPPED_BUFFER_edizione Standard RVICE | Supportato in Windows 8.1 e versioni successive. |
|
MF_WRAPPED_SAMPLE_edizione Standard RVIC | Supportato in Windows 8.1 e versioni successive. |
|
MF_WORKQUEUE_edizione Standard RVICES | IMFWorkQueueServices | Sessione multimediale |
MFNET_SAVEJOB_edizione Standard RVICE | IMFSaveJob | Flussi di byte |
MFNETSOURCE_STATISTICS_edizione Standard RVICE | Ipropertystore | Origine di rete. Usare questo servizio per recuperare le statistiche di rete. Vedere MFNETSOURCE_STATISTICS Proprietà. |
MR_AUDIO_POLICY_edizione Standard RVICE | IMFAudioPolicy | Renderer audio |
MR_BUFFER_edizione Standard RVICE | IDirect3DSurface9 | Buffer di superficie DirectX |
MR_CAPTURE_POLICY_VOLUME_edizione Standard RVICE | IMFSimpleAudioVolume | Origine di acquisizione audio |
MR_POLICY_VOLUME_edizione Standard RVICE | IMFSimpleAudioVolume | Renderer audio |
MR_STREAM_VOLUME_edizione Standard RVICE | IMFAudioStreamVolume | Renderer audio |
MR_VIDEO_ACCELERATION_edizione Standard RVICE | IDirect3DDeviceManager9, IDirectXVideoAccelerationService | Renderer video avanzato (EVR) |
MR_VIDEO_ACCELERATION_edizione Standard RVICE | IDirectXVideoMemoryConfiguration | Pin di input nel filtro EVR DirectShow |
MR_VIDEO_ACCELERATION_edizione Standard RVICE | Interfaccia IMFVideoSampleAllocator | Sink di flusso EVR. |
MR_VIDEO_MIXER_edizione Standard RVICE | Varie interfacce esposte dal mixer EVR. Vedi Uso dei controlli mixer video. | EVR |
MR_VIDEO_RENDER_edizione Standard RVICE | Varie interfacce esposte dal relatore EVR. Vedi Uso dei controlli di visualizzazione video. | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_edizione Standard RVICE | IAcousticEchoEreitionControl | Effetti acoustic echo cancellation (AEC). Introdotto in Windows 11 versione 24H2. |
MF_AUDIO_EFFECTS_MANAGER_edizione Standard RVICE | 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.
Attenzione
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 funzione MFGetService è una funzione helper che esegue una query su un oggetto per IMFGetService e quindi chiama il metodo GetService dell'oggetto.
Esempi
L'esempio seguente esegue una query sulla sessione multimediale per IMFGetService e ottiene l'interfaccia 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);
L'esempio seguente equivale all'esempio precedente, ma usa la funzione 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);
Argomenti correlati