Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Энтропийный декодер
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
andrex
Здравствуйте!

Для кодека MPEG нужно написать энтропийный (или VLC) декодер. Реализован будет на сигнальном процессоре.

1. Подскажите, какая есть литература по этому вопросу.

2. Кто занимался - может быть кратко выскажете свои соображения, как лучше реализовывать с точки зрения максимального быстродействия и с точки зрения минимальной памяти.
Насколько я понимаю, в любом случае выполняется движение по дереву в результате побитного сравнения.
Какие есть варианты обработки битов пачками? Какая наилучшая организация таблиц?
des00
Цитата(andrex @ Nov 13 2009, 02:59) *
Здравствуйте!

Для кодека MPEG нужно написать энтропийный (или VLC) декодер. Реализован будет на сигнальном процессоре.

1. Подскажите, какая есть литература по этому вопросу.

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


ндя, а в стандарте процедура кодирования не описана ? рефернсный декодер и другие декодеры в сорцах тоже не доступны для скачивания?
andrex
Цитата(des00 @ Nov 13 2009, 15:06) *
ндя, а в стандарте процедура кодирования не описана ? рефернсный декодер и другие декодеры в сорцах тоже не доступны для скачивания?

Все конечно же описано, и идея декодирования весьма проста, но интересуют именно пути реализации.
ryhor
Цитата(andrex @ Nov 13 2009, 12:59) *
Здравствуйте!

Для кодека MPEG нужно написать энтропийный (или VLC) декодер. Реализован будет на сигнальном процессоре.

1. Подскажите, какая есть литература по этому вопросу.

2. Кто занимался - может быть кратко выскажете свои соображения, как лучше реализовывать с точки зрения максимального быстродействия и с точки зрения минимальной памяти.
Насколько я понимаю, в любом случае выполняется движение по дереву в результате побитного сравнения.
Какие есть варианты обработки битов пачками? Какая наилучшая организация таблиц?


VLC удобнее и быстрее всего декодировать через таблицу. Где то в интырнете есть double table decoding... что то в этом духе кажется для MPEG4-2. Я когда то делал по этой статье или там даже где то были исходники таблиц - надо поискать.

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

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

для какого стандарта декодируете? потому что повторюсь для MPEG4-2 у меня оно должно быть где то в закромах.
andrex
Цитата(ryhor @ Nov 16 2009, 19:17) *
VLC удобнее и быстрее всего декодировать через таблицу. Где то в интырнете есть double table decoding... что то в этом духе кажется для MPEG4-2. Я когда то делал по этой статье или там даже где то были исходники таблиц - надо поискать.

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

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

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

Спасибо! Идея понятна, вроде бы так действительно выглядит оптимально.
У меня стандарт MPEG4. Если найдете код, буду признателен!
ryhor
Цитата(andrex @ Nov 17 2009, 14:47) *
Спасибо! Идея понятна, вроде бы так действительно выглядит оптимально.
У меня стандарт MPEG4. Если найдете код, буду признателен!



Значит обновили воспоминания smile.gif.
Это тестовая реализация mpeg4-2 от момусиса так сказать. Причем походу дела там был распил бабла класический - т.е. универы что "принимали" участие в написании стандарта слегка пользовали студентов для написания кода. В итоге я так сильно плевался глядя на декодер, что энкодер уже был написал самостоятельно и без пользования референсных, простите фекалий. Почему так грубо - потому что от референсного варианта ожидается если не качества реализации, то хотя бы понятность. Т.е. пусть люди не умеют программировать, но они знают что делает алгоритм или же пусть они хорошо программируют, но им не понятен алгоритм. Но когда оба пункта совмещаются своей худшей стороной и это называется референс реализация - это как бы никуда не годится.

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

Про декодер - посмотрите и сможете оценить масштабы бедствия. И это еще вычещеная часть - уже отделенная для дальнейшего "обогощения". Вот это обогощение и достанется вам в нагрузку smile.gif. Все что будет со словами "LMP1000" - это аппартно-зависимые вставки для делавшегося чипа. В кристалле были аппаратные ускорители, которые заменяли целые вычислительные блоки (аля DCT/iDCT).
В принципе вы можете найти где то в природе и незамутненую реализацию от MoMuSys - тут уж как вам будет удобне.

вам будут интересны файлы
vm_get_blk.c
vm_vlc_dec.c

и все что "к ним" / "от них" ведет.

Будут вопросы - задавайте, попробую еще что то вспомнить.
andrex
Цитата(ryhor @ Nov 18 2009, 06:42) *

Спасибо! Скоро начну изучать smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.