J'utilise un IGraphBuilder pour rendre un périphérique de capture vidéo à l'écran. Le processus consiste à ajouter le filtre de capture au graphique, puis à ajouter un VideoMixingRenderer au graphique (qui utilise un allocateur personnalisé) et enfin à appeler graph.Render() pour utiliser Intelligent Connect afin de câbler les broches. Dans certains cas, cela fonctionne bien et mon allocateur personnalisé est correctement chargé (et InitializeDevice appelé), mais dans d'autres circonstances, l'allocateur personnalisé n'est pas utilisé et une fenêtre ActiveMovie affiche le périphérique de capture au lieu de mon VMR ajouté au graphique . Il semblerait que la connexion intelligente ne veuille pas câbler le filtre du périphérique de capture au VMR et crée à la place son propre moteur de rendu. Existe-t-il des outils ou des techniques pour déboguer cela? L'appel à graph.Render() réussit avec un HR de 0, donc je ne reçois aucune information de DirectShow à propos d'un échec de connexion. Heureusement, un outil de diagnostic existe qui peut me donner une meilleure vue sur ce qui se passe dans DirectShow.DirectShow - comment déboguer les échecs de connexion de broche
3
A
Répondre
7
La logique de connexion intelligente crée un fichier journal que vous pouvez utiliser pour rechercher les erreurs. Utilisez IGraphBuilder :: SetLogFile (ou l'élément de menu graphedt). Cela enregistre toutes les activités pendant la construction du graphique.
La raison la plus courante de l'échec de la connexion à vmr est que le filtre en amont insiste sur l'utilisation de son propre allocateur, tout comme le vmr. Il est possible que dans certains cas, vous obteniez une transformation (par exemple, une transformation de l'espace colorimétrique) entre les deux, ce qui copie les tampons et utilisera donc l'allocateur de vmr. Quelque chose comme ça, de toute façon, est une explication possible.
G