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

 
 
> 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
 
Start new topic
Ответов
wmakc
сообщение Aug 24 2010, 15:01
Сообщение #2


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

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



Если есть еще какие - то способы по улучшению быстродействия, или возможности ускорить jpeg, напишите, попробую реализовать.

Сейчас пытаюсь разобраться с матрицей mt9v136. В даташите написано, что на нее нужно подавать частоту 27 МГц, а эта частота считается из PLLA, как бы мне PLLA настроить так чтобы получить кратную 27? Понимаю, что возможно это просто, но до этого такой необходимости не было, поэтому еще не разобрался

Сообщение отредактировал wmakc - Aug 24 2010, 15:01
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


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

 


RSS Текстовая версия Сейчас: 9th August 2025 - 02:01
Рейтинг@Mail.ru


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