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» не появлялась. Так что ложная тревога, но любопытый факт.
13 июля 2011 20:11

Максим Каленков (mkal.livejournal.com)
13 июля 2011, 21:17

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

Slava Matsnev (stacmv.net)
13 июля 2011, 21:59

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

bolk (bolknote.ru)
13 июля 2011, 22:08, ответ предназначен Максим Каленков (mkal.livejournal.com):

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

bolk (bolknote.ru)
13 июля 2011, 22:19, ответ предназначен Максим Каленков (mkal.livejournal.com):

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

XAR (shmidt.net)
13 июля 2011, 23:26

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

bolk (bolknote.ru)
13 июля 2011, 23:40, ответ предназначен XAR (shmidt.net):

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

silent (инкогнито)
14 июля 2011, 00:06

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

bolk (bolknote.ru)
14 июля 2011, 00:12, ответ предназначен silent

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

silent (инкогнито)
14 июля 2011, 00:43

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

Внутреннее Коралио (kalvado.livejournal.com)
14 июля 2011, 01:38

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

bolk (bolknote.ru)
14 июля 2011, 01:47, ответ предназначен Внутреннее Коралио (kalvado.livejournal.com):

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

http://profiles.google.com/gaius.julius (инкогнито)
14 июля 2011, 09:48, ответ предназначен Внутреннее Коралио (kalvado.livejournal.com):

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

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

SiMM (mr-simm.livejournal.com)
14 июля 2011, 10:18

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

Константин (инкогнито)
14 июля 2011, 17:50, ответ предназначен Внутреннее Коралио (kalvado.livejournal.com):

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

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)