Récuperer information d'un AVI

Récuperer information d'un AVI - C++ - Programmation

Marsh Posté le 22-05-2005 à 10:04:33    

Bonjour à tous,
 
Voila j'ai cherché à gauche et à droite mais je n'ai rien trouver de concret.
 
Est-ce que quelqu'un à un indice, un lien ou une source à me proposer pour récupérer les informations d'un fichier vidéo AVI tel que sa durée, sa résolution, ses codecs (audio & video) ?
 
Je vous remerci d'avance et passez bonne journée.

Reply

Marsh Posté le 22-05-2005 à 10:04:33   

Reply

Marsh Posté le 23-05-2005 à 00:28:34    

AlphaZone a écrit :

Bonjour à tous,
 
Voila j'ai cherché à gauche et à droite mais je n'ai rien trouver de concret.
 
Est-ce que quelqu'un à un indice, un lien ou une source à me proposer pour récupérer les informations d'un fichier vidéo AVI tel que sa durée, sa résolution, ses codecs (audio & video) ?
 
Je vous remerci d'avance et passez bonne journée.


    On trouve une description du fichier AVI ici: http://msdn.microsoft.com/library/ [...] ffform.asp
    Cherche aussi avec AVIFile et AVIStream.

Reply

Marsh Posté le 23-05-2005 à 09:12:28    

Merci videaste95 ;)

Reply

Marsh Posté le 24-05-2005 à 08:01:30    

J'ai essayé de trouver une classe ou une librairie de AVIFile ou AVIStream mais c'est sur linux or moi je veux que ce soit sous windows.
 
Le lien que tu m'as passé est destiné à la plateforme windows CE

Citation :

Platform Builder for Microsoft Windows CE 5.0


 
Quelqu'un ne sait pas où est-ce que je pourrrais trouver une classe ou librairie permet d'avoir toutes les informations nécéssaire à un fichier AVI ?


Message édité par AlphaZone le 24-05-2005 à 08:02:26
Reply

Marsh Posté le 24-05-2005 à 08:18:36    

J'ai trouvé un site qui propose plein de source tel que avi.h, riff.h :  
http://www.koders.com/cpp/fidCA2A6 [...] C3981.aspx

Reply

Marsh Posté le 24-05-2005 à 16:24:05    

AlphaZone a écrit :

J'ai essayé de trouver une classe ou une librairie de AVIFile ou AVIStream mais c'est sur linux or moi je veux que ce soit sous windows.


 
AVIFile et AVIStream existe aussi sous windows -> VFW (Video for Windows)
 
je te fais un exemple y'a peut etre des erreurs de compil, je m'amuse pas a tout verifier
 

Code :
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <vfw.h> //dispo avec dev-cpp ou vc++
  4. //soit tu fait un link static avec vfw32.lib (fourni avec le compilo)
  5. //soit tu te fait une liaison dynamique au run-time
  6. //Initialise la librairie
  7. AVIFileInit();
  8. PAVIFILE avi(NULL);
  9. if(AVIFileOpen(&avi, "fichier.avi", OF_READ, NULL) == 0) {//success
  10. AVIFILEINFO avi_info;
  11. if(AVIFileInfo(avi, &avi_info, sizeof(AVIFILEINFO)) == 0) {
  12. std::cout << avi_info.xxx << std::endl;
  13. //xxx dispo à [url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_avifileinfo_str.asp[/url]
  14. //la tu recupere les infos générales sur le fichier
  15. //avec avi_info.dwLength, avi_info.dwRate et avi_info.dwScale tu dois pouvoir calculer la durée (je sais plus si les 3 sont necessaires).
  16. }
  17. //ensuite pour les flux video
  18. PAVISTREAM avi_stream(NULL);
  19. int streamNumber(0);
  20. while(AVIFileGetStream(avi, &avi_stream, streamtypeVIDEO, streamNumber++) == 0) {//success
  21. AVISTREAMINFO avi_stream_info;
  22. if(AVIStreamInfo(avi_stream, &avi_stream_info, sizeof(AVISTREAMINFO)) == 0) {
  23. //pareil que precedemment:
  24. //[url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_avistreaminfo_str.asp[/url]
  25. //avi_stream_info.fccType te donne le type de stream ici "vids" (attention stocké en little-endian donc "sidv" )
  26. //avi_stream_info.fccHandler te donne le fourCC du codec (aussi en little-endian  :non: ) -> ex: "divx" -> "xvid" -> codec XVID
  27. //liste des fourcc: http://www.fourcc.org ou alors passe par les "Video Compression Manager" (recherche dans msdn) pour avoir le nom,
  28. //si tu as un codec compatible installé, etc.
  29. }
  30. }
  31. //meme principe pour l'audio ...
  32. }
  33. //Ferme la librairie
  34. AVIFileExit();


 

Reply

Marsh Posté le 24-05-2005 à 16:48:36    

dsl pour les liens, j'avais pas vu que ca passait pas au milieu du code:
 
pour AVIFILEINFO:
http://msdn.microsoft.com/library/ [...] fo_str.asp
 
pour AVISTREAMINFO:
http://msdn.microsoft.com/library/ [...] fo_str.asp
 
en general pour la lib AVIFile:
http://msdn.microsoft.com/library/ [...] macros.asp
 
pour les codes fourCC:
http://www.fourcc.org


Message édité par chicotruss le 24-05-2005 à 16:49:04
Reply

Marsh Posté le 24-05-2005 à 18:05:40    

Merci chicotruss. C'est propre à visual C++ aussi.
 
J'ai surement fait l'erreur d'avoir oublié de vous dire que je développais sous Borland C++ Builder 5  :sweat:


Message édité par AlphaZone le 24-05-2005 à 18:14:46
Reply

Marsh Posté le 24-05-2005 à 20:19:34    

AlphaZone a écrit :

Merci chicotruss. C'est propre à visual C++ aussi.
 
J'ai surement fait l'erreur d'avoir oublié de vous dire que je développais sous Borland C++ Builder 5  :sweat:


 
Ben normalement c'est integré dans windows donc si t'as pas les fichiers vfw.h et vfw32.lib tu peux essayer de faire un appel au run-time ca doit passer vu que la dll fait parti du systeme:
 

Code :
  1. #include <windows.h> //pour les fonctions de dll
  2. HMODULE dll(LoadLibrary("avifile" )); //charge la dll qui dispose des fonctions AVI,
  3. // faut peut etre rajouter .dll mais essaye deja sans
  4. if(dll != NULL) {
  5. typedef STDAPI_(VOID) (*AVIFileInit_TYPE)(VOID); //prototype fonction init
  6. AVIFileInit_TYPE AVIFileInit((AVIFileInit_TYPE)GetProcAddress(dll, "AVIFileInit" ));
  7. if(AVIFileInit != NULL)
  8. AVIFileInit();
  9. else return(1);
  10. typedef HRESULT (*AVIFileOpen_TYPE)(PAVIFILE*, LPCTSTR, UINT, CLSID);
  11. AVIFileOpen_TYPE AVIFileOpen((AVIFileOpen_TYPE)GetProcAddress(dll, "AVIFileOpen" );
  12. if(AVIFileOpen != NULL) {
  13. //appel de la fonction
  14. //par contre y doit falloir aussi que tu recupere les types PAVIFILE, PAVISTREAM, etc.
  15. //mais la c'est comme au dessus apres
  16. }
  17. // idem pour le reste ...
  18. } else {
  19. //ben ca a foiré
  20. }


 
Si les noms de fonctions passent pas essaye en majuscule (AVIFILEINIT, ...) dans GetProcAddress car je sais pas comment elles ont été codé en interne, j'ai juste desassmblé pour voir s'il les fonctions étaient exportées.
 
pour les prototypes des fonctions:
http://msdn.microsoft.com/library/ [...] ctions.asp
 
toutes les fonctions qui renvoient 0 en cas de succes ou une erreur sinon retourne normalement un type HRESULT (faut peut etre rajouter STDAPI devant):
http://msdn.microsoft.com/library/ [...] macros.asp
 
Ca ca devrait marcher (pas sur de la syntaxe pour les pointeurs de fonction  :sweat: , j'utilise pas souvent)


Message édité par chicotruss le 24-05-2005 à 20:29:27
Reply

Marsh Posté le 25-05-2005 à 23:14:47    

    Avec C++ Builder, tu as le SDK WIN32 qui fourni tous les fichiers d'entêtes necessaires. Le seul problème est leur ancienneté par rapport à windows XP (ils sont plus proches de Win95 que de XP). Il suffit souvent de lire les dernières infos du SDK pour Visual C++ et d'utiliser les fichiers de C++ Builder. En ajoutant parfois une définition.

Reply

Marsh Posté le 25-05-2005 à 23:14:47   

Reply

Marsh Posté le 27-07-2005 à 09:44:29    

Bonjour,
 
En ce moment, j'essaie d'ouvrir un fichier AVI,et d'acceder à toutes les infos, et je pensais avoir trouvé ma solution avec ce forum. Malheureusement, ça ne marche pas. J'ai essayé de faire le plus simple possible pour limiter le nombre de sources d'erreurs et j'arrive à ça :
 

Code :
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <windows.h>
  4. #include <vfw.h> //dispo avec dev-cpp ou vc++
  5. using namespace std;
  6. int main(int argc, char *argv[])
  7. {
  8.     cout << "tentative de lecture d'une vidéo"<<endl<<endl;
  9.    
  10.     AVIFileInit();
  11.     AVIFileExit();
  12.     system("PAUSE" );
  13.     return EXIT_SUCCESS;
  14. }


 
Avec dev C++, j'obtiens ce message d'erreur à la compilation:
 

[linker error] undefined reference to `AVIFileInit@0'
[linker error] undefined reference to `AVIFileExit@0'


 
 
Avec visual C++6, la compilation ne donne pas d'erreur. par contre, c'est au moment de contruire l'executable que ça bloque, et je reçois ce message :
 

Linking...
lectureAvi.obj : error LNK2001: unresolved external symbol _AVIFileExit@0
lectureAvi.obj : error LNK2001: unresolved external symbol _AVIFileInit@0
Debug/lectureAvi.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
 
lectureAvi.exe - 3 error(s), 0 warning(s)


 
Donc il trouve la bonne bibliothèque apparemment, mais les fonctions ne sont pas définies, à cause d'un pb dont je n'ai pas la moindre idée... Est ce que quelqu'un sait ce que je dois faire, ou au moins ou chercher ?
 
Gérald

Reply

Marsh Posté le 27-07-2005 à 10:11:36    

g pas tt lu donc...
juste comme ca c'est la meme erreur entre devcpp et vc6...ca compile mais ca link pas!
l'utilsation de ta lib doit etre mal parametrer dans tes options de compil de ton projet

Reply

Marsh Posté le 27-07-2005 à 14:00:22    

Ce sont des erreurs de link:
 
Sous dev-cpp: Projet -> options du projet -> paramètres
Dans la case éditeurs de lien tu rajoute -lvfw32 (ou alors tu utilise le bouton ajouter fichier et tu rajoute le fichier <chemin_devcpp>\lib\libvfw32.a
 
Pour vc6 il doit y avoir une option du style autres bibliothèques incluses dans un menu éditeur de liens dans les options du projet

Reply

Marsh Posté le 28-07-2005 à 10:26:17    

Merci !
Ca marche maintenant !

Reply

Sujets relatifs:

Leave a Replay

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