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

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

1 час назад, repstosw сказал:

куда девать второе ядро?

Ну тут каждый сам решает)))  У меня в системе есть основная часть и движок вирт. машины, в одноядерном они делили проц в соотн 60 на 40, в 2х ядерном можно каждому ядру дать 100% своей задачи...

1 час назад, repstosw сказал:

что у него есть графический движок :)  G2D

Так-то есть, но вот доков как всегда нет(((

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

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


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

6 часов назад, repstosw сказал:

куда девать второе ядро?

Можно биткоины майнить.  :biggrin:

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


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

12 hours ago, mantech said:

Так-то есть, но вот доков как всегда нет(((

 

Я смотрю алиэкспресс и вижу, что ни чипов, ни отдладочных плат с T113-S3 нет.  Или плохо искал?

Кто ещё может их продать в РФ ?

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

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


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

3 часа назад, repstosw сказал:

что ни чипов, ни отдладочных плат с T113-S3 нет.

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

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


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

1 hour ago, mantech said:

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

Ситуация 1-в-1 как была с V3s.

ТОже вначале - ни чипов, ни платы...

Потом появились на али-экспрессе

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


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

4 hours ago, Vasily_ said:

Я у такого продавца не стал бы ничего заказывать: ни рейтинга, ни отзывов.

Похож на мошенника.

 

https://ru.aliexpress.com/store/feedback-score/5877637.html

 

 

 

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

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


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

2 часа назад, repstosw сказал:

Я у такого продавца не стал бы ничего заказывать:

Спросил, говорят здесь брали - https://russian.alibaba.com/p-detail/Allwinner-1600453710935.html?spm=a2700.7724857.normal_offer.d_image.255b440blUwbc5

7 часов назад, repstosw сказал:

Ситуация 1-в-1 как была с V3s.

Да у них всегда так было, еще с А40х...

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


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

Может кому-то будет интересно. По ссылке сравнение производительности V3S и F1C100S на примере TinyGL: Baremetal TinyGL examples

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


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

12 часов назад, Ozelot сказал:

Может кому-то будет интересно.

Интересно-то может и интересно, другой вопрос - как с этой китайчи скачать что-нибудь?

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


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

Разбираюсь сейчас с режимами YUV420 у V3s для того, чтобы потом задействовать скейлер  для растяжения-сжатия картинки.  Как было ранее сказано, что скейлер работает только на видео-каналах (на RGB-каналах скейлера нет), то пришлось перегнать исходную картинку из RGB 888 в YUV420.

Исходная картинка 200x120:

0.png.9ee213037145b58b8be51e5d37835158.png 

Перегнал в YUV420:

2.png.4679d798ed34ec690120704530d0e5ee.png

1.png.e4e48c55833c94a78ba0eec5f765be6c.png

Код конвертации RGB в YUV420:

void Bitmap2Yuv420p(u8 *dst,u8 *src,u32 width,u32 height)
{
 u32 image_size=width*height;
 u32 upos=image_size;
 u32 vpos=upos+(upos/4);
 for(u32 i=0;i<image_size;i++)
 {
  u8 r=src[3*i  ];
  u8 g=src[3*i+1];
  u8 b=src[3*i+2];
  dst[i]=(((66*r)+(129*g)+(25*b))>>8)+16;
  if(!((i/width)%2)&&!(i%2))
  {
   dst[upos++]=(((-38*r)+(-74*g)+(112*b))>>8)+128;
   dst[vpos++]=(((112*r)+(-94*g)+(-18*b))>>8)+128;
  }
 }
}

В итоге, не получается получить требуемые размеры каналов U и V - они выходят в 2 раза меньше по ширине и в 4 раза меньше по высоте:

3.png.dad28905a861d7bda94df280e3597641.png

4.png.6c459c6abb95eba39302706df19399fa.png

С Y-каналом всё нормально: его размеры совпадают с требуемым.

А вот с U и V каналами какая-та фигня...

Причём, установка PICH никак не влияет на отображение этих каналов - она влияет только на логическое смещение в видеопамяти. Каналы по-прежнему уменьшены.

Код настройки плоскостей:

#define SCREEN_WIDTH  800 /* ширина дисплея */
#define SCREEN_HEIGHT 480 /* высота дисплея */

#define CH0_WIDTH  200 /* ширина канала 0 */
#define CH0_HEIGHT 120 /* высота канала 0 */

#define CH0_X 0 /* Х-позиция канала 0 */
#define CH0_Y 0 /* Y-позиция канала 0 */

#define CH0_BUFFER0 (VIDEO_MEMORY)                         /* буфер 0 канала 0 */
  
  struct de_vi * const de_vi_regs0 =
		(struct de_vi *)(SUNXI_DE2_MUX0_BASE +
				 SUNXI_DE2_MUX_CHAN_REGS +
				 (SUNXI_DE2_MUX_CHAN_SZ * 0) ); //Channel 0 Not Pixel Alpha

//CH0:
	data = SUNXI_DE2_UI_CFG_ATTR_EN                              |
               SUNXI_DE2_UI_CFG_ATTR_FMT(0xA /* SUNXI_DE2_FORMAT_YUV420 Planar*/ );

	writel(data,&de_vi_regs0->cfg[0].attr);

	writel(SUNXI_DE2_WH(CH0_WIDTH,CH0_HEIGHT-1),&de_vi_regs0->cfg[0].size);                     //CH0 WIDTH, HEIGHT

	writel((CH0_Y<<16)|CH0_X,&de_vi_regs0->cfg[0].coord);                                       //CH0 XCOOR, YCOOR

        //CH0 PITCH
        writel(CH0_WIDTH  ,&de_vi_regs0->cfg[0].pitch[0]); //Y
        writel(CH0_WIDTH/2,&de_vi_regs0->cfg[0].pitch[1]); //U
        writel(CH0_WIDTH/2,&de_vi_regs0->cfg[0].pitch[2]); //V

        //CH0 LAYMB_LADD
        writel(CH0_BUFFER0                                                ,&de_vi_regs0->cfg[0].top_laddr[0]); //Y
        writel(CH0_BUFFER0+(CH0_WIDTH*CH0_HEIGHT)                         ,&de_vi_regs0->cfg[0].top_laddr[1]); //U
        writel(CH0_BUFFER0+(CH0_WIDTH*CH0_HEIGHT)+(CH0_WIDTH*CH0_HEIGHT/4),&de_vi_regs0->cfg[0].top_laddr[2]); //V

        writel(SUNXI_DE2_WH(SCREEN_WIDTH,SCREEN_HEIGHT),&de_vi_regs0->ovl_size[0]); //CH0 OVL WIDTH, HEIGHT

 

Что я делаю не так?

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

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


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

Когда разбирался с аппаратным jpeg, делал так:

/* RGB to YUV conversion. Based on http://www.fourcc.org/fccyvrgb.php) */
#include <math.h>
int rgb2yuv (unsigned char *rgb, unsigned char *py, unsigned char *puv, int w, int h)
{
  int x, y;
  unsigned char r, g, b;
  if((w & 1) || (h & 1)) return -1;
  for(y = 0; y < h; y++)
  {
    for (x = 0; x < w; x++)
    {
      r = *rgb++;
      g = *rgb++;
      b = *rgb++;
      *py++ = round(0.299f * r + 0.587f * g + 0.114f * b);
      if((y & 1) && (x & 1))
      {
        *puv++ = round(-0.1687f * r - 0.3313f * g + 0.5f * b + 128);
        *puv++ = round(0.5f * r - 0.4187f * g - 0.0813f * b + 128);
      }
    }
  }
  return 0;
}

Коэффициенты можно, как и у вас, сделать на сдвигах...

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


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

6 hours ago, repstosw said:

Что я делаю не так?

Оказалось, что V3s не даёт на экране YUV, отображает RGB.   Причём Y - это R,  U,V соответственно это G и B.

При этом если сохранить картинку из RGB в отдельные плоскости R, G и B, то  всё работает нормально.

 Либо V3s не умеет YUV, либо какой-то бит не включен, переключающий отображение на дисплей с RGB На YUV.

Хотя режим плоскости задан верно:

 

#define SUN8I_MIXER_FBFMT_YUV420	10

 

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


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

А кто-нибудь  игрался с "Кедром" ?  Это такой аппаратный движок в камнях Allwinner, для кодирования и декодирования видео.

Пока только скромно хочу  декодировать JPEG-картинки.

Из более-менее BareMetal нашёлся вот такой проект: https://github.com/jemk/cedrus

Пришлось немного изменить его, в частности выкинуть всякие ve_virt2phys() , по-просту спрямив адреса: VA=PA.

А также принудительно вписать базу регистров: 0x01c0e000

 

Вначале программа повисала при первой записи в регистр.  Включил гейт на VE, сделал сброс, включил VE_PLL, задействовал дефолтную частоту.

Теперь запись в регистры не приводит к повисанию.  Прочёл версию "Кедра" - для V3s она 0x1681, что соответствует адекватному значению.

 

Описание всех регистров здесь: https://linux-sunxi.org/VE_Register_guide

 

Тем не менее, заставить этот проект работать на V3s не удалось - движок похоже не работает: буфера luma_output  и chroma_output - остаются без изменений.

При этом парсинг самого JPEG-файла идёт правильно (проверил).

 

Ещё вот эта муть непонятна с указанием адреса на пожатый кадр:

516101205_Screenshot_2022-04-16VERegisterguide-linux-sunxiorg.thumb.png.3de7a6edfc3b88ffc9cd89388f765d6e.png

 

Учитывая то, что внешняя память у V3s начинается с 0x40000000, неясно, почему в исходниках запись в этот регистр выглядит так:

// set input buffer
	writel(ve_virt2phys(input_buffer) | 0x70000000, ve_regs + VE_MPEG_VLD_ADDR);

 

Тоесть эта строчка кода игнорирует старший ниббл физического адреса (0x4), который согласно картинке выше должен был задаваться в младших битах регистра. Тоесть вот так:

	writel(      (((u32)input_buffer)&0x0FFFFFF0)|0x4| 0x70000000, ve_regs + VE_MPEG_VLD_ADDR);

 

И ещё куча невнятной фигни наподобие - выставить тип и разрядность памяти (DDR2/3, 16/32 bit) и бит 5 включения движка:

 

678259314_Screenshot_2022-04-16VERegisterguide-linux-sunxiorg(1).thumb.png.3a60a1e9659fe10d1afc1c0fa87ccaa5.png

 

В общем, какой-то слабый и мутный реверс вышел...  Пока не удаётся его заставить работать на V3s.

 

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


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

35 минут назад, repstosw сказал:

И ещё куча невнятной фигни наподобие - выставить тип и разрядность памяти

Зачем это вообще? Разрядность и тип, ИМХО должна выставляться только в ините памяти и больше нигде...

35 минут назад, repstosw сказал:

Пока только скромно хочу  декодировать JPEG-картинки.

Ну если это не для MJPEG, то нафига вообще лезть в дебри этих корок, которые абсолютно недокументированы... Разве, что только ради спортивного интереса. Еще и с учетом того, что эти корки конвертируют только в тейловые форматы, с которыми у вас, судя по пред. посту, как то не очень...

35 минут назад, repstosw сказал:

неясно, почему в исходниках запись в этот регистр выглядит так:

Скорее всего из-за трансляции виртуальных адресов.

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

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


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

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

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

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

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

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

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

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

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

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