Перейти к содержанию
    

Allwinner T113-s3 уделал HiFi4 DSP. Смеяться или плакать?

On 7/7/2022 at 5:43 AM, sasamy said:

 

Так я итак выставляю pitch и адрес для каждой плоскости. Адрес ставится, а вот с Pitch проблема: компоненты U и V не растягиваются на весь экран и каждая вторая строка пропускается.

Для NV12 надо задать 2 плоскости: Y и UV.

Пока только плоскость Y нормально выводится.

Плоскости U и V выводятся в 2 раза меньше и с каждой пропущенной второй строкой, да и ещё вместе.

 

1.jpg.ea20d29986432cb8b9d81f38c09688d8.jpg2.jpg.20a5a133d852154f998cd79b5c39fe23.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 07.07.2022 в 01:56, GenaSPB сказал:

Запускаю понемногу...

А справа что за большая микра такая?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/7/2022 at 6:13 AM, mantech said:

А справа что за большая микра такая?

Это FPGA EP4CE22E22 - то что между трактом 48 кГц и радио 122.88 МГц.

Там еще много чего (потом сфотографирую) паяется

miso & mosi перепутал...

 

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/7/2022 at 11:21 AM, repstosw said:

Пока только плоскость Y нормально выводится.

Плоскости U и V выводятся в 2 раза меньше и с каждой пропущенной второй строкой, да и ещё вместе.

  

Удалось получить корректное отображение YUV420 (NV12) на дисплей! :dance4:

 

Нужно было использовать скейлер (даже если размеры оригинала изображения совпадают с размерами отображаемого).

Потому что из-за субдискретизации(subsampling) U и V компоненты имеют в 2 раза меньшие размеры по обоим осям:

 

https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/sun4i/sun8i_vi_layer.c#L161

 

Quote
/*
	 * Scaler must be enabled for subsampled formats, so it scales
	 * chroma to same size as luma.
	 */

  

Кроме этого, нужно было явно задать коэффициенты M и N:

 

https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/sun4i/sun8i_vi_layer.c#L213

 

regmap_write(mixer->engine.regs,
		     SUN8I_MIXER_CHAN_VI_HDS_Y(ch_base),
		     SUN8I_MIXER_CHAN_VI_DS_N(hn) |
		     SUN8I_MIXER_CHAN_VI_DS_M(hm));
	regmap_write(mixer->engine.regs,
		     SUN8I_MIXER_CHAN_VI_HDS_UV(ch_base),
		     SUN8I_MIXER_CHAN_VI_DS_N(hn) |
		     SUN8I_MIXER_CHAN_VI_DS_M(hm));
	regmap_write(mixer->engine.regs,
		     SUN8I_MIXER_CHAN_VI_VDS_Y(ch_base),
		     SUN8I_MIXER_CHAN_VI_DS_N(vn) |
		     SUN8I_MIXER_CHAN_VI_DS_M(vm));
	regmap_write(mixer->engine.regs,
		     SUN8I_MIXER_CHAN_VI_VDS_UV(ch_base),
		     SUN8I_MIXER_CHAN_VI_DS_N(vn) |
		     SUN8I_MIXER_CHAN_VI_DS_M(vm));

 

В документации на DE2.0 описание этих коэффициентов неясное и ссылаются на несуществующую картинку.

   

Подытоживая: чтобы заставить дисплей отображать в YUV420, мало выставить такой режим соответствующими битами. Должны быть включены:

 

1). CSC - для правильной конверсии YUV в RGB

2). Scaler - для растягивания компонент U и V, если они суб-семплированы.

     

sasamy , спасибо, что всё-же настояли на ковырянии CSC и Scaler  :yes:

 

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 07.07.2022 в 10:59, repstosw сказал:

Нужно было использовать скейлер

Сколько всяких телодвижений надо просто ради того, что "гении" просто не сделали декодирование сразу в RGB(((

В 07.07.2022 в 10:59, repstosw сказал:

1). CSC - для правильной конверсии YUV в RGB

2). Scaler - для растягивания компонент U и V, если они суб-семплированы.

А в результате-то что получили, картинку в памяти сразу в виде RGB, или просто отображение на экране в моде  YUV ?

Почему спрашиваю, т.к. все-таки хотелось, чтобы экранный буфер, куда копирую картинку был в моде RGB, т.к. картинки бывают нужны не на весь экран и в этот же буфер нужно добавлять RGB  элементы...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/7/2022 at 9:07 PM, mantech said:

Сколько всяких телодвижений надо просто ради того, что "гении" просто не сделали декодирование сразу в RGB(((

  

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

 

On 7/7/2022 at 9:07 PM, mantech said:

А в результате-то что получили, картинку в памяти сразу в виде RGB, или просто отображение на экране в моде  YUV ?

 

Отображение на экране в YUV.

Если надо RGB, то поможет G2D (собственно с чего и начинал).

 

On 7/7/2022 at 9:07 PM, mantech said:

Почему спрашиваю, т.к. все-таки хотелось, чтобы экранный буфер, куда копирую картинку был в моде RGB, т.к. картинки бывают нужны не на весь экран и в этот же буфер нужно добавлять RGB  элементы...

  

Никто не мешает один канал сделать  в YUV и крутить в нём видео, а второй канал - RGB. :wink:

 

Сделал проигрыватель видео MJPEG.

Исходные  кадры: JPEG 800x480, 80% качество.

Максимальный FPS вышел 320....360 :dance4: (без синхронизации)

  

JPG.gif.ca38918d8c23dce6ad0da759e843cb11.gif

 

Полное видео в лучшем качестве (чередуются: видео на максимальном FPS и видео с VSync 30FPS):

 

 

Здесь декодер декодирует прямо в экранную память (в формате YUV 4:2:0) без посредников.

  

Засунул всё видео в DDR через xfel. GCC может статически линковать бинарные данные к коду программ и даёт возможность кним обращаться внутри программы:

   

111.thumb.jpg.2663e3c220351866bd65c8780b029624.jpg

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 07.07.2022 в 14:56, repstosw сказал:

Никто не мешает один канал сделать  в YUV и крутить в нём видео

Не мешает, если полноэкранное видео, но часто нужно не в полный экран - простейший пример - форма GUI и в кнопке-картинка...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/7/2022 at 10:54 PM, mantech said:

но часто нужно не в полный экран - простейший пример - форма GUI и в кнопке-картинка...

 

Я уже писал, что можно использовать G2D - он переконвертит картинку (любого размера) с декодера из YUV - и нарисует её в RGB и в любое место. :acute:

 

В случае с картинкой 800x480  это займёт 5 мс (CedarX+G2D),  вместо 4 мс (CedarX)

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 07.07.2022 в 16:06, repstosw сказал:

G2D - он переконвертит картинку (любого размера) с декодера из YUV - и нарисует её в RGB

К сожалению в v3s нет g2d, и еще в куче процов того же аллвиннера, вот такие дела... А это влечет за собой такую шляпу, как то, что аппаратные корки очень любят писать и читать из некэшируемых регионов, а это сильно затормаживает чтение из них, а если использовать софтовый конвертор это очень актуально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/8/2022 at 3:08 AM, mantech said:

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

 

Если мне нужно чтение, я объявляю регион кешированным. А после  того, как периферийное устройство отработает(запишет в эту память) перед чтением делаю инвалидацию кеша.

Если мне нужна запись, то я объявляю регион буферизованным. А перед тем как периферийное устройство начнёт читать из этой памяти, я делаю сброс кеша в память.

Всё летает быстро: проверено неоднократно на : TVD, G2D, VE и TCON.

 

P.S. И кстати, flush_dcache() из A13 действительно тормозная - нуждается в замене.  Заменил - всё летает быстро.

Процедуры инвалидации кеша и сброса с кеша должны делаться в диапазоне тех адресов, которые критичны.

 

 

On 7/8/2022 at 3:08 AM, mantech said:

К сожалению в v3s нет g2d, и еще в куче процов того же аллвиннера, вот такие дела...

 

V3s - это вчерашний день. Как и другие, ранее выпущенные.

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 07.07.2022 в 20:34, repstosw сказал:

Если мне нужно чтение, я объявляю регион кешированным. А после  того, как периферийное устройство отработает(запишет в эту память) перед чтением делаю инвалидацию кеша.

Ну разве, что так, но надо выровнять область по строкам кэша...

В 07.07.2022 в 20:34, repstosw сказал:

V3s - это вчерашний день.

Ну не знаю, там есть очень хорошая штука - втроенный ethernet Phy. А с g2d вам просто повезло, что он есть в Т113, но до него и скорее всего после там будут только mali-подобные ускорители, раскуривать которые можно с ума сойти...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/7/2022 at 3:54 PM, mantech said:

форма GUI и в кнопке-картинка...

не видно смысла для маленькой картинки заводить аппаратный ускоритель вот если видео в кнопках... А вообще у DE2 есть write-back для записи в память

Quote

The Real-time write-back controller (RT-WB) provides data capture function for display engine. It captures data from
RT-mixer module, performs the image resizing function, and then write-back to SDRAM.

 

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/8/2022 at 4:19 AM, mantech said:

Ну разве, что так, но надо выровнять область по строкам кэша...

 

Для CedarX буфера должны быть выровнены на 1024 байт. Адрес выбирается статически или через memalign( ).

 

  

On 7/8/2022 at 4:19 AM, mantech said:

А с g2d вам просто повезло, что он есть в Т113

 

Ну так я его и брал с таким прицелом. Не было бы G2D - я бы даже не смотрел в его сторону.

На досуге, покопайте ранее упомянутую либу от Чана - TinyJPEG: функция mcu_output( ) .  Гляньте её внутренности...  Софтовый детайлизатор и конвертер YUV в RGB там присутствует.

 

 

On 7/8/2022 at 4:19 AM, mantech said:

скорее всего после там будут только mali-подобные ускорители, раскуривать которые можно с ума сойти...

 

Будут такие заказы - будем раскуривать.   Несколько лет назад раскурил 3D-ускоритель видеокарточек Voodoo2/Voodoo3 - по тем же исходникам Линукса.

 

On 7/8/2022 at 4:19 AM, mantech said:

Ну не знаю, там есть очень хорошая штука - втроенный ethernet Phy.

 

Зато нет JPEG Decoder в составе CedarX, и меня это огорчило в своё время.

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...