Il est difficile d'exprimer cela dans le titre, alors laissez-moi vous expliquer.
J'ai une application qui utilise Direct3D pour afficher un maillage et directshow(vmr9 + allocator) pour lire une vidéo, puis envoyer l'image vidéo comme texture à la partie Direct3D pour qu'elle soit appliquée sur le maillage. L'application doit fonctionner 24 heures sur 24 et 7 jours sur 7. Au moins, elle est autorisée à être redémarrée toutes les 24 heures, mais pas plus fréquemment que cela.
Le problème est que directshow semble poser des problèmes après quelques heures de lecture, soit à cause du codec, soit à cause du pilote vidéo, soit à cause du fichier vidéo lui-même. A ce moment-là, l'application refuse tout simplement de lire d'autres vidéos. Mais la partie Direct3D fonctionne toujours correctement, le maillage est toujours affiché. Une fois l'application redémarrée, tout revient à la normale.
J'envisage donc de scinder les deux parties en deux processus différents. Ainsi, lorsque le processus vidéo ne parvient pas à lire la vidéo, je peux au moins le redémarrer immédiatement, sans perdre la partie Direct3D.
La question est donc de savoir s'il est possible de passer la texture du lecteur vidéo au processus direct3d en passant le pointeur, c'est-à-dire de récupérer la texture d'un autre processus à partir du pointeur. Je pense d'abord que ce n'est pas possible à cause de l'adressage en mémoire protégée.
J'ai mis en place une communication TCP sur les deux processus, et ne nous préoccupons pas de la communication du pointeur à ce stade.
C'est peut-être une idée folle, mais elle fonctionnera à merveille si jamais elle est possible