Interfaces de serviço
Algumas interfaces no Media Foundation devem ser obtidas chamando IMFGetService::GetService em vez de chamar QueryInterface. O GetService método 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 de serviço é uma interface particular obtida de uma classe particular de objetos através da interfaceIMFGetService. São definidos os seguintes serviços.
Identificador de serviço | Interface | Objetos que podem expor este serviço |
---|---|---|
MF_METADATA_PROVIDER_SERVICE | IMFMetadataProvider | Fontes dos meios de comunicação social |
MF_MEDIASOURCE_SERVICE | IMFMediaSource | Suportado no Windows 8.1 e posterior. |
MF_PMP_SERVER_CONTEXT | IMFPMPServer | Sessão de mídia PMP (Protected Media Path). |
MF_QUALITY_SERVICES | IMFQualityAdvise | Fontes dos meios de comunicação social. |
MF_RATE_CONTROL_SERVICE | IMFRateControl | Fontes de mídia, Media Session |
MF_RATE_CONTROL_SERVICE | IMFRateSupport | Fontes de mídia, dissipadores 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 (Synchronized Accessible Media Interchange). |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | IMFMediaSourcePresentationProvider | Fonte do sequenciador |
MF_TIMECODE_SERVICE | IMFTimecodeTranslate | Fonte de mídia ASF. |
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE | IMFTopologyNodeAttributeEditor | Sessão de imprensa |
MF_WRAPPED_OBJECT | IMFByteStream | Objetos embrulhados |
MF_WRAPPED_BUFFER_SERVICE | Suportado no Windows 8.1 e posterior. |
|
MF_WRAPPED_SAMPLE_SERVIC | Suportado no Windows 8.1 e posterior. |
|
MF_WORKQUEUE_SERVICES | IMFWorkQueueServices | Sessão de imprensa |
MFNET_SAVEJOB_SERVICE | IMFSaveJob | Fluxos de bytes |
MFNETSOURCE_STATISTICS_SERVICE | IPropertyStore | Fonte da rede. Use este serviço para recuperar estatísticas de rede. Ver MFNETSOURCE_STATISTICS propriedade. |
MR_AUDIO_POLICY_SERVICE | IMFAudioPolicy | Renderizador de áudio |
MR_BUFFER_SERVICE | IDirect3DSurface9 | Buffers de superfície 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 | IDirect3DDeviceManager9IDirectXVideoAccelerationService | Renderizador de vídeo melhorado (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfiguration | Pinos de entrada no filtro DirectShow EVR |
MR_VIDEO_ACCELERATION_SERVICE | Interface IMFVideoSampleAllocator | Dissipadores de fluxo EVR. |
MR_VIDEO_MIXER_SERVICE | Várias interfaces expostas pelo misturador EVR. Consulte Usando os controles do misturador 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 dos meios de comunicação social. 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 através de QueryInterface por outra classe de objetos. As páginas de referência para cada interface indicam quando usar GetService e quando usar QueryInterface.
Atenção
Um objeto pode ser implementado de tal forma que retorna uma interface de serviço por meio 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étodoGetService do objeto.
Exemplos
O exemplo a seguir consulta a sessão de mídia para IMFGetService e obtém o IMFRateControl interface.
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