Статистика
Время:
Зарегистрированных: 86206
Последним зарегистрирован: Robert_675
Рекорд посещаемости: 12585
Групп пользователей: 4
 Группы:
[Admin] [Cоучастник] [Автор] [Модератор]
 Сейчас на сайте
 Всего: 396
 Гостей: 383
 Анонимных: 1
 Пользователей: 12
 Зарегистрированные:
-Mike- Robert_675 kc2010 syava Werewolf telecom White maniac Nanrik revisor Allexsuss kira-yamato
Forum Rules Внимание!

Внимание! Перед тем как создавать тему на форуме, воспользуйтесь поиском! Пользователь создавший тему, которая уже была, будет немедленно забанен! Читайте правила названия тем. Пользователи создавшие тему с непонятными заголовками, к примеру: "Помогите, Схема, Резистор, Хелп и т.п." также будут заблокированны навсегда. Пользователь создавший тему не по разделу форума будет немедленно забанен! Уважайте форум, и вас также будут уважать!

Страницы: (6) 1 [2] 3 4 5 6  ( Перейти к первому непрочитанному сообщению ) Ответить Новая тема Новый опрос

> Мультимедиа-плеер с OLED-дисплеем, на STM32F407
Gospodin_Riba
Сообщение: # 763921   Jan 16 2018, 12:52 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




QUOTE (vladlen @ Jan 12 2018, 11:58 AM)
Видео из первого сообщения кто-нибудь скачивал, смотрел?

Что-то хотел посмотреть, а там хрень какая-то с изображением.
Может это только у меня так?

Использую вот такую программу: https://mpc-hc.org/
Никаких кодеков дополнительно не ставил вообще!

Windows Media Player фтопку... wc.gif

Присоединённое изображение
Присоединённое изображение


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
  Сообщение: # 763923   Jan 16 2018, 12:59 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




Нашёл опенсорцную реализацию MP4:
http://www.cnblogs.com/mcodec/category/213433.html
Китайцы выручили!!! smile.gif

За основу взял проект под VC и переписал его под DJGPP.
Для тех, кто не знает что такое DJGPP - сюда:
http://pmg.org.ru/gamedev/djgpp.htm

Собралось отлично, адаптировал под кадр 160x128 (и менее), добавил конверсию цветов в RGB и немного системщины! 1_7.gif

Версия DJGPP: DJGPP Version 2.03
http://www.delorie.com/djgpp/

Выкладываю исходники с мейком, готовый бинарник и видео-данные (файл 0.264).
Распаковать папку и запустить exe-файл.

Это сообщение отредактировал Gospodin_Riba - Jan 16 2018, 01:07 PM

Присоединённый файл ( Кол-во скачиваний: 180 )
Присоединённый файл  h264_djgpp.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 763925   Jan 16 2018, 01:06 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




Конвертирвать любое видео в сырой поток H264 такими командами:
CODE

ffmpeg -i 0.mp4 -s 160x128 -r 12 -c:v rawvideo -pix_fmt yuv420p -qscale:v 0 -an 160.yuv
x264.exe --bitrate 320 --fps 12 -o 160.264 160.yuv 160x128


Вначале первой программой препарируем и распаковываем исходное видео, получая разжатые кадры в YUV-формате.

Затем второй программой жмём видео в сырой H264 поток.

Используемое ядро кодека: x264 core:65 r1074 - далеко не новое, последние версии дают не декодируемый поток.

Прикладываю архив x264.exe и батник для авто-конверсии:

Присоединённый файл ( Кол-во скачиваний: 168 )
Присоединённый файл  x264.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 763927   Jan 16 2018, 01:13 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




Статистика программы по куче:
CODE

Total Bytes: 245264

Размер потребляемой кучи (heap) зависит от размера кадра и опций декодирования.

Видно, что данная версия декодера H264 при разрешении 160x128 не сможет работать на микроконтролллере STM32F407, потому что недостаточно оперативной памяти - есть два фрагментированных куска: 128 + 64 кБ. Проверил на практике: при переполнении кучи память не выделяется и возвращает NULL.

Дополнительно, декодер хочет 4 кБ стека, при 3 кБ программа уже аварийно завершается.

Полная статистика по куче аттаче:

Это сообщение отредактировал Gospodin_Riba - Jan 16 2018, 01:14 PM

Присоединённый файл ( Кол-во скачиваний: 212 )
Присоединённый файл  heap.txt


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
  Сообщение: # 763929   Jan 16 2018, 01:23 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




Тем не менее, я заставил работать H264 декодер на STM32F407, уменьшив размер кадра до 48x48 пикселей и при выключенном энтропийном кодировании (CABAC) biggrin.gif

Размер потребляемой кучи уже впритык. При размере кадра 64x64 уже глюки в кадрах из-за перетирания кучи.

В стартапе Кейла установлены такие значения кучи, стека:

CODE

;------------------------------------ STACK 4KB minimum !!!
Stack_Mem         EQU     0x10000000
Stack_Size        EQU     0x00001000
__initial_sp      EQU     Stack_Mem+Stack_Size-4
;------------------------------------

;------------------------------------ HEAP 128 KB maximum as possible !!!
Heap_Mem      EQU     0x20000000
Heap_Size     EQU     0x00020000
__heap_base   EQU     Heap_Mem
__heap_limit  EQU     Heap_Mem+Heap_Size-4
;------------------------------------


Ну и сегмент данных начинается с 0x10001000 и имеет размер 60 кБ ровно.

Ну и сорцы + проект работающего декодера H264 + показ кадров. shades.gif Работает довольно быстро.
К плате STM32F4-Discovery нужно подцепить дисплей к FSMC и SD-карту к SDIO.

SD-карта отформатирована FAT32, нужно залить на неё файл видео с названием "48.264"

Всё есть в приложенном архиве ниже (там же и прошивка в папке obj/led.hex).

Присоединённый файл ( Кол-во скачиваний: 264 )
Присоединённый файл  nanoPlay_MP4.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 763931   Jan 16 2018, 01:25 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




smile.gif spiteful.gif shades.gif Видео работы плеера с h264 на STM32F407: smile.gif shades.gif shades.gif spiteful.gif

Это сообщение отредактировал Gospodin_Riba - Jan 16 2018, 01:29 PM

Присоединённый файл ( Кол-во скачиваний: 153 )
Присоединённый файл  demo_h264_48x48pix_.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 763932   Jan 16 2018, 01:25 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




Нуи в виде картинок: smile.gif

Присоединённое изображение
Присоединённое изображение


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 763933   Jan 16 2018, 01:27 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




Вот такой вот кадр icon_lol.gif

Для разрешения 160x128 на работу декодера H264 -надо от 240 кБ оперативной памяти непрерывным куском...
Для STM32F407 только вариант с внешней SRAM по FSMC совместно с дисплеем...

Это сообщение отредактировал Gospodin_Riba - Jan 16 2018, 01:28 PM

Присоединённое изображение
Присоединённое изображение


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 763934   Jan 16 2018, 01:32 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




Ну и отдельно выложу видео с сырым потоком h264.
Вышеназванный MPC-HC плеер понимает их, также можно ffplay использовать(входит вместе с ffmpeg).

Присоединённый файл ( Кол-во скачиваний: 142 )
Присоединённый файл  raw_h264_data_video.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 763936   Jan 16 2018, 01:36 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




QUOTE (ведущий специалист @ Jan 15 2018, 05:33 PM)
С топикстартером контакт не удалось установить (странно, как можно жить без почтового ящика). Вот ссыль, там проект, на 407ом разжимают h264, там же если глубже полазить найдутся программные порты на стм32 множества проигрывателей (APE FLAC OGG MP3). Дерзайте.

http://www.openedv.com/posts/list/13843.htm

Гляну, интересно как они обошли предел с размером кучи.... 1_7.gif
Спасибо, ведущий специалист и intel ! 1_7.gif


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
intel
Сообщение: # 763957   Jan 16 2018, 04:28 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2439
Пользователь №: 144
Регистрация: 26-April 05
Место жительства: г. Салават



рыба мне то за что, я тут так сказать просто с боку на подтанцовке smile.gif))) я даже в среде работать не умею с этими стм, максимум что я могу это турбо паскаль под дос или пик бейсик, в микростудии плюс ,ну еще немного ругательной ардуиной играюсь, стм мне пока что не по зубам, могу только повторять проекты, вот если бы ты снял видео урок как установить и настроить среду или даже несколько примеров работы в среде и с демо бордами на стм, вот тогда цены бы тебе небыло, на русском языке толковых примеров не видел разве что мп3 плеер в журнале хакер. У Макса куча сорцев не реализованных, времени нет, работа семья ипотека и много других слов отражающих действительность, я тут тоже теряюсь месяцев по 3 в поисках зароботка, да у меня и специфика другая я больше по запаять и разработать в железе нежели софт писать ..... короче на примере своего проекта поснимай видео прям с экрана ну и голос машинный вставь, как сделать машинный голос ты лучше меня знаешь ,а где твои уроки разместить найдем. В этом случае ты найдешь единомышленников не только в таких как я мечтателях но и среди профессионалов, да и просто это поможет многим начать понимать старшие 32 разрядные контроллеры, я вот вроде понимаю на уровне железа поверхностно как оно работает но сталкнусь с ошибками которые за частую кривыми библиотеками вызванны или с ошибками с неправильно назначенными переменными и буду долго биться головой в стену, а на старте это довольно частые ошибки у новичков.

Это сообщение отредактировал intel - Jan 16 2018, 04:39 PM


--------------------
Если радиоэлектроника наркотик , то я наркоман со стажем!!!


image
не курю и никогда не курил, мне 37, хочу себе 8ку
PMEmail Poster
Top
ведущий специалист
Сообщение: # 763974   Jan 16 2018, 06:47 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 787
Пользователь №: 22294
Регистрация: 14-July 07
Место жительства: Спб



С кучей там просто решено. Китаец написал "свою" работу с памятью. Я пользовал ее уже на своем плеере разжимая флак. FLAC очень прожорлив до памяти,а у стм32л476 всего 128кб оперативы (может и меньше, не суть). Так вот суть в том - что китаец делает массив типа char mass[65535*2] а потом скармливает его своей функе выделения кучи. Только потом весь проект работает строго на этой функе (выпросил памяти - поработал - отдал назад). Благодаря этому можно немного "обмануть" систему.
PMEmail PosterICQ
Top
ведущий специалист
Сообщение: # 763982   Jan 16 2018, 07:12 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 787
Пользователь №: 22294
Регистрация: 14-July 07
Место жительства: Спб



http://motionplayer.wiki.fc2.com/

вот видос с этим плеером. Жуткий оверклок, но сделано просто супер.
https://www.youtube.com/watch?v=0ETyFmAMFjY

Может там чего подсмотреть как вариант?
PMEmail PosterICQ
Top
romanetz
Сообщение: # 763993   Jan 16 2018, 07:50 PM
Quote Post


Дедушка
*******

Группа: Cоучастник
Сообщений: 5248
Пользователь №: 99518
Регистрация: 13-March 13




QUOTE (ведущий специалист @ Jan 16 2018, 10:47 PM)
С кучей там просто решено. Китаец написал "свою" работу с памятью. Я пользовал ее уже на своем плеере разжимая флак. FLAC очень прожорлив до памяти,а у стм32л476 всего 128кб оперативы (может и меньше, не суть). Так вот суть в том - что китаец делает массив типа char mass[65535*2] а потом скармливает его своей функе выделения кучи. Только потом весь проект работает строго на этой функе (выпросил памяти - поработал - отдал назад). Благодаря этому можно немного "обмануть" систему.

А обычные malloc/free нельзя переопределять?


--------------------
То. что нельзя запрограммировать на ассемблере и vhdl - приходится паять.
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 764073   Jan 17 2018, 11:42 AM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




QUOTE (ведущий специалист @ Jan 16 2018, 06:47 PM)
С кучей там просто решено. Китаец написал "свою" работу с памятью. Я пользовал ее уже на своем плеере разжимая флак. FLAC очень прожорлив до памяти,а у стм32л476 всего 128кб оперативы (может и меньше, не суть). Так вот суть в том - что китаец делает массив типа char mass[65535*2] а потом скармливает его своей функе выделения кучи. Только потом весь проект работает строго на этой функе (выпросил памяти - поработал - отдал назад). Благодаря этому можно немного "обмануть" систему.

Китаец просто не в курсе, что в стартапе Кейла нужно задавать значения системных переменных стека и кучи(что собственно и видно из его ассемблерного стартапа *.s).

Покурив сорцы, стало быть понятно как он выкрутился.

1)
CODE
tables.h

Здесь заранее просчитанные данные, которые хранятся во Flash.
В референсном коде выделялась память из кучи и в неё просчитывались данные.
Это высвободило 45 кБ кучи... сразу!

2)
QUOTE
#define  Vidio_size     10*1024
...
Frame_buf=mymalloc(SRAMIN1,Vidio_size);  
...
Dbuf=Frame_buf; 
... 
decode_frame(&c,&pic,&temp,Dbuf,Strsize);
...

Здесь китаец выделил 10 кБ на один пожатый фрейм видео.
В референсном коде был огроменный calloc(100000,...
Поэтому всегда есть вероятность нарваться на фрейм больше 10 кБ и завешать контроллер.
Нужно выставлять определённые опции кодирования, чтобы не превышать 10кб на буфер.

3)
QUOTE

for(j=0;j<60;j++)
{
...
for(i=0;i<80;i++)
{
  ...
  color|=(BYTECLIP(YY+temp2[i])>>3);
  LCD_WR_DATA(color);
  YY=yy[2*i+1]-10;
  ...

Китаец отрисовывает кадр сразу на экран, без буферизации. Это ещё высвобождает 40 кБ памяти (160x128x2)

4)
CODE
//LCD_Window(0,0,119,159);

for(j=0;j<60;j++)
{
...
for(i=0;i<80;i++)
{
 ...

У китайца кадр 160x120, а не 160x128, что ещё несколько уменьшает объем данных, хранящийся в структурах памяти.

5)
CODE
Frame_buf=mymalloc(SRAMIN1,Vidio_size);  
...
temp1=mymalloc(SRAMIN2,320);
...
int avcodec_open(AVCodecContext *avctx)
{
...
avctx->priv_data=mymalloc(SRAMIN2,sizeof(H264Context));
...

static uint8_t *decode_nal(H264Context *h, uint8_t *src, int *dst_length, int *consumed, int length)
{
...
if(!h->s.mybuf)h->s.mybuf=mymalloc(SRAMIN1,sizeof(Publicbuf));
...


Китаец крутится как уж на сковородке, в разных местах кода он выделяет память то изучастка SRAM1, то из участка SRAM2. Этим преодолевается проблемы, связанные с выделением кучи во фрагментированных адресных пространствах STM32F4xx (128кБ с адреса 0x20000000 и 64 кБ с адреса 0x10000000 ). Был бы MMU как в ARM9, можно было обойти фрагментированность виртуальными адресами, создав таблицу трансляции физических адресов на виртуальные.
Ну и под простенькие массивы у него в виде выделений из кучи.

Чем-то похоже это на хакерство, применяемое во времена архаичных Z80, 6502 и им подобным , когда памяти как кот наплакал smile.gif

7)
В исходниках китайца удалены алгоритмы и структурные данные энтропийного кодирования (CABAC), в итоге имеем кастрированный H264, причем без cabac размер файла видео будет чуть-больше.

Так что никакого обмана c нехваткой памяти тут нет!
Такая программа будет работать нестабильно, из-за потенциального риска выйти запределы кучи, стека, памяти : причем это будет зависить от конкретного видео-потока и его параметров сжатия.

QUOTE (romanetz)
А обычные malloc/free нельзя переопределять?

А чем кейловские malloc/realloc/free не устраивают?
При правильной настройке будут работать.


CODE
Stack_Mem         EQU     0x10000000
Stack_Size        EQU     0x00000B00
__initial_sp      EQU     Stack_Mem+Stack_Size

Heap_Mem      EQU     0x20000000
Heap_Size     EQU     0x00020000
__heap_base   EQU     Heap_Mem
__heap_limit  EQU     Heap_Mem+Heap_Size


Однако же, взяв на вооружение пункты 1) и 3) - удалось получить рабочее видео на разрешении 128x128 пикселей smile.gif

Осталось ещё немного дожать!

Это сообщение отредактировал Gospodin_Riba - Jan 17 2018, 11:43 AM


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
ведущий специалист
Сообщение: # 765013   Jan 23 2018, 02:48 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 787
Пользователь №: 22294
Регистрация: 14-July 07
Место жительства: Спб



Ну как продвижения? Я наверное единственный кому интересно продолжение? Удалось ли немного подоптимизировать?
Я к тому, к примеру если купить какой нить stm32h7 , там на борту метр оперативы и честных 400 мегагерц, есть ли шанс получить к примеру 320х480 изображение?
PMEmail PosterICQ
Top
ведущий специалист
Сообщение: # 765145   Jan 24 2018, 06:39 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 787
Пользователь №: 22294
Регистрация: 14-July 07
Место жительства: Спб



А я все таки заказал stm32l4r9vit6 буду выводить плеер версии 3, так сказать релиз. Для мультимедии бы попер stm32h743vit6 но я их не успел заказать, кто то перед носом выкупил последние 3, то что осталось - жутко дорогое. Так что облом с h7.
PMEmail PosterICQ
Top
Gospodin_Riba
Сообщение: # 765228   Jan 25 2018, 11:26 AM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




QUOTE (ведущий специалист @ Jan 16 2018, 07:12 PM)
http://motionplayer.wiki.fc2.com/

вот видос с этим плеером. Жуткий оверклок, но сделано просто супер.
https://www.youtube.com/watch?v=0ETyFmAMFjY

Может там чего подсмотреть как вариант?

Видел его раньше. Там Moution JPEG, разогнанный чтоб тянуть 320x240


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 765230   Jan 25 2018, 11:33 AM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




QUOTE
Ну как продвижения? Я наверное единственный кому интересно продолжение? Удалось ли немного подоптимизировать?


Вариант китайца с форума не заработал. Портанул его сорцы на ПК, поток не декодирууется, программа вылетает в экспешн. Очень вполне вероятно, что используется конкретная версия кодека с определёнными настройками.

Мой вариант также декодирует поток, полученный кодеком, который выкладывал здесь.

Доработал свой вариант до 160x128, память трещит по швам и её еле как хватило. Пришлось ещё задействовать 4 кБ батареечной памяти.

Звук только ADPCM, на декод MP3 не хватило памяти (что с моим вариантом сорцов MP3, что с китайским).

Тем не менее, выкладываю сорцы рабочей версии видео-декодера H264 160x128 + звуковой декодер IMA ADPCM.

Там же и прошивка (obj/led.hex) и медиа-данные для тестов:

Это сообщение отредактировал Gospodin_Riba - Jan 25 2018, 11:35 AM

Присоединённый файл ( Кол-во скачиваний: 253 )
Присоединённый файл  nanoPlay_MP4.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 765232   Jan 25 2018, 11:40 AM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




QUOTE (ведущий специалист @ Jan 23 2018, 02:48 PM)
Ну как продвижения? Я наверное единственный кому интересно продолжение? Удалось ли немного подоптимизировать?
Я к тому, к примеру если купить какой нить stm32h7 , там на борту метр оперативы и честных 400 мегагерц, есть ли шанс получить к примеру 320х480 изображение?

У меня другая побрякушка на базе ADSP Blackfin BF532/533 + SDRAM 32/64 MB + видео на ПЛИС. Гонится до 800 МГц, по дефолту 400 МГц. Можно портировать и посмотреть на ней, но там нет аппаратной поддержки Floating Point.

Ну и A13, v3s без дела пока лежат,руки не доходят их освоить. 1227689077.gif

На счет stm32h7 не скажу,не работал. Но ARM + FP - это хорошо. smile.gif

Видео рабочего mp4 плеера со звуком:

Присоединённый файл ( Кол-во скачиваний: 162 )
Присоединённый файл  h264_sync.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 765234   Jan 25 2018, 11:45 AM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




QUOTE (ведущий специалист @ Jan 24 2018, 06:39 PM)
А я все таки заказал stm32l4r9vit6 буду выводить плеер версии 3, так сказать релиз. Для мультимедии бы попер stm32h743vit6 но я их не успел заказать, кто то перед носом выкупил последние 3, то что осталось - жутко дорогое. Так что облом с h7.

Плеер чего? Если речь идет о сорцах того китайца, то там при открытии его в Кейле глюк: выставлено памяти меньше, чем пишет задействованное при линковке. Очень удивило, в моем случае мои проекты выдают ошибку, если объем памяти в проекте стоит меньше, чем надо, то не собирает бинарник.

Ну и вообще, стараюсь вначале проверить и отладить работу сорцов на "большом брате" ПК, затем если всё ОК, переношу на контроллеры. Очень удобно, не надо Флешь жечь лишний раз и спасает от затыков типа printf, assert и других.

Вот видео работы чистого декодирования H264 потока без звука и синхронизации:

Присоединённый файл ( Кол-во скачиваний: 144 )
Присоединённый файл  h264_nosync.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 765236   Jan 25 2018, 11:54 AM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




Я тут бился 4 дня головой об стену с проблемой синхронизации видео и звука. Звук уходил постепенно вперёд видео, и через 30 минут уже достигал разница 3-4 секунды.

Думал, что синхронизирую не так или кадры попадаются тормозные, чего только не пробовал...

А оказалось, что проблема с некорректным декодированием потока: иногда видео замирает на одном кадре, может быть duplicate frames. Но факт, что при разжатии 25 минутной видео-записи вышло на 3000 фрейма больше, чем у оригинала!

Решение было найдено- нашел другой кодек - T264 вместо x264, который дает на выходе поток, без замираний и число разжатых фреймов совпало с оригиналом.

Сорцы кодека T264 прикладываю. Пересобрал его DJGPP, работает. Совместим с декодером H264 на STM32. Энкодер только под процессор INTEL+MMX+SSE(asm). Декодер кроссплатформенный (проверено, вырезал все asm-сорцы). Хотел T264 портировать на STM32F4, но его аппетиты по памяти оказались ещё больше.

В идеале, конечно, надо искать энкодер от того декодера, что используется в STM32. AVCcoder h264 ???

Присоединённый файл ( Кол-во скачиваний: 155 )
Присоединённый файл  t264_djgpp.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 765238   Jan 25 2018, 12:01 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




Правда, и в этом случае пришлось подкорректировать синхронизацию - на этот раз звук отставал на пол-секунды после просмотра 30-минутной записи.

CODE
#define VSYNC ((u32)((double)1.00075*(double)(CPU_FREQ/FPS)))


Пришлось замедлить показ фрейма на +0.075% biggrin.gif
С коррекцией проверил воспроизведение на нескольких тестовых потоках - работает как надо.

Единственное ограничение: параметры сжатия/качества должны стоять такими, чтобы не превысить размер MPEG-буфера при декодировании за 8 кБ.

Для этого написал программу ниже, она декодирует поток и пишет размер каждого сжатого фрейма, и если вылетает за пределы, сообщает об этом. Таким образомвсегда можно найти максимальное качество и не вылезти за пределы.

Присоединённый файл ( Кол-во скачиваний: 144 )
Присоединённый файл  h264dec.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
romanetz
Сообщение: # 765300   Jan 26 2018, 07:27 AM
Quote Post


Дедушка
*******

Группа: Cоучастник
Сообщений: 5248
Пользователь №: 99518
Регистрация: 13-March 13




А может, к звуку и привязываться? Изменение частоты кадров в небольших пределах совершенно незаметно, в отличие от изменения частоты звука (хотя кому как...)

Это сообщение отредактировал romanetz - Jan 26 2018, 07:29 AM


--------------------
То. что нельзя запрограммировать на ассемблере и vhdl - приходится паять.
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 765325   Jan 26 2018, 04:26 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




QUOTE (romanetz @ Jan 26 2018, 07:27 AM)
А может, к звуку и привязываться? Изменение частоты кадров в небольших пределах совершенно незаметно, в отличие от изменения частоты звука (хотя кому как...)

В версиях MJPEG+ADPCM и MJPEG+MP3 так и сделано. Но в версии с H264 из-за нехватки памяти пришлось апдейт звука делать в самом обработчике прерывания (подгрузку с файла в половинки кольцевого буфера). Потому что буфер короткий и время его воспроизведения намного короче времени декодирования+показа одного фрейма. В итоге имеем отрисовку фрейма параллельно с многократными прерываниями по звуку. В этом случае обработка прерываний тоже вносит некую задержку и цепляться на количество отыгранных аудио-семплов не корректно.

Нужен некий аппаратный счетчик, и я его нашел - счетчик тактов ядра процессора. Тактовая частота и частота дискретизации звука - синхронны (если не учитывать латентность логики делителей частоты), значит , синхронизируя по количеству тактов, синхронизируемся и по звуку.

И ещё,я вроде откопал тот самый кодек, который используют китайцы в своих плеерах. Им оказался x264 древней версии. С его использованием, надобность в коррекции отпала и теперь так:

QUOTE
#define VSYNC ((u32)(CPU_FREQ/FPS))


Без всяких корректирующих коэффициентов 0,0075%, тестировал на получасовых тестовых записях. Звук синхронно с видео (герои открывают рот во время разговора вовремя smile.gif )

Вот этот чудо-кодек (ещё более ранняя версия, чем та, что выше выкладывал):

Присоединённый файл ( Кол-во скачиваний: 153 )
Присоединённый файл  x264.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 765327   Jan 26 2018, 04:46 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




Процедура получения и обработки видеопотока для STM32F4-плеера изменилась.

1)
CODE
ffmpeg.exe -i 0.mp4 -s 160x128 -r 12 -c:v rawvideo -pix_fmt yuv420p -qscale:v 0 -an 160.yuv


Тут мы исходный MP4 ресайзим до 160x128, частота кадров 12 FPS, формат RAW YUV 4:2:0 (12 бит на точку) Losless (без потерь), без звука, только видео.

2)
CODE
x264.exe --no-cabac --crf 1 --nr 1 --vbv-maxrate 800 --vbv-bufsize 96 -i 17759 -o 0.264 160.yuv 160x128


Далее полученный YUV конвертим в H264, без CABAC, с максимальным качеством кадра CRF=1, с подавлением шума NR=1, НО с ограничением по битрейту и размеру буфера (чтобыне вылезти за пределы максимального размера MPEG буфера), bufsize - 12% от maxrate. Обязательно указываем minimum GOP Size равное числу фреймов видео - вданном случае оно 17759 фреймов. Число фреймов можно узнать из пункта 1) - ffmpeg его пишит после завершения кодирования. В этом случае замирания фреймов (duplicate frames ?) не будет и звук будет чётко синхронизироваться с видео, число фреймов в оригинале (пункт 1) будет совпадать с числом фреймов пункта 2).

x264.exe - тот, что постом выше. При указанных параметрах кодирования, не было замечено НИ ОДНОГО артефакта! Размер bufsize должен быть 12% от maxrate, при их увеличении есть риск выйти за пределы памяти STM32. В примере подобраны оптимальные рабочиез начения.

На счет звука:

1)
CODE
ffmpeg.exe -i 0.mp4 -ar 24000 -ac 1 -c:a pcm_s16le 0.wav


Тут мы из исходного MP4 вырезаем аудио 24 кГц,моно, 16 бит PCM

2)
CODE
ffmpeg.exe -i 0.wav -af "volumedetect" -f null /dev/null


Далее находим максимальный уровень громкости, и если он ниже 0 дБ, то увеличиваем уровень громкости (нормализуем амплитуду) на эту величину со знаком плюс:

3)
CODE
ffmpeg.exe -i 0.wav -af "volume=3.0dB" 1.wav


Здесь мы подняли громкость на 3 дБ (предполагалось, что из предыдущего шага к примеру узнали, что максимальная громкость была -3 дБ )

4)
CODE
imacodec.exe 1.wav 0.ima 2.wav


Тут мы сконвертим в ADPCM (выигрыш в 4 раза по размеру).

В итоге имеем 0.264 и 0.ima- их использовать для STM32f4 плеера.

RAW YUV видео можно просмотреть через FFPLAY (входит впакет ffmpeg):

CODE
ffplay.exe -f rawvideo -s 160x128 -pix_fmt yuv420p -framerate 12 160.yuv


Обязательно указывать разрешение и FPS.

В заключение, выкладываю сорцы относительно не старой версии декодера H264 от ffmpeg - всё отлично собралось и работает. Даже x264 не нужен, эта версия декодера понимает даже h264-поток от ffmpeg, чего не может делать китайские версии для STM32. Но к сожалению, он прожорлив к памяти (уже более чем пол-метра нужно):

Присоединённый файл ( Кол-во скачиваний: 135 )
Присоединённый файл  H264_ffmpeg.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 765328   Jan 26 2018, 04:48 PM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




Есть ещё сорцы кодера/декодера MPEG-2, можно ещё их попробовать, но стОит ли? smile.gif

Исходники тащу с pudn.com leb.gif 1000000Z.gif

Это сообщение отредактировал Gospodin_Riba - Jan 26 2018, 04:50 PM


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
  Сообщение: # 765613   Jan 29 2018, 11:35 AM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




QUOTE (Gospodin_Riba @ Jan 26 2018, 04:46 PM)
Обязательно указываем minimum GOP Size равное числу фреймов видео - вданном случае оно 17759 фреймов. Число фреймов можно узнать из пункта 1) - ffmpeg.............

Тогда в потоке будет всего лишь один опорный I-фрейм, остальные будут P-фреймами. B-фреймов тут в принципе быть не должно, потому что китайский декодер их не понимает.

Тоесть весь поток будет выглядеть так: IPPPPPPPPPPPPPPPPPP.....
В некоторых случаях это не есть хорошо.

Поэтому было проведено дополнительное расследование в работе декодера, и выяснилось, что в функции декодирования фрейма даётся отмашка на отрисовку даже в случае чтения NAL_SPS и NAL_PPS (что это такое -можно узнать, раскурив FAQ по H264).

Отрисовка должна быть только при чтении данных опорных или предсказуемых фреймов:
NAL_SLICE или NAL_IDR_SLICE. Тоесть - переделать в файле h264.c функцию:

CODE
int decode_frame(AVCodecContext *avctx, void *data, int *data_size,uint8_t *buf, int buf_size)
{
...

// *data_size = sizeof(AVFrame);
       if((h->nal_unit_type==NAL_SLICE)||(h->nal_unit_type==NAL_IDR_SLICE))*data_size = sizeof(AVFrame); //!!! Только в этих случаях отображать картинку

return get_consumed_bytes(s, buf_index, buf_size);
}


В главном сорце main.c отрисовка может выглядеть так:
CODE
Loop:

decode_frame(&c,&picture,&got_picture,MPEGBuffer,getNextNal(&fv,MPEGBuffer));

if(got_picture)
{
 DisplayYUV_16(picture.data[0],picture.data[1],picture.data[2],c.width,c.height,picture.linesize[0],picture.linesize[1],W);

 while(DWT_CYCCNT<VSYNC); //синхронизация видео-кадров
 DWT_CYCCNT-=VSYNC;
}

if(PAUSE) //нажата/отжата Пауза
{

 ...

goto Loop;
}


В данном случае переменная data_size = got_picture даёт отмашку на отрисовку кадра, и это надо делать только при состояниях NAL_SLICE или NAL_IDR_SLICE, а не когда вздумается.

Так что теперь GOP Size может быть любым, и видео-поток может содержать более одного опорного (I) фрейма и прекрасно синхронизируется со звуком и количество фреймов совпадает при энкоде и декоде:

IPPPPIPPPPIPPPP...

Ну и конечно же сорце всего проекта с прошивкой:

Это сообщение отредактировал Gospodin_Riba - Jan 29 2018, 11:36 AM

Присоединённый файл ( Кол-во скачиваний: 180 )
Присоединённый файл  nanoPlay_MP4.zip


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
Gospodin_Riba
Сообщение: # 765614   Jan 29 2018, 11:41 AM
Quote Post


Фанат
******

Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16




А тут улучшили работу кодека x264 на малых битрейтах:
http://www.compression.ru/video/x264/x264_...ovement_ru.html (МГУ)

Там же и сорцы на оригинал и модифицированную версии.
И сборка более древняя, чем те, что выкладывал здесь.

Конвертация теперь выглядит очень просто - кодируем по постоянному качеству кадра:
CODE
x264.exe --progress --no-cabac --ref 1 --crf 18 -o 0.264 160.yuv 160x128


QUOTE
Есть ещё сорцы кодера/декодера MPEG-2, можно ещё их попробовать, но стОит ли?


Нет, не стоит. Качество картинки будет хуже и сжатие ниже.

А вот с JPEG2000 можно разобраться... 1_7.gif


--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com
Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
PMEmail Poster
Top
ведущий специалист
Сообщение: # 765901   Jan 31 2018, 01:01 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 787
Пользователь №: 22294
Регистрация: 14-July 07
Место жительства: Спб



Так какой повторить код, старый или последним постом? Немного запутался.
Хочу попробывать запустить на дискавери ф7, там вроде сдрам на борту, ну и чисто ради интереса проверить насколько ф7 вытянет картинку.
PMEmail PosterICQ
Top

Настройки темыСтраницы: (6) 1 [2] 3 4 5 6  Ответить Шустрый ответ Новая тема Новый опрос


 




  banner DIPTRACE - САМЫЙ ЛУЧШИЙ ТАКСИРОВЩИК ПЕЧАТНЫХ ПЛАТ
Portal-X