Developpez.com - 2D - 3D - Jeux
X

Choisissez d'abord la catégorieensuite la rubrique :


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

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

warning 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




            

Valid XHTML 1.1!Valid CSS!

Responsable bénévole de la rubrique 2D - 3D - Jeux : LittleWhite -