Цитата(andrex @ Nov 13 2009, 12:59)

Здравствуйте!
Для кодека MPEG нужно написать энтропийный (или VLC) декодер. Реализован будет на сигнальном процессоре.
1. Подскажите, какая есть литература по этому вопросу.
2. Кто занимался - может быть кратко выскажете свои соображения, как лучше реализовывать с точки зрения максимального быстродействия и с точки зрения минимальной памяти.
Насколько я понимаю, в любом случае выполняется движение по дереву в результате побитного сравнения.
Какие есть варианты обработки битов пачками? Какая наилучшая организация таблиц?
VLC удобнее и быстрее всего декодировать через таблицу. Где то в интырнете есть double table decoding... что то в этом духе кажется для MPEG4-2. Я когда то делал по этой статье или там даже где то были исходники таблиц - надо поискать.
Суть метода простая - вход в таблицу - т.е. индекс строки это кусок ваших бит - скажем штук 11.
Каждая строка имеет полей типа:
- сколько бит "используется"
- кодовые слова для этих бит - может быть 1 или даже 2
- флаг что вы декодировали кодовое слово или же что ваших 11 бит мало (типа что то длинное попалось) и тогда дается ссылка на таблицу второго уровня.
такой метод работает очень быстро - потому что вы вынимаете за обращение к памяти одно или два кодовых слова. И потребляет не так много памяти - потому что таблица двухуровневая и индексы не становятся магически огромными. Второй момент - то что редко (реже) встречается требует немного больше возни со вторым обращением к памяти, но на то оно и редко встречается.
для какого стандарта декодируете? потому что повторюсь для MPEG4-2 у меня оно должно быть где то в закромах.