реклама на сайте
подробности

 
 
> jpeg на at91sam9g20, скорость сжатия
wmakc
сообщение Aug 21 2010, 14:20
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 111
Регистрация: 2-03-10
Пользователь №: 55 768



Делаю jpeg кодер для сжатия raw картинки с матрицы mt9d131. Картинка сжимается примерно за 3 секунды. Для такого контроллера это нормально?

С помощью встроенного таймера пробовал измерять время на различных этапах сжатия. Около 400 милисекунд уходит на копирование буфера картинки. Как я понял очень много времени уходит на операции в памяти.
Код
for(i=0; i<614400; i++)
{
     data[i] = Buffer[i];
}

Картинка около 600 килобайт. Пробовал напрямую использовать буфер(Buffer), в который ISI интерфейс записывает картинку, но во время сжатия были искажения цветов, тоесть там что-то с обращением.



Еще много времени уходит на квантование:
CODE

void fdct_and_quantization(SBYTE *data,float *fdtbl,SWORD *outdata)
{
int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
int tmp10, tmp11, tmp12, tmp13;
int z1, z2, z3, z4, z5, z11, z13;
int *dataptr;
int datafloat[64];
int temp;
SBYTE ctr;
BYTE i;
for (i=0; i<64; i++)
datafloat[i] = data[i];

dataptr=datafloat;
for (ctr = 7; ctr >= 0; ctr--)
{
tmp0 = dataptr[0] + dataptr[7];
tmp7 = dataptr[0] - dataptr[7];
tmp1 = dataptr[1] + dataptr[6];
tmp6 = dataptr[1] - dataptr[6];
tmp2 = dataptr[2] + dataptr[5];
tmp5 = dataptr[2] - dataptr[5];
tmp3 = dataptr[3] + dataptr[4];
tmp4 = dataptr[3] - dataptr[4];

/* Even part */

tmp10 = tmp0 + tmp3; /* phase 2 */
tmp13 = tmp0 - tmp3;
tmp11 = tmp1 + tmp2;
tmp12 = tmp1 - tmp2;

dataptr[0] = tmp10 + tmp11; /* phase 3 */
dataptr[4] = tmp10 - tmp11;

z1 = (tmp12 + tmp13) * (0.707106781); /* c4 */
dataptr[2] = tmp13 + z1; /* phase 5 */
dataptr[6] = tmp13 - z1;

/* Odd part */

tmp10 = tmp4 + tmp5; /* phase 2 */
tmp11 = tmp5 + tmp6;
tmp12 = tmp6 + tmp7;

/* The rotator is modified from fig 4-8 to avoid extra negations. */
z5 = (tmp10 - tmp12) * (0.382683433); /* c6 */
z2 = ( 0.541196100) * tmp10 + z5; /* c2-c6 */
z4 = ( 1.306562965) * tmp12 + z5; /* c2+c6 */
z3 = tmp11 * ( 0.707106781); /* c4 */

z11 = tmp7 + z3; /* phase 5 */
z13 = tmp7 - z3;

dataptr[5] = z13 + z2; /* phase 6 */
dataptr[3] = z13 - z2;
dataptr[1] = z11 + z4;
dataptr[7] = z11 - z4;

dataptr += 8; /* advance pointer to next row */
}

dataptr = datafloat;
for (ctr = 7; ctr >= 0; ctr--)
{
tmp0 = dataptr[0] + dataptr[56];
tmp7 = dataptr[0] - dataptr[56];
tmp1 = dataptr[8] + dataptr[48];
tmp6 = dataptr[8] - dataptr[48];
tmp2 = dataptr[16] + dataptr[40];
tmp5 = dataptr[16] - dataptr[40];
tmp3 = dataptr[24] + dataptr[32];
tmp4 = dataptr[24] - dataptr[32];

/* Even part */

tmp10 = tmp0 + tmp3; /* phase 2 */
tmp13 = tmp0 - tmp3;
tmp11 = tmp1 + tmp2;
tmp12 = tmp1 - tmp2;

dataptr[0] = tmp10 + tmp11; /* phase 3 */
dataptr[32] = tmp10 - tmp11;

z1 = (tmp12 + tmp13) * ( 0.707106781); /* c4 */
dataptr[16] = tmp13 + z1; /* phase 5 */
dataptr[48] = tmp13 - z1;

/* Odd part */

tmp10 = tmp4 + tmp5; /* phase 2 */
tmp11 = tmp5 + tmp6;
tmp12 = tmp6 + tmp7;

/* The rotator is modified from fig 4-8 to avoid extra negations. */
z5 = (tmp10 - tmp12) * ( 0.382683433); /* c6 */
z2 = ( 0.541196100) * tmp10 + z5; /* c2-c6 */
z4 = ( 1.306562965) * tmp12 + z5; /* c2+c6 */
z3 = tmp11 * ( 0.707106781); /* c4 */

z11 = tmp7 + z3; /* phase 5 */
z13 = tmp7 - z3;

dataptr[40] = z13 + z2; /* phase 6 */
dataptr[24] = z13 - z2;
dataptr[8] = z11 + z4;
dataptr[56] = z11 - z4;

dataptr++; /* advance pointer to next column */
}

for (i = 0; i < 64; i++)
{
/* Apply the quantization and scaling factor */
outdata[i] = datafloat[i] * fdtbl[i];
}
}


После замены у всех переменных типа float на int скорость сжатия возросла в 3 раза.

В общем вопросы по порядку:
1. Как быстро скопировать переменную в памяти( или использовать буфер isi интерфейса без порчи картинки)
2. Ускорить функцию квантования(Хотел бы разместить часть переменных в sram( она же быстрее sdram?))

Сообщение отредактировал aaarrr - Aug 21 2010, 16:33
Причина редактирования: Оформление цитаты исходника
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- wmakc   jpeg на at91sam9g20   Aug 21 2010, 14:20
- - aaarrr   Цитата(wmakc @ Aug 21 2010, 18:20) Картин...   Aug 21 2010, 16:43
- - AlexandrY   Реальное быстродействие памяти у микроконтроллеров...   Aug 21 2010, 17:03
|- - aaarrr   Цитата(AlexandrY @ Aug 21 2010, 21:03) Дл...   Aug 21 2010, 17:15
|- - AlexandrY   Цитата(aaarrr @ Aug 21 2010, 20:15) Еще к...   Aug 21 2010, 20:14
|- - aaarrr   Цитата(AlexandrY @ Aug 22 2010, 00:14) Ла...   Aug 21 2010, 20:27
|- - AlexandrY   Цитата(aaarrr @ Aug 21 2010, 23:27) И я п...   Aug 21 2010, 21:41
|- - AlexandrY   Ну вот протестировал. Результат здесь: http://eewi...   Aug 22 2010, 10:52
- - wmakc   объясните как с помощью memcpy скопировать из char...   Aug 22 2010, 05:16
|- - aaarrr   Цитата(wmakc @ Aug 22 2010, 09:16) объясн...   Aug 22 2010, 05:45
- - wmakc   Хотелось бы по подробнее узнать как создать Transl...   Aug 22 2010, 07:04
|- - aaarrr   Цитата(wmakc @ Aug 22 2010, 11:04) Хотело...   Aug 22 2010, 07:23
- - wmakc   Тогда мне интересно узнать загрузчик at91bootstrap...   Aug 22 2010, 07:32
- - aaarrr   Нет, он только включает ICache.   Aug 22 2010, 07:41
- - wmakc   Как только добавил сссылку на sram в scatter файл ...   Aug 22 2010, 07:59
- - aaarrr   Значит переменных нет (как вариант, они могли быть...   Aug 22 2010, 08:04
- - wmakc   CODE void InitMMU(unsigned int *pTranslationTable...   Aug 22 2010, 09:01
|- - aaarrr   Цитата(wmakc @ Aug 22 2010, 13:01) В чем ...   Aug 22 2010, 09:15
- - wmakc   Пробовал в sdram, результата не дало   Aug 22 2010, 10:34
- - wmakc   Как использовать memcpy для копирования из массива...   Aug 22 2010, 11:26
|- - AlexandrY   Цитата(wmakc @ Aug 22 2010, 14:26) Как ис...   Aug 22 2010, 11:48
- - wmakc   Да я вроде как новичек, так что если перенесут, то...   Aug 22 2010, 15:13
- - aaarrr   Цитата(wmakc @ Aug 22 2010, 14:34) Пробов...   Aug 22 2010, 16:21
- - wmakc   указал в качестве адреса pTranslationTable указать...   Aug 22 2010, 16:57
- - aaarrr   Перед инициализацией MMU следует запретить и инвал...   Aug 22 2010, 17:42
- - etoja   Цитата(wmakc @ Aug 21 2010, 18:20) Делаю ...   Aug 23 2010, 07:39
- - aaarrr   Цитата(etoja @ Aug 23 2010, 11:39) Нормал...   Aug 23 2010, 13:16
- - wmakc   картинка 640 на 480, цветная. Хотелось бы чтобы за...   Aug 23 2010, 16:54
|- - aaarrr   Цитата(wmakc @ Aug 23 2010, 20:54) ...дум...   Aug 23 2010, 17:08
- - andrewlekar   Да и 3 секунды для такой картинки это много. У мен...   Aug 24 2010, 04:40
|- - etoja   Камера mt9d131 может выдавать картинку сразу в фор...   Aug 24 2010, 06:54
- - wmakc   Цитата(etoja @ Aug 24 2010, 10:54) Камера...   Aug 24 2010, 10:55
- - wmakc   Если есть еще какие - то способы по улучшению быст...   Aug 24 2010, 15:01


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 17:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01532 секунд с 7
ELECTRONIX ©2004-2016