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
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
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.
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.
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.
- 1. Problème référençant le filtre DirectShow de C#
- 2. Comment convertir un filtre DirectShow en C++ \ C#?
- 3. Filigranage + filtre Directshow
- 4. DirectShow - comment déboguer les échecs de connexion de broche
- 5. Filtre de source graphique personnalisé DirectShow
- 6. Comment rendre direct3d dans un filtre de source DirectShow
- 7. Comment puis-je cloner un filtre DirectShow de source vidéo?
- 8. Comment écrire un filtre DirectShow pour traiter deux sources d'entrée?
- 9. DirectShow Source filtre en utilisant la fenêtre Dekstop comme source
- 10. DirectShow CSourceStream filtre ne parvient pas à décharger correctement
- 11. Les points d'arrêt ne fonctionnent pas dans le filtre source DirectShow de Delphi 6
- 12. Utilisation de filtres DirectShow en dehors de DirectShow?
- 13. Comment rendre des graphiques 3d dans un filtre de source DirectShow
- 14. eof détection pour DirectShow
- 15. Comment déboguer GDI + dans C#?
- 16. Comment rendre un filtre web cam au lieu d'un fichier vidéo dans DirectShow?
- 17. C# Comment déboguer Control.DoDragDrop Méthode
- 18. DirectShow: Graph fonctionne dans GraphEdit, pas dans le code
- 19. DirectShow Source Filter
- 20. Comment superposer Direct3D dans DirectShow
- 21. Comment déboguer le sphinx?
- 22. Pourquoi il y a tellement de façons d'obtenir le gestionnaire de filtre graphique dans DirectShow?
- 23. Comment charger des données d'image à partir d'un fichier bitmap de ressources pour un filtre DirectShow?
- 24. Existe-t-il un exemple pour montrer comment écrire un filtre de transformation DirectShow?
- 25. Comment modifier les propriétés d'une broche de sortie de filtre DirectShow à la volée?
- 26. Réduire la consommation de la mémoire DirectShow
- 27. Utilisation de DirectShow AsyncReader avec C#
- 28. Comment créer un filtre d'effets vidéo simple pour DirectShow ou DMO?
- 29. déboguer un crash (C++)
- 30. DirectShow ISampleGrabber qui accepte VIDEOINFOHEADER2
Omigod. Je n'avais aucune idée que vous pouviez attacher le débogueur comme ça. C'est spectaculaire. –