J'utilise DirectShow.Net et j'essaie d'implémenter le ISampleGrabberCB sur une classe.Le rappel ISampleGrabber n'est pas appelé
Afin de mettre en place l'outil de saisie dans le graphique, je suivre cette liste:
Créer un objet SampleGrabber
Définir le format MediaType (AMMediaType: Vidéo, Rgb, VideoInfo) et définissez-le dans l'objet SampleGrabber. HRESULT est 0, donc je pense que c'est ok.
Je définis le rappel avec sampleGrabber.SetCallback (this, 0). Je passe "ceci" parce que l'ISampleGrabber est implémenté et défini dans la classe elle-même; le second paramètre est 0 car je veux que la méthode SampleCB soit invoquée.
Enfin, j'ajoute le filtre au graphique. Le HRESULT est de nouveau 0.
Toutefois, la méthode ISampleGrabber.SampleCB n'est pas appelée.
Avez-vous une idée de la cause de cette mauvaise conduite?
[Modifier]
J'ai découvert ce qui se passe ici! Mais j'ai encore besoin d'aide. Les deux webcams que je possède retournent un format vidéo sous-type YUY2. Comme indiqué ci-dessus, le code que j'utilise force le MediaType à RGB24. Au moment de l'exécution, je peux voir le HResult est 0, donc c'est ok. Mais comme ils sont "incompatibles", le rappel d'échantillon n'est jamais appelé. Si je supprime la définition explicite de sous-type, le rappel est frappé. Cependant le cadre que je reçois est un YUY2; ce n'est pas un bitmap valide et pour cette raison il semble "endommagé", "déformé". À ce stade, j'aimerais savoir comment forcer le format RGB24 ou comment convertir la trame vidéo au format RGB24.
J'ai passé pas mal de temps sur google pour trouver une réponse valide, mais je n'ai pas eu de chance.
Une idée?
Cheers. Gianluca.
Pouvons-nous voir du code? – Goz
@Goz: Le code est vaste et divisé en plusieurs fonctions. Quelle partie aimeriez-vous voir? –
A la lumière de votre montage, il serait probablement bon de voir la partie où vous vous connectez les filtres – Goz