Fixed SDL surface double free and unfreed surface with -n option

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2285 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
avolkov
2006-03-23 00:32:05 +00:00
parent 7586a57af5
commit 98c9163dfa
+13 -7
View File
@@ -321,7 +321,8 @@ static int drv_write(void)
png_structp png_ptr;
png_infop info_ptr;
SDL_Surface* cimg = NULL;
SDL_PixelFormat* fmt = outimg->format;
SDL_Surface* wimg = NULL;
SDL_PixelFormat* fmt;
png_bytep* lines = NULL;
int i;
@@ -330,17 +331,22 @@ static int drv_write(void)
mg_verbose(2, "Writing image to '%s'\n", outdev);
fmt = outimg->format;
if (fmt->BytesPerPixel != 3 ||
fmt->Rmask != PNG_R_MASK ||
fmt->Gmask != PNG_G_MASK ||
fmt->Bmask != PNG_B_MASK)
{
{ // convert the generated image to format suitable for libpng
cimg = SDL_CreateRGBSurface(SDL_SWSURFACE, outimg->w, outimg->h, 24,
PNG_R_MASK, PNG_G_MASK, PNG_B_MASK, 0);
if (!cimg)
return EXIT_FAILURE;
SDL_BlitSurface(outimg, NULL, cimg, NULL);
outimg = cimg;
wimg = cimg;
}
else
{ // use the generated image 'as is'
wimg = outimg;
}
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
@@ -365,14 +371,14 @@ static int drv_write(void)
return EXIT_FAILURE;
}
lines = calloc(outimg->h, sizeof(png_bytep));
lines = calloc(wimg->h, sizeof(png_bytep));
if (!lines)
return EXIT_FAILURE;
for (i = 0; i < outimg->h; ++i)
lines[i] = (Uint8*)outimg->pixels + i * outimg->pitch;
for (i = 0; i < wimg->h; ++i)
lines[i] = (Uint8*)wimg->pixels + i * wimg->pitch;
png_init_io(png_ptr, fout);
png_set_IHDR(png_ptr, info_ptr, outimg->w, outimg->h, 8,
png_set_IHDR(png_ptr, info_ptr, wimg->w, wimg->h, 8,
PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_DEFAULT,
PNG_FILTER_TYPE_BASE);