Service Interfaces
Certaines interfaces dans Media Foundation doivent être obtenues en appelant IMFGetService ::GetService au lieu d’appeler QueryInterface. La méthode GetService fonctionne comme QueryInterface, mais avec les différences suivantes :
- Il prend un GUID d’identificateur de service en plus de l’identificateur d’interface.
- Il peut retourner un pointeur vers un autre objet qui implémente l’interface, au lieu de renvoyer un pointeur vers l’objet d’origine interrogé.
Note
L’interface IMFGetService est très similaire à l’interface IServiceProvider utilisée dans d’autres API.
Un de service est une interface particulière obtenue à partir d’une classe particulière d’objets via l’interface IMFGetService. Les services suivants sont définis.
Identificateur de service | Interface | Objets susceptibles d’exposer ce service |
---|---|---|
MF_METADATA_PROVIDER_SERVICE | IMFMetadataProvider | Sources multimédias |
MF_MEDIASOURCE_SERVICE | IMFMediaSource | Pris en charge dans Windows 8.1 et versions ultérieures. |
MF_PMP_SERVER_CONTEXT | IMFPMPServer | Session de média PMP (Protected Media Path). |
MF_QUALITY_SERVICES | IMFQualityAdvise | Sources multimédias. |
MF_RATE_CONTROL_SERVICE | IMFRateControl | Sources multimédias, session multimédia |
MF_RATE_CONTROL_SERVICE | IMFRateSupport | Sources multimédias, récepteurs multimédias, session multimédia |
MF_REMOTE_PROXY | IMFRemoteProxy | Proxys pour les objets distants. |
MF_SAMI_SERVICE | IMFSAMIStyle | Source de média SAMI (Accessible Media Interchange) synchronisée. |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | IMFMediaSourcePresentationProvider | Source sequencer |
MF_TIMECODE_SERVICE | IMFTimecodeTranslate | Source multimédia ASF. |
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE | IMFTopologyNodeAttributeEditor | Session multimédia |
MF_WRAPPED_OBJECT | IMFByteStream | Objets encapsulés |
MF_WRAPPED_BUFFER_SERVICE | Pris en charge dans Windows 8.1 et versions ultérieures. |
|
MF_WRAPPED_SAMPLE_SERVIC | Pris en charge dans Windows 8.1 et versions ultérieures. |
|
MF_WORKQUEUE_SERVICES | IMFWorkQueueServices | Session multimédia |
MFNET_SAVEJOB_SERVICE | IMFSaveJob | Flux d’octets |
MFNETSOURCE_STATISTICS_SERVICE | IPropertyStore | Source réseau. Utilisez ce service pour récupérer les statistiques réseau. Voir MFNETSOURCE_STATISTICS, propriété. |
MR_AUDIO_POLICY_SERVICE | IMFAudioPolicy | Convertisseur audio |
MR_BUFFER_SERVICE | IDirect3DSurface9 | Mémoires tampons de surface DirectX |
MR_CAPTURE_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Source de capture audio |
MR_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Convertisseur audio |
MR_STREAM_VOLUME_SERVICE | IMFAudioStreamVolume | Convertisseur audio |
MR_VIDEO_ACCELERATION_SERVICE | IDirect3DDeviceManager9, IDirectXVideoAccelerationService | Convertisseur vidéo amélioré (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfiguration | Broches d’entrée sur le filtre EVR DirectShow |
MR_VIDEO_ACCELERATION_SERVICE | l’interface IMFVideoSampleAllocator | Récepteurs de flux EVR. |
MR_VIDEO_MIXER_SERVICE | Différentes interfaces exposées par le mélangeur EVR. Consultez Utilisation des contrôles de mixage vidéo. | EVR |
MR_VIDEO_RENDER_SERVICE | Différentes interfaces exposées par le présentateur EVR. Consultez Utilisation des contrôles d’affichage vidéo. | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE | IAcousticEchoCancellationControl | Effets D’annulation d’écho acoustique (AEC). Introduit dans Windows 11, version 24H2. |
MF_AUDIO_EFFECTS_MANAGER_SERVICE | IAudioEffectsManager | Sources multimédias. Introduit dans Windows 11, version 24H2. |
Vous devez utiliser GetService pour obtenir les interfaces répertoriées dans ce tableau à partir des objets répertoriés dans ce tableau.
Dans certains cas, une interface est retournée en tant que service par une classe d’objets et retournée par QueryInterface par une autre classe d’objets. Les pages de référence de chaque interface indiquent quand utiliser GetService et quand utiliser QueryInterface .
Prudence
Un objet peut être implémenté de telle manière qu’il retourne une interface de service via QueryInterface ainsi que GetService. Toutefois, l’utilisation de QueryInterface lorsque GetService est nécessaire peut entraîner des problèmes de compatibilité ultérieurement.
La fonction MFGetService est une fonction d’assistance qui interroge un objet pour IMFGetService, puis appelle la méthode GetServicede l’objet.
Exemples
L’exemple suivant interroge la session media pour IMFGetService et obtient l’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);
L’exemple suivant équivaut à l’exemple précédent, mais utilise la fonctionMFGetService.
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);
Rubriques connexes