LECTEUR VIDEO OPENGL

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 12 sept. 2004 à 12:27
BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005 - 1 oct. 2004 à 19:10
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/26108-lecteur-video-opengl

BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005
1 oct. 2004 à 19:10
Qui dit 3D ne dit pas forcément jeu vidéo. Je pense à quelque chose d'un peu plus esthétique que les interfaces 2D traditionnelles de Windows/Linux. Et en 3D, on peut faire pas mal de choses, qui sont en plus accélérées par la carte graphique.
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
26 sept. 2004 à 16:38
Ouais, un explorateur 3D où faudrait se diriger avec un joystick, tirer sur des fichiers-zombies pour les détruire...chaque dossier étant une grotte...ouais ça serait sympa :)
J'imaginerais bien avec une heightmap en dessous, dans un style Mars (mais en laissant le tout personnalisable...)
Moui il me plaît ton projet :)

En ce qui concerne le fait que j'utilise un format personnel, c'est justement, je trouve ça moins courageux que de s'attaquer à un format existant (se taper la doc en anglais mal faite et compliquée...marre quoi lol).
Enfin bref jusque là ça marche alors ça me convient :)
BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005
26 sept. 2004 à 14:49
Ce ne sont que quelques petits bugs qui n'empêchent pas d'utiliser le prog :)

J'aime bien ton projet parce que tu as créer un format personnel et que tu as fait le lecteur OGL qui va avec. Je trouve ca tout aussi courageux que de faire un lecteur utilisant un format vidéo déjà existant. Là, on est sûr de ne pas avoir de pb de codecs ;) Et pis je suis comme toi, je n'aimais pas le programme de NeHe. Et c'est parfois intéressant de mettre une telle "texture animée" dans un jeu, une texture qui ne soit visible que dans le jeu (et pas autrement).

J'aime bien ce genre de projet. Je me suis intéressé également à un explorateur de fichiers OGL. J'aimerais bien un petit explorateur 3D capable de faire un peu de tout (viewer d'image, lecteur vidéo, lecteur mp3, avec quelques effets 3D sympatiques).
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
26 sept. 2004 à 10:24
Effectivement je viens de télécharger la version sur mon site et il n'y a pas les glTexParameteri()...merci de me l'avoir signalé, j'update tout ça avec en plus la modification du timer et celle de jpeb2cjv.c. Heureusement que t'es là pour corriger mes erreurs ;)

Juste par curiosité, tu comptes utiliser le lecteur vidéo dans un projet particulier...?
BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005
26 sept. 2004 à 02:04
Oki, j'ai réussi à faire une vidéo :)

Un petit détail dans jpeg2cjv.c. Bizarrement, il commencait l'encodage à partir de la 8è image. J'ai juste modifier la ligne 28 "int i=0;" (en initialisant i).

Ensuite, toujours dans jpeg2cjv.c, ca bug au niveau du répertoire JPG car str_nom_dossier_jpeg est limité à 100 caractères !!! Il existe la variable MAX_PATH. J'ai testé et ca règle le pb.

char str_nom_video[MAX_PATH];
char str_nom_dossier_jpeg[MAX_PATH];
char str_nom_fichier_jpeg[MAX_PATH];

Dans la version que j'ai DL, il n'y avait pas de glTexParameteri(); C'est pour ca.

Voilou ^o^
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
26 sept. 2004 à 01:36
Normalement, avec la version qui est postée maintenant les glTexParameteri() ont été déjà rajoutés et les gluBuild2DMipmaps() remplacés par des glTexImage2D()...

Pour le coup du get_ticks je viens de tester et ça marche nickel :) Tu viens de résoudre le dernier problème qui restait, merci bcp :)
Normalement je devrais poster une version corrigée, peut-être demain.

Pour ce qui est de la conversion, normalement on n'est pas obligé de mettre un chemin absolu, c'est bizarre que ça ne fonctionne pas...
Essaye de déplacer le tout dans un dossier plus "simple", genre C:\CJVVideo...(il me semble que j'avais eu ce problème aussi ^^)
Si tu n'y arrive pas, on peut essayer de régler ça par messages privés, par MSN ou sur le chan IRC #Coder-Studio si tu veux.
BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005
25 sept. 2004 à 23:01
Un petit commentaire sur le rendu. Ajoute ces deux lignes avant gluBuild2DMipmaps(). Le rendu des textures sera nettement meilleur :

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);


Je crois savoir pourquoi la vidéo semble ramer un peu. Remplace :
m_date_previous_frame = SDL_GetTicks();
par
m_date_previous_frame = get_ticks;
ou peut-être mieux, par :
m_date_previous_frame += m_nb_ms_per_frame;


Sinon, je n'ai pas réussi à créer de vidéo. J'ai mis les images TGA (de 0 à 90 avec le fichier Face2.avi) dans le bon rep. Les images sont converties en JPG, je spécifie tout, mais le fichier CJV ne fait que 16 octets. Est-ce qu'il faut un chemin absolu (c:\...) pour le rep JPG ?
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
23 sept. 2004 à 16:53
Update : le bug a été trouvé ! (merci MickaGL :))
La nouvelle version, 1.1, est dispo, pour ceux que ça intéresserait...
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
13 sept. 2004 à 19:29
eRoZion >> c'est en se disant qu'on n'a pas "encore" les capacités que l'on avance pas, je parle d'expérience ;)

Pour l'histoire du filtrage Arnaud, là n'est pas le problème.
Contrairement à un programme classique où les textures sont chargées au démarrage une bonne fois pour toutes, le mien crée 2 textures au démarrage (oui je fais une sorte de double-buffering avec des textures), mais il met à jour ces textures via glTexSubImage2D à chaque fois que c'est nécessaire (et il passe à l'autre "texture-buffer" d'ailleurs à ce moment-là, en fait je garde toujours une image chargée d'avance).

J'ai essayé de rajouter un filtre, seulement quand je crée la texture la 1ère fois, glTexImage2D ne fonctionne pas (sauf UNIQUEMENT sur mon PC O_o !).
Donc je me suis résigné à utiliser gluBuild2DMipmaps, qui, elle, fonctionne...mais je ne crée les mipmaps qu'en utilisant la 1ère image de la vidéo...
Quand je mets un filtre (même GL_NEAREST...), au moment où le prog doit changer de mipmap (c'est à dire quand l'image est sur le bord de la fenêtre, qu'elle va passer derrière le cube) le prog m'affiche le mipmap créé au début du prog, soit la 1ère image de la vidéo...

Essaye par toi-même, tu verras :(
Donc si tu trouvais pourquoi glTexImage2D ne marche pas, je t'en serais TRES reconnaissant ;)
cs_eRoZion Messages postés 241 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 8 octobre 2007 1
13 sept. 2004 à 03:21
Funto66 > Biensur ça doit être beaucoup plus difficile et surtout long à mettre en oeuvre. Ta méthode fonctionne déjà très bien.

Quant à coder un lecteur mpeg-4, pour l'instant je suis loin d'avoir les compétences requises... Mais plus tard ça pourrait être un très bon entrainement. En attendant j'apprend déjà les api windows, opengl on verra plus tard. ;)


eRoZion
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
12 sept. 2004 à 21:48
oué ben je ois nulle art un filtrage trilinéaire, qui devrait arranger pas mal de choses:

glBindTexture(GL_TEXTURE_2D, textureArray[textureID]);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, pImage->sizeX, pImage->sizeY, GL_RGB, GL_UNSIGNED_BYTE, pImage->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);


voila là t'as pas mieux en qualité; et je ne pense pas que les fps vont bcp baiser;sinon tu peux te contenter du bilinéaire: tu remplaces GL_LINEAR_MIPMAP_LINEAR par GL_NEAREST_MIPMAP_LINEAR (ou GL_LINEAR_MIPMAP_NEAREST je sé plus :( )

hoh c'est bô!

et GL_CLAMP_TO_EDGE c'est surtout pour les skybox pasque si tu mts pas ca, u vois les aretes du cube et ca ruine tout l'effet.

et enfin, vérifie que les autres qui ont testé ont bien la derniere version d'openGL (du moins pas la 1.0, si elle est encore sur le serveur...)

et en dernier, je pense que la pixellisation sur les bords c'est pasque je mode par défaut c'est GL_NEAREST, qu'il ne faut utiliser QUE quand on a un prog qui rame vraiement, pasque c'est tout moche (pixellisé)
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
12 sept. 2004 à 19:55
Merci :)
L'histoire des i-frames, p-frames et b-frames, je connais, je m'étais renseigné avant de coder ce lecteur ;)
Sauf que bon, ok le principe est simple mais maintenant l'application pas autant... :S
Et tant qu'à faire, si l'on arrive à coder un lecteur qui fonctionne comme ça, autant essayer de l'adapter au MPEG plutôt que de créer son propre format.
Mais bon, j'ai aussi des contraintes de temps (vu que ce lecteur a été créé pour un concours de prog sur Coder-Studio.com, ce n'en est qu'une partie), et pour l'instant je suis satisfait :)

Maintenant si tu te sens le courage de faire un lecteur vidéo MPEG-4, je suis intéressé ;)
cs_eRoZion Messages postés 241 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 8 octobre 2007 1
12 sept. 2004 à 19:08
Le code est très clair. 9/10
cs_eRoZion Messages postés 241 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 8 octobre 2007 1
12 sept. 2004 à 18:48
correc:
c'est PAS TROP compliqué à en comprendre le principe.

Dans l'autre sens on dirait que c'est super simple alors que c'est pas vraiment le cas.


eRoZion
cs_eRoZion Messages postés 241 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 8 octobre 2007 1
12 sept. 2004 à 18:44
Les nouveaux codecs mpeg-4 ne contiennent qu'un très faible pourcentage d'images compressées en jpeg dans leur intégralité appelées i-frames (enfin c'est de la compression vectorielle meme si c'est pas exactement le jpeg).
Le reste c'est des p-frames, et dernièrement aussi les b-frames.

Renseigne-toi, c'est trop pas compliqué à en comprendre le principe, et tes vidéos seront bien moins lourdes.

Autrement j'ai pas encore regardé le code mais chez moi ca tourne sans problème. :)


eRoZion
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
12 sept. 2004 à 17:34
Ouais bah les 2 mégas c'est à cause de la vidéo, dsl...
J'ai tout mis, y compris la version originale en .AVI, et la compression JPEG n'est pas au maximum...

Si vous voulez je peux faire une version "light" lol.

Pour GL_CLAMP_TO_EDGE, ben je ne sais simplement pas ce que c'est, dis-moi? ;)

En ce qui concerne le mipmapping, c'est ce que fait effectivement mon loader de TGA :) C'est d'ailleurs grâce à gluBuild2DMipMaps que l'on peut supporter autre chose que des images avec des côtés en puissances de 2 ^^

La vidéo, c'est effectivement simplement des images JPEG mises à la suite, et ça n'a aucun rapport avec ton format 3D ;)
Quant à l'animation, ça m'intéresse toujours, et t'inquiète pas que j'en trouverais des applications ;)
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
12 sept. 2004 à 12:27
2méga!
hé, ya pas tt le monde qui a l'adsl, hein! enfin je suppose que ca vaut le coup.
je suis en train de télécharger, j'en ai pour un moment.
t'as essayé GL_CLAMP_TO_EDGE ?
je suppose que oui, mais comme je sais pas encoe exactement ce qui se passe je peux pas dire...
moi aussi j'ai eu des pb avec les paramertes de textures: on ne peux pas faire de mipmaps avec les tga - enfin, j'utilise pas ton loader funto, du moins pas pr le moment, dsl :) - et je vois pas pourquoi ca marcherait pas avec les jpg... on va bien voir.
si j'ai bien compris, ton codec vidéo c'est juste des jpg a la file c'est ca? ca a un rapport avec la question que tu me posais l'autre jour (euh, semaine...) pour savoir si mon format 3d supporait les animations?
bien que je ne voie pas où tu pourais mettre une anim sur un avion, euh, coucou :p
Rejoignez-nous