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);

IMFGetService Interface

APIs da plataforma Media Foundation