Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2015, 00:13   #1
Dizelektwo
Пользователь
 
Регистрация: 05.04.2012
Сообщений: 56
По умолчанию Fragment shader. YUYV в RGB

Здравствуйте, не могли бы Вы подсказать оптимальное решение для этой задачи.
Использую vlc, хочу сделать программное конвертирование на карточке.
Dizelektwo вне форума Ответить с цитированием
Старый 04.10.2015, 11:04   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

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

Код:
unsigned int Pics::Image::YUY22RGBA(unsigned int * pipo, const unsigned char * src, const unsigned int * box_vals) {
	int c(0), d(0), e(0), r(0), g(0), b(0);
	unsigned int wi(box_vals[0]>>1), hi(box_vals[1]), loff(box_vals[2]-box_vals[0]), xpo(0), result(0);
				
	for (unsigned int i(0); i < hi; i++) {
		for (unsigned int j(0); j < wi; j++) {

			c = src[0] - 16;
			d = src[1] - 128;
			e = src[3] - 128;
					
			r = 128 + e*409;
			g = 128 - (d*100 + e*208);
			b = 128 + d*516;
										
			d = (g + c*298) >> 8;
			e = (b + c*298) >> 8;
			c = (r + c*298) >> 8;
										
			if (c > 255) c = 255; if (c < 0) c = 0;
			if (d > 255) d = 255; if (d < 0) d = 0;
			if (e > 255) e = 255; if (e < 0) e = 0;
					
			pipo[xpo] = c | (d<<8) | (e<<16) | 0xFF000000;

			c = src[2] - 16;

			d = (g + c*298) >> 8;
			e = (b + c*298) >> 8;
			c = (r + c*298) >> 8;
										
			if (c > 255) c = 255; if (c < 0) c = 0;
			if (d > 255) d = 255; if (d < 0) d = 0;
			if (e > 255) e = 255; if (e < 0) e = 0;
					
			pipo[xpo+1] = c | (d<<8) | (e<<16) | 0xFF000000;


			pipo += 2;
			src += 4;
		}

		xpo += loff;
		
	}

	return result;

}
а чтобы все вообще было хорошо, применить к задаче SSE.
f.hump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RGB формы MrAdidas C# (си шарп) 5 08.02.2014 11:54
RGB в CMYK и CMYK в RGB могут конвертироваться без потери качества? hon Мультимедиа в Delphi 5 19.08.2012 14:41
rgb(***,***,***) Fisherman86 Общие вопросы Delphi 3 31.03.2012 11:40
direct3d9 HLSL shader и AABB ivan-b Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 26.08.2011 13:20
видеокарта и shader 3.0 alex(21) Компьютерное железо 4 24.10.2010 15:59