Aperçu du 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 du projet, vous avez besoin d’un composant appelé moteur de rendu, qui génère un graphique de filtre DirectShow à partir d’un chronologie. Le graphe de filtre est ce qui affiche réellement le projet. Vous pouvez utiliser le moteur de rendu pour afficher un aperçu d’un projet ou pour écrire le fichier de sortie final.

Cet article n’aborde pas en détail le moteur de rendu. Pour la préversion, vous n’avez besoin que de quelques appels de méthode. Vous trouverez une discussion plus approfondie, y compris la façon d’écrire des fichiers de sortie, dans Rendu d’un projet. L’exemple de code suivant montre comment construire un graphique en préversion.

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

Créez le moteur de rendu à l’aide de la fonction CoCreateInstance . Appelez ensuite les méthodes suivantes sur l’interface IRenderEngine du moteur de rendu :

  • SetTimelineObject. Spécifie le chronologie à utiliser.
  • ConnectFrontEnd. Génère un graphique de filtre partiel, avec une broche de sortie pour chaque groupe dans le chronologie.
  • RenderOutputPins. Termine le graphique d’aperçu en connectant chaque broche de sortie à un convertisseur vidéo ou audio.

Une fois le graphique généré, vous pouvez afficher un aperçu du projet en exécutant le graphe, comme vous le feriez avec n’importe quel graphique de filtre DirectShow. Tout d’abord, obtenez un pointeur vers le graphique de filtre en appelant la méthode IRenderEngine::GetFilterGraph .

IGraphBuilder   *pGraph = NULL;
hr = pRender->GetFilterGraph(&pGraph);

Interrogez le graphique de filtres pour les interfaces IMediaControl et IMediaEvent . Utilisez ces deux interfaces pour exécuter le graphique et attendre la fin de la lecture. Pour obtenir une explication de l’utilisation de ces interfaces, consultez Comment lire un fichier et répondre aux événements. Le code suivant montre une façon d’utiliser ces interfaces.

IMediaControl   *pControl = NULL;
IMediaEvent     *pEvent = NULL;
long evCode;
pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
hr = pControl->Run();
hr = pEvent->WaitForCompletion(INFINITE, &evCode);
pControl->Stop();

Le code de cet exemple bloque l’exécution du programme jusqu’à la fin de la lecture, en raison du paramètre INFINITE dans l’appel de méthode IMediaEvent::WaitForCompletion . Toutefois, si un problème se produit pendant la lecture, cela peut entraîner l’arrêt de la réponse du programme. Dans une application réelle, utilisez une boucle de message pour attendre la fin de la lecture. Il est également recommandé de fournir à l’utilisateur un moyen d’interrompre la lecture.

Lorsque vous avez terminé d’utiliser le moteur de rendu, appelez toujours la méthode IRenderEngine::ScrapIt . Cette méthode supprime le graphique de filtre et libère toutes les ressources détenues par le moteur de rendu.

pRender->ScrapIt();

Chargement et aperçu d’un projet