Hello !
comme vous savez ( même s'il n'y a que tmyke en se moment <.< )je fait un petit lecteur video depuis qu'elle que jours
se pendant je voudrai l'optimiser sur le rendue d'irrlicht
voila donc avens pour rafraichir ma texture je fessais :
static int i =0; while(++i <3) driver->removeTexture(driver->findTexture("movie")); driver->addTexture(VImage,"movie");
qui est très lent
donc je voudrai passer pour une méthode qui rafraîchie la texture sans en crée un nouvelle a chaque frame
j'est trouver que quand je divisait par la taille de la variable sa plantait pas bizarre non ?
mais 2 problème sont :
pourquoi sa plante si j'enlève mon "/sizeof(irr::u32)" sa crash <.<
et pourquoi si je le laisse la partie des pixel rafraîchis a une majorité de vert alors que sa devrai être noir -> screen
euh sinon je risque de me réveiller ver 1h donc attendez pas que je réponde avens
Dernière modification par Magun (14-12-2008 03:44:06)
Hors ligne
pour accéder aux textures en ecriture direct, voici plutôt le genre de code à employer:
ITexture *txt = driver->addTexture(dimension2d<s32>(32,32), "texture", ECF_A8R8G8B8); // récupère le pointeur u32 *p = (u32*)txt->lock(); // on va mettre tous les pixel en rouge SColor color(255,255,0,0); // parcours de la zone complète de pixel for(u32 j=0; j<txt->getSize().Height; j++) for(u32 i=0; i<txt->getSize().Width; i++) { p[j * txt->getSize().Width + i] = color.color; } // on met le pixel 10,5 en vert u32 xpos = 10; u32 ypos = 5; color = SColor(255,0,255,0); p[ypos * txt->getSize().Width + xpos] = color.color; // txt->unlock();
dans le principe voilà comment faire. Ce principe s'applique je pense de la même manière
aux images...
Hors ligne
bon alors j'est utiliser ta technique ... le fps a légèrement augmenter mais
la "conversion" des pixel n'est pas génial : screen
Hors ligne
En terme de gain, cela peux sembler effectivement pas génial. Ta texture, au fait, est en VRAM ou en mémoire système ?
Sinon pour l'histoire du pixel pas vraiment à la bonne place, regarde aussi au niveau du format de ton image (16/32 bits)
Hors ligne
l'image est au format utiliser pas le driver et j'utilise directx9 donc 32bits et elle crée a partir d'une data ( elle se rafreshie automatiquement via l'option 4 de la fonction ^^,
et ma texture est charger en mémoire système
Hors ligne
Demain, j'aurais peut-être le temps de me pencher sur le soucis. Par contre pourrais-tu poster un petit code complet qui reproduit le problème, même si tu ne peut pas y joindre le media...
Hors ligne
ok pour le code
j'est tester en utilisant sa :
sa marche impeccable mais je retourne à 12fps
sinon pour le code je te passe une archive
http://immortalgalaxy.free.fr/Download/codes.rar
Hors ligne
OK, je mate cela dès demain
Hors ligne
merci bien
ah tien j'est trouver 2 truc
1-l'utilisation du type A1R5G5B5 pour l'image augmente de 1fps ...
2-si je remet mon ancienne vidéo je passe a 28fps oO c'est déjà plus sympa .... donc apparemment faut que je retouche la méthode de rafraîchissement ( refresh() )
néanmoins la vidéo ne marche que si j'utilise refresh() directement et non resfreshByTime() ...
bon j'est retoucher légèrement ma méthode resfesh()
je suis passer a 29/30 fps avec l'ancienne vidéo
je suis toujours a 16 fps avec la nouvelle vidéo
tu devrais reconnaitre ou c'est situer dans le code
avcodec_decode_video(videoCodecCtx, Frame, &frame, packet.data, packet.size); if(frame) { #if defined SDL_SUPPORT #elif defined IRRLICHT_SUPPORT img_convert((AVPicture *)FrameRGB, PIX_FMT_RGB555, (AVPicture*)Frame, videoCodecCtx->pix_fmt,width,height); #else img_convert((AVPicture *)FrameRGB, PIX_FMT_RGB32, (AVPicture*)Frame, videoCodecCtx->pix_fmt,width,height); #endif nFrm++; if(writeConsol) printf("> FRAME %d\n", nFrm); av_free_packet(&packet); } } else if(packet.stream_index==audioStream) { } else av_free_packet(&packet);
Dernière modification par Magun (15-12-2008 02:09:40)
Hors ligne
Bon, j'ai donc essayé ton archive. C'est plutôt bien codé. Par contre c'est fait avec CodeBloc, que je ne connais pas. En l'état, c'est par
défaut la version SDL, tout compile bien, et cela tourne. Lorsque je veut par contre compiler avec Irrlicht, c'est la catha, il y a toute une
partie de la conf du compilateur à adapter à mon système...
Donc, même si j'ai regardé, je n'ai pas pu approfondir pour le moment. Je verrais d'ici avant la fin de la semaine ou à défaut ce WE
pour me plonger dans CB pour essayer de faire tourner tout cela..
Hors ligne
ok merci;)
j'att avec impatience
je continue de voir se que je peut faire de mon coter mais je ne voie pas trop a par optimisée la lecture de la vidéo par ffmpeg, faire la synchronisation vidéo ou attaquer la gestion du sons :p
Hors ligne
bon alors jais du nouveau
il semblerais qu'il y avais un problème avec mon ancienne carte graphique que je viens de changer .... résultat l'image est très bien mais je reste a 15fps se pendant l'image est bien fluide contrairement a avens ( serais-ce aussi pars que je viens de faire une nouvelle vidéo ? )
mais il reste qu'elle que soucie notamment sous opengl ou je plafonne à 3fps ... pour une 6600gt
Hors ligne