begin process at 2012 02 13 13:40:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

DirectX

 > 

Integration de mon filtre directshow


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Integration de mon filtre directshow

lundi 29 septembre 2008 à 18:06:41 | Integration de mon filtre directshow

pilulu

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?

Merci
mercredi 1 octobre 2008 à 11:38:55 | Re : Integration de mon filtre directshow

bigzooloo

Réponse acceptée !
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 :-)
vendredi 3 octobre 2008 à 10:44:23 | Re : Integration de mon filtre directshow

pilulu

Réponse acceptée !
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

Merci encore.
mardi 7 octobre 2008 à 08:00:35 | Re : Integration de mon filtre directshow

bigzooloo

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 :

HRESULT AddFilterByCLSID (IGraphBuilder *pG,

const GUID& clsid, LPCWSTR wszName, IBaseFilter **ppF)

{

if (! ppF) DXTrace(__FILE__,__LINE__,E_POINTER,NULL,TRUE);

SAFE_TEST(CoCreateInstance(clsid, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (

void**)(ppF)))

SAFE_TEST(pG->AddFilter(*ppF, wszName))

return S_OK;

}

Avec un exemple d'utilisation :

AddFilterByCLSID(pGraph, CLSID_VideoMixingRenderer9,  L

"VMR9", &pVMR9);

A+
vendredi 25 septembre 2009 à 16:18:50 | Re : Integration de mon filtre directshow

louis14


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

mardi 6 octobre 2009 à 13:22:56 | Re : Integration de mon filtre directshow

bigzooloo

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 :-)...

mardi 6 octobre 2009 à 13:37:09 | Re : Integration de mon filtre directshow

louis14


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.


louis14


Cette discussion est classée dans : directshow, filtre, integrer, transformation, integration


Répondre à ce message

Sujets en rapport avec ce message

DirectShow > filtre source -> desentrelacement VRM9 [ par bigzooloo ] Bonjour,J'ai créé un filtre source qui me permet de récupérér des données en provenance d'une caméra analogique. Elle m'envoie des données au format P Filtre Directshow Overlay Text avec alpha [ par AlexV4x ] Bonjour,Je travaille actuellement sur la realisation d'un filtre Directshow utilisant GDI+. j'arrive, grace aux classes de GDI+ a ecrire sur la video creation filtre directshow [ par thorodin ] Bonjour,je cherche a savoir s il est possible de creer un filtre directshow a partir de la classe CTransformFilter avec plusieurs pins de sortie. je n [DirectShow] Gerer proprietes depuis appli externe [ par AlexV4x ] Bonjour a tous,J'ai développé une petite application en C# qui n'a pour but que d'afficher une video en lui appliqaunt un filter DShow.Pour ce faire, création d'un filtre DirectShow pour un codec H.264 [ par wafabmed ] Je voudrai faire un filtre DShow ( DirectShow) pour un codec H.264 en se basant sur le projet FFmpeg (décodeur) et le projet X264 (codeur).Le problème filtre directshow EZRGB24 [ par oeildedinde ] Bonjour, j'essaie de modifier le filtre directshow EZRGB24 (fournis dans la SDK), pour que les dimension de l'image sur le pinOut fassent la moitiée d changer les paramètre d'un filtre directshow sans utiliser la page de propriété [ par oeildedinde ] Bonjour, Je cherche à modifier les paramètres d'un filtre directshow depuis une application faite en c++ express. Le filtre en question est une modifi filtre directshow audio sample WAVFORMATEX [ par oeildedinde ] Bonjour, Sur un filtre directshow, j'ai une fonction qui récupère les datas d'un flux audio stéreo 16 bits. Elles sont stockées sur un PBYTE. Quand j Filtre directshow (EZRGB24 modifié) [ par oeildedinde ] Salut, J'ai modifié le filtre EZRGB24 de la sdk, de sorte à ce qu'il fasse une tranformation sur une image RGB24 et sorte une image RGB32 vers le vid filtre Sobel [ par swito ] bonjour je cherche à appliquer le filtre Sobel sur une image et j'ai utilisé la fonction d'OpenCV "Cvsobel" mais qu'on j'exécute mon programme il s


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,540 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales