|
|
  |
High Speed USB Cortex M0-M3 |
|
|
|
Jun 16 2011, 21:12
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sonycman @ Jun 16 2011, 22:25)  А можно пример использования? Для сжатия картинки? Да там просто все - вызвать encode(), указав откуда, куда, в каком формате и какого размера. С decode() аналогично. Цитата(sonycman @ Jun 16 2011, 22:25)  ЗЫ: "гнутые" - имеется ввиду GCC? А под ИАР долго затачивать, интересно? Пардон, хотел сказать GPL'ные. Обычный plain C, без каких-либо специфических фишек, даже не 99.
|
|
|
|
|
Jun 17 2011, 01:47
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(aaarrr @ Jun 17 2011, 01:12)  Да там просто все - вызвать encode(), указав откуда, куда, в каком формате и какого размера. С decode() аналогично. Это вот такие поддерживаются форматы на входе? Код #define FOUR_ZERO_ZERO 0 // Grey scale Y00 ... #define FOUR_TWO_ZERO 1 //Y00 Y01 Y10 Y11 Cb Cr #define FOUR_TWO_TWO 2 //Y00 Cb Y01 Cr #define FOUR_FOUR_FOUR 3 //Y00 Cb Cr Y01 Cb Cr Ну вот в каком формате, например, должна быть исходная картинка для функции: rgb24trPyuv420? Что значит Y00 Y01 Y10 Y11 Cb Cr? Тут понятно только, что 24 бита на пиксель, а дальше все эти Yxx...  Я бы понял, к примеру, такое описание: 24 бита на пиксель, сначала идёт красный (R, 8 бит), затем зелёный (G, 8 бит) и голубой (B, 8 бит). зы: а, наверное, там задаётся как входной, так и аыходной формат? Тогда всё понятно. Можно попробовать взять маленькую фотку размером, скажем, 150х150 пикселей в RGB24 и...
|
|
|
|
|
Jun 17 2011, 07:32
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sonycman @ Jun 17 2011, 05:47)  Ну вот в каком формате, например, должна быть исходная картинка для функции: rgb24trPyuv420? RGB24. Где что по компонентам - не помню, но вариантов всего два. Цитата(sonycman @ Jun 17 2011, 05:47)  Что значит Y00 Y01 Y10 Y11 Cb Cr? Y - яркостная составляющая, Cx - цветоразностные. Цитата(sonycman @ Jun 17 2011, 05:47)  Можно попробовать взять маленькую фотку размером, скажем, 150х150 пикселей в RGB24 и... Пример: Код int encode_img(int quality) { initLut(); if(quality <= 0) quality = 1; if(quality > 100) quality = 100; if(quality < 50) quality = 5000 / quality; else quality = 200 - quality * 2; quality = ((long)quality << 10) / 100L;
return encode_image(image, jpeg, quality, rgb24trPyuv422, 150, 150); } Вернет длину получившегося jpg.
|
|
|
|
|
Jun 17 2011, 21:53
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
Цитата(AHTOXA @ Jun 16 2011, 18:13)  Может у вас с частотой чего не того? Что-то совсем грустно получается  с клоком все ок. почему так мало я уже писал. Провел тест на mp3 декодере (от helix). В цикле 10 раз декодировал mp3-файл. Библиотечные функции не использовались. inline assembler в декодере не использовался (только intrinsics). Код на 3х компиллерах одинаков gcc -Werror -Wall -Wextra -mcpu=cortex-m3 -mthumb -O3 -fomit-frame-pointer -ffreestanding -fno-common -fwide-exec-charset=UTF-16LE -fshort-wchar -g 39 секобщий размер кода 196907armcc --thumb -O3 -Otime --cpu=Cortex-M3 --bss_threshold=0 --c99 --strict --wchar16 --diag_error=Warning 39 секобщий размер кода 181675iccarm -thumb --cpu Cortex-M3 --aapcs std --aeabi -Ohs -r -e 44 секобщий размер кода 166795самый красивый код судя по бегло просмотренным листингам инересных функций у RVCT. на размер кода особо не смотрите, линкеры rvct и iar повырезали некоторые неиспользуемые функции (mp3 это не касается) Стек GCC жрет больше, чем rvct. Скажем вся самая большая ветка от main к самой глубокой функции у gcc 650 байт, у rvct 624 байт. IAR прочесать не смог, какой-то не стандартный у него elf или я что-то протупил исходник,бинарки и пример использования (main.c) прилагаю. Если будете собирать - на всякие непонятные вам функции (типа svcCreateThread) забейте(убейте), интересно только то, что в цикле. Код пахал под моей осью, но системный таймер остановлен, других тредов не запущено,прерывания никакие не дергаются, тобышь весь алгоритм выполнялся линейно Будет возможность, проверьте плиз на NXP, или я позже проверю
|
|
|
|
|
Jun 18 2011, 18:59
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(brag @ Jun 18 2011, 01:53)  Будет возможность, проверьте плиз на NXP, или я позже проверю LPC1768, 100 MHz, IAR 6.20.3, High Optimization, Speed: 28,5 секунд, 311 фреймов * 10 циклов. Размер кода ~ 158022 байта.
|
|
|
|
|
Jul 15 2011, 21:57
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(brag @ Jun 17 2011, 23:53)  с клоком все ок. почему так мало я уже писал.
Провел тест на mp3 декодере (от helix). В цикле 10 раз декодировал mp3-файл. Библиотечные функции не использовались. inline assembler в декодере не использовался (только intrinsics). А вот кстати, в посте где-то на две страницы ранее увидел, что, якобы декодирование MP3 320kbps занимает на NXP 30%, SAM3U 50%, а STM32F - 100%. Хотелось бы стросить sonycman, проценты относительно к чему? То есть, как понимать, скажем, 100% загрузки? Я сделал тут WAV/MP3 плейер на SAM3U (96MHz) и померял осциллографом, сколько надо на декодирование одного фрейма MP3 320kbps (то есть, один вызов MP3Decode). Получалось от 9 до 11.5мс (чем "басее" звук, тем дольше). Как известно, результат вылетает в DAC за 26мс. То есть, с этой точки зрения загрузка менее 50% (проц. мог бы декодировать два полных фрейма, пока один проигрывается). Неужели STM32F нужно полные 26мс, чтобы сделать то же самое?!
Сообщение отредактировал KnightIgor - Jul 15 2011, 21:58
|
|
|
|
|
Jul 16 2011, 01:51
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(KnightIgor @ Jul 16 2011, 01:57)  А вот кстати, в посте где-то на две страницы ранее увидел, что, якобы декодирование MP3 320kbps занимает на NXP 30%, SAM3U 50%, а STM32F - 100%. Хотелось бы стросить sonycman, проценты относительно к чему? То есть, как понимать, скажем, 100% загрузки? Я приводил обобщённые данные загрузки для 320 kbps MP3, то, что видел на форумах. 100% для STM32 получилось со слов некоторых форумчан, сказали, что есть подтормаживания. Это говорит о 100% загрузке процессора. Но сам на практике STM32 в роли декодера не испытывал.
|
|
|
|
|
Jul 16 2011, 12:13
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(sonycman @ Jul 16 2011, 03:51)  Я приводил обобщённые данные загрузки для 320 kbps MP3, то, что видел на форумах. 100% для STM32 получилось со слов некоторых форумчан, сказали, что есть подтормаживания. Это говорит о 100% загрузке процессора. Но сам на практике STM32 в роли декодера не испытывал. Предполагаю, что тот, кто писал о подтормаживании, что-то неправильно в программе сделал. Перекину проект на STM32F103RC, расскажу. Пусть не в тему тут. Хотя упомянутый мной SAM3U4E на SAM3U-EDK я взял, чтобы разобраться как раз с HS USB.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|