Directshow, graphes de filtres connectés "à la main" ...

Directshow, graphes de filtres connectés "à la main" ... - C#/.NET managed - Programmation

Marsh Posté le 12-01-2004 à 14:48:50    

Voila, je réalise actuellement une application de traitement vidéo en C#. Je me suis donc tout naturellement porté vers DirectX et en particulier Directshow. J'ai étudié tout ca, j'ai decouvert les histoires de graphes de filtres et les autres joyeusetées du meme genre.
 
Maintenant passons à mon porblème. J'ai decouvert que pour les traitements que j'ai à effectuer il n'existe aucun filtre, j'ai donc l'intention de les réaliser moi-meme (jusque la aucun problème). Mon problème vient du fait qu'en C# je n'arrive pas a créer mon graphe de filtre "à la main". J'ai parfaitement compris la manoeuvre en C++ (récupération des PIN, détection de leur "sens de fonctionnement" et connection grace a la fonction connect de l'interface IGraphBuilder). Mais lorsque j'essaie de faire les memes operation en C# je me heurte à un probleme. En effet lorsque dans mon projet j'ajoute la référence à la bibliotheque COM quartz.dll (qui contient les interfaces et les fonctions que j'ai cité plus haut), visual studio réalise une conversion de cette bibliotheque (pour l'adapter au framework .NET), et à l'arrivée il me manque les 3/4 des interfaces dont j'ai besoin.
La seule chose que je parviens alors à faire dans cette configuration c'est faire afficher un fichier vidéo à l'aide de la méthode RenderFile (qui crée le graphe de filtre de manière automatique, ce qui s'avère bien pratique mais ne m'arrange nullement dans mon cas)
 
Est-ce que qq'un a une solution à me proposer ? Ou alors une méthode me permettant de contourner ce problème ?
 
 
Merci d'avance.


Message édité par StatuFab le 12-01-2004 à 15:21:25
Reply

Marsh Posté le 12-01-2004 à 14:48:50   

Reply

Marsh Posté le 13-01-2004 à 15:26:20    

C vrai que ds le sdk de dx managed, on trouve tout sauf dshow.. Bien dommage tt ça.. :\
J'apprécie la programmation dshow, mais pas en com.. C pour ça que j'attendais le skd managed.. Pas de bol c apparemment pas dedans.. :\


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 13-01-2004 à 16:41:40    

Bah ouais ... sur le site de microsoft ils disent qu'ils n'ont "pas encore eu le temps" de faire passer directshow en code managé ... bref c la haine car moi j'en ai besoin tout de suite :cry:
 
Sinon j'ai trouve 2-3 bricoles qui ressemblent a ce que je cherche mais je n'arrive pas encore a me depatouiller avec. Je mets quand meme les liens au cas ou ca interesserait qq'un d'autre.
 
http://www.kohsuke.org/dotnet/directshowTypelib/
http://www.codetools.com/cs/media/directshownet.asp


Message édité par StatuFab le 13-01-2004 à 16:45:56
Reply

Marsh Posté le 13-01-2004 à 17:35:56    

Ahhh alors c que ça va venir... :)
Désolé je peux pas t'aider sur le c++.


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 15-01-2004 à 14:51:25    

Aller, un pti up au cas ou un boss de directshow passe dans le coin [:spamafote]

Reply

Marsh Posté le 02-02-2004 à 12:54:28    

Bonjour,
je voulais savoir si quelqu'un parmi vous à de la documentation sur ces 3 DLL
- quartz.dll
- FSFWrap.dll
- CapStill.dll
 
Mon soucis est le suivant je souhaite pouvoir paramétrer le pal/sécam sur une carte d'acquisition avec directX à l'aide de ces DLL.
 
Merci pour votre aide
 
Voici mes liens si cela peut t'aider :
 
http://www.supinfo-projects.com/fr [...] efault.asp
 
http://www.gdcl.co.uk/vb.htm#streamformat

Reply

Marsh Posté le 11-02-2004 à 20:50:07    

StatuFab, le plus simple c'est de faire une lib en cpp manage que tu utilise dans ton application C#.


Message édité par Arlq1 le 11-02-2004 à 21:08:18
Reply

Marsh Posté le 12-02-2004 à 13:56:21    

Je sais, je suis dessus en ce moment meme :)
 
Merci quand meme pour le conseil.

Reply

Marsh Posté le 12-02-2004 à 14:22:15    

StatuFab a écrit :

Bah ouais ... sur le site de microsoft ils disent qu'ils n'ont "pas encore eu le temps" de faire passer directshow en code managé ... bref c la haine car moi j'en ai besoin tout de suite :cry:
 
Sinon j'ai trouve 2-3 bricoles qui ressemblent a ce que je cherche mais je n'arrive pas encore a me depatouiller avec. Je mets quand meme les liens au cas ou ca interesserait qq'un d'autre.
 
http://www.kohsuke.org/dotnet/directshowTypelib/
http://www.codetools.com/cs/media/directshownet.asp

Tu ne peux pas appeller directement les fonctions de la dll dont tu as besoin, si tu ne peux pas les utiliser en code managé??
tu definis les fonctions dont tu as besoins dans une classe avec les bons attributs. Par exemple:
 
using System.Runtime.InteropServices;
....................................
[DLLImport("user32.dll" )]
public static extern int ShowCaret(IntPtr hwnd);
// ou un autre exemple plus détaillé
[DllImport("KERNEL32.DLL", EntryPoint="MoveFileW",  SetLastError=true,
CharSet=CharSet.Unicode, ExactSpelling=true,
CallingConvention=CallingConvention.StdCall)]
public static extern bool MoveFile(String src, String dst);
 
( http://msdn.microsoft.com/library/ [...] stopic.asp )
 
A+,


Message édité par gilou le 12-02-2004 à 14:35:31

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-02-2004 à 17:21:50    

Merci gilou, mais ce n'est pas tout a fait aussi simple (du moins ca ne me semble pas aussi simple, je me plante peut-etre completement [:spamafote] ).
En effet je n'ai pas seulement besoin de qqes fonctions contenues dans cette dll, mais de quasiment toute l'infrastructure directshow en passant par des objets COM et un nombre assez important d'interfaces (une bonne vingtaine a vue de nez). Donc tout remettre dans une classe avec les bons attributs ... euh ... disons que je suis un peu feneant :whistle:
 
Bref je vais faire tout ce qui concerne directshow en C++ classique et je vais bisouiller qqch pour que cette partie communique avec le reste de mon appli en C# (en fait je n'ai pas beaucoup de communication a faire entre les deux, juste des trucs du genre ordre de debut/fin de capture, le flux a afficher et qq statistiques concernant le reseau pour adapter l'encodage)
 
 
Encore merci


Message édité par StatuFab le 12-02-2004 à 17:22:53
Reply

Marsh Posté le 12-02-2004 à 17:21:50   

Reply

Marsh Posté le 27-03-2004 à 14:54:34    

Alors les filles on bulle ? Un site qui va te sauver :
 
http://perso.wanadoo.fr/letchideslandes

Reply

Marsh Posté le 29-03-2004 à 11:18:32    

Merci c'est sympa  :wahoo:  
 
Mais c'est tout en VB  :cry: ...  :whistle:  
 
Nan, serieusement meme en VB ca explique pas mal de chose.
 
Par contre j'etudie deja depuis qq jours un equivalent de ce que tu as fait, mais en C#  :sol:  
 
C'est la : http://www.labo-dotnet.com/labo-do [...] cle&ID=200
 
 
Edit : oups je n'avais pas vu tes diverses interventions sur le site nommé ci-dessus  :sarcastic: . Je te trouve un petit peu mechant avec le pauvre auteur de l'article ... m'enfin c'est vrai que c'est pas mal buggé son truc ... et surtout les explications sont ... comment dire ...  :pt1cable:


Message édité par StatuFab le 29-03-2004 à 12:12:58
Reply

Marsh Posté le 30-03-2004 à 16:02:08    

Ma critique vient du fait qu'il ne se prenne pas pour des blaireaux, vu l'entete, et que tous son contenu est une pale copie du source de codeproject. Je n'ai pas tout mis en ligne mais en gros, le wrappeur que j'ai écrit fonctionne à 100 % pour les fonctions que j'utilise. En gros, je debbugge à la demande. Pour ce qui est du VB, la traduction en C# est relativement facile sinon je peux te compiler un assembly séparé que t'utilise en mettant une référence dans ton projet C#. A tchao

Reply

Marsh Posté le 01-04-2004 à 10:08:18    

Pour la traduction en C#, c'est deja fait ;) , merci quand meme.
 
NB : j'ai encore qq petits bugs, mais sinon, si tu veux, des que ca marche je te l'envoie.


Message édité par StatuFab le 01-04-2004 à 12:49:03
Reply

Marsh Posté le 08-04-2004 à 15:33:39    

Bon, logiquement quasiment tout fonctionne dans ma version C#.
J'ai encore un souci avec GetVideoPosition(Source, Destination). En effet il ne me recupere absolument rien dans Source (les coordonnées et dimensions restent a 0).
J'ai donc repassé le VMR en mode Windowed et je colle la vidéo dans un panel (en passant par IVideoWindow). Ca ne me satisfait pas entierement mais en attendant de trouver mieux ca fonctionne.
 
NB : je me doute que ce que je raconte doit etre plutot incomprehensible pour ceux qui n'ont pas epluché le programme de notre ami letchideslandes et je m'en excuse platement.


Message édité par StatuFab le 08-04-2004 à 15:34:13
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed