Aperçu d’un projet
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]
[Cette API n’est pas prise en charge et peut être modifiée ou indisponible à l’avenir.]
Pour afficher un aperçu d’un projet, appelez d’abord CoCreateInstance pour créer un instance du moteur de rendu de base. L’identificateur de classe est CLSID_RenderEngine. Appelez ensuite la méthode IRenderEngine::SetTimelineObject pour spécifier le chronologie que vous effectuez le rendu.
La première fois que vous affichez un aperçu du chronologie, effectuez les appels suivants dans l’ordre indiqué :
- Appelez IRenderEngine::SetRenderRange pour spécifier la partie de la chronologie afficher un aperçu. (facultatif)
- Appelez IRenderEngine::ConnectFrontEnd pour générer le front-end du graphique.
- Appelez IRenderEngine::RenderOutputPins. Cette méthode connecte chaque broche de sortie à un convertisseur vidéo ou à un convertisseur audio, ce qui complète le graphique.
L’exemple de code suivant illustre ces étapes :
IRenderEngine *pRender = NULL;
hr = CoCreateInstance(CLSID_RenderEngine, NULL,
CLSCTX_INPROC_SERVER, IID_IRenderEngine, (void**)&pRender);
hr = pRender->SetTimelineObject(pTL);
hr = pRender->ConnectFrontEnd();
hr = pRender->RenderOutputPins();
À présent, exécutez le graphique de filtre. Tout d’abord, appelez la méthode IRenderEngine::GetFilterGraph pour récupérer un pointeur vers l’interface IGraphBuilder de Filter Graph Manager. Ensuite, interrogez le Gestionnaire de graphe de filtres pour l’interface IMediaControl et appelez IMediaControl::Run, comme indiqué dans le code suivant :
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
hr = pRender->GetFilterGraph(&pGraph);
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pControl->Run();
Utilisez l’interface IMediaEventEx du Gestionnaire de graphe de filtre pour attendre la fin de la préversion. Vous pouvez également rechercher le graphe à l’aide de l’interface IMediaSeeking du Gestionnaire de filtres de graphes, comme vous le feriez avec un graphique de lecture de fichiers.
Pour afficher un aperçu du projet à nouveau, recherchez le graphique jusqu’à l’heure zéro et appelez à nouveau Exécuter . Si vous modifiez le contenu du chronologie, procédez comme suit :
- Appelez SetRenderRange. (facultatif)
- Appelez ConnectFrontEnd.
- Si la méthode ConnectFrontEnd retourne S_WARN_OUTPUTRESET, appelez RenderOutputPins. (Si ConnectFrontEnd retourne S_OK, vous pouvez ignorer cette étape.)
- Recherchez le graphique jusqu’à zéro.
- Exécutez le graphique.
L’exemple suivant illustre ces étapes :
hr = pRender->ConnectFrontEnd();
if (hr == S_WARN_OUTPUTRESET)
{
hr = pRender->RenderOutputPins();
}
LONGLONG llStart = 0;
hr = pSeek->SetPositions(&llStart, AM_SEEKING_AbsolutePositioning, 0, 0);
hr = pControl->Run();
Pour obtenir un exemple complet qui charge et affiche un aperçu d’un fichier projet, consultez Chargement et aperçu d’un projet.
Rubriques connexes