вторник, 16 августа 2011 г.

Боевой отладочный косинус

Операции с использованием размера буфера (копирование, перемещение, и т.п.) традиционно являются больным местом всех и всея и занимают почетные первый места в рейтинге самых распространённых багов 1, 2. Ну и мы как все. Редкий код взлетает без отладки подобных вещей.

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

Дальнейшие действия думаю понятны. Исследуемый код дополняется правильной инициализацией буферов, потом следуют обычные манипуляции, отладка которых и есть наша цель, ну по их завершению или в любой произвольно выбранной контрольной точке содержимое буфера скидывается в файл и анализируется (например глазами в Origin).

Пример весьма запущенного случая

Ну и как резюме сказанного кратко плюсы метода:
  • в буфере находится некие осмысленные данные, а не не инициализированный мусор или нули;
  • ошибки обрыва, наложения буферов хорошо видны при анализе в Origin;
  • возможна автоматизация поиска редких ошибок. Вычисляя значение производной возможно по резкому скачку определить место разрыва.

Из минусов можно отметить только прижившийся для этих целей Origin, еще то глюкало, которое ни как не хватает времени заменить самописным кодом на Python, например.

Update: Частично Origin можно заменить Kst.

пятница, 5 августа 2011 г.

Опенсоурса для мультиплексирования MPEG2 TS нет

Тоесть совсем никак. Вроде бы и задача с первого взгляда не ахти какая сложная, но увы и ах. Существующий в недрах gst-plugins-bad mpegtsmux и mpegtsdemux непригодены к использованию более чем польностью.
gst-launch -v --gst-debug-level=2 mpegtsmux name=mux ! filesink location=./test.ts filesrc location=./ts1.ts ! mpegtsdemux ! mux. filesrc location=./ts2.ts ! mpegtsdemux ! mux.
вываливается с ошибкой, ничего при это не делая. Господа из http://www.fluendo.com разродильсь собственным плагином к gstreamer'у. Брать тут https://core.fluendo.com/gstreamer/svn/ (правда любезно пролюбили из собственного же svn libtsmux, который нашелся только тут: https://launchpad.net/ubuntu/+source/libtsmux/0.3.0-1) Но, при этом
gst-launch -v --gst-debug-level=2 flutsmux name=mux ! filesink location=./test.ts filesrc location=./ts1.ts ! flutsdemux ! mux. filesrc location=./ts2.ts ! flutsdemux ! mux.
мультеплексирует все в однe программу, т.е. MPTS не умеет. Вычеркиваем. FFmpeg со своим мультиплексором от flutsmux ушел совсем недалеко, максимум что можно им сотворить - однопрограммный мультиплекс, с выбором из разных источников звука/видео. Есть правда загадочный TsRemux http://www.m2ts.org/util/tsremux http://forum.doom9.org/showthread.php?t=125447 писаный на C#, но по причине отсутсвия знакомства с этим самым # пришлось оставить его в стороне (хотя некоторые российские умельцы разобрались и похоже успешно его продают). UP: Обнаружен http://www.scara.com/~schirmer/o/mplex13818/, на сколько функционален, пока не проверялось. UPP: Функциональность mplex13818 вроде соответствует заявленной, но есть проблемы с воспроизведением полученного 2-х программного потока в VLC. Пока нет времени разбираться в причинах, но на всякий слкчай утащил к себе на github что бы не потерялось. Вообще если заработает как надо, было бы неплохо сделать из него полноценный плагин к gstreamer.

вторник, 1 марта 2011 г.

Точка роста

Похоже накопилась какая-то критическая масса опыта, позволяющая сделать качественный скачёк вперёд. Я имею ввиду технологии, или даже скорее инструментарий разработки. Git хорош, правда переворачивает мозг. В исполении github.com так вообще (пока) предел мечтаний; setup.py - весьма элегантно и ненапряжно для малых проектов. SCons после беглого знакомства вдохновляет отказатся от этой тяжеловесной мути Autotools & Co. Где подвох?

пятница, 22 октября 2010 г.

Главное - чистота и порядок!

Возвращаюсь. Буду писать (надеюсь) всякие мелочи, возникающие по ходу. Вот сегодня вспоминал, и не вспомнил :). Нашлось в гугле естественно.

Для того, чтобы всякое нестандартное не расползалось по системе есть CheckInstall. Просто и надежно, например:
sudo checkinstall make install_package