⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 video_out_rgb.c

📁 最新osg包
💻 C
📖 第 1 页 / 共 5 页
字号:
			"subl $128, %%eax\n\t" /* eax = u0 - 128 */			"cvtsi2ss %%eax, %%xmm2\n\t" /* xmm2 = [0 | 0 | 0 | u0 - 128] */			"movzbl 3(%0), %%eax\n\t" /* eax = v0 */			"subl $128, %%eax\n\t" /* eax = v0 - 128 */			"cvtsi2ss %%eax, %%xmm1\n\t" /* xmm1 = [0 | 0 | 0 | v0 - 128] */			"addl $4, %0\n\t"			: "=&r" (yuv_data)			: "r" (lmask), "0" (yuv_data)			: "eax");		__asm__ __volatile__(			"prefetchnta 320(%0)\n\t"			"movss %%xmm1, %%xmm0\n\t" /* xmm0 = [0 | 0 | 0 | v0] */			"mulss %%xmm7, %%xmm0\n\t" /* xmm0 = [0 | 0 | 0 | v0 * 1.420705] */			"cvtps2pi %%xmm0, %%mm0\n\t" /* mm0 = [0 | v0 * 1.420705] */			"punpckldq %%mm0, %%mm0\n\t" /* mm0 = [v0 * 1.420705 | v0 * 1.420705] */			"paddd %%mm3, %%mm0\n\t" /* mm0 = [r1 | r0] */			"packssdw %%mm0, %%mm0\n\t" /* mm0 = [0 r1 0 r0 0 r1 0 r0] */			"packuswb %%mm0, %%mm0\n\t" /* mm0 = [r1 r0 r1 r0 r1 r0 r1 r0] */			"movd %%mm0, (%0)\n\t"			"prefetchnta 320(%2)\n\t"			"movss %%xmm2, %%xmm0\n\t" /* xmm0 = [0 | 0 | 0 | u0] */			"mulss %%xmm4, %%xmm0\n\t" /* xmm0 = [0 | 0 | 0 | u0 * 1.732446] */			"cvtps2pi %%xmm0, %%mm0\n\t" /* mm0 = [0 | u0 * 1.732446] */			"punpckldq %%mm0, %%mm0\n\t" /* mm0 = [u0 * 1.732446 | u0 * 1.732446] */			"paddd %%mm3, %%mm0\n\t" /* mm0 = [b1 | b0] */			"packssdw %%mm0, %%mm0\n\t" /* mm0 = [0 b1 0 b0 0 b1 0 b0] */			"packuswb %%mm0, %%mm0\n\t" /* mm0 = [b1 b0 b1 b0 b1 b0 b1 b0] */			"movd %%mm0, (%2)\n\t"			"prefetchnta 320(%1)\n\t"			"mulss %%xmm6, %%xmm1\n\t" /* xmm1 = [0 | 0 | 0 | v0 * 0.698001] */			"mulss %%xmm5, %%xmm2\n\t" /* xmm2 = [0 | 0 | 0 | u0 * 0.337633] */			"addss %%xmm2, %%xmm1\n\t" /* xmm1 = [0 | 0 | 0 | (v0 * 0.698001) + (u0 * 0.337633)] */			"cvtps2pi %%xmm1, %%mm0\n\t" /* mm0 = [0 | (v0 * 0.698001) + (u0 * 0.337633)] */			"punpckldq %%mm0, %%mm0\n\t" /* mm0 = [(v0 * 0.698001) + (u0 * 0.337633) |								(v0 * 0.698001) + (u0 * 0.337633)] */			"psubd %%mm0, %%mm3\n\t" /* mm3 = [g1 | g0] */			"packssdw %%mm3, %%mm3\n\t" /* mm3 = [0 g1 0 g0 0 g1 0 g0] */			"packuswb %%mm3, %%mm3\n\t" /* mm3 = [g1 g0 g1 g0 g1 g0 g1 g0] */			"movd %%mm3, (%1)\n\t"			"addl $2, %0\n\t"			"addl $2, %1\n\t"			"addl $2, %2\n\t"			: "=&r" (r_buffer), "=&r" (g_buffer), "=&r" (b_buffer)			: "0" (r_buffer), "1" (g_buffer), "2" (b_buffer)			: "memory");	}	__asm__ __volatile__("emms\n\t");}static void__sse_convert_yv12(uint8_t* yuv[], rgb_planar_t* rgb,			 uint32_t pitches[], uint32_t width, uint32_t height){	uint8_t* y_data = yuv[0];	uint8_t* u_data = yuv[1];	uint8_t* v_data = yuv[2];	uint8_t* r_buffer = rgb->r;	uint8_t* g_buffer = rgb->g;	uint8_t* b_buffer = rgb->b;	uint32_t line_size = width >> 1;	uint32_t samples   = line_size * (height >> 1);	__asm__ __volatile__(		"pxor %%mm7, %%mm7\n\t"		"movss   (%0), %%xmm7\n\t"		"movss  8(%0), %%xmm6\n\t"		"movss 16(%0), %%xmm5\n\t"		"movss 24(%0), %%xmm4\n\t"		:: "r" (fp_factors)		: "memory");	while(samples--)	{		__asm__ __volatile__(			"prefetchnta 192(%0)\n\t"			"prefetchnta 192(%1)\n\t"			"prefetchnta 192(%2)\n\t"			"prefetchnta 192(%3)\n\t"			"movd (%0), %%mm3\n\t" /* mm3 = [0 0 0 0 y03 y02 y01 y00] */			"punpcklbw %%mm7, %%mm3\n\t" /* mm6 = [0 y03 0 y02 0 y01 0 y00] */			"movd (%1), %%mm2\n\t" /* mm2 = [0 0 0 0 y13 y12 y11 y10] */			"punpcklbw %%mm7, %%mm2\n\t" /* mm2 = [0 y13 0 y12 0 y11 0 y10] */			"punpckldq %%mm2, %%mm3\n\t" /* mm3 = [0 y11 0 y10 0 y01 0 y00] */			"movzbl (%2), %%eax\n\t" /* eax = u0 */			"subl $128, %%eax\n\t" /* eax = u0 - 128 */			"cvtsi2ss %%eax, %%xmm1\n\t" /* xmm1 = [0 | 0 | 0 | u0 - 128] */			"movzbl (%3), %%eax\n\t" /* eax = v0 */			"subl $128, %%eax\n\t" /* eax = v0 - 128 */			"cvtsi2ss %%eax, %%xmm0\n\t" /* xmm0 = [0 | 0 | 0 | v0 - 128] */			:: "r" (y_data), "r" (y_data + pitches[0]),			   "r" (u_data), "r" (v_data)			: "eax");		__asm__ __volatile__(			"prefetchnta 320(%0)\n\t"			"movss %%xmm0, %%xmm3\n\t" /* xmm3 = [0 | 0 | 0 | v0] */			"mulss %%xmm7, %%xmm3\n\t" /* xmm3 = [0 | 0 | 0 | v0 * 1.420705] */			"cvtps2pi %%xmm3, %%mm0\n\t" /* mm0 = [0 | v0 * 1.420705] */			"punpckldq %%mm0, %%mm0\n\t" /* mm0 = [v0 * 1.420705 | v0 * 1.420705] */			"packssdw %%mm0, %%mm0\n\t" /* mm0 = [v0 * 1.420705 | v0 * 1.420705 | ...] */			"paddw %%mm3, %%mm0\n\t" /* mm0 = [0 r11 0 r10 0 r01 0 r00] */			"packuswb %%mm0, %%mm0\n\t" /* mm0 =  [r11 r10 r01 r00 r11 r10 r01 r00] */			"movd %%mm0, (%0)\n\t"			"psrld $16, %%mm0\n\t" /* mm0 = [0 0 r11 r10 0 0 r11 r10] */			"movd %%mm0, (%1)\n\t"			"addl $2, %0\n\t"			: "=&r" (r_buffer)			: "r" (r_buffer + width), "0" (r_buffer)			: "memory");		__asm__ __volatile__(			"prefetchnta 320(%0)\n\t"			"movss %%xmm1, %%xmm3\n\t" /* xmm3 = [0 | 0 | 0 | u0] */			"mulss %%xmm4, %%xmm3\n\t" /* xmm3 = [0 | 0 | 0 | u0 * 1.732446] */			"cvtps2pi %%xmm3, %%mm0\n\t" /* mm0 = [0 | u0 * 1.732446] */			"punpckldq %%mm0, %%mm0\n\t" /* mm0 = [u0 * 1.732446 | u0 * 1.732446] */			"packssdw %%mm0, %%mm0\n\t" /* mm0 = [u0 * 1.732446 | u0 * 1.732446 | ...] */			"paddw %%mm3, %%mm0\n\t" /* mm0 = [0 b11 0 b10 0 b01 0 b00] */			"packuswb %%mm0, %%mm0\n\t" /* mm0 = [b11 b10 b01 b00 b11 b10 b01 b00] */			"movd %%mm0, (%0)\n\t"			"psrld $16, %%mm0\n\t" /* mm0 = [0 0 b11 b10 0 0 b11 b10] */			"movd %%mm0, (%1)\n\t"			"addl $2, %0\n\t"			: "=&r" (b_buffer)			: "r" (b_buffer + width), "0" (b_buffer)			: "memory");		__asm__ __volatile__(			"prefetchnta 320(%0)\n\t"			"mulss %%xmm6, %%xmm0\n\t" /* xmm0 = [0 | 0 | 0 | (v0 * 0.698001)] */			"mulss %%xmm5, %%xmm1\n\t" /* xmm1 = [0 | 0 | 0 | (u0 * 0.337633)] */			"addss %%xmm1, %%xmm0\n\t" /* xmm0 = [0 | 0 | 0 | (v0 * 0.698001) + (u0 * 0.337633)] */			"cvtps2pi %%xmm0, %%mm0\n\t" /* mm0 = [0 | (v0 * 0.698001) + (u0 * 0.337633)] */			"punpckldq %%mm0, %%mm0\n\t" /* mm0 = [(v0 * 0.698001) + (u0 * 0.337633) | ...] */			"packssdw %%mm0, %%mm0\n\t" /* mm0 = [(short) (v0 * 0.698001) + (u0 * 0.337633) / ..] */			"psubw %%mm0, %%mm3\n\t" /* mm3 = [0 g11 0 g10 0 g01 0 g00] */			"packuswb %%mm3, %%mm3\n\t" /* mm3 = [g11 g10 g01 g00 g11 g10 g01 g00] */			"movd %%mm3, (%0)\n\t"			"psrld $16, %%mm3\n\t" /* mm3 = [0 0 g11 g10 0 0 g11 g10] */			"movd %%mm3, (%1)\n\t"			"addl $2, %0\n\t"			: "=&r" (g_buffer)			: "r" (g_buffer + width), "0" (g_buffer)			: "memory");		y_data += 2;		u_data++;		v_data++;		if(!(--line_size))		{			line_size = width >> 1;			y_data   += pitches[0];			r_buffer += width;			g_buffer += width;			b_buffer += width;		}	}	__asm__ __volatile__("emms\n\t");}static void__mmx_convert_yuy2(uint8_t* yuv[], rgb_planar_t* rgb,			uint32_t pitches[], uint32_t width, uint32_t height){	uint8_t* yuv_data = yuv[0];	uint8_t* r_buffer = rgb->r;	uint8_t* g_buffer = rgb->g;	uint8_t* b_buffer = rgb->b;	uint32_t samples = (width * height) >> 2; /* 4 pixels at once */	while(samples--)	{		__asm__ __volatile__(			"movq (%0), %%mm0\n\t" /* mm1 = [v2 y3 u2 y2 v0 y1 u0 y0] */			"movq %%mm0, %%mm3\n\t" /* mm3 = [v2 y3 u2 y2 v0 y1 u0 y0] */			"pand (%1), %%mm3\n\t" /* mm3 = [0 0 0 y2 0 0 0 y0] */			"movq %%mm0, %%mm2\n\t" /* mm2 = [v2 y3 u2 y2 v0 y1 u0 y0] */			"psrld $16, %%mm2\n\t" /* mm2 = [0 0 v2 y3 0 0 v0 y1] */			"pand (%1), %%mm2\n\t" /* mm2 = [0 0 0 y3 0 0 0 y1] */			"movq %%mm0, %%mm1\n\t" /* mm1 = [v2 y3 u2 y2 v0 y1 u0 y0] */			"psrld $8, %%mm1\n\t" /* mm1 = [0 v2 y3 u2 0 v0 y1 u0] */			"pand (%1), %%mm1\n\t" /* mm1 = [0 0 0 u2 0 0 0 u0] */			"psubd (%2), %%mm1\n\t" /* mm1 = [u2 - 128 | u0 - 128] */			"packssdw %%mm1, %%mm1\n\t" /* mm1 = [0 u2 0 u0 0 u2 0 u0] */			"psrld $24, %%mm0\n\t" /* mm0 = [0 0 0 v2 0 0 0 v0] */			"psubd (%2), %%mm0\n\t" /* mm0 = [v2 - 128 | v0 - 128] */			"packssdw %%mm0, %%mm0\n\t" /* mm0 = [0 u2 0 u0 0 u2 0 u0] */			"addl $8, %0\n\t"			: "=&r" (yuv_data)			: "r" (lmask), "r" (lsub), "0" (yuv_data)			: "memory");		__asm__ __volatile__(			"packssdw %%mm3, %%mm4\n\t" /* mm4 = [? ? ? ? 0 y2 0 y0] */			"punpckhwd %%mm0, %%mm4\n\t" /* mm4 = [0 v2 0 y2 0 v0 0 y0] */			"pmaddwd (%3), %%mm4\n\t" /* mm4 = [r2 << 14 | r0 << 14] */			"psrad $14,%%mm4\n\t" /* mm4 = [0 0 0 r2 0 0 0 r0] */			"packssdw %%mm4, %%mm4\n\t" /* mm4 = [0 r2 0 r0 0 r2 0 r0] */			"packssdw %%mm2, %%mm5\n\t" /* mm5 = [? ? ? ? 0 y3 0 y1] */			"punpckhwd %%mm0, %%mm5\n\t" /* mm5 = [0 v2 0 y3 0 v0 0 y1] */			"pmaddwd (%3), %%mm5\n\t" /* mm5 = [r3 << 14| r1 << 14] */			"psrad $14, %%mm5\n\t" /* mm5 = [0 0 0 r3 0 0 0 r1] */			"packssdw %%mm5, %%mm5\n\t" /* mm5 = [0 r3 0 r1 0 r3 0 r1] */			"punpckhwd %%mm5, %%mm4\n\t" /* mm4 = [0 r3 0 r2 0 r1 0 r0] */			"packuswb %%mm4, %%mm4\n\t" /* mm4 = [r3 r2 r1 r0 r3 r2 r1 r0] */			"movd %%mm4, (%0)\n\t"			"packssdw %%mm3, %%mm4\n\t" /* mm4 = [? ? ? ? 0 y2 0 y0] */			"punpckhwd %%mm1, %%mm4\n\t" /* mm4 = [0 u2 0 y2 0 u0 0 y0] */			"pmaddwd 8(%3), %%mm4\n\t" /* mm4 = [b2 << 14 | b0 << 14] */			"psrad $14, %%mm4\n\t" /* mm4 = [0 0 0 b2 0 0 0 b0] */			"packssdw %%mm4, %%mm4\n\t" /* mm4 = [0 b2 0 b0 0 b2 0 b0] */			"packssdw %%mm2, %%mm5\n\t" /* mm5 = [? ? ? ? 0 y3 0 y1] */			"punpckhwd %%mm1, %%mm5\n\t" /* mm5 = [0 u2 0 y3 0 u0 0 y1] */			"pmaddwd 8(%3), %%mm5\n\t" /* mm5 = [b3 << 14 | b1 << 14] */			"psrad $14, %%mm5\n\t" /* mm5 = [0 0 0 b3 0 0 0 b1] */			"packssdw %%mm5, %%mm5\n\t" /* mm5 = [0 b3 0 b1 0 b3 0 b1] */			"punpckhwd %%mm5, %%mm4\n\t" /* mm4 = [0 b3 0 b2 0 b1 0 b0] */			"packuswb %%mm4, %%mm4\n\t" /* mm4 = [b3 b2 b1 b0 b3 b2 b1 b0] */			"movd %%mm4, (%2)\n\t"			"punpckhwd %%mm1, %%mm0\n\t" /* mm0 = [0 u2 0 v2 0 u0 0 v0] */			"pmaddwd 16(%3), %%mm0\n\t" /* mm0 = [(u2 * 5532) + (v2 * 11436) | ...] */			"pslld $14, %%mm3\n\t"			"psubd %%mm0, %%mm3\n\t" /* mm3 = [g2 << 14 | g0 << 14] */			"psrad $14, %%mm3\n\t" /* mm3 = [0 0 0 g2 0 0 0 g0] */			"packssdw %%mm3, %%mm3\n\t" /* mm3 = [0 g2 0 g0 0 g2 0 g0] */			"pslld $14, %%mm2\n\t"			"psubd %%mm0, %%mm2\n\t" /* mm2 = [g3 << 14 | g1 << 14] */			"psrad $14, %%mm2\n\t" /* mm2 = [0 0 0 g3 0 0 0 g1] */			"packssdw %%mm2, %%mm2\n\t" /* mm2 = [0 g3 0 g1 0 g3 0 g1] */			"punpckhwd %%mm2, %%mm3\n\t" /* mm3 = [0 g3 0 g2 0 g1 0 g0] */			"packuswb %%mm3, %%mm3\n\t" /* mm3 = [g3 g2 g1 g0 g3 g2 g1 g0] */			"movd %%mm3, (%1)\n\t"			"addl $4, %0\n\t"			"addl $4, %1\n\t"			"addl $4, %2\n\t"			: "=&r" (r_buffer), "=&r" (g_buffer), "=&r" (b_buffer)			: "r" (wd_factors), "0" (r_buffer), "1" (g_buffer), "2" (b_buffer)			: "memory");	}	__asm__ __volatile__("emms\n\t");}static void__mmx_convert_yv12(uint8_t* yuv[], rgb_planar_t* rgb,			 uint32_t pitches[], uint32_t width, uint32_t height){	static const uint16_t wsub[] =	{		128, 128,		128, 128	};	uint8_t* y_data = yuv[0];	uint8_t* u_data = yuv[1];	uint8_t* v_data = yuv[2];	uint8_t* r_buffer = rgb->r;	uint8_t* g_buffer = rgb->g;	uint8_t* b_buffer = rgb->b;	uint32_t line_size = width >> 1; /* 2 pixels at once */	uint32_t samples   = line_size * (height >> 1);	__asm__ __volatile__(		"pxor %%mm7, %%mm7\n\t"		::: "memory");	while(samples--)	{		__asm__ __volatile__(			"movd (%0), %%mm3\n\t" /* mm3 = [0 0 0 0 y03 y02 y01 y00] */			"movd (%1), %%mm2\n\t" /* mm2 = [0 0 0 0 y13 y12 y11 y10] */			"movd (%2), %%mm1\n\t" /* mm1 = [0 0 0 0 u12 u8 u4 u0] */			"movd (%3), %%mm0\n\t" /* mm0 = [0 0 0 0 v12 v8 v4 v0] */			"punpcklbw %%mm7, %%mm3\n\t" /* mm3 = [0 y03 0 y02 0 y01 0 y00] */			"punpcklbw %%mm7, %%mm2\n\t" /* mm2 = [0 y13 0 y12 0 y11 0 y10] */			"punpckldq %%mm1, %%mm1\n\t" /* mm1 = [u12 u8 u4 u0 u12 u8 u4 u0] */			"pand (%5), %%mm1\n\t" /* mm1 = [0 0 0 u0 0 0 0 u0] */			"packssdw %%mm1, %%mm1\n\t" /* mm1 = [0 u0 0 u0 0 u0 0 u0] */			"psubw (%4), %%mm1\n\t" /* mm1 = [u0 -128 | u0 -128 | ...] */			"punpckldq %%mm0, %%mm0\n\t" /* mm0 = [v12 v8 v4 v0 v12 v8 v4 v0] */			"pand (%5), %%mm0\n\t" /* mm1 = [0 0 0 v0 0 0 0 v0] */			"packssdw %%mm0, %%mm0\n\t" /* mm1 = [0 v0 0 v0 0 v0 0 v0] */			"psubw (%4), %%mm0\n\t" /* mm1 = [v0 -128 | v0 -128 | ...] */			:: "r" (y_data), "r" (y_data + pitches[0]),			   "r" (u_data), "r" (v_data), "r" (wsub), "r" (lmask)			: "memory");		__asm__ __volatile__(			"movq %%mm3, %%mm4\n\t"			"punpcklwd %%mm0, %%mm4\n\t" /* mm4 = [0 v0 0 y01 0 v0 0 y00] */			"pmaddwd (%2), %%mm4\n\t" /* mm4 = [r01 << 14 | r00 << 14] */			"psrad $14, %%mm4\n\t" /* mm4 = [r01 | r00] */			"movq %%mm2, %%mm5\n\t"			"punpcklwd %%mm0, %%mm5\n\t" /* mm5 = [0 v0 0 y11 0 v0 0 y10] */			"pmaddwd (%2), %%mm5\n\t" /* mm5 = [r11 << 14 | r10 << 14] */			"psrad $14, %%mm5\n\t" /* mm5 = [r11 | r10] */			"packssdw %%mm5, %%mm4\n\t" /* mm4 = [r11 | r10 | r01 | r00] */			"packuswb %%mm4, %%mm4\n\t" /* mm4 = [r11 r10 r01 r00 r11 r10 r01 r00] */			"movd %%mm4, (%0)\n\t"			"psrld $16, %%mm4\n\t" /* mm4 = [0 0 r11 r10 0 0 r11 r10] */			"movd %%mm4, (%1)\n\t"			"addl $2, %0\n\t"			: "=&r" (r_buffer)			: "r" (r_buffer + width), "r" (wd_factors), "0" (r_buffer)			: "memory");		__asm__ __volatile__(			"movq %%mm3, %%mm4\n\t"			"punpcklwd %%mm1, %%mm4\n\t" /* mm4 = [0 u0 0 y01 0 u0 0 y00] */			"pmaddwd 8(%2), %%mm4\n\t" /* mm4 = [b01 << 14 | b00 << 14] */			"psrad $14, %%mm4\n\t" /* mm4 = [b01 | b00] */			"movq %%mm2, %%mm5\n\t"			"punpckhwd %%mm1, %%mm5\n\t" /* mm5 = [0 u0 0 y11 0 u0 0 y10] */			"pmaddwd 8(%2), %%mm5\n\t" /* mm5 = [b11 << 14 | b10 << 14] */			"psrad $14, %%mm5\n\t" /* mm5 = [b11 | b10] */			"packssdw %%mm5, %%mm4\n\t" /* mm4 = [b11 | b10 | b01 | b00] */			"packuswb %%mm4, %%mm4\n\t" /* mm4 = [b11 b10 b01 b00 r11 b10 b01 b00] */			"movd %%mm4, (%0)\n\t"			"psrld $16, %%mm4\n\t" /* mm4 = [0 0 b11 b10 0 0 b11 b10] */			"movd %%mm4, (%1)\n\t"			"addl $2, %0\n\t"			: "=&r" (b_buffer)			: "r" (b_buffer + width), "r" (wd_factors), "0" (b_buffer)			: "memory");		__asm__ __volatile__(			"punpcklwd %%mm1, %%mm0\n\t" /* mm0 = [0 u0 0 v0 0 u0 0 v0] */			"pmaddwd 16(%2), %%mm0\n\t" /* mm0 = [(u0 * 5532) + (v0 * 11436) | ...] */			"punpcklwd %%mm7, %%mm3\n\t" /* mm3 = [0 0 0 y01 0 0 0 y00] */			"pslld $14, %%mm3\n\t" /* mm3 = [y01 << 14 | y00 << 14] */			"psubd %%mm0, %%mm3\n\t" /* mm3 = [g01 << 14 | g00 << 14] */			"psrad $14, %%mm3\n\t" /* mm3 = [g01 | g00] */			"punpcklwd %%mm7, %%mm2\n\t" /* mm2 = [0 0 0 y11 0 0 0 y10] */			"pslld $14, %%mm2\n\t" /* mm2 = [y11 << 14 | y10 << 14] */			"psubd %%mm0, %%mm2\n\t" /* mm2 = [g11 << 14 | g10 << 14] */			"psrad $14, %%mm2\n\t" /* mm2 = [g11 | g10] */			"packssdw %%mm2, %%mm3\n\t" /* mm3 = [g11 | g10 | g01 | g00] */			"packuswb %%mm3, %%mm3\n\t" /* mm3 = [g11 g10 g01 g00 g11 g10 g01 g00] */			"movd %%mm3, (%0)\n\t"			"psrld $16, %%mm3\n\t" /* mm3 = [0 0 g11 g10 0 0 g11 g10] */			"movd %%mm3, (%1)\n\t"			"addl $2, %0\n\t"			: "=&r" (g_buffer)			: "r" (g_buffer + width), "r" (wd_factors), "0" (g_buffer)			: "memory");		y_data += 2;		u_data++;		v_data++;		if(!(--line_size))		{			line_size = width >> 1;			y_data   += pitches[0];			r_buffer += width;			g_buffer += width;			b_buffer += width;		}	}	__asm__ __volatile__("emms\n\t");}#endif#define range(x)  ((x < 0) ? 0 : ((x > 0xff) ? 0xff : x))static void__dummy_convert_yuy2(uint8_t* yuv[], rgb_planar_t* rgb,			 uint32_t pitches[], uint32_t width, uint32_t height){	uint8_t* yuv_data = yuv[0];	uint8_t* r_buffer = rgb->r;	uint8_t* g_buffer = rgb->g;	uint8_t* b_buffer = rgb->b;	uint32_t samples = (width * height) >> 1; /* 2 pixels at once */	while(samples--)	{		int u, y, v, y2;		int m1, m2, m3, m4;		int r, g, b;		y  = *(yuv_data)     << 16;		u  = *(yuv_data + 1) - 128;		y2 = *(yuv_data + 2) << 16;		v  = *(yuv_data + 3) - 128;		m1 = v * dw_factors[0];		m2 = v * dw_factors[1];		m3 = u * dw_factors[2];		m4 = u * dw_factors[3];		r = (int) (y + m1) >> 16;		g = (int) (y - m2 - m3) >> 16;		b = (int) (y + m4) >> 16;		*(r_buffer) = range(r);		*(g_buffer) = range(g);		*(b_buffer) = range(b);		r = (int) (y2 + m1) >> 16;		g = (int) (y2 - m2 - m3) >> 16;		b = (int) (y2 + m4) >> 16;		*(r_buffer + 1) = range(r);		*(g_buffer + 1) = range(g);		*(b_buffer + 1) = range(b);		yuv_data += 4;		r_buffer += 2;		g_buffer += 2;		b_buffer += 2;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -