|
Использование Speex для сжатия речи, как заточить под свою платформу |
|
|
|
Sep 6 2007, 06:23
|
Группа: Новичок
Сообщений: 5
Регистрация: 31-10-06
Из: Челябинск
Пользователь №: 21 831

|
Имеется прекрасный Open Sourse проект Speex.Сжимает речь.Есть исходники.Под Windows получилось скомпилить и запустить,всё отлично работает.Теперь стоит задача использовать этот кодек на TMS320C28xx.Если я правильно понимаю,мне достаточно добавить все исходные файлы и библеотеки Speex в свой прект и всё будет работать?Если кто работал с этим кодеком поделитесь опытом.
|
|
|
|
|
Sep 6 2007, 06:49
|

Эксперт
    
Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183

|
Цитата(frag666 @ Sep 6 2007, 10:23)  Имеется прекрасный Open Sourse проект Speex.Сжимает речь.Есть исходники.Под Windows получилось скомпилить и запустить,всё отлично работает.Теперь стоит задача использовать этот кодек на TMS320C28xx.Если я правильно понимаю,мне достаточно добавить все исходные файлы и библеотеки Speex в свой прект и всё будет работать?Если кто работал с этим кодеком поделитесь опытом. Работать-то должно если типы данных окажутся соответствующими в файле speex_typedef.h Но оптимизацию-то по быстродействию if any придётся самому проводить. Код имеет варианты оптимизации для tms54x, tms55x, tms6x, BF53х, arm4, arm5... Но не для tms28х. Если нужно быстродействие подтягивать - лучше всего посмотреть, как это сделано для BF. Для наиболее критических модулей по быстродействию сделаны инлайновые ассемблерные вставки прямо в h-файлах. Нужно делать такие-же для тех -же модулей Прагмы ещё могут помочь
|
|
|
|
|
Sep 6 2007, 11:41
|
Группа: Новичок
Сообщений: 5
Регистрация: 31-10-06
Из: Челябинск
Пользователь №: 21 831

|
Спасибо. Попробую взять сорсы для С55 и переделать под С28.
|
|
|
|
|
Sep 7 2007, 03:45
|
Группа: Новичок
Сообщений: 5
Регистрация: 31-10-06
Из: Челябинск
Пользователь №: 21 831

|
Цитата(Itch @ Sep 6 2007, 20:51)  Надеюсь автор топика не обидится, если я здесь задам свой вопрос. Вобщем захотелось мне заиметь speex под BF531, но вот компилировать я его собираюсь с помощью VDSP, а не gcc. При этом студия ругается на ошибку С1101, не нравятся ей ассемблер в одном из файлов. Кто-нибудь преодолевал эту проблему? Поиск на [Speex-dev] ничего вразумительного не дал. Не обижусь.Мне интересно всё,что связано с Speex  .Такую же ошибку и мне выдал мой комилятор,когда я хотел скомпилировать проект для C55 под С28.Потом начал ковырятся в исходники и нашёл эту строку.Там всего одна иструкция на асме написана.Вот сейчас узнаю,что она делает.
|
|
|
|
|
Sep 7 2007, 07:26
|

Эксперт
    
Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183

|
Цитата(Itch @ Sep 6 2007, 21:51)  Надеюсь автор топика не обидится, если я здесь задам свой вопрос. Вобщем захотелось мне заиметь speex под BF531, но вот компилировать я его собираюсь с помощью VDSP, а не gcc. При этом студия ругается на ошибку С1101, не нравятся ей ассемблер в одном из файлов. Кто-нибудь преодолевал эту проблему? Поиск на [Speex-dev] ничего вразумительного не дал. Так у VDSP в отличие от gcc нет таких констрейнтов как "m", "W" другие буквы используются, другая конвенция http://gcc.gnu.org/onlinedocs/gcc/Simple-C...ple-ConstraintsОни ещё и машинно независимы, а значит не очень эффективны Препроцессор надо писать для подстановки :-) speex есть у AD в составе мультимедийного SDK. Нужно там смотреть подправили ли индусы констрейнты под VDSP
|
|
|
|
|
Sep 7 2007, 07:57
|
Местный
  
Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410

|
Сейчас нашел на сайте ADI описание этой проблемы: Цитата Using "n" asm constraint results in compiler error Prognosis: Fixed in Update 5.0 Base Release Using the "n" constraint in an inline asm results in a compiler error when compiling with the Blackfin VDSP++ compiler. The effect of the constraint should be to define a literal as an asm statement operand. The same effect can be achieved by using the literal directly in the asm statement template. So for example: asm("// %0 " : : "n"(256) : ); // fails to compile could be replaced by the following to workaround the problem: asm("// 256 " : : : ); Т.е. проблема вроде решена в VDSP 5.0. Я не шарю в ассемблере для BF, может кто-нибудь более опытный скажет, как например переписать следущий листинг: Код __asm__ ( "P0 = 15;\n\t" "R0 = %1;\n\t" "R1 = %2;\n\t" //"R0 = R0 + R1;\n\t" "R0 <<= 1;\n\t" "DIVS (R0, R1);\n\t" "LOOP divide%= LC0 = P0;\n\t" "LOOP_BEGIN divide%=;\n\t" "DIVQ (R0, R1);\n\t" "LOOP_END divide%=;\n\t" "R0 = R0.L;\n\t" "%0 = R0;\n\t" : "=m" (res) : "m" (a), "m" (bb) : "P0", "R0", "R1", "cc"); VDSP ругается здесь на строчку : "=m" (res)
|
|
|
|
|
Sep 7 2007, 08:19
|

Эксперт
    
Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183

|
Цитата(Itch @ Sep 7 2007, 11:57)  Сейчас нашел на сайте ADI описание этой проблемы: Т.е. проблема вроде решена в VDSP 5.0. Я не шарю в ассемблере для BF, может кто-нибудь более опытный скажет, как например переписать следущий листинг: Код __asm__ ( "P0 = 15;\n\t" "R0 = %1;\n\t" "R1 = %2;\n\t" //"R0 = R0 + R1;\n\t" "R0 <<= 1;\n\t" "DIVS (R0, R1);\n\t" "LOOP divide%= LC0 = P0;\n\t" "LOOP_BEGIN divide%=;\n\t" "DIVQ (R0, R1);\n\t" "LOOP_END divide%=;\n\t" "R0 = R0.L;\n\t" "%0 = R0;\n\t" : "=m" (res) : "m" (a), "m" (bb) : "P0", "R0", "R1", "cc"); VDSP ругается здесь на строчку : "=m" (res) Никак она не решена. Это просто разные вещи. Не работали константы - ну заработали Все буквы разные для VDSP и gcc и часто даже смыслы разные Для "m" надо писать "memory", если это временная переменная. Если входная или выходная - нужно переписывать на косвенную или индексную адресацию сам код ([%0]) меняя констрейнты на "a" А что писать для разных W или "1"? Практически это большая ручная работа - переписать эти ассемблерные вставки Кроме того этот код не очень эффективен, он не знает какие апаратные регистры использовать. Машинно-независимый ассемблер :-) Надо смотреть мультимедийный SDK, там или разгребли констрейнты Gcc или отключили эту оптимизацию нафик и пускают С-код - вполне возможно что по быстродействию оптимизирующий компилятор VDSP выиграет у "машинно-независимого ассемблера" gcc :-)
|
|
|
|
|
Sep 7 2007, 08:38
|
Местный
  
Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410

|
Цитата Надо смотреть мультимедийный SDK, там или разгребли констрейнты Gcc или отключили эту оптимизацию нафик и пускают С-код Ага, тоже вот думаю - нафиг этот асм, буду С пока использовать. Времени в обрез, надо проект делать, а уж потом разберемся (:
|
|
|
|
|
Sep 8 2007, 17:46
|
Местный
  
Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410

|
Скачал я этот SDK. Устанавливаться на студию июня 2006 года он отказывается, поэтому пришлось провести апгрейд до версии июля 2007. Встать то он встал, но вот студия перестала работать - на понравились ей старые лицензионные ключи  Так что пришлось довольствоваться только исходниками... Индусы похоже хлеб свой отрабатывают исправно, т.к. ассемблерные версии функций действительно были переписаны, все констрейнты в основном были заменены на "d". Правда кое-где остались "m", которые у меня на старой студии от 06.2006 не компилировались. В Readme к SDK пишут, что тестировали его на июльской версии, т.е. видимо от 2007г. Фиг с ними, с "m", остальные функции вроде работают нормально. Кстати Speex там старый, 1.1.9 от мая 2005г. Наконец то запустил я этот speex (: Сильно порадовало качество речи при режиме сжатия 0 ( 2400 kbps ) - речь можно понять без проблем, я думал будет намного хуже. Хотя еще надо смотреть, как это все будет при сильном внешнем шуме и т.п....
|
|
|
|
|
Sep 10 2007, 11:09
|

Эксперт
    
Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183

|
Цитата(Itch @ Sep 10 2007, 12:44)  Да, все-таки не работает оптимизация Speex под ассемблер Blackfin в VDSP. Кодек, который идет с Multimedia SDK при компиляции использует только #define FIXED_POINT. Если включить BFIN_ASM, то не компилируется даже под студией версии 4.5 от 07.2007. Будем ждать VDSP 5.0... Так и было в предыдущих версиях SDK. Причём не только констрейнты m не проходят. Там были явные ошибки с точки зрения VDSP. И в самих инструкциях, и в констрейнтах и с автоматической генерацией меток. Они потихоньку возятся, но оптимизацию при построении не включали никогда. Где-то встречалась цифра про 15 каналов SPEEX по быстродействию с оптимизацией BFIN_ASM. Это 30-35 мипс на канал вместе с их эхоподавителем. Для demo столько и не надо. И не факт, что с VDSP 5_0 эта проблема будет решаться С другой стороны, если понадобится кому реально speex, там не так много нужно исправить, ну не за день, конечно
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|