Tutorial DirectShow 2
GraphEdit
Date de publication : 11 mai 2008
Par
dumonteil david
Je vais vous présenter GraphEdit, un outil très util pour le développement d'application DirectShow.
Il va nous donner une première approche du fonctionnement d'un "Stream". Entendez par là "un débit
de données". C'est l'écoulement des données audio/video, depuis la source jusqu'au "renderer".
L'approche graphique que permet cet outil est vraiment intéressante, d'ailleurs beaucoup de personnes
ne développant pas d'application DirectShow l'utilisent, ne serait-ce que pour comprendre et paramétrer
les différents filtres (codecs) de leur système.
1. Introduction
2. Lecture d'un fichier video
3. Les filtres
3-A. Manipulation de base
3-B. Les pages de propriété des filtres
3-C. Les filtres du système
3-D. Les filtres de capture audio
3-E. Les filtres de compression audio
3-F. Les filtres de rendu audio
3-G. Les filtres DirectShow
3-H. Les filtres de capture video
3-I. Les filtres de compression video
4. Construction manuelle d'un graphe
5. Conclusion
1. Introduction
Voici la bête :
Vous pouvez récupérer graphedit.exe dans le dossier du Microsoft Windows Server 2003 R2 Platform SDK :
"C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin".
Vous y trouverez aussi la documentation : graphedit.chm, et une dll : proppage.dll.
Cette dll est indispensable si vous souhaitez visualiser les pages de propriétés de certains
codecs. Pour qu'elle soit opérationnelle, il faut l'enregistrer avec la commande "regsvr32". Nous
verrons plus loin comment afficher les propriétés d'un filtre.
Vous pouver aussi télécharger le zip qui contient les trois éléments ci-dessus :
ZIP
 |
Graphedit et proppage.dll sont souvent associés aux packs de codecs, disponibles sur le net.
|
2. Lecture d'un fichier video
En premier lieu, nous allons charger un fichier video et le jouer.
Pour charger le fichier, deux méthodes :
- La première, vous sélectionnez votre fichier d'un clic gauche et vous le glissez
dans la fenêtre de graphedit.
- La deuxième, clic gauche sur "File", puis clic gauche sur "Render Media File..." :
Sélectionnez ensuite un fichier dans la boîte de dialogue qui s'est ouverte.
Voici ce qui apparaît avec la video que j'ai chargé (format mpeg2) :
J'ai obtenu la disposition des filtres de l'image ci-dessus, tout simplement en faisant
un clic gauche sur chaque filtre, puis en glissant-déposant ceux-ci dans la fenêtre.
Vous pouvez donc déplacer les filtres à votre convenance à l'intérieur de la fenêtre de graphedit.
Vous pouvez aussi réduire/agrandir les filtres à l'intérieur de la fenêtre avec les touches -/+, très
pratique lorsque tous les filtres n'apparaissent pas sur votre écran.
Voilà, le fichier video est prêt à être jouer, on pourrait faire la même chose avec un fichier
audio, il y aurait moins de filtre dans le graphe.
Avant de manipuler le fichier video, regardons ce qui se passerait si nous n'avions pas eu les
codecs nécessaires au chargement de ce fichier :
Graphedit nous dit qu'il ne peut pas construire le graphe. Il peut y avoir plusieurs
raisons à cela. Par exemple, le fichier n'est pas un fichier audio/video valide, ou vous n'avez pas
les codecs nécessaires pour lire le fichier. C'est donc un moyen très rapide de savoir pourquoi
un player (windows media player, par exemple), ne lit pas votre fichier multimédia.
Voyons les opérations que nous pouvons effectuer sur le fichier avec graphedit :
- Lecture.
- Pause.
- Stop.
- Seek (avance/recule rapide dans le fichier).
- Step (avance image par image).
Appuyons maintenant sur le bouton play. La video se lance, une fenêtre apparaît.
La fenêtre est créée par le filtre de rendu "video renderer". C'est une propriété de ce filtre.
Si aucun handle de fenêtre ne lui est fournit, alors par défaut il en créé une.
3. Les filtres
Avec DirectShow, il y a trois catégories de filtre :
- les filtres sources.
- les filtres de transformation.
- les filtres de rendu.
Le graphe est l'ensemble de ces filtres interconnectés. Avec notre fichier video d'exemple,
l'ensemble de ces filtres est représenté.
Les filtres sont reliés entre eux par l'intermédiaire des "pins". Voici le tout en image :
3-A. Manipulation de base
Pour commencer, nous allons déconnecter tous les filtres de notre graphe. Pour ce faire, il faut
sélectionner les lignes (flèche noire) qui relient chaque pin des filtres. Un clic gauche sur la flèche noire,
celle-ci prends la couleur bleue indiquant qu'elle est sélectionnée. Ensuite appuyez sur la touche "Suppr"
de votre clavier. Une fois tous les filtres déconnectés, voici ce à quoi doit ressembler le graphe :
Bien évidemment ce graphe n'est pas opérationnel. Vous ne pouvez pas jouer le fichier video.
Maintenant nous allons reconnecter toutes les pins, une par une, en commençant par la pin de sortie
du filtre source, jusqu'aux deux filtres de rendu.
Pour ce faire :
- clic gauche sur la pin de sortie du filtre source (output), puis sans relâcher
le clic, dirigez le pointeur de la souris sur la pin d'entrée du filtre de démultiplexage (Splitter : input).
Lorsque un petit carré noir apparaît dans la pin d'entrée du filtre, relâcher le clic de souris. Le filtre
source et le filtre de démultiplexage sont maintenant reliés par une flèche noire.
- Vous pourriez continuer, filtre après filtre, pin après pin. Mais nous allons voir une autre méthode :
Clic gauche sur la pin de sortie video du filtre splitter. Au lieu de relier cette pin avec la
pin d'entrée du filtre de décodage video, reliez celle-ci directement avec la pin d'entrée du filtre
de rendu video. Vous verrez alors que le filtre de décodage video sera automatiquement liée :
Si vous jouez ce graphe, alors vous verrez la video, mais sans le son. C'est normal, les filtres
concernant l'audio ne sont pas interconnectés, et des filtres qui traînent comme ça dans le graphe, ne gênent
en rien.
- Pour les deux derniers filtres audio qui restent, nous allons encore utiliser une autre méthode pour les
relier. Clic droit sur la pin de sortie audio du filtre de démultiplexage, puis clic gauche sur "render pin" :
Vous devez retrouver votre graphe dans l'état initial, comme après le chargement.
 |
Finalement, nous aurions pû directement faire un "render pin" depuis la pin de sortie du
filtre source, tous les filtres auraient été reliés directement.
|
Pour déconnecter tous les filtre d'un seul coup, nous pouvons aussi utiliser ce bouton :
Voyons voir ce qui se passe si nous essayons de connecter la pin de sortie video
du splitter avec la pin d'entrée du décodeur audio :
Nous avons un message qui nous indique que les deux filtres ne peuvent pas être
connectés entre eux, même en essayant d'inclure des filtres intermédiaires. C'est normal, car
la pin de sortie video du splitter ne peut produire que des frames video, alors que la pin d'entrée
du filtre de décodage audio attends des frames audio. Les deux pins sont incompatibles, la liaison est impossible.
3-B. Les pages de propriété des filtres
Je vous ai parlé de proppage.dll. Cette dll va nous permettre de regarder toutes les pages de
propriétés des filtres. Si cette dernière n'est pas enregistrée sur votre système (regsvr32),
alors seulement quelques propriétés de filtre seront disponibles, pas toutes.
Pour afficher les pages de propriétés d'un filtre, reprenons notre graphe précédent, celui
ou nous avions chargé une video. Faisons ensuite un clic droit sur le filtre de décodage video :
Un menu contextuel apparaît, clic gauche sur "Filter Properties..." :
Une boîte de dialogue s'ouvre et vous présente les paramètres qu'il est possible de
modifier sur ce filtre. Je pourrais mofidier le contraste, la brillance, la saturation, etc...
de l'image. La plupart des modifications peuvent fonctionner en temps réel, pendant la lecture de
la video.
Je vous laisse découvrir les pages de propriétés des autres filtres, et vous laisse expérimenter
les différents réglages possibles. Parfois aucun réglage n'est possible, seulement des informations de
format sont disponibles.
Si vous avez installé le filtre audio "ac3filter", disponible ici :
AC3FILTER,
vous verrez que sa page de propriétés est très élaborée :
3-C. Les filtres du système
Graphedit vous permet de connaître tous les filtres qui sont enregistrés sur votre système.
Pour visualiser ces filtres, trois méthodes :
- Dans le menu, clic gauche sur "Graph", puis clic gauche sur "Insert Filters...".
- Ctrl+F
- clic gauche sur ce bouton :
Une boîte de dialogue s'ouvre. Avec celle-ci, vous avez la possibilité de visualiser les
filtres de votre système, d'insérer un filtre dans le graph, d'avoir des informations détaillées sur
un filtre en particulier :
Je ne vais décrire que les sections les plus intéressantes ou les plus utilisées :
- Audio Capture sources (-> filtre de capture audio).
- Audio Compressors (-> filtre de compression audio).
- Audio Renderers (-> filtre de rendu audio).
- DirectShow Filters (-> filtre DirectShow).
- Video Capture sources (-> filtre de capture video).
- Video Compressors (-> filtre de compression video).
3-D. Les filtres de capture audio
Voyons voir ce qu'il y a comme filtre de capture audio sur mon système :
Il y a deux entrées lignes, deux entrées micro, une entrée S/PDIF et une entrée
PCTV. Les entrées ligne et micro sont en double parce que j'ai deux cartes audio sur mon système.
L'entrée PCTV est en rose parce que c'est un phériphérique "Plug and Play". C'est une carte d'acquisition
USB. J'ai une fiche pour brancher un câble audio (mini-jack).
Sur cette image, j'ai sélectionné l'entrée ligne (SB Live! 24-bit). Tout en bas, vous pouvez
voir "Filter Moniker". Pour cette entrée, nous avons : @device:cm:{33D9A762-90C8-11D0-BD43-00A0C911CE86}\Entrée ligne (SB Live! 24-bit).
{33D9A762-90C8-11D0-BD43-00A0C911CE86} correspond au CLSID du filtre. C'est l'identifiant unique de ce
filtre sur le système. Je détaillerai plus ceci avec un filtre DirectShow.
3-E. Les filtres de compression audio
Tous les filtres de compression audio ne se trouvent pas forcément dans cette section. Souvent ils se situent
dans la section "DirectShow Filters".
Regardons ce qu'il y a sur mon système :
On remarquera les filtres de compression "CCITT A-Law" et "CCITT u-Law", un format audio particulier
souvent utilisé pour la téléphonie. On peut aussi voir le codec GSM, utilisé dans l'encodage
de la voix pour les appareils téléphoniques modernes.
3-F. Les filtres de rendu audio
Les filtres de cette section correspondent aux sorties audio de votre matériel, là où vous
branchez les enceintes :
J'ai deux cartes audio, j'ai donc plusieurs filtres de sortie audio. Le "Default DirectSound Device"
correspond à la sortie par défaut que vous avez sélectionnée (par l'intermédiaire du gestionnaire
de périphérique audio).
Vous remarquerez qu'il existe deux versions pour mes haut-parleurs (SB Live! 24-bit) :
- Haut-parleurs (SB Live! 24-bit).
- DirectSound : Haut-parleurs (SB Live! 24-bit).
En général, c'est la version DirectSound qui sera utilisée. Elle permet de bénéficier
des capacités accélératrices de la carte audio. Cette sortie correspond aussi au "Default DirectSound Device"
chez moi, puisque c'est là où sont branchées mes enceintes.
3-G. Les filtres DirectShow
3-H. Les filtres de capture video
Ce type de filtre sera présent dans cette section si vous possédez du matériel
d'acquisition vidéo. Soit une carte d'acquisition PCI ou USB, ou une carte
graphique qui possède cette faculté.
Ici, une PCTV, avec trois type d'entrée (Antenne, Composite et S-Video).
3-I. Les filtres de compression video
Ce type de filtre permet de transformer un format video dans un autre format video.
Par défaut ils ne sont pas très nombreux, mais dès que vous installez des packs de
codec, la liste grandit.
On peut voir ici ffdshow, un encodeur gratuit, souvent disponible avec les
packs de codec.
4. Construction manuelle d'un graphe
5. Conclusion

