14-12-2008 02:37:29
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 78.115.112.5
- Courriel Site web
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
irr::u32 *iBits = (irr::u32*)VImage->lock();
irr::u32 *tBits = (irr::u32*)VTexture->lock();
for(irr::u32 i = 0; i < VImage->getImageDataSizeInPixels()/sizeof(irr::u32); i++)
tBits[i] = iBits[i];
VTexture->unlock();
VImage->unlock();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
euh sinon je risque de me réveiller ver 1h donc attendez pas que je réponde avens
Hors ligne
14-12-2008 09:03:26
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 86.213.227.171
- Courriel
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...
Force et sagesse...
Hors ligne
14-12-2008 14:24:47
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 78.115.112.5
- Courriel Site web
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
irr::u32 *tBits = (irr::u32*)VTexture->lock();
for(irr::u32 j=0; j<VTexture->getSize().Height; j++)
for(irr::u32 i=0; i<VTexture->getSize().Width; i++)
{
tBits[j * VTexture->getSize().Width + i] = VImage->getPixel(i,j).color;
}
VTexture->unlock();Hors ligne
14-12-2008 16:02:59
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 90.56.19.240
- Courriel
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)
Force et sagesse...
Hors ligne
14-12-2008 18:16:45
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 78.115.112.5
- Courriel Site web
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
14-12-2008 19:02:29
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 90.56.19.240
- Courriel
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... ![]()
Force et sagesse...
Hors ligne
14-12-2008 20:06:22
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 78.115.112.5
- Courriel Site web
ok pour le code ![]()
j'est tester en utilisant sa :
irr::u32 texturePitch = VTexture->getPitch();
irr::s32 *tBits = (irr::s32*)VTexture->lock();
VImage->copyToScaling(
tBits,
VTexture->getSize().Width,
VTexture->getSize().Height,
VTexture->getColorFormat(),
texturePitch);
VTexture->unlock();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
14-12-2008 20:16:24
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 90.56.19.240
- Courriel
OK, je mate cela dès demain ![]()
Force et sagesse...
Hors ligne
14-12-2008 22:05:44
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 78.115.112.5
- Courriel Site web
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\
", nFrm);
av_free_packet(&packet);
}
}
else if(packet.stream_index==audioStream)
{
}
else
av_free_packet(&packet);Hors ligne
15-12-2008 17:44:01
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 92.130.10.18
- Courriel
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..
Force et sagesse...
Hors ligne
15-12-2008 18:00:37
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 78.115.112.5
- Courriel Site web
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
19-12-2008 01:35:13
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 88.139.194.125
- Courriel Site web
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



