Interfaces de serviço
Algumas interfaces no Media Foundation devem ser obtidas chamando IMFGetService::GetService em vez de chamando QueryInterface. O método GetService funciona como QueryInterface, mas com as seguintes diferenças:
- Ele usa um GUID de 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.
Observação
A interface IMFGetService é muito semelhante à interface IServiceProvider usada em algumas outras APIs.
Um serviço é uma interface particular obtida de uma classe particular de objetos através da interface IMFGetService . Os seguintes serviços são definidos.
Identificador de serviço | Interface | Objetos que podem expor este 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 de caminho de mídia protegido (PMP). |
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 | IMFSAMIStile | Fonte de mídia SAMI (Unified Accessible Media Interchange) sincronizada. |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | IMFMediaSourcePresentationProvider | Origem do sequenciador |
MF_TIMECODE_SERVICE | IMFTimecodeTraduzir | 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 este serviço para recuperar estatísticas de rede. Veja MFNETSOURCE_STATISTICS propriedade. |
MR_AUDIO_POLICY_SERVICE | IMFAudioPolicy | Renderizador de áudio |
MR_BUFFER_SERVICE | IDirect3DSurface9 | Buffers de superfície do DirectX |
MR_CAPTURE_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Fonte de 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 aprimorado (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfiguration | Pinos de entrada no filtro EVR do DirectShow |
MR_VIDEO_ACCELERATION_SERVICE | IMFVideoSampleAllocator Interface | Fluxo EVR afunda. |
MR_VIDEO_MIXER_SERVICE | Várias interfaces expostas pelo misturador EVR. Consulte Usando os controles do mixer de vídeo. | EVR |
MR_VIDEO_RENDER_SERVICE | Várias interfaces expostas pelo apresentador 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 a partir 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 para cada interface indicam quando usar GetService e quando usar QueryInterface.
Cuidado
Um objeto pode ser implementado de tal forma que ele retorna uma interface de serviço por meio de QueryInterface, bem como GetService. No entanto, usar QueryInterface quando GetService é necessário pode levar a problemas de compatibilidade mais tarde.
A função MFGetService é uma função auxiliar que consulta um objeto para IMFGetService e, em seguida, chama o método GetService do objeto.
Exemplos
O exemplo a seguir consulta a sessão de mídia para IMFGetService e obtém a interface 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);
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