Interfaces de serviço
Algumas interfaces no Media Foundation devem ser obtidas chamando IMFGetService::GetService em vez de chamar QueryInterface. O método GetService funciona como QueryInterface, mas com as seguintes diferenças:
- Ele usa um GUID do identificador de serviço além do identificador de interface.
- Ele pode retornar um ponteiro para outro objeto que implementa a interface, em vez de retornar um ponteiro para o objeto original que é consultado.
Nota
A interfaceIMFGetService é muito semelhante à interface de IServiceProvider usada em algumas outras APIs.
Um serviço é uma interface específica obtida de uma classe específica de objetos por meio da interfaceIMFGetService. Os serviços a seguir são definidos.
Identificador de serviço | Interface | Objetos que podem expor esse serviço |
---|---|---|
MF_METADATA_PROVIDER_SERVICE | IMFMetadataProvider | Fontes de mídia |
MF_MEDIASOURCE_SERVICE | IMFMediaSource | Com suporte no Windows 8.1 e posterior. |
MF_PMP_SERVER_CONTEXT | IMFPMPServer | Sessão de Mídia do PMP (caminho de mídia protegido). |
MF_QUALITY_SERVICES | IMFQualityAdvise | Fontes de mídia. |
MF_RATE_CONTROL_SERVICE | IMFRateControl | Fontes de mídia, Sessão de Mídia |
MF_RATE_CONTROL_SERVICE | IMFRateSupport | Fontes de mídia, coletores de mídia, Sessão de Mídia |
MF_REMOTE_PROXY | IMFRemoteProxy | Proxies para objetos remotos. |
MF_SAMI_SERVICE | IMFSAMIStyle | Fonte de mídia SAMI (Intercâmbio de Mídia Acessível Sincronizada). |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | IMFMediaSourcePresentationProvider | Origem do sequencer |
MF_TIMECODE_SERVICE | IMFTimecodeTranslate | Fonte de mídia ASF. |
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE | IMFTopologyNodeAttributeEditor | Sessão de mídia |
MF_WRAPPED_OBJECT | IMFByteStream | Objetos encapsulados |
MF_WRAPPED_BUFFER_SERVICE | Com suporte no Windows 8.1 e posterior. |
|
MF_WRAPPED_SAMPLE_SERVIC | Com suporte no Windows 8.1 e posterior. |
|
MF_WORKQUEUE_SERVICES | IMFWorkQueueServices | Sessão de mídia |
MFNET_SAVEJOB_SERVICE | IMFSaveJob | Fluxos de bytes |
MFNETSOURCE_STATISTICS_SERVICE | IPropertyStore | Fonte de rede. Use esse serviço para recuperar estatísticas de rede. Consulte MFNETSOURCE_STATISTICS Property. |
MR_AUDIO_POLICY_SERVICE | IMFAudioPolicy | Renderizador de áudio |
MR_BUFFER_SERVICE | IDirect3DSurface9 | Buffers de superfície do DirectX |
MR_CAPTURE_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Origem da captura de áudio |
MR_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Renderizador de áudio |
MR_STREAM_VOLUME_SERVICE | IMFAudioStreamVolume | Renderizador de áudio |
MR_VIDEO_ACCELERATION_SERVICE | IDirect3DDeviceManager9, IDirectXVideoAccelerationService | Renderizador de vídeo avançado (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfiguration | Fixações de entrada no filtro EVR do DirectShow |
MR_VIDEO_ACCELERATION_SERVICE | interface IMFVideoSampleAllocator | Coletores de fluxo EVR. |
MR_VIDEO_MIXER_SERVICE | Várias interfaces expostas pelo mixer EVR. Consulte Usando os controles do Video Mixer. | EVR |
MR_VIDEO_RENDER_SERVICE | Várias interfaces expostas pelo apresentador do EVR. Consulte Usando os controles de exibição de vídeo. | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE | IAcousticEchoCancellationControl | Efeitos de cancelamento de eco acústico (AEC). Introduzido no Windows 11, versão 24H2. |
MF_AUDIO_EFFECTS_MANAGER_SERVICE | IAudioEffectsManager | Fontes de mídia. Introduzido no Windows 11, versão 24H2. |
Você deve usar GetService para obter as interfaces listadas nesta tabela dos objetos listados nesta tabela.
Em alguns casos, uma interface é retornada como um serviço por uma classe de objetos e retornada por meio de QueryInterface por outra classe de objetos. As páginas de referência de cada interface indicam quando usar GetService e quando usar QueryInterface.
Cuidado
Um objeto pode ser implementado de forma a retornar uma interface de serviço por meio de QueryInterface, bem como GetService. No entanto, usar QueryInterface quando getService for necessário pode levar a problemas de compatibilidade posteriormente.
A função MFGetService é uma função auxiliar que consulta um objeto para IMFGetService e, em seguida, chama o métodoGetServicedo objeto.
Exemplos
O exemplo a seguir consulta a Sessão de Mídia para IMFGetService e obtém a interfaceIMFRateControl.
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);
O exemplo a seguir é equivalente ao exemplo anterior, mas usa a função 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);
Tópicos relacionados
-
interface IMFGetService
-
APIs do Media Foundation Platform