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

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

On 6/29/2022 at 5:34 PM, GenaSPB said:

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

Горизонтальные линии нормально.

Для вертикальных линий можно альфу использовать для невидимых пикселей

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


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

У кого есть инфа про то - что за какой блок отвечает?
Чтобы понять каким блокам ставить размер всего экрана а каким заполняемой области?

ps: это еще к копированию не приступал

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


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

В 29.06.2022 в 10:12, repstosw сказал:

Вы валите всё прямо на экранную память??? :shok: Оно ж мерцать будет, когда одни картинки поверх других рисуются циклически...

Гифка не мерцает, ее размер 1\4 экрана, если выводить на полный, то заметно, почему не мерцает маленькая - как вариант очень быстрая отрисовка, глаз не успевает среагировать, меня устраивает)))))

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


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

On 6/29/2022 at 7:10 PM, GenaSPB said:

У кого есть инфа про то - что за какой блок отвечает?
Чтобы понять каким блокам ставить размер всего экрана а каким заполняемой области?

 

1) sunxi g2d模块使用文档.pdf

2) RTOS_G2D_Development_Guide.pdf

 

Оба гуглятся за пару секунд.   Там расписаны все структуры для G2D как заполнять. :sun_bespectacled:

 

 1.thumb.jpg.36128d38dcc694b50dcba005b5e12962.jpg2.thumb.jpg.7a7215d6f9ee7c33fb7bdbb345fbe088.jpg

 

Особо удивили "повороты" на 45 и 135 градусов -  я думал, что это диагональные которые... :lol2:

Китайцы думают иначе:

 

image.thumb.png.d1c605832b469f1dfe2229e9e2b35662.png

 

 

Играюсь с цветовым ключом.  Одних исходников Линукса мало. Они недоделаны, приходится сращивать самому:

 

1) Было:  DSTOVER, сделал SRCOVER. Иначе то что отрисовано первее - сохраняется, мешая рисоваться остальному поверх нарисованного

 

2) С цветовым ключом намудрили.  KeyMin, KeyMax - вообще не передаются в функциях в G2D. Игнорируются - NULL везде.  Расширил.  Цветовой ключ который не альфа, а colorkey который.

 

И он немного странноватый: когда задаёшь его значение ровно (MinKey = MaxKey) - прозрачность не срабатывает!  Пришлось так:

 

 

MinKey = ColorKey -0x010101

MaxKey=ColorKey + 0x010101

 

В идеале сюда надо SIMD инструкции впарить - чтобы сложить/вычесть побайтно с насыщением.

Тогда цветовой ключ - работает.

 

Речь идёт о пиксельном цветовом ключе RGB.

 

		ck_para->match_rule = 0;
		ck_para->max_color  = para->color +0x010101;
		ck_para->min_color  = para->color -0x010101;

		result = g2d_bsp_bld(src, dst, G2D_BLD_SRCOVER /*G2D_BLD_DSTOVER*/ , ck_para /*NULL*/); //приоритет отрисовки и цветовой ключ!

 

Прозрачность можно сделать и через альфа-блендинг.

 

Что такое KeyMin, KeyMax, правила цветового ключа и условия - это можно в доке на DE2.0 почитать, правда там разбитовка регистров от DE, она не совпадает с G2D. Но суть та же.

 

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

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


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

В 29.06.2022 в 10:12, repstosw сказал:

Копирование из памяти в память (тесты G2D и NEON).

Спасибо за инфу по скоростям, примерно так и предполагал, решил, что g2d на данный момент мне не нужен))

Что-нить из разряда "настоящего" видео пока не раскуривали, типа декодирования аппаратного mpeg4 или что-то вроде того?

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

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


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

On 6/29/2022 at 8:51 PM, mantech said:

Что-нить из разряда "настоящего" видео пока не раскуривали, типа декодирования аппаратного mpeg4 или что-то вроде того?

Пока нет.

Хочу натравить G2D чтобы он YUV с камеры брал и отрисовывал на дисплей в RGB.  Он это может (конвертировать входной формат).

Потом с JPEG декодер - надо проверить, пойдёт ли он с A13.

Потом может h264 видео.

 

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


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

В 29.06.2022 в 13:56, repstosw сказал:

Потом с JPEG декодер - надо проверить

Из каких исходников декодер брали? Если не сложно, киньте ссылку...

И еще так, для справки, не замеряли, сколь по времени декодирует полноэкранную картинку, в среднем?

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

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


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

On 6/29/2022 at 9:08 PM, mantech said:

Из каких исходников декодер брали? Если не сложно, киньте ссылку...

И еще так, для справки, не замеряли, сколь по времени декодирует полноэкранную картинку, в среднем?

 

Про декодер JPEG я писал и давал ссылки начиная с этого поста:

 

 

Но он у меня пошёл только на A13.

Замеры не делал, так как мне это было не сильно нужно.

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


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

В 30.06.2022 в 06:14, repstosw сказал:

Но он у меня пошёл только на A13.

Понял. На v3s(T113)  так и не удалось запустить?

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


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

On 6/29/2022 at 2:08 PM, mantech said:

И еще так, для справки, не замеряли, сколь по времени декодирует полноэкранную картинку, в среднем?

https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=157083&page=22#comment-1806614

https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=157083&page=24#comment-1807637

Запустил на f1c аппаратный декодер видео mpeg1/2. Время декодирования такое же, как и для jpeg.

 

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


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

В 30.06.2022 в 12:27, Ozelot сказал:

Запустил на f1c аппаратный декодер

Да, это я видел, но к сожалению, то что работает на f1c  не идет на v3s...

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


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

On 6/30/2022 at 4:04 PM, mantech said:

Понял. На v3s(T113)  так и не удалось запустить?

На V3s - нет.

На T113-s3 - не пробовал.

 

Поднял SMHC0 на T113-s3 и чтение/запись на SD-карту.  Код адаптировал с x-boot.   Был подводный камень: в sdcard.c в функции mmc_status(...) стояло маленькое число повторов, из-за чего запись на карту завершалась неудачно на высоких скоростях:

 

static int mmc_status(struct sdhci_t * hci, struct sdcard_t * card)
{
	struct sdhci_cmd_t cmd = { 0 };
	int retries = 1000; //100;       -------------- тормозные карты не успевали давать правильный ответ: запись завершалась неудачно

	cmd.cmdidx = MMC_SEND_STATUS;
	cmd.resptype = MMC_RSP_R1;
	cmd.cmdarg = card->rca << 16;
	do
	{
		if(!sdhci_t113_transfer(hci, &cmd, NULL))
			continue;

		if(cmd.response[0] & (1 << 8))
			break;

		udelay(1);

	} while(retries-- > 0);

	if(retries > 0)
		return ((cmd.response[0] >> 9) & 0xf);

	return -1;
}

 

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


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

On 6/30/2022 at 10:41 PM, repstosw said:

Был подводный камень: в sdcard.c в функции mmc_status(...) стояло маленькое число повторов, из-за чего запись на карту завершалась неудачно на высоких скоростях:

  Карта отказывается работать, если быстро читать сектора.  Вываливается ошибку по таймауту:

 

u64_t mmc_read_blocks(u8_t * buf, u64_t start, u64_t blkcnt)
{
	struct sdhci_t *hci=&HCI;
	struct sdcard_t *card=&CARD;

	struct sdhci_cmd_t cmd = { 0 };
	struct sdhci_data_t dat = { 0 };

	int status;

	if(blkcnt > 1)
		cmd.cmdidx = MMC_READ_MULTIPLE_BLOCK;
	else
		cmd.cmdidx = MMC_READ_SINGLE_BLOCK;

	if(card->high_capacity)
        {
		cmd.cmdarg = start;
        }
	else
        {
		cmd.cmdarg = start * card->read_bl_len;
        }

	cmd.resptype = MMC_RSP_R1;
	dat.buf = buf;
	dat.flag = MMC_DATA_READ;
	dat.blksz = card->read_bl_len;
	dat.blkcnt = blkcnt;

	if(!sdhci_t113_transfer(hci, &cmd, &dat))
        {
		return 0;
        }

	if(!hci->isspi)
	{
		do {
			status = mmc_status(hci, card);

			if(status < 0)
                        {
				return 0;
                        }

		} while((status != MMC_STATUS_TRAN) && (status != MMC_STATUS_DATA));
	}

	if(blkcnt > 1)
	{
		cmd.cmdidx = MMC_STOP_TRANSMISSION;
		cmd.cmdarg = 0;
		cmd.resptype = MMC_RSP_R1B;

		if(!sdhci_t113_transfer(hci, &cmd, NULL))
                {
			return 0;
                }
	}

	return blkcnt;
}

 

Здесь вываливается - в return 0:

 

	if(!hci->isspi)
	{
		do {
			status = mmc_status(hci, card);

			if(status < 0)
                        {
				return 0;
                        }

		} while((status != MMC_STATUS_TRAN) && (status != MMC_STATUS_DATA));
	}

 

Пробовал снижать скорость, даже на 400 кГц чтения рано или поздно завершатся с ошибкой.  Причем карта намертво повисает, только reset или отключение питания.

Подтяжки к питанию на всех линиях.

 

В чём может быть дело?

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


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

Внутири sdhci_t113_transfer что именно ожидаем?
Я встречал некоторую неаккуратность в qspi драйвере (из исходников xfel). Устанавливался бит запуска обмена и дожидались появления запрошенного количества в выходном fifo. При повторном БЫСТРОМ вызове висло. Выяснилось - надо дождаться исчезновения бита запуска.

Может и тут такое же упрощение?

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

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


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

On 7/2/2022 at 12:29 AM, GenaSPB said:

Внутири sdhci_t113_transfer что именно ожидаем?
Я встречал некоторую неаккуратность в qspi драйвере (из исходников xfel). Устанавливался бит запуска обмена и дожидались появления запрошенного количества в выходном fifo. При повторном БЫСТРОМ вызове висло. Выяснилось - надо дождаться исчезновения бита запуска.

Может и тут такое же упрощение?

 

bool_t sdhci_t113_transfer(struct sdhci_t * sdhci, struct sdhci_cmd_t * cmd, struct sdhci_data_t * dat)
{
	if(!dat)
		return t113_transfer_command(cmd, dat);

	return t113_transfer_data(cmd, dat);
}

 

Физика хоста тут:  https://gitee.com/xboot/xboot/blob/master/src/arch/arm32/mach-t113s3/driver/sdhci-t113.c

На уровне передачи команд: https://gitee.com/xboot/xboot/blob/master/src/driver/sd/sdcard.c

На их основе делаю.

Есть ли там то о чём вы говорите?

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


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

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

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

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

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

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

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

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

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

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