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.
|