Mes contributions sur Delphi:


Cliquez sur la photo pour m'envoyer un e-mail:


Visitez les autres sections du site:

shome.gif


 Visit my English pages


Site optimisé pour un affichage en 1024x768.

 Dernière mise à Jour  de cette page:

le vendredi 29 avril 2005

 

 

 

      film.gif


      1ère leçon: Se familiariser avec graphedit


Avant de se lancer dans la programmation de directshow sous delphi, je vous propose de vous familiariser avec les filtres et les filtergraphs, au moyen d'un outil qui permet de manipuler cela sans programmation. Il s'appelle graphedit. Cet outil visualise tous les processus de traitement des flux vidéos et audios dans une application directshow. A ce titre il est très pédagogique pour comprendre ce qui se passe. En outre, manipuler graphedit n'est pas du temps perdu, car ultérieurement, lorsqu'on programmera sous delphi, ce sera un bon outil pour déboguer les applications utilisant directshow et DSPack, et vérifier ce qui se passe à l'intérieur des filtergraphs. Cette première leçon peut être suivie même ceux qui n'ont pas delphi.

1.Trouver et Installer GraphEdit:

C'est le plus dur de cette 1ère leçon. L'application graphedit fait partie de Microsoft DirectX SDK. La méthode normale pour le récupérer est de charger - c'est gratuit - tout le Software Developpement Kit de DirectX, ce qui fait, dans cette version, pas moins de 185 Mo! C'est utile pour les vrais développeurs, mais bien lourd pour les amateurs et réservé aux très hauts débits. Une autre méthode est de le rechercher isolé sur le web. Google le donne par exemple chez DVDIgest. Il ne pèse plus alors que 430 Ko, mais on n'est pas sûr d'avoir la dernière version correspondant à la dernière version de directX, ni même de la légalité de ce qu'on télécharge, car même quand Microsoft donne quelque chose de gratuit, ce n'est pas un freeware.... Quoiqu'il en soit pour nos manipulations à visées pédagogiques les deux méthodes marchent.

1ère méthode: Après avoir téléchargé le fichier dx90updatesdk.exe sur le site du Software Developpement Kit de Microsoft, un double-clic dézippe les 3146 fichiers dans un dossier temporaire, puis on vous propose de choisir les modules à installer. Si directX est déjà installé sur votre micro, il suffit en principe de demander l'installation des utilities qui comprennent graphedit. Après l'installation, vous trouverez graphedit dans votre menu démarrer, et tout sera proprement installé.

2ème méthode: Vous téléchargez un fichier isolé qui s'appelle par exemple graphedit011008.zip, puis le dézippez dans un dossier (en gardant les paths). Si vous voulez l'installer proprement, ce qui est conseillé mais pas indispensable pour faire les exercices qui suivent, vous suivez les indications du fichier readme.txt Notez que si vous êtes sous Windows XP, il faudra sans doute modifier à la main le fichier register.bat pour corriger les chemins vers regsvr32. Chez moi le chemin pointé était c:\windows\system alors que le regsvr32 est logé dans le dossier c:\windows\system32.

2. Lancer graphedit et installer le premier filtre.

A partir d'ici, je ne raconte rien d'original. De multiples sites présentent la façon d'utiliser graphedit, encore qu'il n'y en ait pas beaucoup en Français. Les explications originales de Microsoft se trouvent ici.

Une fois lancé, la fenêtre de graphedit s'affiche.

 

Dans cette fenêtre, nous allons littéralement dessiner le graphe du traitement logique des flux vidéo et audio de notre projet, depuis une ressource physique (un disque dur, une lecteur CD ou DVD, une caméra, une carte d'acquisition...) jusqu'à une autre ressource physique (un disque dur, l'écran, les hauts-parleurs, une carte firewire...). Pour cela, il faut y placer des filtres, qui seront représentés par des rectangles, et les relier par des flèches qui montrent le cheminement des samples, c'est-à-dire des données traitées. Chaque filtre effectue un traitement donné des samples qui se présentent à ses pins d'entrée, et les envoie vers son ou ses pins de sortie pour qu'ils soient acheminés au filtre suivant.

Voyons cela concrètement. Nous plaçons notre premier filtre dans graphedit en cliquant sur Graph, puis Insert Filters... La fenêtre suivante apparaît. Elle présente tous les filtres installés sur votre micro, de manière à ce que vous en choisissiez un. Ils sont regroupés en catégories, par exemple les DirectShow Filters qui vont principalement nous intéresser. On accède aux filtres individuels en cliquant sur les +.

On voit qu'il y a une foultitude de filtres. D'où viennent-ils? En partie, ils sont installés avec Windows, notamment Windows XP qui a renforcé sa dimension multimedia. D'autres sont placés au fil des programmes que vous installez. On voit chez moi que Pinnacle en a installé (Studio DV 8), mais on peut aussi trouver des filtres installés par Ligos, si vous avez un codec Mpeg2, ou par Cyberlink pour PowerDVD, etc... Certains codecs avi que vous installez, créent aussi leur filtre, par exemple pour Divx.  Amusez-vous à essayer de retrouver dans tous ces filtres des noms connus.

Une autre façon d'explorer les filtres est de chercher sur son ordinateur tous les fichiers du type *.ax . En effet, beaucoup de ces petits fichiers correspondent à un filtre, et on les trouve en général groupés dans quelques dossiers qui correspondent aux applications qui les ont installé. Mais attention, copier un fichier *.ax sur son disque dur ne suffit pas pour qu'on puisse utiliser le filtre. Il faut qu'il soit proprement installé dans le registre, et cela c'est une autre histoire. Par ailleurs, il y a les filtres d'origine de Windows XP dans un fichier quartz.dll

On va maintenant insérer dans graphedit un filtre fondamental, qui s'appelle File Source (Async.). C'est le filtre qui sert à ouvrir un fichier multimedia. Donc ce sera le forcément le 1er filtre de notre graphe, car il part d'une ressource physique, ici un fichier stocké dans un lecteur.

Repérez un fichier multimedia sur votre disque dur, ou sur un lecteur de CD. Ce peut être un fichier avi, mpg, wmv, mais aussi wav ou mid ou encore d'autres pourvu qu'ils soient compatibles avec directshow. La liste des extensions possibles en standard figure ici. Vous pourrez éventuellement en ajouter d'autres si vous installez les filtres correspondants. Par exemple avec Alternative Quicktime ou Alternative Realplayer vous pourrez exploiter sous directshow les extensions mov, qt ou encore ra,rpm, rm ou ram. Je vous conseille de vérifier d'abord que votre fichier multimedia est correctement lu dans Windows Media Player, sinon il risque de ne pas l'être non plus dans graphedit.

Puis cherchez le filtre File Source (Async.) dans les filtres de la catégorie directshow, et insérez-le. Quand vous demandez de l'insérer, graphedit vous présente la boîte de dialogue d'ouverture d'un fichier dans lequel vous saisissez le fichier multimedia que vous voulez ouvrir. Après avoir cliqué sur le Close de la boîte de choix des filtres, vous voyez votre premier filtre dans graphedit, quelque chose du genre :

Le rectangle représente votre filtre, il porte le nom du fichier que vous avez choisi, et il comporte un pin de sortie marqué output. C'est sur ce pin que vont se brancher d'autres filtres chargés des traitements.

3) Réaliser le premier filtergraph complet

A ce stade, nous allons laisser graphedit choisir lui-même les traitements à effectuer. Il comporte en effet une intelligence, qui lui permet de choisir les bons filtres à appliquer en fonction de ce qui est installé sur votre ordinateur et de ce qui est déjà présent dans le graphe.  Pour cela, placez la souris sur le pin output, et dans le menu contextuel obtenu avec le bouton droit, cliquez sur Render Pin. Votre graphe se complète alors miraculeusement, par exemple en ceci, qui correspond à un fichier avi DV:

Sont ainsi apparus quatre nouveaux filtres, dont vous pourrez vérifier dans le menu graph/Insert Filters qu'ils existaient dans la liste des filtres. Le filtre Avi Splitter sépare les flux video (ici stream 00) et audio (ici stream 01). Le flux audio aboutit ensuite directement dans Default DirectSound Device, c'est-à-dire en général la carte son et les hauts-parleurs. Le flux video passe pour sa part dans DV Video Decoder qui décompresse les samples DV puis dans Video Renderer, qui est fait l'affichage dans une fenêtre de l'écran.

Si vous aviez pris un fichier wav, vous auriez obtenu quelque chose du type:

:

où seulement deux filtres sont rajoutés: Wave Parser qui traite les sample wav et les envoie à Default DirectSound Device, c'est-à-dire la carte sonore. Bien d'autres schémas sont possibles. Essayez du mpg par exemple ou du wmv.

Le plus beau, arrivé à ce stade,c'est que vous n'avez pas seulement fait des dessins de graphes, mais fabriqué une petite application multimedia, capable de traiter réellement la source multimedia que vous lui avez proposée. Pour le vérifier, cliquez sur les boutons verts ou rouge du milieu de la barre de boutons, qui correspondent à play, pause, stop, et vous pourrez voir ou entendre le résultat. C'est-y pas beau?

4) Conclusion de cette première leçon

Tout les concepts de la programmation de directshow sont déjà clairs si vous avez bien suivi cette première leçon. Une application avec directshow consiste basiquement à construire un filtergraph, qui organise un traitement de flux partant d'une source physique et aboutissant à une destination physique, en passant par des transformations découpées en filtres élémentaires, les filtres étant reliés par leurs pins. Simplement le filtergraph sera construit par programme et non à la main comme dans graphedit; nous serons parfois un peu plus dirigiste sur ce que doivent faire les filtres, et ne laisseront pas l'intelligence de graphedit choisir tout. Nous créerons aussi bien sûr une interface avec l'utilisateur du programme, destinée notamment à lui permettre de contrôler l'avancement des flux par des fonctions de type play, pause, stop.

pink05_next.gif 2ème leçon

retour vers le haut de la page