Ozelot 7 8 июля, 2022 Опубликовано 8 июля, 2022 · Жалоба On 7/8/2022 at 6:32 PM, repstosw said: Есть ли шанс увеличить скорость записи на карту? Наверно вы используете посекторную запись. Если использовать блочную запись, то скорость гораздо больше. Например на том же f1c в программе usb mass storage у меня скорость записи на карту памяти по usb получилась 6МБайт/сек (при этом я не пользую dma и нужно еще приплюсовать расходы на чтение данных из usb). On 7/8/2022 at 4:32 PM, sasamy said: в ядре есть драйвер но там DI используется как отдельный блок mem2mem - берёт входной буфер из памяти и складывает в другой буфер в памяти https://elixir.bootlin.com/linux/latest/source/drivers/media/platform/sunxi/sun8i-di У Allwinner есть два варианта деинтерлейсеров. Тот, на который вы даете ссылку, входит в состав h3-процессора. В f1c этот блок другой. Кстати интересно, какой имеется в t113. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 9 июля, 2022 Опубликовано 9 июля, 2022 (изменено) · Жалоба On 7/9/2022 at 3:12 AM, mantech said: Какой объем записывается за это время? 150 - 200 kB - 1 пожатый фрейм. On 7/9/2022 at 4:36 AM, Ozelot said: В f1c этот блок другой. Кстати интересно, какой имеется в t113. Не тот, что в F1C. Проверил: в DI_CTRL_REG 31-бит сброса не скидывается в 0. А на F1C де-интерлейсер заработал? В Tina Linux - куча версий дров под де-интерлейсер, какой из них для sun8iw20 - неизвестно: в коде нет дефайнов, явно указывающих на модель чипа. \Tina T113\tina-t113\lichee\linux-5.4\drivers\char\sunxi-di\ Изменено 9 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 9 июля, 2022 Опубликовано 9 июля, 2022 (изменено) · Жалоба В общем, для allwinner есть всего 3 модели де-интерлейсеров: 1) как в F1C 2) sun8i 3) DI300 (в H616) Так как 1) и 3) не сбрасывается бит сброса на T113-s3, предположил что там всё-таки 2). Стал смотреть код и даже его перенёс, но нифига не запускается. Мало того, мне непонятна вообще логика работы де-интерлейсера - куча адресов - что, куда? Вот здесь: deinterlace_write(dev, DEINTERLACE_TILE_FLAG0, ctx->flag1_buf_dma); deinterlace_write(dev, DEINTERLACE_TILE_FLAG1, ctx->flag2_buf_dma); addr = vb2_dma_contig_plane_dma_addr(&src->vb2_buf, 0); addr = vb2_dma_contig_plane_dma_addr(&ctx->prev->vb2_buf, 0); Пробовал им задавать один буфер, который даёт камера - на выходе без изменений. Безжизненно совсем - статус не обновляется: как был 0 так и остался. В буфера ничего не пишет. Клоки разрешил: DI_BGR_REG&=~(1<<16); //assert reset DI_CLK_REG|=(1UL<<31)|(4-1); //clock on, PLL_PERI(2x), M=2 DI_BGR_REG|=1; //pass gate DI_BGR_REG|=(1<<16); //de-assert reset Потом вызвал deinterlace_init и deinterlace_device_run Кто-нибудь может пояснить как работает этот де-интерлейсер и что нужно записывать в вышеупомянутые адреса? https://elixir.bootlin.com/linux/latest/source/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c Изменено 9 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ozelot 7 9 июля, 2022 Опубликовано 9 июля, 2022 · Жалоба On 7/9/2022 at 3:28 PM, repstosw said: А на F1C де-интерлейсер заработал? Даже не пытался запускать. Все еще надеюсь где нибудь подсмотреть :) Вообще, по личному опыту, делать полный интерлейсный кадр - это глупость. В случае mjpeg нужно захватывать полукадрами, а уже в компьютере делать постобработку, используя нормальный фильтр деинтерлейса. В состав ffmpeg и avisynth входит замечательный фильтр yadif, который в процессе деинтерлейса формирует полные кадры с правильной частотой (для pal - 50Гц, ntsc - 60Гц). Когда то давно делал видеорегистратор в котором полукадры с выхода видеодекодера ak8856 сжимались в jpeg при помощи чипа ssd1928 и сохранялись как mjpeg-файл. А вся остальная обработка делалась в ПК, как описано выше... В allwinner-овских чипах есть возможность аппаратного сжатия видео в h264, для него на вход нужно подать нормальные полные кадры без гребенки. Только в этом случае будет достигнуто наилучшее качество при заданной степени сжатия. С этим и связано появление деинтерлейс модуля . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 1 9 июля, 2022 Опубликовано 9 июля, 2022 · Жалоба On 7/9/2022 at 8:50 PM, Ozelot said: В allwinner-овских чипах есть возможность аппаратного сжатия видео в h264, для него на вход нужно подать нормальные полные кадры без гребенки. Только в этом случае будет достигнуто наилучшее качество при заданной степени сжатия. С этим и связано появление деинтерлейс модуля стандарт h264 поддерживает кодирование черезстрочного видео, в общем случае всё это необязательно, правда неизвестно поддерживает ли VE такое кодирование. DI в подобных SoC скорей для отображения такого видео на LCD с прогрессивной разверткой - до сих пор в HDTV широко используется 1080i On 7/9/2022 at 6:54 PM, repstosw said: ctx->flag1_buf_dma flag1_buf_dma и flag2_buf_dma - какие-то вспомогательные буферы, выделяются один раз при старте и освобождаются при остановке On 7/9/2022 at 6:54 PM, repstosw said: addr = vb2_dma_contig_plane_dma_addr(&src->vb2_buf, 0); возвращает DMA адрес нолевого плана видеобуфера, напомню у nv12 два плана соотвественно с индексами 0 и 1 On 7/9/2022 at 6:54 PM, repstosw said: addr = vb2_dma_contig_plane_dma_addr(&ctx->prev->vb2_buf, 0); то же самое для видеобуфера предыдущего кадра - для детектироавния движения недостаточно данных текущего кадра Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 10 июля, 2022 Опубликовано 10 июля, 2022 (изменено) · Жалоба Удалось запустить де-интерлейсер (DI) на T113-s3! Оказалась версия DI110 : регистр со смещением +0xC от базы в младших 12 битах возвращает версию: 0x110. Если запретить тактирование, этот регистр вернёт 0. Итого, всего 4 версии де-интерлейсеров: drv_div1xx - DI110 (читается версия, статус-регистр обновляется, заработал) drv_div2x - lowlevel_v1x (как sun8i-di, не заработал) и lowlevel_v2x (похож на DI110 - статус-регистр обновлялся, остальное мёртвое - не заработал). drv_div3x - lowlevel_v3x - это DI300, сразу отсеял (в даташите на H616 явно говорится что там DI300) Играюсь с настройками, там несколько режимов. FB_ARG.field_order=1; //1:top field first 0:bottom field first FB_ARG.output_mode=0; //0: 1-frame 1: 2-frame FB_ARG.di_mode=0; //0:motion adaptive mode 1:inter field interpolation mode При движении руки, захват с камеры, полосок и раздвоений больше нет. На дисплей выводится выходной буфер де-интерлейсера. На вход де-интерлейсеру подаются пара кадров с камеры. Из четырёх вариантов, методом проб, попробовал 3 варианта: 2 облом + 1 успех.. Изменено 10 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ozelot 7 10 июля, 2022 Опубликовано 10 июля, 2022 · Жалоба On 7/10/2022 at 9:54 AM, repstosw said: Оказалась версия DI110 : регистр со смещением +0xC от базы в младших 12 битах возвращает версию: 0x110. Если запретить тактирование, этот регистр вернёт 0. drv_div1xx - DI110 (читается версия, статус-регистр обновляется, заработал) Можно ссылку, где про эту версию почитать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 10 июля, 2022 Опубликовано 10 июля, 2022 · Жалоба On 7/10/2022 at 5:31 PM, Ozelot said: Можно ссылку, где про эту версию почитать? Это в Tina Linux SDK для T113-s3: On 7/9/2022 at 10:28 PM, repstosw said: \Tina T113\tina-t113\lichee\linux-5.4\drivers\char\sunxi-di\ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 10 июля, 2022 Опубликовано 10 июля, 2022 (изменено) · Жалоба Буфера слева-направо: без де-интерлейсера, с де-интерлейсером, вспомогательный буфер (детектор движения?). Картинки лучше увеличить (на превью они замыленые). Изменено 10 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ozelot 7 11 июля, 2022 Опубликовано 11 июля, 2022 · Жалоба Переделал демку для f1c из поста: https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=157083&page=24#comment-1807637 Раньше преобразование тайлов в линейный вид и преобразование цветового пространства делал программно, на что уходило 24mS. Теперь задаю в DEBE слой в YUV-формате и делаю для него только детайлизацию, преобразование цвета делается аппаратно. В итоге на это теперь уходит 9mS. Декодирование jpeg 800*600 добавляет 3mS. Суммарно 12mS на декодирование одного фрейма. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 11 июля, 2022 Опубликовано 11 июля, 2022 (изменено) · Жалоба Сделал замеры производительности де-интерлейсера(DI) на чипе T113-s3. Частота DI 600 МГц. Кадры 720x576 YUV420(NV12) - 1,5 байта на точку. В режиме "motion adaptive" 4,736 мс + требуется вспомогательный буфер (без него DI затыкается) В режиме "inter field interpolation" 3,764 мс, вспомогательный буфер не требуется. В целом получилось 3 обработчика прерываний: TVD, DI и TCON_LCD: В конце захвата кадра TVD - прерывание по завершению захвата очередного кадра: своп входного буфера (TVD/DI) + запускается DI. В конце де-интерлейса кадра DI - прерывание по завершению операции: своп выходного буфера(DI/TCON_LCD) + выставляется флаг готовности для TCON_LCD В обработчике прерывания TCON_LCD: своп отображаемого выходного буфера + флаг готовности для записи JPEG-кодера (в программе). Для входных кадров DI применил тройную буферизацию: кадр 0 - захват TVD, кадры 1,2 - на вход DI кадр 1 - захват TVD, кадры 2,0 - на вход DI кадр 2 - захват TVD, кадры 0,1 - на вход DI ... и т.д. Для выходных кадров DI достаточно двойной буферизации: кадр 0 - на выход DI, кадр 1 - отображается на LCD_TCON кадр 1 - на выход DI, кадр 0 - отображается на LCD_TCON ... и т.д. При таком подходе процессор ничего не ждёт и никуда ничего не копирует: только переключает на нужные входной-выходной буфер по прерываниям. Анимация при захвате видео с камеры - плавная, без рывков, рваностей и дрожаний. On 7/11/2022 at 3:05 PM, Ozelot said: Теперь задаю в DEBE слой в YUV-формате и делаю для него только детайлизацию, преобразование цвета делается аппаратно. В итоге на это теперь уходит 9mS. А чего декодер не настроили на прямой формат? Или в F1C нельзя? С прямым форматом детайлизация не нужна. Изменено 11 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 11 июля, 2022 Опубликовано 11 июля, 2022 (изменено) · Жалоба Запустил аудио-кодек в T113-s3 на воспроизведение звука. Программная модель отличается от V3s: 1. Нет регистров ADDA, обращение к которым велось через "узкое бутылочное горлышко" 2. Некоторые регистры имеют другие оффсеты от базы 3. Появились новые биты в регистрах 4. Появились новые регистры Кодек сразу не заработал, пришлось смотреть как сделано в Линуксе (sun8iw20-codec.h / sun8iw20-codec.c). Там очень огромный инит, взял из него только то, что нужно. По дефолту кодек тактируется от PLL_AUDIO0, а у него кривая частота, перекинул тактирование на PLL_AUDIO1 и поделил на 25, чтобы получить ровно 24,576 МГц. Хотя можно было перенастроить PLL, но мне лень. Проверил пока кодек в режимах: 1). Debug mode: выдача синусоиды 2). PIO-режим: процессор ручками кладёт в кодек семплы (FIFO буфер у кодека - на 128 семплов, также как и у V3s) 3). PIO+IRQ -режим с прерыванием: в обработчике прерывания кладём семплы и ждем следующего прерывания Понятное дело, что режимы 2) и 3) мало-полезны для практического применения: нужен DMA. И вообще странно: кодек не имеет своего DMA, как это сделано в других узлах: TVD, DI, VE, LCD,... Помню, звуковая карта Cmedia CMI8738 и то - могла работать в режиме Bus Master: задаешь карте адрес откуда и сколько брать, частоту дискретизации, число каналов, формат данных и направление - и она захватывает шины. А в олвиннерах надо Generic DMA прикручивать. 4-й режим: DMA+IRQ (DRQ) будет доступен, когда освою DMA у T113-s3. Изменено 11 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 12 июля, 2022 Опубликовано 12 июля, 2022 · Жалоба Dma (dmac) с кодеком можете посмотреть у меня. Звук я не пытался получить но обмен заработал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 12 июля, 2022 Опубликовано 12 июля, 2022 (изменено) · Жалоба Удалось заставить работать DMA с аудио-кодеком. Модель DMA у T113-s3 таже самая, что и в V3s, но есть отличия: - оффсеты некоторых регистров относительно базового адреса изменены - изменён порядок следования бит в конфигурации (дескриптор) - в 2 раза увеличено общее число каналов DMA Один из подводных камней DMA: после инициализации кодека, а затем DMA, передача DMA не хотела начинаться. Нужно было после запуска DMA произвести запись в регистр AC_DAC_FIFOC. В V3s такого не было: передача начиналась сразу после запуска DMA. Сделал кольцевой буфер: пока играет одна половина буфера, заполняем другую. Потом приходит прерывание - меняем половины местами. Изменено 12 июля, 2022 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 12 июля, 2022 Опубликовано 12 июля, 2022 · Жалоба Но. Похоже старшие номера каналов щостурюпны толтко dsp ядру. Dmac более чем 7 не позволяет... Зы. У меня начинает работать само после разрешения. ... добавился адрес тотко что разработанного дескоиптора - крайне полезная фирма. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться