[Webkit-unassigned] [Bug 22108] REGRESSION: Animated gifs sometimes don't animate (wunderground.com weather radar)

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Fri Nov 21 14:01:28 PST 2008


https://bugs.webkit.org/show_bug.cgi?id=22108





------- Comment #22 from pkasting at google.com  2008-11-21 14:01 PDT -------
I'm looking at something like this on the Chromium side at the moment, though
it manifests a bit differently (looping images fail to loop).  I think the
underlying problem may be the same, but it's tricky to tell because the two
have different ImageSource implementations/interactions with the underlying
decoders.

The basic problem is that for large images, we destroy the decoder as we go,
and keep re-setting the data on it.  My concern is that important state like
the repetition count, or perhaps the frame count (?) is then basically
uninitialized, and BitmapImage can ask the source for it and get garbage,
leading to problems.

In Chromium's case, the underlying GIF decoder (available in the WebKit tree as
GIFImage[Decoder,Reader].cpp) has a repetitionCount() function that simply
returns the value of a member variable, which itself is not set unless we
happen to run across the repetition count extension block while decoding.  So
if we destroy the decoder, the value returned from this function can be wrong
for an arbitrary time.  I'm seeing cases where it is, in fact, wrong, and
BitmapImage erroneously believes the image loops once instead of looping
forever.

This doesn't explain the CG bug described here; I'm wondering if perhaps in
that case the frame count is wrong for the same reason, or something.  hyatt
isn't around to chime in and I can't see into the CG decoder's source.

There are possible fixes on the Chromium side, but all involve modifying the
decoder.  I can't add new functions to the CG decoder (and don't have a
reference to the existing set to see if I'd need to), so I'm not sure how best
to address this.


-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the webkit-unassigned mailing list