Bonjour,
J'ai pas mal d'expérience en C/C++ mais moins sur l'API Win32 et je début avec DirectShow. J'aimerai acquerir une vidéo à partir d'une source Live, modifier quelques pixels dans l'image capturée (afin d'y stocker quelques informations) puis de l'enrigistrer en AVI en même temps que j'ai un apperçu.
Pour la partie capture, pas de problème, je fait une énumération des filtres de type CLSID_VideoInputDeviceCategory et je sélectionne le bon.
Pour la modification de chaque frame afin d'y insérer des données, j'ai développé moi-même 2 filtres CInframeDataEncoder et CInframeDataDecoder qui hérites tous deux de CTransInPlaceFilter. J'ai testé ces deux filtres et ils fonctionnent également (il accepte n'importe quel MediaType a condition qu'il soit du type MEDIATYPE_Video).
La structure de mon graphe est la suivante :
VideoInput --> InframeDataEncoder --> Smart Tee --Capture pin--> AVI Muxer --> File Wirter
|
--Preview pin--> Video Renderer
Dans cette configuration, l'enregistrement se passe bien et ma fenêtre m'affiche bien l'entrée vidéo que j'ai sélectionnée, malheureusement cette fenêtre ne réponds à aucune commande : lorsque je passe le curseur dessus celui-ci se transforme en petit sablier et je ne peu ni déplacer la fenêtre, ni la redimentionner, ni la fermer. En bref je ne peux rien faire avec. En fait j'ai l'impression qu'elle raffraichie son contenu mais pas la fenêtre à proprement dite. En effet lorsque je déplace une tiers fenêtre par dessus ma fenêtre de rendu après l'avoir enlevé, les bord ainsi que la barre de titre de cette dernière ne réapparaissent pas et m'affiche une image fantôme de la fenetre que j'ai déplacé au dussus.
J'ai bien essayé d'autres méthodes, comme changé de filtre de rendu (j'ai essayé les 3 disponibles : Video Renderer, Video Mixing Renderer 7 et Video Mixing Renderer 9), ou bien la méthode Render de l'interface IGraphBuilder en lui donnant la pin sortante "Preview" de mon filtre Smart Tee, ou enfin en utilisant un CaptureGraphBuilder2 qui fait tout le boulot à notre place, mais dans tous les cas j'ai le même problème.
Je précise que je n'utilise pas de MFC, mon projet est un simple projet Console Win32. Si cela peut aider aussi, j'ai récupérer l'instance de l'interface IVideoWindow de mon filtre Video Renderer et lorsque je fait un get_Owner ou bien un get_MessageDrain, cela me renvoit NULL. Je ne sais pas si c'est normal ou pas mais bon, je le dis tout de même.
Je voulais savoir si quelqu'un avait déjà eu ce problème et comment il l'avait réglé car mis à part cela, mon application fonctionne (encodage des données, ecriture de l'AVI puis lecture de l'AVI, décodage des données et affichage de ces dernières à l'écran). Seulement pour faire une capture sans avoir d'apperçu qui fonctionne correctement c'est juste chiant et pas facile car je précise que cette application est destinée à faire des mesures avec du matériel spécifique.
Merci d'avance pour votre aide