Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Integration de mon filtre directshow [ Windows / DirectX ] (pilulu)

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+



Cette discussion est classé 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 [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 directshow [ par codeccodec ] Salut tous le monde   <p class="M Filtre de bayer [ par zoomeo ] Salut a tous!je poste ce message car j'ai un petit soucis...Je dois réaliser un "debayeuriseur" et je ne comprend pas trop le principe, du moins je ne transformation algorithme_langageC [ par la_celeste ] A tous les doués(ées) en programmation:veuillez svp me transformer l' algorithme ci_dessus en langage C(avec des commentaires)merci d'avance:  Algorit integrer du html au c/c++ [ par dgac ] Bonjour j'ai un porgramme un c/c++ qui marche et je voudrais crée une interface graphique .POur cela j'ai pensé a crée l'interface en html mais je ne integrer caractère grec sigma (écart type) dans une chaine à afficher [ par jhmallot ] Bonjour je souhaite afficher sur un graphique la chaine? = 1.2 En arial le code existe mais si je créé la chaine sigma[]={0x03c3,0x0000};je récupère l [DirectShow] Streaming [ par leprov ] BonjourDe ce que j'ai vu, on ne peut construire un graph audio qu'a partir d'un fichier, hors je voudrais le construire à partir d'un flux audio conte


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.