2010-06-09 5 views
9

Quels outils de débogage sont disponibles pour les filtres DirectShow? Actuellement, j'ai un projet qui compile et enregistre un filtre de source vidéo que j'ai ensuite installé un graphique dans GraphEdit. J'utilise C++ dans Visual Studio 2008. Est-il possible d'avoir un débogueur attaché au filtre de quelque façon que ce soit où je pourrais définir des points d'arrêt, inspecter des variables, etc? À part cela, existe-t-il un moyen d'enregistrer des informations de diagnostic quelque part que je peux voir en temps réel?Comment déboguer le filtre DirectShow C++

Répondre

12

La mise en place d'un débogueur ne devrait poser aucun problème. Définissez graphedt.exe comme cible de débogage dans le projet Visual Studio de votre filtre et vous devriez pouvoir définir des points d'arrêt dans votre code. Si vous rencontrez des difficultés avec cela, c'est peut-être dû à la logique anti-débogage de certains décodeurs - vous devrez éviter de les utiliser.

Vous pouvez également obtenir des informations de débogage utiles en consignant les diffusions et leurs horodatages et leur latence. La meilleure façon de le faire est d'utiliser un filtre direct. Il existe un exemple de filtre de moniteur disponible en version source et binaire sur www.gdcl.co.uk/mobile (win32 et win mobile).

G

+3

Omigod. Je n'avais aucune idée que vous pouviez attacher le débogueur comme ça. C'est spectaculaire. –

0

La meilleure façon de déboguer des applications en temps réel est de générer des fichiers journaux. Si vous souhaitez afficher les informations du journal en temps réel, créez simplement une journalisation basée sur la socket du serveur client. Par exemple, votre application peut commencer à écouter un port. Une application de visualisation externe (client) peut se connecter à ce port et commence à recevoir les informations de journal en temps réel.

6

Dans une version de débogage, les classes de base DirectShow comprennent déjà un mécanisme de journalisation souple contrôlée par les clés de registre. Les classes de base utilisent ce mécanisme pour consigner leur propre opération. Si nécessaire, il devrait être possible de modifier les classes de base afin que la journalisation soit disponible dans une version de diagnostic.

Un exemple simple:

DbgLog((LOG_TIMING, 1, TEXT(__FUNCTION__ " : Frame:%d, Stream Time:%dms, Sample Time:%dms"), 
(int)currentFrame, (int)currentTime, (int)sampleTime)); 

Ce produit sortie du journal préfixé par le nom de la fonction d'appel si le niveau de journalisation pour la catégorie « TIMING » est réglé sur> = 1. Les niveaux de journalisation pour chaque catégorie sont configurés dans le registre sous la clé ci-dessous. Il existe une sous-clé 'GLOBAL' pour le niveau de journalisation minimum pour tous les filtres et sous-clés pour une journalisation supplémentaire par nom de fichier de filtre.

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ DirectShow \ Debug HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ DirectShow \ Debug (code 32 bits sur x64 Windows).

Modifiez la clé 'LogToFile' pour chaque filtre afin de spécifier une destination de journalisation. La valeur par défaut est 'Debug' (sortie du débogueur) mais peut également être 'Console' pour se connecter à une fenêtre de console, ou un nom de fichier pour se connecter. D'autres types d'enregistrement pourraient également être ajoutés.

L'option de console est particulièrement pratique pour la surveillance en direct sans débogueur. Sur mon système, les classes de base ne parviennent pas à ouvrir une fenêtre de console si elle n'est pas déjà ouverte. J'ai donc ajouté le tweak suivant dans wxdebug.cpp pour ouvrir une console sans condition si la sortie de la console est demandée.

if (!lstrcmpi(szFile, TEXT("Console"))) { 
     AllocConsole();  // modification - always allocate console if using Console output 

Voir DirectShow Debug Output Functions pour plus d'informations.

3

Certains outils d'analyse de flux de données entre les filtres:

éditeur graphique Open Source GraphStudioNext filtre analyseur (et auteur de fichier analyseur) vous montrera un journal visuel de l'activité lorsqu'il est inséré entre les deux filtres d'intérêt.Vous devrez le construire vous-même pour obtenir cette fonctionnalité pour le moment.

Geraint Davie's monitor filter écrit un fichier journal d'activité sur le disque.

Questions connexes