--- libmng_data.h.orig 2007-04-20 10:41:58.000000000 +0200 | |
+++ libmng_data.h 2007-07-14 00:00:00.000000000 +0200 | |
@@ -658,6 +658,9 @@ | |
mng_int32 iFrameclipb; | |
mng_uint32 iNextdelay; /* delay *after* next image */ | |
+ | |
+ mng_bool bForcedelay; | |
+ mng_uint32 iAccumdelay; | |
#endif | |
#ifndef MNG_SKIPCHUNK_SHOW | |
--- libmng_display.c.orig 2007-04-20 10:41:58.000000000 +0200 | |
+++ libmng_display.c 2007-07-14 00:00:00.000000000 +0200 | |
@@ -384,8 +384,9 @@ | |
{ | |
#ifndef MNG_SKIPCHUNK_FRAM | |
- if (pData->iFramedelay > 0) /* real delay ? */ | |
+ if (pData->iFramedelay > 0 || pData->bForcedelay) /* real delay ? */ | |
{ /* let the app refresh first ? */ | |
+ pData->bForcedelay = MNG_FALSE; | |
if ((pData->bRunning) && (!pData->bSkipping) && | |
(pData->iUpdatetop < pData->iUpdatebottom) && (pData->iUpdateleft < pData->iUpdateright)) | |
if (!pData->fRefresh (((mng_handle)pData), | |
@@ -455,6 +456,7 @@ | |
pData->iFrametime = pData->iFrametime + iWaitfor; | |
/* setup for next delay */ | |
pData->iFramedelay = pData->iNextdelay; | |
+ pData->iAccumdelay += pData->iFramedelay; | |
#endif | |
} | |
@@ -3340,6 +3342,9 @@ | |
MNG_TRACE (pData, MNG_FN_PROCESS_DISPLAY_MEND, MNG_LC_START); | |
#endif | |
+ pData->bForcedelay = pData->iAccumdelay ? MNG_FALSE : MNG_TRUE; | |
+ pData->iAccumdelay = 0; | |
+ | |
#ifdef MNG_SUPPORT_DYNAMICMNG | |
if (pData->bStopafterseek) /* need to stop after this ? */ | |
{ | |
--- libmng_hlapi.c.orig 2007-07-06 18:23:04.000000000 +0200 | |
+++ libmng_hlapi.c 2007-07-14 00:00:00.000000000 +0200 | |
@@ -446,6 +446,9 @@ | |
pData->iFrameclipb = 0; | |
pData->iNextdelay = 1; | |
+ | |
+ pData->bForcedelay = MNG_FALSE; | |
+ pData->iAccumdelay = 0; | |
#endif | |
#ifndef MNG_SKIPCHUNK_SHOW | |
@@ -1737,6 +1740,9 @@ | |
pData->iFrameclipb = 0; | |
pData->iNextdelay = 1; | |
+ | |
+ pData->bForcedelay = MNG_FALSE; | |
+ pData->iAccumdelay = 0; | |
#endif | |
#ifndef MNG_SKIPCHUNK_SHOW |