Interfaces de service
Certaines interfaces dans Media Foundation doivent être obtenues en appelant IMFGetService :: GetService au lieu de en appelant 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.
- Elle peut retourner un pointeur vers un autre objet qui implémente l’interface, au lieu de retourner un pointeur vers l’objet d’origine interrogé.
Notes
L’interface IMFGetService est très similaire à l’interface IServiceProvider utilisée dans d’autres API.
Un service est une interface particulière obtenue à partir d’une classe particulière d’objets par le biais de l’interface IMFGetService . Les services suivants sont définis.
| Identificateur de service | Interface | Objets susceptibles d’exposer ce service |
|---|---|---|
| _service de fournisseur de métadonnées MF _ _ | IMFMetadataProvider | Sources multimédias |
| _service MF MEDIASOURCE _ | IMFMediaSource | pris en charge dans Windows 8.1 et versions ultérieures. |
| _contexte du _ serveur _ PMP MF | IMFPMPServer | Session de média du chemin d’accès au média (PMP) protégé. |
| _services de qualité MF _ | IMFQualityAdvise | Sources multimédias. |
| SERVICE de contrôle de la _ fréquence MF _ _ | IMFRateControl | Sources multimédias, session multimédia |
| SERVICE de contrôle de la _ fréquence MF _ _ | IMFRateSupport | Sources multimédias, récepteurs multimédia, session multimédia |
| _proxy distant _ MF | IMFRemoteProxy | Proxies pour les objets distants. |
| _service sami _ MF | IMFSAMIStyle | Source de média SAMI (Synchronized Accessible Media Interchange). |
| _service de _ fournisseur de présentation source _ MF _ | IMFMediaSourcePresentationProvider | Source de Sequencer |
| _service de code temporel MF _ | IMFTimecodeTranslate | Source du média ASF. |
| SERVICE de l’éditeur d’attributs MF _ TOPONODE _ _ _ | IMFTopologyNodeAttributeEditor | Session multimédia |
| _objet encapsulé _ MF | IMFByteStream | Objets encapsulés |
| _service de _ mémoire tampon encapsulé MF _ | pris en charge dans Windows 8.1 et versions ultérieures. |
|
| _exemple de _ _ service MF encapsulé | pris en charge dans Windows 8.1 et versions ultérieures. |
|
| _services WORKQUEUE _ MF | IMFWorkQueueServices | Session multimédia |
| _service MFNET SAVEJOB _ | IMFSaveJob | Flux d’octets |
| _service de statistiques MFNETSOURCE _ | IPropertyStore | Source réseau. Utilisez ce service pour récupérer des statistiques réseau. Consultez la _ propriété MFNETSOURCE Statistics. |
| _service de _ stratégie _ audio Mr | IMFAudioPolicy | Convertisseur audio |
| _service de mémoire tampon Mr _ | IDirect3DSurface9 | Mémoires tampons de surface DirectX |
| SERVICE de volume de la _ stratégie de capture RM _ _ _ | IMFSimpleAudioVolume | Source de capture audio |
| _service de _ volume de stratégie Mr _ | IMFSimpleAudioVolume | Convertisseur audio |
| _service de _ volume de flux Mr _ | IMFAudioStreamVolume | Convertisseur audio |
| _ _ service accélérateur vidéo _ Mr | IDirect3DDeviceManager9, IDirectXVideoAccelerationService | Rendu vidéo amélioré (EVR) |
| _ _ service accélérateur vidéo _ Mr | IDirectXVideoMemoryConfiguration | épingles d’entrée sur le filtre EVR DirectShow |
| _ _ service accélérateur vidéo _ Mr | Interface IMFVideoSampleAllocator | Récepteurs de flux EVR. |
| _service de _ mixage _ vidéo Mr | Différentes interfaces exposées par le mélangeur EVR. consultez utilisation des contrôles Video Mixer. | EVR |
| _service de _ rendu _ vidéo Mr | Différentes interfaces exposées par le présentateur EVR. Consultez utilisation des contrôles d’affichage vidéo. | EVR |
Vous devez utiliser GetService pour récupérer les interfaces listées dans ce tableau à partir des objets listés dans ce tableau.
Dans certains cas, une interface est retournée en tant que service par une classe d’objets et retournée via QueryInterface par une autre classe d’objets. Les pages de référence pour chaque interface indiquent quand utiliser GetService et quand utiliser QueryInterface.
Attention
Un objet peut être implémenté de manière à retourner une interface de service via QueryInterface et GetService. Toutefois, l’utilisation de QueryInterface quand GetService est requis peut entraîner des problèmes de compatibilité plus tard.
La fonction MFGetService est une fonction d’assistance qui interroge un objet pour IMFGetService , puis appelle la méthode GetService de l’objet.
Exemples
L’exemple suivant interroge la session multimédia 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 est équivalent à l’exemple précédent, mais utilise la fonction 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);