Индусский синдром в кодерстве

Dec 23, 2006 11:32

Этапиздец. Сорцы g729 кодека которые попали мне в руки оказались переработаными под фиксед поинт сорцами этого-же кодека под флоатинг поинт который в ITU-T можно получить бесплатно.

Суть переработки. Все флоат константы умножили на 32768 и округлили до целого. Все умножения-деления-сложения заменили на функции в контексте этой хуйни. Причем изладили всякие механизмы переполнений, NAN-ов и прочей педерастии вместо того чтобы переложить этот движняк на компилятор, уж с целыми числами то давно везде все в порядке. С типизацией и разрядностью не обсирайся и наслаждайся. Поменяли тип float на Word16 контекстной заменой. Ну и добавили табличных синусов-косинусов. И проебали на этом деле местами процентов 800 от производительности.

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

Стянул референцные сорцы, и по оригиналу и перепаханому говну строю нормальную реализацию...

ЗЫ: А ведь пропиертарный софт так написан весь... Сколько видел - все так...

ЗЗЫ: Заглянул внимательнее в сорцы 723 кодека который у меня нормально заработал. Точно та же хуйня...
Previous post Next post
Up