Re: seeking for help on MNG creation
Sven Neumann <[email protected]> 31 Mar 2004 13:42:20 +0200
| Newsgroups | gmane.comp.graphics.mng.general |
|---|---|
| Message-ID | <[email protected]> |
Hi,
after some more reading of the spec, I came to the same conclusion
about the clipping coordinates as you suggested. Doing this change
seems to create a MNG file that crashes gmngview and mngtree :(
I checked with valgrind and gdb and it seems that I got my clipping
rectangle right since the code actually tries to render something and
crashes in these routines:
Starting program: /usr/local/bin/mngtree heart-opt.mng
Program received signal SIGSEGV, Segmentation fault.
0x40136c73 in mallopt () from /lib/tls/libc.so.6
(gdb) bt
#0 0x40136c73 in mallopt () from /lib/tls/libc.so.6
#1 0xffff583a in ?? ()
#2 0x40133ffe in _IO_do_write () from /lib/tls/libc.so.6
#3 0x40135aa0 in free () from /lib/tls/libc.so.6
#4 0x401f9aa0 in __after_morecore_hook () from /lib/tls/libc.so.6
#5 0x0804e3e8 in ?? ()
#6 0x40061150 in __DTOR_END__ () from /usr/local/lib/libmng.so.1
#7 0x00000001 in ?? ()
#8 0x0804a180 in ?? ()
#9 0x40041366 in mng_process_display_past (pData=0x804a180, iTargetid=3,
iTargettype=0 '\0', iTargetx=0, iTargety=0, iCount=1, pSources=0x804eb58)
at libmng_display.c:5607
#10 0x4002aea0 in mng_read_past (pData=0x804a180, pHeader=0xbffff4b8,
iRawlen=41, pRawdata=0x804b504 "", ppChunk=0xbffff154)
at libmng_chunk_io.c:3792
#11 0x4005dd0d in process_raw_chunk (pData=0x804a180, pBuf=0x804b504 "",
iBuflen=41) at libmng_read.c:400
#12 0x4005e0b2 in read_chunk (pData=0x804a180) at libmng_read.c:552
#13 0x4005e3ff in mng_read_graphic (pData=0x804a180) at libmng_read.c:690
#14 0x40042cab in mng_read (hHandle=0x804a180) at libmng_hlapi.c:1584
#15 0x08048a1b in dumptree ()
#16 0x08048b70 in myclosestream ()
(gdb) up 9
#9 0x40041366 in mng_process_display_past (pData=0x804a180, iTargetid=3,
iTargettype=0 '\0', iTargetx=0, iTargety=0, iCount=1, pSources=0x804eb58)
at libmng_display.c:5607
5607 MNG_FREEX (pData, pData->pWorkrow, (pTargetimg->pImgbuf->iRowsize << 1))
(gdb) info locals
iTargetrowsize = 40
pBuf = 0x804d090
iSourceYinc = 1
iSourcerowsize = 210
bSourceRGBA16 = 0 '\0'
iTargetsamples = 10
bTargetRGBA16 = 0 '\0'
iSourceY = 1075813024
iSourcesamples = 70
iTargetY = 11
pData = 0x804e3e8
iTargetid = 3
iTargettype = 0 '\0'
iRetcode = 0
pTargetimg = 0x804de88
pSourceimg = 0x401f9aa0
pSource = 0x804eb7c
iX = 1
(gdb) p pData->pWorkrow
$1 = 0x0
(gdb) p pTargetimg->pImgbuf->iRowsize
$2 = 40
valgrind isn't very happy neither and reports the following:
==8511== Invalid write of size 1
==8511== at 0x3C060884: mng_retrieve_rgb8 (libmng_pixels.c:2377)
==8511== by 0x3C05358F: mng_process_display_past (libmng_display.c:5560)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511== by 0x3C0724F8: process_raw_chunk (libmng_read.c:400)
==8511== Address 0x3C2DEA5C is 0 bytes after a block of size 80 alloc'd
==8511== at 0x3C021C03: calloc (vg_replace_malloc.c:141)
==8511== by 0x8048B38: myalloc (in /usr/local/bin/mngtree)
==8511== by 0x3C0530AC: mng_process_display_past (libmng_display.c:5278)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511==
==8511== Invalid write of size 1
==8511== at 0x3C06088A: mng_retrieve_rgb8 (libmng_pixels.c:2378)
==8511== by 0x3C05358F: mng_process_display_past (libmng_display.c:5560)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511== by 0x3C0724F8: process_raw_chunk (libmng_read.c:400)
==8511== Address 0x3C2DEA5D is 1 bytes after a block of size 80 alloc'd
==8511== at 0x3C021C03: calloc (vg_replace_malloc.c:141)
==8511== by 0x8048B38: myalloc (in /usr/local/bin/mngtree)
==8511== by 0x3C0530AC: mng_process_display_past (libmng_display.c:5278)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511==
==8511== Invalid write of size 1
==8511== at 0x3C060894: mng_retrieve_rgb8 (libmng_pixels.c:2380)
==8511== by 0x3C05358F: mng_process_display_past (libmng_display.c:5560)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511== by 0x3C0724F8: process_raw_chunk (libmng_read.c:400)
==8511== Address 0x3C2DEA5F is 3 bytes after a block of size 80 alloc'd
==8511== at 0x3C021C03: calloc (vg_replace_malloc.c:141)
==8511== by 0x8048B38: myalloc (in /usr/local/bin/mngtree)
==8511== by 0x3C0530AC: mng_process_display_past (libmng_display.c:5278)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511==
==8511== Invalid write of size 1
==8511== at 0x3C060898: mng_retrieve_rgb8 (libmng_pixels.c:2379)
==8511== by 0x3C05358F: mng_process_display_past (libmng_display.c:5560)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511== by 0x3C0724F8: process_raw_chunk (libmng_read.c:400)
==8511== Address 0x3C2DEA5E is 2 bytes after a block of size 80 alloc'd
==8511== at 0x3C021C03: calloc (vg_replace_malloc.c:141)
==8511== by 0x8048B38: myalloc (in /usr/local/bin/mngtree)
==8511== by 0x3C0530AC: mng_process_display_past (libmng_display.c:5278)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511==
==8511== Invalid read of size 1
==8511== at 0x3C04C540: mng_correct_gamma_only (libmng_cms.c:529)
==8511== by 0x3C053688: mng_process_display_past (libmng_display.c:5568)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511== by 0x3C0724F8: process_raw_chunk (libmng_read.c:400)
==8511== Address 0x3C2DEA5C is 0 bytes after a block of size 80 alloc'd
==8511== at 0x3C021C03: calloc (vg_replace_malloc.c:141)
==8511== by 0x8048B38: myalloc (in /usr/local/bin/mngtree)
==8511== by 0x3C0530AC: mng_process_display_past (libmng_display.c:5278)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511==
==8511== Invalid write of size 1
==8511== at 0x3C04C54C: mng_correct_gamma_only (libmng_cms.c:529)
==8511== by 0x3C053688: mng_process_display_past (libmng_display.c:5568)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511== by 0x3C0724F8: process_raw_chunk (libmng_read.c:400)
==8511== Address 0x3C2DEA5C is 0 bytes after a block of size 80 alloc'd
==8511== at 0x3C021C03: calloc (vg_replace_malloc.c:141)
==8511== by 0x8048B38: myalloc (in /usr/local/bin/mngtree)
==8511== by 0x3C0530AC: mng_process_display_past (libmng_display.c:5278)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511==
==8511== Invalid read of size 1
==8511== at 0x3C04C54E: mng_correct_gamma_only (libmng_cms.c:530)
==8511== by 0x3C053688: mng_process_display_past (libmng_display.c:5568)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511== by 0x3C0724F8: process_raw_chunk (libmng_read.c:400)
==8511== Address 0x3C2DEA5D is 1 bytes after a block of size 80 alloc'd
==8511== at 0x3C021C03: calloc (vg_replace_malloc.c:141)
==8511== by 0x8048B38: myalloc (in /usr/local/bin/mngtree)
==8511== by 0x3C0530AC: mng_process_display_past (libmng_display.c:5278)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511==
==8511== Invalid write of size 1
==8511== at 0x3C04C55A: mng_correct_gamma_only (libmng_cms.c:530)
==8511== by 0x3C053688: mng_process_display_past (libmng_display.c:5568)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511== by 0x3C0724F8: process_raw_chunk (libmng_read.c:400)
==8511== Address 0x3C2DEA5D is 1 bytes after a block of size 80 alloc'd
==8511== at 0x3C021C03: calloc (vg_replace_malloc.c:141)
==8511== by 0x8048B38: myalloc (in /usr/local/bin/mngtree)
==8511== by 0x3C0530AC: mng_process_display_past (libmng_display.c:5278)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511==
==8511== Invalid read of size 1
==8511== at 0x3C04C55D: mng_correct_gamma_only (libmng_cms.c:531)
==8511== by 0x3C053688: mng_process_display_past (libmng_display.c:5568)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511== by 0x3C0724F8: process_raw_chunk (libmng_read.c:400)
==8511== Address 0x3C2DEA5E is 2 bytes after a block of size 80 alloc'd
==8511== at 0x3C021C03: calloc (vg_replace_malloc.c:141)
==8511== by 0x8048B38: myalloc (in /usr/local/bin/mngtree)
==8511== by 0x3C0530AC: mng_process_display_past (libmng_display.c:5278)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511==
==8511== Invalid write of size 1
==8511== at 0x3C04C569: mng_correct_gamma_only (libmng_cms.c:531)
==8511== by 0x3C053688: mng_process_display_past (libmng_display.c:5568)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511== by 0x3C0724F8: process_raw_chunk (libmng_read.c:400)
==8511== Address 0x3C2DEA5E is 2 bytes after a block of size 80 alloc'd
==8511== at 0x3C021C03: calloc (vg_replace_malloc.c:141)
==8511== by 0x8048B38: myalloc (in /usr/local/bin/mngtree)
==8511== by 0x3C0530AC: mng_process_display_past (libmng_display.c:5278)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511==
==8511== Invalid read of size 4
==8511== at 0x3C0706D0: mng_tile_rgba8 (libmng_pixels.c:15732)
==8511== by 0x3C053671: mng_process_display_past (libmng_display.c:5574)
==8511== by 0x3C038EFE: mng_read_past (libmng_chunk_io.c:3792)
==8511== by 0x3C0724F8: process_raw_chunk (libmng_read.c:400)
==8511== Address 0x3C2DEAFC is not stack'd, malloc'd or free'd
I managed to work around these problems with the following rather
arbitrary change. But I don't think it's the right fix:
Index: libmng_display.c
===================================================================
RCS file: /cvsroot/libmng/libmng-devel/libmng_display.c,v
retrieving revision 1.21.2.22
diff -u -p -r1.21.2.22 libmng_display.c
--- libmng_display.c 24 Sep 2002 11:21:35 -0000 1.21.2.22
+++ libmng_display.c 31 Mar 2004 10:58:06 -0000
@@ -5275,8 +5275,8 @@ mng_retcode mng_process_display_past (mn
pTargetimg->iPastx = pData->iPastx;
pTargetimg->iPasty = pData->iPasty;
/* get temporary work-buffers */
- MNG_ALLOC (pData, pData->pRGBArow, (pTargetimg->pImgbuf->iRowsize << 1))
- MNG_ALLOC (pData, pData->pWorkrow, (pTargetimg->pImgbuf->iRowsize << 1))
+ MNG_ALLOC (pData, pData->pRGBArow, (pTargetimg->pImgbuf->iRowsize << 3))
+ MNG_ALLOC (pData, pData->pWorkrow, (pTargetimg->pImgbuf->iRowsize << 3))
/* address destination for row-routines */
pData->pStoreobj = (mng_objectp)pTargetimg;
pData->pStorebuf = (mng_objectp)pTargetimg->pImgbuf;
After doing this change, the crash is gone, valgrind is happy. The
animation of the windows looks good but I am missing the background
image. I checked the unoptimized heart.mng again and the background is
gone there as well. I suspect this is because I updated from
libmng-1.0.5 as shipped with Debian to the version I checked out from
CVS. I will investigate this further...
Sven
--
Send the message body "help" to [email protected]