|
Cortex-M4F и сжатие видео на ходу, Вомзожно ли |
|
|
|
 |
Ответов
|
Nov 26 2013, 20:38
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
для оценки можно взять циферки от блэкфина http://www.analog.com/en/dsp-software/bf_j...on-jpeg/sw.htmlи на 2, а то и на 3 помножить. jpeg - 50 блэкфиновских тактов на пиксель. 320*240*25 = 2МПикс/сек. то есть по хорошему кортексу надо бы 200-300МГц. с видео енкодерами с межкадровым сжатием (mpeg) всё еще хуже. можно конечно попробовать что-нибудь своё сгородить, тупо дельта кодирование или даже какой-нибудь простейший вэйвлет хаара (полусумма/полуразность, да еще и трехмерный, чтоб по времени) + энтропийное кодирование, но, имхо, если оно и влезет по быстродействию, сжатие будет не большое. да и с внешней памятью у STM32F4 через FSMC общение не самое быстрое, сколько там максимум, на 56МГц цикл шины? хотя у F429 есть и sdram контроллер и некие ухищрения в дма для графики, но не сильно это поможет.
|
|
|
|
|
Nov 27 2013, 05:21
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(_pv @ Nov 27 2013, 00:38)  да и с внешней памятью у STM32F4 через FSMC общение не самое быстрое, сколько там максимум, на 56МГц цикл шины? На 25fps поток выходит почти 4Мбайт/сек, а для 16-битной внешней SRAM выйдет почти 2Мслова в сек. При использовании DMA перегон данных туда-сюда не сильно грузит проц. Я как-то сравнивал: DMA2 гнал данные из DCMI (камера OV7725) в ЖК по FSMC. Так вот нагрузка на проц на 168Мгц вырастала всего лишь на 0.2% (под TNKernel). Межкадровое кодирование необязательно, хватит обычного MJPEG. Т.е. вы считаете, что не потянет? На каком проце лучше это поднять? Нужен аппаратный интерфейс для работы с камерой и ЖК, USB device и нормальная среда и библиотеки для сжатия видео по возможности.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Nov 27 2013, 08:37
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(Forger @ Nov 27 2013, 11:21)  На 25fps поток выходит почти 4Мбайт/сек, а для 16-битной внешней SRAM выйдет почти 2Мслова в сек. При использовании DMA перегон данных туда-сюда не сильно грузит проц. Межкадровое кодирование необязательно, хватит обычного MJPEG. Т.е. вы считаете, что не потянет? вопрос в том сколько раз туда-сюда данные надо будет гонять для сжатия видео в какой-нибудь mpeg. для jpegа да, только один раз прочитать надо в буфер на 8 строк, ну а 50 тактов на пиксель для блэкфина говорят о том что не потянет, кадров 10 в секунду, наверное, получится.
|
|
|
|
|
Nov 28 2013, 13:16
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(_pv @ Nov 27 2013, 12:37)  вопрос в том сколько раз туда-сюда данные надо будет гонять для сжатия видео в какой-нибудь mpeg. для jpegа да, только один раз прочитать надо в буфер на 8 строк, ну а 50 тактов на пиксель для блэкфина говорят о том что не потянет, кадров 10 в секунду, наверное, получится. Ради интереса я взял вот это довольно просто написанный JPEG-кодек: Jpegant. Убрал оттуда преобразование RGB->YCrCb (к счастью, хотя бы это камера OV7725 умеет делать сама). Осталось только DCT преобразование и huffman сжатие. Проц STM32F407VG на 168МГц, кроме как кодирование картинки он ничего не делает (ну крутится еще RTOS, но я ее тут не считаю). Изображение берется из внутренней ОЗУ, благо для хранения картинки 320x240x2байта его хватает. Оптимизация файлов кодека -O3 -Otime (Keil 4.72.10). Так вот. в пределе выходит 25fps. Ради интереса попробовал включить RGB->YCrCb преобразование, то fps резко упало до 15. Если покопаться в исходниках кодека и оптимизировать его под Cortex-M4F, то, я уверен, что fps можно еще поднять на несколько кадров. В принципе, вот весь код сжатия картинки: CODE huffman_start(240, 320); for (unsigned y = 0; y < (240-15); y += 16) { for (unsigned x = 0; x < (320-15); x += 16) { getBlock(x, y, 16, 16, (BGR*)RGB16x16)); // take picture block from IRAM /* // geting four 8x8 Y-blocks for (unsigned i = 0; i < 2; i++) for (unsigned j = 0; j < 2; j++) { for (unsigned r = 0; r < 8; r++) for (unsigned c = 0; c < 8; c++) { const unsigned rr = (i<<3) + r; const unsigned cc = (j<<3) + c;
Color red = RGB16x16[rr][cc].red; Color green = RGB16x16[rr][cc].green; Color blue = RGB16x16[rr][cc].blue; // converting RGB into Y (luminance) Y8x8[i][j][r][c] = RGB2Y(red, green, blue)-128; } } // getting subsampled Cb and Cr subsample(RGB16x16, Cb8x8, Cr8x8); */ // 1 Y-compression dct(Y8x8[0][0], Y8x8[0][0]); huffman_encode(HUFFMAN_CTX_Y, (short*)Y8x8[0][0]);
// 2 Y-compression dct(Y8x8[0][1], Y8x8[0][1]); huffman_encode(HUFFMAN_CTX_Y, (short*)Y8x8[0][1]); // 3 Y-compression dct(Y8x8[1][0], Y8x8[1][0]); huffman_encode(HUFFMAN_CTX_Y, (short*)Y8x8[1][0]); // 4 Y-compression dct(Y8x8[1][1], Y8x8[1][1]); huffman_encode(HUFFMAN_CTX_Y, (short*)Y8x8[1][1]); // Cb-compression dct(Cb8x8, Cb8x8); huffman_encode(HUFFMAN_CTX_Cb, (short*)Cb8x8); // Cr-compression dct(Cr8x8, Cr8x8); huffman_encode(HUFFMAN_CTX_Cr, (short*)Cr8x8);
} } huffman_stop();
Сообщение отредактировал IgorKossak - Nov 28 2013, 14:48
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Nov 28 2013, 13:30
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(Forger @ Nov 28 2013, 20:16)  Ради интереса я взял вот это довольно просто написанный JPEG-кодек: Jpegant. Так вот. в пределе выходит 25fps. Ради интереса попробовал включить RGB->YCrCb преобразование, то fps резко упало до 15. Если покопаться в исходниках кодека и оптимизировать его под Cortex-M4F, то, я уверен, что fps можно еще поднять на несколько кадров. отличный результат, значит для блэкфина jpeg, что дают AD, действительно довольно индусский и там, наверное, тоже есть что улучшить.
|
|
|
|
Сообщений в этой теме
Forger Cortex-M4F и сжатие видео на ходу Nov 26 2013, 17:46  jcxz Цитата(Forger @ Nov 27 2013, 11:21) На 25... Nov 27 2013, 05:53   Forger Цитата(jcxz @ Nov 27 2013, 09:53) По-моем... Nov 27 2013, 06:15    jcxz Цитата(Forger @ Nov 27 2013, 12:15) Почем... Nov 27 2013, 07:05     Forger Цитата(jcxz @ Nov 27 2013, 11:05) Потому,... Nov 27 2013, 11:14      Ozelot Цитата(Forger @ Nov 27 2013, 14:14) Сигна... Nov 27 2013, 11:46       Forger Цитата(Ozelot @ Nov 27 2013, 15:46) SSD19... Nov 27 2013, 12:37        _pv Цитата(Forger @ Nov 27 2013, 19:37) Навер... Nov 27 2013, 13:35  _pv Цитата(Forger @ Nov 27 2013, 11:21) На ка... Nov 27 2013, 12:25 Ozelot Может используйте сенсоры со встроеным JPEG-энкоде... Nov 27 2013, 07:20 yes у BF есть lqfp корпуса, есть индусский пример JPEG... Nov 27 2013, 13:40 Rst7 Я тут выкладывал когда-то JPEG-кодер, прилично опт... Nov 28 2013, 15:59 Forger Цитата(Rst7 @ Nov 28 2013, 19:59) Я тут в... Nov 28 2013, 16:02
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|