GenaSPB 11 6 июля, 2022 Опубликовано 6 июля, 2022 · Жалоба Я сделал интерфейс для STM библиотек Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 6 июля, 2022 Опубликовано 6 июля, 2022 · Жалоба Запускаю понемногу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 7 июля, 2022 Опубликовано 7 июля, 2022 · Жалоба On 7/7/2022 at 5:43 AM, sasamy said: не совсем понял, pitch https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/sun4i/sun8i_vi_layer.c#L346 и адрес https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/sun4i/sun8i_vi_layer.c#L354 для каждого плана https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/sun4i/sun8i_vi_layer.c#L322 вы сами должны указать, у nv12 два плана https://linuxtv.org/downloads/v4l-dvb-apis-new/userspace-api/v4l/pixfmt-yuv-planar.html#nv12-nv21-nv12m-and-nv21m Так я итак выставляю pitch и адрес для каждой плоскости. Адрес ставится, а вот с Pitch проблема: компоненты U и V не растягиваются на весь экран и каждая вторая строка пропускается. Для NV12 надо задать 2 плоскости: Y и UV. Пока только плоскость Y нормально выводится. Плоскости U и V выводятся в 2 раза меньше и с каждой пропущенной второй строкой, да и ещё вместе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 7 июля, 2022 Опубликовано 7 июля, 2022 · Жалоба В 07.07.2022 в 01:56, GenaSPB сказал: Запускаю понемногу... А справа что за большая микра такая? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 7 июля, 2022 Опубликовано 7 июля, 2022 (изменено) · Жалоба On 7/7/2022 at 6:13 AM, mantech said: А справа что за большая микра такая? Это FPGA EP4CE22E22 - то что между трактом 48 кГц и радио 122.88 МГц. Там еще много чего (потом сфотографирую) паяется miso & mosi перепутал... Изменено 7 июля, 2022 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 7 июля, 2022 Опубликовано 7 июля, 2022 (изменено) · Жалоба On 7/7/2022 at 11:21 AM, repstosw said: Пока только плоскость Y нормально выводится. Плоскости U и V выводятся в 2 раза меньше и с каждой пропущенной второй строкой, да и ещё вместе. Удалось получить корректное отображение YUV420 (NV12) на дисплей! Нужно было использовать скейлер (даже если размеры оригинала изображения совпадают с размерами отображаемого). Потому что из-за субдискретизации(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 Изменено 7 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 7 июля, 2022 Опубликовано 7 июля, 2022 (изменено) · Жалоба В 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 элементы... Изменено 7 июля, 2022 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 7 июля, 2022 Опубликовано 7 июля, 2022 · Жалоба On 7/7/2022 at 9:07 PM, mantech said: Сколько всяких телодвижений надо просто ради того, что "гении" просто не сделали декодирование сразу в RGB((( Так уж повелось, что обработку видео, графики делают в цветовом пространстве YUV, а не RGB. И есть много причин по которым это делают. Ради финального результата стоило поднапрячься 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. Сделал проигрыватель видео MJPEG. Исходные кадры: JPEG 800x480, 80% качество. Максимальный FPS вышел 320....360 (без синхронизации) Полное видео в лучшем качестве (чередуются: видео на максимальном FPS и видео с VSync 30FPS): Здесь декодер декодирует прямо в экранную память (в формате YUV 4:2:0) без посредников. Засунул всё видео в DDR через xfel. GCC может статически линковать бинарные данные к коду программ и даёт возможность кним обращаться внутри программы: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 7 июля, 2022 Опубликовано 7 июля, 2022 · Жалоба В 07.07.2022 в 14:56, repstosw сказал: Никто не мешает один канал сделать в YUV и крутить в нём видео Не мешает, если полноэкранное видео, но часто нужно не в полный экран - простейший пример - форма GUI и в кнопке-картинка... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 7 июля, 2022 Опубликовано 7 июля, 2022 (изменено) · Жалоба On 7/7/2022 at 10:54 PM, mantech said: но часто нужно не в полный экран - простейший пример - форма GUI и в кнопке-картинка... Я уже писал, что можно использовать G2D - он переконвертит картинку (любого размера) с декодера из YUV - и нарисует её в RGB и в любое место. В случае с картинкой 800x480 это займёт 5 мс (CedarX+G2D), вместо 4 мс (CedarX) Изменено 7 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 7 июля, 2022 Опубликовано 7 июля, 2022 · Жалоба В 07.07.2022 в 16:06, repstosw сказал: G2D - он переконвертит картинку (любого размера) с декодера из YUV - и нарисует её в RGB К сожалению в v3s нет g2d, и еще в куче процов того же аллвиннера, вот такие дела... А это влечет за собой такую шляпу, как то, что аппаратные корки очень любят писать и читать из некэшируемых регионов, а это сильно затормаживает чтение из них, а если использовать софтовый конвертор это очень актуально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 7 июля, 2022 Опубликовано 7 июля, 2022 (изменено) · Жалоба 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 - это вчерашний день. Как и другие, ранее выпущенные. Изменено 7 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 7 июля, 2022 Опубликовано 7 июля, 2022 · Жалоба В 07.07.2022 в 20:34, repstosw сказал: Если мне нужно чтение, я объявляю регион кешированным. А после того, как периферийное устройство отработает(запишет в эту память) перед чтением делаю инвалидацию кеша. Ну разве, что так, но надо выровнять область по строкам кэша... В 07.07.2022 в 20:34, repstosw сказал: V3s - это вчерашний день. Ну не знаю, там есть очень хорошая штука - втроенный ethernet Phy. А с g2d вам просто повезло, что он есть в Т113, но до него и скорее всего после там будут только mali-подобные ускорители, раскуривать которые можно с ума сойти... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 7 июля, 2022 Опубликовано 7 июля, 2022 (изменено) · Жалоба 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. Изменено 7 июля, 2022 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 8 июля, 2022 Опубликовано 8 июля, 2022 (изменено) · Жалоба 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, и меня это огорчило в своё время. Изменено 8 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться