Pour afficher les frames de mon codec video fait "maison", j'utilise une fonction de blit de surface. De nombreux forums recommandent le blit de surface pour sa rapidité d'execution.
Je crée donc une surface temporaire, je la rempli avec les données "pixels", et je la blitte sur ma surface "screen", mais c'est tres lent ! environ 5 frames/secondes.
Voici un extrait de mon code - la fonction incluant le blit-, peut etre aurez vous des suggestion pour optimiser la vitesse d'execution ...
//screen = SDL_SetVideoMode(320, 240, 24, SDL_HWSURFACE | SDL_HWACCEL);
//tempKouky->kouky = SDL_CreateRGBSurface(SDL_HWSURFACE | SDL_HWACCEL,320,240,24,0xff0000, 0x00ff00, 0x0000ff, 0x000000);
//tempKouky->koukyData = new unsigned char[320*240*pitchh];
#
SDLKouky *renderKouky()
{
unsigned short pitchh=3;
for (map_y=crop;map_y<240/8-crop; map_y+=1)
{
for (map_x=crop;map_x<320/8-crop; map_x+=1)
{
for (j = 0; j < 8; j++)
{
for (i = 0; i < 8; i+=1)
{
tempKouky->koukyData[((j+8*map_y)*320 + (i+8*map_x))*pitchh+0] = palR[ 256*track + Tiles[ MEM_TILES*track + (64*Map[ 60000*2*track + 1200*(tps-1)+map_y*320/8+map_x])+(8*j+i) ] ];
tempKouky->koukyData[((j+8*map_y)*320 + (i+8*map_x))*pitchh+1] = palG[ 256*track + Tiles[ MEM_TILES*track + (64*Map[ 60000*2*track + 1200*(tps-1)+map_y*320/8+map_x])+(8*j+i) ] ];
tempKouky->koukyData[((j+8*map_y)*320 + (i+8*map_x))*pitchh+2] = palB[ 256*track + Tiles[ MEM_TILES*track + (64*Map[ 60000*2*track + 1200*(tps-1)+map_y*320/8+map_x])+(8*j+i) ] ];
}
}
}
}
tempKouky->kouky->pixels = tempKouky->koukyData;
SDL_Rect dest;
dest.x = crop*8;
dest.y = crop*8;
//futile?
dest.w = 320-2*crop*8;
dest.h = 240-2*crop*8;
//
SDL_Rect src;
src.x = crop*8;
src.y = crop*8;
src.w = 320-2*crop*8;
src.h = 240-2*crop*8;
SDL_BlitSurface(tempKouky->kouky, &src, screen, &dest);
}
#