Пишу, по большей части, про историю, свою жизнь и немного про программирование.

33000 и анимированный GIF

По всей видимости, «Опера» немного неправильно обрабатывает анимированные «гифы».

Анимированный GIF устроен очень просто — поверх первого кадра через заданное время лепится следующий. Задержка задаётся в сотых долях секунды и, согласно спецификации, поля для её хранения имеет размер беззнаковое слово (2 байт), то есть максимальное значение — 655,35 секунд или почти 11 минут.

Распространённая ошибка в Си и похожих языках — использовать вместо беззнакового число со знаком. Тогда максимальное значение по модулю сокращается в два раза.

Вот я и проверил — не содержат ли кодеки популярных браузеров эту ошибку. На картике — число «1», если оно через пять-шесть минут сменится на «2», значит ошибки нет. Я выставил задержку между кадрами в 33000 (330 секунд или 5,5 минут). Кодек с ошибкой будет трактовать это число как -233 (отрицательное), поэтому кадр не сменится.

У меня на ноуте на FF 5, Safari 5.0.5, Chrome 12.0.742.122 цифра меняется, а на «Опере» 11.50 — нет. Сейчас попробую найти ноут с Windows 7 и попробую там. Попробуйте тоже на своих браузерах.

Добавлено: меняются ещё цифры на Андроиде 2.3.4, на FF 4.0.1 (Windows), а так же под Internet Explorer 9.0 и 10PP2 (Windows 7).

Добавлено ещё позднее: всё в порядке у «Оперы», разъяснил один из читателей — «Опера» начинает анимацию заново, если GIF не было видно. Дожидаясь, я переключал табы, поэтому анимация стартовала всегда сначала и «2» не появлялась. Так что ложная тревога, но любопытный факт.

14 комментариев
Максим Каленков (mkal.livejournal.com) 2011

У меня в опере (11.50) всё в порядке. Просто Опера хитрая и начинает анимацию сначала, если изображение целиком было скрыто (при скролинге или переходе в другую владку/окно).

Slava Matsnev (stacmv.net) 2011

FF3.6 — полет нормальный, IE7 — тоже.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для mkal.livejournal.com:

Просто Опера хитрая и начинает анимацию сначала, если изображение целиком было скрыто (при скролинге или переходе в другую владку/окно).

Сейчас попробую оттестить не перекрывая анимацию.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для mkal.livejournal.com:

Вы правы, анимация стартует заново, бага нет.

XAR (shmidt.net) 2011

Линуксовая RSS-читалка Akregator (отображение постов, насколько я понимаю, сделано на движке браузера Konqueror): циферка меняется.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для shmidt.net:

Похоже, всё-таки проблемы нет.

silent 2011

Linux + Chrome 12.0.742.112, цифра не меняется

Евгений Степанищев (bolknote.ru) 2011

Комментарий для silent:

Хм. А долго ждали? Вкладки не переключали?

silent 2011

Черт, не дочитал. Думал что 5 секунд задержка, а оказывается 5, извините :)
Цифра переключается.

Внутреннее Коралио (kalvado.livejournal.com) 2011

А вот совсем злобный вопрос — получается, что остальные , кроме оперы, крутят картинку и когда ее не видно? Отрисовывают окно, тратят процессор и т. п.?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для kalvado.livejournal.com:

Это второй мой шаг — попытаться это выяснить.

profiles.google.com/gaius.julius 2011

Комментарий для kalvado.livejournal.com:

Хром на линуксе, похоже не крутит. Ставить сложный эксперимент мне лень, но когда я вижу картинки с длинной анимацией, то при скрытии картинки за границы окна использование процессора падает (сложно блин заметить разницу в процент на фоне общего шума системы), а когда внезапно через какое-то время вытаскиваешь картинку обратно, можно заметить как она за доли секунды накатывает все пропущенные кадры. Вплоне разумное решение.

Получается, кстати, что в опере не будут работать базяваскриптовые часы (-:

SiMM (mr-simm.livejournal.com) 2011

А они все не системными библиотеками пользуются для отображения графики?

Константин 2011

Комментарий для kalvado.livejournal.com:

Отрисовывают окно, тратят процессор и т. п.?

Вряд ли. Карта времени (или как оно зовётся) переключений кадров известна, время начала показа тоже, высчитать какой кадр надо показать несложно.