1. Introduction

Pour développer des applications DirectShow, plusieurs outils sont nécessaires. Je vais décrire quel est l'environnement que j'utilise et comment le paramétrer. C'est une tâche souvent difficile lorsque l'on débute avec DirectShow, d'autant plus qu'il existe plusieurs versions du SDK, et que des erreurs à la compilation sont généralement rencontrées...

2. IDE

L'environnement de développement logiciel que j'utilise est Visual C++ 2008, édition express. Ce compilateur est gratuit, et il est largement suffisant pour le développement d'application DirectShow. Vous pouvez le télécharger ici :

http://www.microsoft.com/express/download/

Choisissez la langue et lancez le téléchargement.

Image non disponible

Voici les étapes de l'installation :

- à l'écran de bienvenue, cliquez sur "suivant" (vous êtes libre de cocher la case "oui, envoyer des informations relatives à mon installation...").
- à l'écran des termes de licence, acceptez puis cliquez sur "suivant".
- à l'écran options d'installation, cliquez sur "suivant" (certains éléments sont proposés, ils ne sont pas indispensables pour DirectShow).
- à l'écran dossier de destination, cliquez sur "suivant".
- laissez faire l'installation, un redémarrage est ensuite demandé.

Voilà, l'IDE est installé, il ne reste plus qu'à créer un raccourci dans la barre des tâches et à enregistrer le produit. Pour ceci une adresse MSN est obligatoire.

3. SDK

Les SDK pour DirectShow sont nombreux. Ils ont été revus pour être compilables sous les IDE successifs (Visual 2003, 2005 et 2008). Nous allons utiliser le dernier en date, compilable sous Visual C++ 2008, édition express, le Windows SDK 6.1. Vous pouvez le télécharger ici :

http://www.microsoft.com/downloads/details.aspx?FamilyId=E6E1C3DF-A74F-4207-8586-711EBE331CDC&displaylang=en

Lancez le téléchargement.

Image non disponible

Voici les étapes de l'installation :

- à l'écran du setup, cliquez sur "Next".
- à l'écran End-User License Agreement, acceptez ("i Agree") puis cliquez sur "Next".
- à l'écran Install Locations, cliquez sur "Next".
- à l'écran Installation Options, cliquez sur "Next".
- à l'écran Begin Installation, cliquez sur "Next".

Voilà, le SDK pour DirectShow est installé.

Avec DirectShow, l'utilisation de "smart pointer" est fortement conseillée. Ce SDK propose les "SmartPtr", mais personnellement je préfère l'utilisation des CComPtr, qui sont disponibles dans un autre SDK, le Microsoft Windows Server 2003 R2 Platform SDK. Vous pouvez le télécharger ici :

http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&displaylang=en

Lancez le téléchargement de "PSDK-x86.exe" si vous avez un processeur x86. Une "Genuine Validation" est obligatoire.

Je ne donne pas les étapes d'installation, elles sont presque identiques à l'installation du Windows SDK 6.1. Choisissez une installation de type "Custom", en effet nous allons seulement installer le "Microsoft Windows Core SDK" et le "Microsoft DirectShow SDK".

Image non disponible

Pourquoi installer le "Microsoft DirectShow SDK" me direz-vous, puisque nous l'avons installé avec le "Windows SDK 6.1" ?
Tout simplement parce qu'il contient un outil quasiment indispensable dans le développement d'application DirectShow. Je veux bien sûr parler de "GraphEdit". Dans le Windows SDK 6.1, il est remplacé par "TopoEdit", mais cet outil est limité à l'architecture de "Media Foundation".

Le prochain tutorial est d'ailleurs consacré à l'utilisation de GraphEdit.

4. Compilation de "BaseClasses"

Les "BaseClasses" contiennent un ensemble d'en-têtes et de librairies indispensables au développement d'applications DirectShow.

Voici les étapes de compilation :

- Lancez Visual C++.

Si vous êtes sous Vista, je vous conseille de lancer Visual C++ avec des droits d'administrateur : clic droit sur l'icône de Visual C++ puis "Exécuter en tant qu'Administrateur".

- Ouvrez le projet "BaseClasses.sln", il se trouve dans le répertoire d'installation de Windows SDK 6.1 :

"C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\BaseClasses\"

- Compiler le projet en mode Debug et Release.

Image non disponible

5. Paramétrage de l'IDE

Il va maintenant nous falloir indiquer à l'IDE où se trouvent les en-têtes et les librairies des SDK.

Voici les étapes de paramétrage de Visual C++ :

- Clic gauche sur l'onglet "Outils" puis clic gauche sur "Options...". Une fenêtre Options s'ouvre alors.
- Clic gauche sur "Projets et Solutions" puis clic gauche sur "Répertoires de VC++".
- En haut à droite, vous avez "Affichez les répertoires pour :".
- Sélectionnez "Fichiers Include"

Image non disponible

- Ajoutez comme répertoire :

"C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\BaseClasses"
"C:\Program Files\Microsoft Platform SDK\Include\atl" Pour les CComPtr.

- Sélectionnez "Fichiers Bibliothèques"
- Ajoutez comme répertoire :

"C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\BaseClasses\Debug"
"C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\BaseClasses\Release"

Image non disponible

Voilà, nous allons pouvoir commencer à compiler des applications DirectShow.

6. L'en-tête standard

Pour compiler les applications DirectShow, nous allons utiliser un en-tête qui sera toujours le même. Nous allons aussi utiliser les en-têtes précompilés.
Les deux fichiers pour l'en-tête précompilé sont "stdafx.h" et "stdafx.cpp".

stdafx.h
Sélectionnez

//--------------------------------------------------------------------------------------
// stdafx.h
//--------------------------------------------------------------------------------------
#ifndef STDAFX_H
#define STDAFX_H

#pragma once
#define WIN32_LEAN_AND_MEAN
#define STRICT
#define _WIN32_WINNT 0x0501

#ifdef _DEBUG
  #pragma comment(lib, "strmbasd")
#else
  #pragma comment(lib, "strmbase")
#endif

#pragma warning(push)
#pragma warning(disable : 4995 4996)
#include <streams.h>
#include <atlbase.h>
#pragma warning(pop)

#endif
stdafx.cpp
Sélectionnez

//----------------------------------------------------------------------------------------------
// stdafx.cpp
//----------------------------------------------------------------------------------------------
#include "stdafx.h"

J'utiliserai toujours ces deux fichiers. Ceci nécessitera d'inclure dans tous les fichiers sources (.cpp), le fichier "stdafx.h".

Pour configurer le projet avec l'en-tête précompilé :

- Clic gauche sur l'onglet "Projet" puis clic gauche sur "Propriétés de...".
- Dans les propriétés de configuration, déroulez "C/C++".
- Clic gauche sur "En-têtes précompilés".
- Dans "Création/utilisation d'un en-tête précompilé", choisissez "Utiliser un en-tête précompilé (/Yu)".

Image non disponible

- Ensuite dans l'explorateur de solutions, clic droit sur "stdafx.cpp".
- Clic gauche sur "Propriétés", puis déroulez "C/C++".
- Clic gauche sur "En-têtes précompilés".
- Dans "Création/utilisation d'un en-tête précompilé", choisissez "Créer un en-tête précompilé (/Yc)".

Image non disponible

Il faudra répéter cette opération pour chaque nouveau projet.

7. Erreurs de compilation

Lors de votre première compilation d'un projet, deux erreurs vont apparaître.
La première concernera le fichier "RefClock.h" des BaseClasses. Au début de ce fichier, il faudra mettre : #include "Schedule.h", à la place de l'include avec les crochets.

Image non disponible

La deuxième concernera "atlthunk.lib" lors de l'édition de lien. Cette bibliothèque est inutile, nous allons donc la retirer du projet.

- Clic gauche sur l'onglet "Projet" puis clic gauche sur "Propriétés de...".
- Dans les propriétés de configuration, déroulez "Editeur de liens".
- Clic gauche sur "Entrée".
- Dans "Bibliothèque spécifique ignorée", ajoutez atlthunk.

Image non disponible

Pour cette deuxième erreur, il faudra répéter l'opération pour chaque nouveau projet.

8. Conclusion

Vous voici prêt à développer des applications DirectShow.
Si vous rencontrez des difficultés d'installation où de paramétrage, n'hésitez pas à consulter les différents liens qui concernent chaque SDK. Vous pouvez aussi poster sur le forum DirectX ici :
http://www.developpez.net/forums/forumdisplay.php?f=52

Bien évidemment, vous pouvez utiliser d'autres compilateurs et d'autres SDK.
Mais vous risquez de rencontrer des problèmes de compilation, souvent à cause de l'adaptation des compilateurs aux normes C++.
La compatibilité est approximativement celle-ci:

- Visual C++ 2003 -> "DirectX 9.0 SDK Update (February 2005) Extras".
- Visual C++ 2005 -> "Microsoft Windows Server 2003 R2 Platform SDK".
- Visual C++ 2008 -> "Windows SDK 6.1".

Le "DirectX 9.0 SDK Update (February 2005) Extras" est intéressant à posséder, dans le sens où c'est celui qui contient le plus de samples, et ceux-ci sont presque tous accompagnés d'un fichier texte explicatif. Je le conserve toujours à titre de consultation.