Исходные тексты прошивки canon eos

    Многие, наверное, уже слышали, что на днях была взломана внутренняя сеть компании Canon и в числе прочего в сеть «утёк» кусок ядра исходных текстов прошивки камер серии EOS, который я имею честь экскюзивно опубликовать на суд общественности.

    /*
        CANON D-SLR cameras core routine
        Property of CANON INC. 1998-2010
        
        v 1.0 made by Radja Tokamoto Goines
        v 1.1 made by Dugwin Yakioto jr.
        
        last changes: 10.11.2009
    */

    #include <stdlib.h>
    #include <math.h>
    #include <time.h>

    #include "inc/tweakfocus.h"
    #include "inc/radja_filters.h"


    bool do_focus(lens, camera) {
        double fp;
        time_t t;

        t = init_focus_timer(t);
        
        do {
            fp = measure_focus_point(lens);
            move_focus(lens, fp)

            if (timeout(t))
                return false;

        } while (!lens.is_focused());
        
        if (!L_LensDetected(lens))
            lens.adjust_focus(rand(10));
            
        return true;
    }

    rawdata * scandata(matrix, lens, camera) {
        rawdata *cr;
        double noise, aberrations;

        cr = create_cr(matrix);
        
        read_exif_info(cr->exif, lens, camera);

        prepare_everything(matrix, lens, camera);
        
        if (!do_focus(lens, camera))
            return NULL;
        else
            beep();
          
        aberrations = pow(100 - lens.focallength, 2) * sqrt(2) + 10;

        if (L_LensDetected(lens))
            aberrations /= 2.0;
          
        scan_sensor(cr, matrix, aberrations);

        noise = matrix.iso / 100.0;
        noise *= matrix.cropfactor;

        if (camera.model == EOS1000D) {
            noise *= 1.2;
            wait_for_something();
        }

        if (camera.model != EOS7D)
            wait_for_something();
        
        if (lens.manufacture != CANON_LENS) {
            corrupt_something(cr);
            apply_random_filter(cr);
        }
        
        if (lens.model == EF_50_F1_4) {
            noise /= 1.2;
            apply_fcb(cr); //fucken cool bokeh
        }
        
        if (lens.model == CANON_L_17_40_F4) {
            blur(cr, 0.8);
            distort(cr, 40 - lens.focallength);
        }
          
        radja_filter(cr, 1.570796326794896619231321691641); //don't touch that!

        if (is_eos1d_series(camera.model))
            disable_all_spoiling(cr);
        else
            make_nice_colors(cr);

        // finally...
        apply_noise(cr, noise);
        
        apply_barrel_distortion(cr, lens);
        apply_pillow_distortion(cr, lens);
        
        return cr;
    }


    P.S. Авторство моё.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 114

      +1
      Как- уж очень высокоуровнево )):
      do {
      fp = measure_focus_point(lens);
      move_focus(lens, fp)
      } while (!lens.is_focused());

      Видимо самое интересное ниже немного
        +3
        ой, этож юмор, не вчитался )) смишно
          +8
          тсс ;)
        +22
        Феерический бред
          +5
          Посмеялся. Спасибо :)
            +2
            А как залить эту прошивку в EOS1000D?
            :)
              +3
              if (camera.model == EOS1000D) {
              noise *= 1.2;
              wait_for_something();
              }
            +9
            radja_filter(cr, 1.570796326794896619231321691641);
            очень улыбнуло
              +1
              «radja_filters.h», труЪ индусы.)))
                –1
                Не успел написать :)))
                Я под столом)))))))))))))))
                Самое главное — //don't touch that! :))))))))))))))))
                  0
                  Да, don't touch that! — это изюминка :-)
                    0
                    стаааренькая же шутка. просто сам так писал сто раз, так что имею право считать и своей ;)

                    где-то была подборка комментариев из программ смешных, там и веселее было )
                      +1
                      Признаться честно, я вобще сначала подумал, что это настоящий кусок кода. Поэтому было вдвойне весело.

                      Спасибо, отличная шутка.
                  0
                  Половина Пи, я думаю проще было бы написать «M_PI/2.0f»…
                    0
                    а там не совсем пи, not_ice подсказывает ниже, тест на внимательность ;)
                    +1
                    инсайдер из Никона передает, что в 15 символе опечатка )
                      +1
                      я думал так и не заметит никто.

                      зачёт автоматом, но лекции продолжайте посещать ;)
                    +6
                    if (L_LensDetected(lens))
                         aberrations /= 2.0;
                    Убило =)
                      –1
                      о, первый кэнонист ;)
                        0
                        Да не, я, как и многие, люблю нефотографировать, евпочя.
                          +3
                          +9
                          убило это
                          if (lens.model == EF_50_F1_4) {
                          noise /= 1.2;
                          apply_fcb(cr); //fucken cool bokeh
                          }
                            –2
                            потому что так оно и есть :-)
                              +1
                              Хорошее стеклышко :)))
                                0
                                Только вот не уверен что уменьшение уровня шума здесь имеет место быть… вот искаженим я бы константу присвоил, что-то около нуля ;-)
                                  0
                                  Да, меня это тоже больше всего улыбнуло)
                                +1
                                Это хорошо, это очень хорошо! Особенно про не-кэноновское стекло и 1000D ;-)
                                  +2
                                  спасибо. к сожалению довольно специфичный текст, надо малость уметь читать исходники (тут отпадают фотографы) и понимать в линейке стёкол/камер canon — тут отпадает большинство программеров ;) но я смотрю, в сумме даже большинству нравится, ура.
                                    +2
                                    Я, абсолютно не зная си, смог от души посмеяться…
                                    Тут чуть чуть знания английского языка достаточно :)
                                      0
                                      А я уж было понадеялся, что сейчас понапишут кучу сторонних прошивок ))
                                      Но бывают люди, знающие области, так что немало забавностей в коде можно найти )
                                        –1
                                        просто шутка, просто шутка, не знаю чего столько народу так кипятится :)
                                          0
                                          Просто все надеялись заполучить заветные исходники :)))
                                        +1
                                        А я программист и люблю фотографию, есть даже «говнозеркалка» Canon 500D ^)
                                        Да уверен не мало таких найдётся :)

                                          0
                                          нормальная вроде зеркалка
                                          0
                                          Ну я наверное тот редкий случай, когда и то, и то ;-) (но фотография это все же хобби, живу я программированием).
                                        +7
                                        else beep

                                        молодец, автор ))
                                          0
                                          Комменты к коду как всегда жгут =)
                                            –10
                                            автор никонист штоле?
                                              0
                                              ноу
                                                –7
                                                то есть типа здоровая ирония? нуну
                                                  0
                                                  поясните, пожалуйста, о чём вы?
                                                    –3
                                                    а вы?
                                                      –2
                                                      дабы некоторые не считали троллингом, скажу ширше.
                                                      этот «какбы код» вполне понятен. и айрони тоже.

                                                      но все-таки место этому в разделе юмор на хабре, а подобное можно написать про _любую_ цифрозеркалку/незеркалку.

                                                      кроме того, если руки из жопы, то и начинаешь и на производителей пенять и на стекла и на матрицы и на все что угодно, а товарищ мой до сих пор шедевры делает на 350д и кит. вопрос в профессионализме и умении.

                                                      так что peace, bro.
                                                        0
                                                        а уже почти сочли ;)

                                                        в блог юмор рискнул не постить потому что там бы это было слишком очевидно, лёгкий момент провокации никому ещё не мешал

                                                        тут как бы собраны суеверия, блуждающие по сети, кто бы спорил. часть из них именно суеверия, с частью я вполне согласен.

                                                        я на 400д снмаю и менять тоже не намерен, ссылка на шедевры друга была бы интересной.

                                                        peace, peace…
                                                          0
                                                          pachini.ru
                                                          +2
                                                          согласен с тем, что в юмор бы лучше перенести
                                                  0
                                                  вот сразу понятно что сейчас все болеют цифрозеркалками, раз даже юмор идет такой специфический =)
                                                  а так да, смешно, стеб над кэнон =)
                                                    +8
                                                    if (camera.model == EOS1000D) {
                                                    noise *= 1.2;
                                                    wait_for_something();

                                                    черт, только сегодня собрался её покупать :)
                                                      0
                                                      нууу..., я даже специально предварительно уточнил, она правда чуть медленнее, но это всё-таки шутка ;)
                                                        0
                                                        Да читал я обзоры, знаю :)
                                                        Спасибо за поднятое настроение и пример, как надо писать код, чтоб его смысл поняли даже те, кто не знаком с языком :)
                                                        0
                                                        ну я вот купил. нормальная камера. :)
                                                          0
                                                          Я тоже вчера купил :)
                                                            0
                                                            с китовым объективом?

                                                            я теперь сижу и мучаюсь, какое бы стекло взять. Китовое уже как-то не удовлетворяет :)
                                                              0
                                                              Посмотрел на Canon EF-S 55-250, судя по отзывам, за такие деньги самый нормальный вариант.
                                                                0
                                                                читайте исходники! canon 50mm f/1.4! ;)
                                                                если серьёзно, то я первый год снимал только им, китовое не покупал
                                                                  0
                                                                  Хочется что то более длиннофокусное, да подешевле ;)
                                                                    0
                                                                    ну если именно более длинно, то 75-300 неплохой и дешёвый телек
                                                                      0
                                                                      о как… спасибо… И за canon 50mm тоже спасибо, почитал, буду брать потом
                                                                        0
                                                                        50mm есть f/1.8 он сделан не так качественно, но тоже вроде очень неплохое стекло, стоит зааметно дешевле
                                                        –11
                                                        Лопата какая-то, а не юмор…
                                                          +44
                                                          добавил Вам кармы, буду ждать Ваших постов :)
                                                          +3
                                                          > if (!lens.manufacture == CANON_LENS) {

                                                          Что-то мне подсказывает, что тут должно быть (!(lens.manufacture == CANON_LENS)). Или я совсем забыл плюсы…
                                                            +6
                                                            ойблин… ну индусы чё с них взять ;)

                                                            вообще бы конечно "!=" туда надо, пожалуй исправлю
                                                            +1
                                                            А вообще смешно :)
                                                              –2
                                                              А можно еще и с переводом, а то не программист.
                                                                +2
                                                                чтобы понять этот код программистом быть не обязательно :)
                                                                –1
                                                                смешно, наверное, только владельцам камер… я кроме как ошибок в коде ничего не вижу :(…
                                                                  0
                                                                  можно подробности? хотелось написать аккуратно, хотя, конечно, особенно вылизыванием синтаксиса не занимался. но всё-таки?

                                                                  и, да, надо немного знать линейку eos чтобы было забавно, поэтому в блоге dslr и опубликовано
                                                                    +2
                                                                    Насколько я понял это c, либо c++. Я уже правда давно не программирую на с++, но
                                                                    1. Объявление переменных без инициализации в плюсах карается сильно.
                                                                    2. Забыта точка с запятой после move_focus(lens, fp).
                                                                    3. Параметры в методах (функциях) вроде как должны иметь типы (я же ничего не путаю?).
                                                                    4. Ну и смутила сильно конструкция time_t t; t = init_focus_timer(t); Зачем передавать не про инициализированную переменную t, когда ее же потом возвратом и инициализируешь.

                                                                    Я прочел только первую функцию и пошел в комментарии, где и прочел что это шутка.

                                                                    По поводу блока dslr — просто топик на главную попал.

                                                                    А вообще, вы молодец, юмор — это полезное лекарство от гриппа ;)
                                                                      +1
                                                                      хмблин, спасибо ;) хорошо не все такие внимательные.

                                                                      разве что параметры в методах специально без типа, было бы много букв и несимпатично, остальное косяки, ага.
                                                                        +2
                                                                        Зануды на моем Хабре?!
                                                                    –1
                                                                    wait_for_something() — че ждать хватай да беги )))
                                                                    • UFO just landed and posted this here
                                                                        +2
                                                                        тьфу, чуть не купился… но взгляд пал на строчку lens.adjust_focus(rand(10)); и
                                                                        решил перечитать код. в общем спасибо, весело =)
                                                                          0
                                                                          Кэнон умеет ещё и производителя стекла определять, до чего техника дошла…
                                                                            +1
                                                                            Да может, если у стекла есть внутрений микропроцесор.
                                                                              0
                                                                              (а он почти всегда есть)
                                                                              0
                                                                              Практически всегда. Если стекло Canon'овское то посмотрите EXIF — там даже модель прописана. И чужие стекла он тоже на раз определяет ;)
                                                                              +1
                                                                              Если это C, то что значит !lens.is_focused()?

                                                                              Если это C++, то где объявления типов в заголовках функций? ;)
                                                                                0
                                                                                первое не понял (ну вернёт она нолик?)

                                                                                а второе намеренно не указал, слишком много было бы букв, показалось несимпатично ;)
                                                                                  +1
                                                                                  Просто если в C тип параметра не указан, он считается int'ом :-)
                                                                                    +2
                                                                                    в сях просто нету классов и методов у структур, правда никто не мешает положить в структуру указатель на функцию и вызвать по нему
                                                                                      0
                                                                                      Это ж не просто си, а Canon C :)

                                                                                      Могли бы и автоматизировать функции внутри структур.
                                                                                  +5
                                                                                  Отличный кусок юмора — чуть было не купился :)

                                                                                  PS. лучше всего было в пятницу все-таки
                                                                                    +1
                                                                                    а в пятницу никто не купился бы, да и к чему эти стереотипы
                                                                                    +1
                                                                                    Это все фигня. Есть такие фотоаппараты Olympus E-серии. В них два разьема под карточки — родной олимпусовский (XDCAM, по-моему) и общепринятый Compact Flash. При этом некоторые функции камеры (например, съемка панорам) недоступны, если Вы снимаете на не-олимпусовскую карточку. Это при том, что Compact Flash и быстрее, и дешевле, и объемней! Вот в олимпусах, кусок прошивки, блокирующий фичи при чужих карточках, было бы очень интересно почитать.
                                                                                      –2
                                                                                      ну глядишь кто-то вдохновится и украдёт прошивку олимпусов ;) только как бы она на паскале не оказалась, например
                                                                                        +1
                                                                                        А что вы имеете против паскаля? На любом языке можно написать как нормальный код, так и «быдлокод»
                                                                                          0
                                                                                          прошивку я бы на нём писать не стал, но и не люблю я его с детства, в школе пичкали…
                                                                                            0
                                                                                            брейнфакс в массы, для написание прошивок =)
                                                                                              0
                                                                                              дык, велкам ;) непочатый край ж
                                                                                                0
                                                                                                а что? вариант! прошивки можно даже под GPL делать. Все равно нифига не понятно.
                                                                                                  0
                                                                                                  Боюсь, да же понимающий, подумает прежде, чем там что то менять
                                                                                            +2
                                                                                            Ага… Ох уж эти XD карты…
                                                                                            Кроме этого их ставить нужно только оригинальные :( К каждой карте еще шел специальный код, которым нужно разблокировать некоторые функции из программы Olympus Master, такие как создание панорам, 3d фотографии и что то там еще…
                                                                                              0
                                                                                              Неправда, фичи не блокируются. Просто софтинка родная будет работать (читай — клеить панорамы и прочее) только если ей предварительно скормить серийник, идущий с xD-карточкой.
                                                                                              +1
                                                                                              Хотел сначала написать что этот код не будет компилироваться, но только прочитав комментарии понял, что это шутка.

                                                                                              В следующий раз буду внимательнее читать теги.
                                                                                                0
                                                                                                Спасибо, замечательно =))))
                                                                                                  0
                                                                                                  corrupt_something(cr);
                                                                                                  apply_random_filter(cr)
                                                                                                  Гениально, посмеялся от души!
                                                                                                    0
                                                                                                    Спасибо, отлично подняло настроение.
                                                                                                    Понравилось:
                                                                                                    if (lens.manufacture != CANON_LENS) {
                                                                                                    corrupt_something(cr);
                                                                                                    apply_random_filter(cr);
                                                                                                    }
                                                                                                      0
                                                                                                      Спасибо :-)
                                                                                                        +6
                                                                                                        Тишина в офисе… Усталый Тимлид нервно курит одну за другой сигареты, скроля мышкой страницу Хабра. Вглядываясь в незнакомый язык, но понимая что там их код, в уме ставит галочки и приоритеты, пытая понять, как этот код ушел в билды…
                                                                                                        Завтра будет нервный день… Завтра начнут присылать патчи…
                                                                                                          +1
                                                                                                          noise = matrix.iso / Ха;- горькая правда :(
                                                                                                            0
                                                                                                            Выходит у линеек 300..500D и 10..50D уровень шумов как у семерки?
                                                                                                            Ну тогда я спокоен, значит мой аппарат менять не стоит…
                                                                                                            А вообще зачет. Спасибо! Поднял настроение! ;)
                                                                                                              –1
                                                                                                              Ходят слухи, что там что-то от матрицы зависит, именно в 7. В смысле сигнал от матрицы тоже влияет на результат, не только прошивка ;)
                                                                                                                0
                                                                                                                По моему опыту у 300-500 уровень шума примерно одинаков, у 10-20-30 ниже но тоже одинаков, у 40 еще ниже, полтинником не снимал, но утверждают что у него шумы выше чем у 40 из-за мегапиксельности. 7 не снимал, ничего сказать не могу.
                                                                                                                +4
                                                                                                                Когда читал, думал «вот это кенон облажались не на шутку». К середине чтения исходника даже глаза на лоб полезли от возмущения. Но хорошо, что всё благополучно закончилось ))
                                                                                                                  0
                                                                                                                  хаха, жесть

                                                                                                                  radja_filter(cr, 1.570796326794896619231321691641); //don't touch that!
                                                                                                                    0
                                                                                                                    Спасибо, поржал :) Особенно порадовало это: if (lens.manufacture != CANON_LENS) {
                                                                                                                    corrupt_something(cr);
                                                                                                                    apply_random_filter(cr);
                                                                                                                      –1
                                                                                                                      а ведь я тоже иногда так пишу :)))
                                                                                                                      Спасибо, повеселили.
                                                                                                                        0
                                                                                                                        А я сначала поверил даже )) Поржал от души ))))
                                                                                                                          0
                                                                                                                          Повеселило с утра :)
                                                                                                                            0
                                                                                                                            make_nice_colors(cr) напомнило старое, доброе MakePizdato
                                                                                                                              0
                                                                                                                              Имена кодеров сразу намекнули на подвох =) Спасибо за улыбку.
                                                                                                                                0
                                                                                                                                Честно говоря нефига не понял…

                                                                                                                                Only users with full accounts can post comments. Log in, please.