cs_pilulu
Messages postés2Date d'inscriptionvendredi 27 octobre 2006StatutMembreDernière intervention 3 octobre 2008
-
29 sept. 2008 à 18:06
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 2021
-
6 oct. 2009 à 13:37
Bonjour,
Je travaille sur un filtre de transformation directshow que je veux integrer à mon application de lecture de flux video venant d'un module d'encodage qui ne me laisse pas trop le choix pour le traitement video.
J'ai créer mon filtre de transformation que j'ai appelé DTransform et il est integré dans la base de registre de windows et utilisable sous GraphEdit (j'ai testé, ca marche)
Maintenant je veux l'integrer dans mon application (j'ai déja ajouté les filtres correspondant au module et le filtre de rendu) pour l'inserer entre le filtre de rendu et le filtre ffmpeg.
Comment je récupère ce filtre dans mon programme pour le mettre en IBaseFilter ?(son CLSID n'est pas connu de visual)
Y a t'il une méthode de recherche de filtre par nom dans la base de registre?
bigzooloo
Messages postés36Date d'inscriptionjeudi 16 mai 2002StatutMembreDernière intervention 6 octobre 2009 1 oct. 2008 à 11:38
Bonjour,
Il faut dans ton programme inclure le header de ton filtre DirectShow pour pouvoir l'utiliser et avoir accès à son interface et ses méthodes.
Et dans ce header, tu déclare son CLSID.
Le CLSID doit être unique bien sur (il y a un programme avec le SDK pour en générer un).
Mais si vraiment tu ne veux pas t'embetter avec le CLSID, j'ai une fonction qui recherche par nom... (Forcément plus longue que de prendre directement le CLSID).
Je te la posterai quand j'aurai remis la main dessus :-)
cs_pilulu
Messages postés2Date d'inscriptionvendredi 27 octobre 2006StatutMembreDernière intervention 3 octobre 2008 3 oct. 2008 à 10:44
Merci d'avoir répondu,
Après avoir beaucoup cherché dans les méthodes disponibles de directshow, je suis tombé sur l'objet IFilterMapper2 qui m'a permis d'énumerer tout les filtres connus dans la base de registre :
Ex du code :
IEnumMoniker* pFilterEnum=NULL;
IFilterMapper2 *pMapper=NULL;
hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC, IID_IFilterMapper2,(void **) &pMapper);
hr = pMapper->EnumMatchingFilters(
&pFilterEnum,
0, // Reserved.
FALSE, // Use exact match?
MERIT_DO_NOT_USE, // Minimum merit.
TRUE, // At least one input pin?
0, // Number of major type/subtype pairs for input.
NULL, // Array of major type/subtype pairs for input.
NULL, // Input medium.
NULL, // Input pin category.
FALSE, // Must be a renderer?
FALSE, // At least one output pin?
0, // Number of major type/subtype pairs for output.
NULL, // Array of major type/subtype pairs for output.
NULL, // Output medium.
NULL); // Output pin category.
Puis après grâce à l'enumération donné dans pFilterEnum, j'ai verifié le Nom de chaque filtre grâce au "IMoniker" et au "IPropertyBag", et dès que le nom du filtre obtenu à correspondu à mon attente, j'ai fait un "BindToObject" avec le "IMoniker" pour pouvoir associer ce filtre avec un "IBaseFilter".
Ensuite en ayant inclus les fichier avec mes CLSID (définies par "static const GUID" et non DEFINE_GUID) et leur classe associés j'ai pu utiliser les propriétés de mon objet
bigzooloo
Messages postés36Date d'inscriptionjeudi 16 mai 2002StatutMembreDernière intervention 6 octobre 2009 7 oct. 2008 à 08:00
Bonjour, désolé de ne pas avoir répondu plus tôt...
J'ai retrouvé le code dans une sauvegarde de 2005, et je ne voulais pas dire de betise avant de vérifier...
Effectivement, il faut bien utiliser IEnumMoniker comme tu as fais. Puis tu dis :
"Ensuite en ayant inclus les fichier avec mes CLSID (définies par "static const GUID" et non DEFINE_GUID) et leur classe associés j'ai pu utiliser les propriétés de mon objet "
Donc tu as quand même tes CLSID... dans ce cas, essaye cette fonction plus rapide que l'énumération :
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 25 sept. 2009 à 16:18
Bonjour,
je veux débuter avec DirectShow. Est-il possible d'avoir les sources de votre projet? On ne trouve pas beaucoup de projet sur le net concernant la vidéo, mais beaucoup pour le son.
merci pour votre réponse.
louis14
Vous n’avez pas trouvé la réponse que vous recherchez ?
bigzooloo
Messages postés36Date d'inscriptionjeudi 16 mai 2002StatutMembreDernière intervention 6 octobre 2009 6 oct. 2009 à 13:22
Slt,
Ca ne me parait pas la meilleure façon de débuter avec directshow avec les sources d'un filtre de transformation...
Je te conseillerai plutôt de commancer avec graphedit pour "voir" les traitements de ton flux de la source jusqu'au rendu. Puis de reproduire ces schémas en C++ en utilisant les filtres déjà prêt.
Ensuite, si tu veux approfondir, tu peux te mettre à la création de tes propres filtres.
Après si tu y tiens, j'ai quelques sources simple de mes débuts (genre: lire un mp3, enregistrer la webcam en divX, ...), d'autres qui sont les bases de projets plus complexe : un filtre qui crée une image noire (à la place de la webcam par exemple et tu envoi ce que tu veux), un filtre de transformation qui ne transforme rien :-)...
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 6 oct. 2009 à 13:37
Excuse-moi? mais j'ai déjà vu graph edit et j'ai quelques sources compilés pour ce qui concerne le flux de données : acquisition et visualisation de la webcam. Mais mon intérêt pour tes sources est que je voudrais bien créé 2 filtres bien spécifiques pour transformer une application qui utilise video for windows et dont le flux d'images n'est pas assez rapide.
Merci pour ta réponse et je suis preneur de tes premiers sources de filtres.