Magic Lantern (ML) — неофициальная прошивка для фотоаппаратов Canon, которая обеспечивает повышенную функциональность (например, dual-iso, стекинг по фокусу, raw-видео, тонкая настройка параметров съемки и многое другое). Прошивка устанавливается непосредственно на flash-карту, что позволяет безболезненно удалить ее или обновить простой заменой файлов.
На хабре уже были публикации по данной прошивке, поэтому подробно расписывать преимущества и порядок установки я не буду. Расскажу, как попался на неявную и несмешную первоапрельскую шутку от разработчиков данной прошивки.
Все описанные действия производились с использованием камеры Canon 650D со стоковой (1.01) прошивкой.
28 марта. Началось все тогда, когда жажда исследования чего-то нового накопилась до критической массы и в сети была случайно обнаружена информация о возможности автоматической съемки фокус-стека на моем фотоаппарате. Но данные возможности требовали установки неофициальной прошивки Magic Lantern.
Быстрый поиск показал, что:
- текущая прошивка фотоаппарата не поддерживает текущие сборки ML;
- для модели 650D нет стабильной сборки, есть только ночные билды;
- некоторые функции ML в 650D не работают/работают криво;
- авторы предупреждают, что можно закирпичить фотоаппарат неверными действиями по прошивке.
После чего фотоаппарат был успешно перепрошит на последнюю официальную версию для Canon 650D 1.04. И строго по инструкции, со сбросом всех настроек и полным форматированием карты, был установлен последний ночной билд Magic Lantern (от 28 марта).
Глаза немного округлились от количества настроек. Были тут же опробованы dual-iso, стекинг по фокусу и некоторые другие возможности. Первые впечатления были сугубо положительные, хотя полученные результаты оставляли желать лучшего. Суммарное время первого знакомство ограничилось 4-мя часами, в течении которых не было ни каких замечаний по работе самого софта.
29 марта. Более детальное изучение прошивки показало, что можно еще снимать и raw-видео, а так же вышел новый билд ML. Новый билд был залит на карту (по неопытности был обновлен только каталог ML). Запись была опробована на фотоаппарате, но время поджимало и оценить качество на ПК в этот день не получилось. Наступил конец выходных.
1 апреля. С мыслями «я не буду экспериментировать сегодня» возвращаюсь с работы. Но любопытство сильнее меня.
Обновляю ML до последнего билда (тот же самый — от 29 марта, но теперь полным комплектом). Включаю. Начинаю настраивать… и ловлю BSOD на фотоаппарате.
Шок.
BSOD гласит, что произошла внутренняя ошибка номер 0x000000aa (в цифрах ошибки нет), много текста (дамп памяти готов, попробуйте сделать рестарт, проверьте настройки и т.п.) и «Your camera was breaked» (среди прочего).
Холодными пальцами делаю сброс через аккумулятор, как рекомендуют разработчик.
Включаю фотоаппарат и спустя две секунды после загрузки получаю тот же BSOD. F@#$%!
Нервничаю. Удаляю ML. Все работает в штатном режиме.
С мыслью, что во всем виноват кривой билд откатываюсь на версию от 28 марта (с которой просидел 4+ часа).
Запускаю. Все работает. Хорошо. Настраиваю фотик заново. Готовлюсь и погружению в изучение. BSOD! WTF?!
Сброс. BSOD через минуту. Форматирую. Переустанавливаю. Запускаю. BSOD. Шок.
Я спокоен. Фотоаппарат без ML работает в штатном режиме. C ML — регулярный рандомный BSOD (даже в простое при включенном фотоаппарате).
Поиски по ошибке не дают результатов. Вообще никаких. Пусто. Как будто я один с этим столкнулся. Иду на официальный форум. Регистрируюсь. Описываю проблему. Жду.
Достаточно быстро получаю несколько ответов:
- просьба снять видео с тем как это происходит (имхо, в данной ситуации бессмысленно);
- рекомендации следовать инструкциям на экране и загрузить результаты на форум (результаты? об успешной очередной перезагрузке по аккумулятору?);
- рекомендацию откатиться к билду от 11 марта, как самой стабильной версии на сегодняшний день;
- пару сообщений о подобных ошибках.
Стоп. Я не один такой. Проблема свежая, но точно когда она возникла сказать не могут.
Сначала решил просто откатить к 11 марта. Но переспав с этой мыслью решил копнуть глубже.
От 11 марта до 29 марта всего 10 билдов. Исходники доступны на bitbucked c полным (я надеюсь) changelog`ом билдов. Читаю логи изменений.
- 2015-03-12 — опции для дампа видео, мелкий тюнинг
- 2015-03-13 — рефакторинг, тюнинг, фиксы
- … много прочих изменений ...
- 2015-03-23 — работы с DOF
- 2015-03-25 — 80cee7a | Alex — Looks like some people didn't like my bad joke
Так-так… Начинает что-то проясняться. Читаю changeset. В файле «src/tweaks.c» нахожу:
struct tm now;
LoadCalendarFromRTC(&now);
joke_mode = (now.tm_mday == 1 && now.tm_mon == 3);
+ if (joke_mode)
+ {
+ msleep(1000);
+ joke_mode = display_idle();
+ }
и
+ if (joke_mode)
+ {
+ if (rand() % 1000 == 13 && !RECORDING)
+ {
+ extern void bsod();
+ bsod();
+ }
+ }
Что?! Режим шутки? Издеваетесь?
Поясняю: первого апреля (now.tm_mday == 1 && now.tm_mon == 3 (третий месяц становится четвертым при отсчете от ноля)) после загрузки ML прошивка начинает ежесекундно генерировать случайное число. Если это число равно 13 и в настоящий момент не производится запись (спасибо хотя бы на этом) — получите, распишитесь, Ваш BSOD. И так как уровень моей удачи был критически низким, мне удавалось словить BSOD раз 5 сразу после загрузки прошивки.
Сомнительная шутка, сомнительного содержания.
2 апреля. До рандомных BSOD осталось 364 дня.
PS: Привет разработчику Alex, который испортил вечер первого апреля, настроение и нервы. Было не смешно.
Автор: dmr