亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? yuv2rgb_mmx.c

?? 本程序介紹MPEG-4解碼技術
?? C
?? 第 1 頁 / 共 2 頁
字號:
			mov edi, horiz_count
			
		horiz_loop:

			movd mm2, [ecx]					 ; mm2 = ________u3u2u1u0
			movd mm3, [edx]					 ; mm3 = ________v3v2v1v0
			movq mm0, [ebx]          ; mm0 = y7y6y5y4y3y2y1y0  

			pxor mm7, mm7						 ; zero mm7

			punpcklbw mm2, mm7       ; mm2 = __u3__u2__u1__u0
			punpcklbw mm3, mm7       ; mm3 = __v3__v2__v1__v0
			psubw mm2, mmw_0x0080    ; mm2 -= 128
			psubw mm3, mmw_0x0080    ; mm3 -= 128
			psllw mm2, 3             ; mm2 *= 8
			psllw mm3, 3             ; mm3 *= 8
			movq mm4, mm2            ; mm4 = mm2 = u
			movq mm5, mm3            ; mm5 = mm3 = v
			pmulhw mm2, mmw_mult_U_G ; mm2 *= u green coeff 
			pmulhw mm3, mmw_mult_V_G ; mm3 *= v green coeff  
			pmulhw mm4, mmw_mult_U_B ; mm4 = blue chroma
			pmulhw mm5, mmw_mult_V_R ; mm5 = red chroma
			paddsw mm2, mm3					 ; mm2 = green chroma

		
			psubusb mm0, mmb_0x10    ; mm0 -= 16
			movq mm1, mmw_0x00ff     ; mm1 = 00ff00ff00ff00ff 
			psrlw mm0, 8             ; mm0 = __y7__y5__y3__y1 luma odd
			pand mm1, mm0            ; mm1 = __y6__y4__y2__y0 luma even
			psllw mm0, 3             ; mm0 *= 8
			psllw mm1, 3             ; mm1 *= 8
			pmulhw mm0, mmw_mult_Y   ; mm0 luma odd *= luma coeff 
			pmulhw mm1, mmw_mult_Y   ; mm1 luma even *= luma coeff 

	
			movq mm3, mm4						 ; copy blue chroma
			movq mm6, mm5						 ; copy red chroma
			movq mm7, mm2						 ; copy green chroma
			paddsw mm3, mm0					 ; mm3 = luma odd + blue chroma
			paddsw mm4, mm1					 ; mm4 = luma even + blue chroma
			paddsw mm6, mm0					 ; mm6 = luma odd + red chroma
			paddsw mm5, mm1					 ; mm5 = luma even + red chroma
			paddsw mm7, mm0					 ; mm7 = luma odd + green chroma
			paddsw mm2, mm1					 ; mm2 = luma even + green chroma
		
			packuswb mm3, mm3
			packuswb mm4, mm4
			packuswb mm6, mm6
			packuswb mm5, mm5
			packuswb mm7, mm7
			packuswb mm2, mm2
		
			punpcklbw mm4, mm3			 ; mm4 = b7b6b5b4b3b2b1b0 blue
			punpcklbw mm5, mm6			 ; mm5 = r7r6r5r4r3r2r1r0 red
			punpcklbw mm2, mm7			 ; mm2 = g7g6g5g4g3g2g1g0 green


			pand mm4, mask_5
			pand mm5, mask_5
			pand mm2, mask_5

	

			psrlw mm4, 3						 ; mm4 = blue shifted
			pand mm4, mask_blue			 ; mask the blue again
			pxor mm7, mm7						 ; zero mm7
			movq mm1, mm4						 ; mm1 = copy blue
			movq mm3, mm5						 ; mm3 = copy red
			movq mm6, mm2						 ; mm6 = copy green

			punpckhbw mm1, mm7
			punpckhbw mm3, mm7
			punpckhbw mm6, mm7
			psllw mm6, 2						 ; shift green
			psllw mm3, 7						 ; shift red
			por mm6, mm3
			por mm6, mm1
			movq 8[eax], mm6

			punpcklbw mm2, mm7			 ; mm2 = __g3__g2__g1__g0 already masked
			punpcklbw mm5, mm7
			punpcklbw mm4, mm7
			psllw mm2, 2						 ; shift green
			psllw mm5, 7						 ; shift red
			por mm2, mm5
			por mm2, mm4
			movq [eax], mm2

			add ebx, 8               ; puc_y   += 8;
			add ecx, 4               ; puc_u   += 4;
			add edx, 4               ; puc_v   += 4;
			add eax, 16              ; puc_out += 16 // wrote 16 bytes

			inc edi
			jne horiz_loop			

			pop edi 
			pop edx 
			pop ecx
			pop ebx 
			pop eax

			emms
						
		}
		puc_y   += stride_y;
		if (y%2) {
			puc_u   += stride_uv;
			puc_v   += stride_uv;
		}
		puc_out += stride_out;
	}
}

/***/

#define _S(a)		(a)>255 ? 255 : (a)<0 ? 0 : (a)

#define _R(y,u,v) (0x2568*(y)  			       + 0x3343*(u)) /0x2000
#define _G(y,u,v) (0x2568*(y) - 0x0c92*(v) - 0x1a1e*(u)) /0x2000
#define _B(y,u,v) (0x2568*(y) + 0x40cf*(v))					     /0x2000

#define _mR	0x7c00
#define _mG 0x03e0
#define _mB 0x001f

#define _Ps565(r,g,b) ( ((r & 0xF8) >> 3) | (((g & 0xF8) << 3)) | (((b & 0xF8) << 8)) )


void yuv2rgb_565(uint8_t *puc_y, int stride_y, 
                uint8_t *puc_u, uint8_t *puc_v, int stride_uv, 
                uint8_t *puc_out, int width_y, int height_y,
								unsigned int _stride_out) 
{

	int y, horiz_count;
	unsigned short * pus_out;
	int stride_out = width_y * 2;

	if (height_y < 0) {
	
		height_y  = -height_y;
		puc_y     += (height_y   - 1) * stride_y ;
		puc_u     += (height_y/2 - 1) * stride_uv;
		puc_v     += (height_y/2 - 1) * stride_uv;
		stride_y  = -stride_y;
		stride_uv = -stride_uv;
	}
	pus_out = (unsigned short *) puc_out;

	horiz_count = -(width_y >> 3);

	for (y=0; y<height_y; y++) 
	{


		_asm {
			push eax
			push ebx
			push ecx
			push edx
			push edi

			mov eax, puc_out       
			mov ebx, puc_y       
			mov ecx, puc_u       
			mov edx, puc_v
			mov edi, horiz_count
			
		horiz_loop:

		
			movd mm2, [ecx]					 ; mm2 = ________u3u2u1u0
			movd mm3, [edx]					 ; mm3 = ________v3v2v1v0
			movq mm0, [ebx]          ; mm0 = y7y6y5y4y3y2y1y0  

			pxor mm7, mm7						 ; zero mm7

			punpcklbw mm2, mm7       ; mm2 = __u3__u2__u1__u0
			punpcklbw mm3, mm7       ; mm3 = __v3__v2__v1__v0
			psubw mm2, mmw_0x0080    ; mm2 -= 128
			psubw mm3, mmw_0x0080    ; mm3 -= 128
			psllw mm2, 3             ; mm2 *= 8
			psllw mm3, 3             ; mm3 *= 8
			movq mm4, mm2            ; mm4 = mm2 = u
			movq mm5, mm3            ; mm5 = mm3 = v
			pmulhw mm2, mmw_mult_U_G ; mm2 *= u green coeff 
			pmulhw mm3, mmw_mult_V_G ; mm3 *= v green coeff  
			pmulhw mm4, mmw_mult_U_B ; mm4 = blue chroma
			pmulhw mm5, mmw_mult_V_R ; mm5 = red chroma
			paddsw mm2, mm3					 ; mm2 = green chroma

		
			psubusb mm0, mmb_0x10    ; mm0 -= 16
			movq mm1, mmw_0x00ff     ; mm1 = 00ff00ff00ff00ff 
			psrlw mm0, 8             ; mm0 = __y7__y5__y3__y1 luma odd
			pand mm1, mm0            ; mm1 = __y6__y4__y2__y0 luma even
			psllw mm0, 3             ; mm0 *= 8
			psllw mm1, 3             ; mm1 *= 8
			pmulhw mm0, mmw_mult_Y   ; mm0 luma odd *= luma coeff 
			pmulhw mm1, mmw_mult_Y   ; mm1 luma even *= luma coeff 

		
			movq mm3, mm4						 ; copy blue chroma
			movq mm6, mm5						 ; copy red chroma
			movq mm7, mm2						 ; copy green chroma
			paddsw mm3, mm0					 ; mm3 = luma odd + blue chroma
			paddsw mm4, mm1					 ; mm4 = luma even + blue chroma
			paddsw mm6, mm0					 ; mm6 = luma odd + red chroma
			paddsw mm5, mm1					 ; mm5 = luma even + red chroma
			paddsw mm7, mm0					 ; mm7 = luma odd + green chroma
			paddsw mm2, mm1					 ; mm2 = luma even + green chroma
		
			packuswb mm3, mm3
			packuswb mm4, mm4
			packuswb mm6, mm6
			packuswb mm5, mm5
			packuswb mm7, mm7
			packuswb mm2, mm2
		
			punpcklbw mm4, mm3			 ; mm4 = b7b6b5b4b3b2b1b0 blue
			punpcklbw mm5, mm6			 ; mm5 = r7r6r5r4r3r2r1r0 red
			punpcklbw mm2, mm7			 ; mm2 = g7g6g5g4g3g2g1g0 green

	
			pand mm4, mask_5
			pand mm5, mask_5
			pand mm2, mask_5

	

			psrlw mm4, 3						 ; mm4 = red shifted
			pand mm4, mask_blue			 ; mask the blue again
			pxor mm7, mm7						 ; zero mm7
			movq mm1, mm5						 ; mm1 = copy blue
			movq mm3, mm4						 ; mm3 = copy red
			movq mm6, mm2						 ; mm6 = copy green

			punpckhbw mm1, mm7
			punpckhbw mm3, mm7
			punpckhbw mm6, mm7
			psllw mm6, 3						 ; shift green
			psllw mm1, 8						 ; shift blue
			por mm6, mm3
			por mm6, mm1
			movq 8[eax], mm6

			punpcklbw mm2, mm7			 ; mm2 = __g3__g2__g1__g0 already masked
			punpcklbw mm4, mm7
			punpcklbw mm5, mm7
			psllw mm2, 3						 ; shift green
			psllw mm5, 8						 ; shift blue
			por mm2, mm4
			por mm2, mm5
			movq [eax], mm2

			add ebx, 8               ; puc_y   += 8;
			add ecx, 4               ; puc_u   += 4;
			add edx, 4               ; puc_v   += 4;
			add eax, 16              ; puc_out += 16 // wrote 16 bytes

			inc edi
			jne horiz_loop			

			pop edi 
			pop edx 
			pop ecx
			pop ebx 
			pop eax

			emms
						
		}
		/***/

		puc_y   += stride_y;
		if (y%2) {
			puc_u   += stride_uv;
			puc_v   += stride_uv;
		}
		puc_out += stride_out;
	}
}

/***/






 


void yuy2_out(uint8_t *puc_y, int stride_y, 
  uint8_t *puc_u, uint8_t *puc_v, int stride_uv, 
  uint8_t *puc_out, int width_y, int height_y,
	unsigned int stride_out) 
{ 
	int y;
	uint8_t* puc_out2;
	unsigned int stride_diff = 4 * stride_out - 2 * width_y; 

	if (height_y < 0) {

		height_y  = -height_y;
		puc_y     += (height_y   - 1) * stride_y ;
		puc_u     += (height_y/2 - 1) * stride_uv;
		puc_v     += (height_y/2 - 1) * stride_uv;
		stride_y  = -stride_y;
		stride_uv = -stride_uv;
	}
	puc_out2 = puc_out + 2 * stride_out;
	for (y=height_y/2; y; y--) {
		register uint8_t *py, *py2, *pu, *pv;
		register int x;
		uint32_t tmp;

		py = puc_y;
		py2 = puc_y + stride_y;
		pu = puc_u;
		pv = puc_v;
		for (x=width_y/2; x; x--) {
			tmp = *(py++);
			tmp |= *(pu++) << 8;
			tmp |= *(py++) << 16;
			tmp |= *(pv++) << 24;
			*(uint32_t*)puc_out=tmp;
			puc_out += 4;

			tmp &= 0xFF00FF00;
			tmp |= *(py2++);
			tmp |= *(py2++) << 16;
			*(uint32_t*)puc_out2=tmp;
			puc_out2 += 4;
		}

		puc_y += 2*stride_y;
		puc_u += stride_uv;
		puc_v += stride_uv;

		puc_out += stride_diff;
		puc_out2 += stride_diff;
	}

}



void uyvy_out(uint8_t *puc_y, int stride_y, 
  uint8_t *puc_u, uint8_t *puc_v, int stride_uv, 
  uint8_t *puc_out, int width_y, int height_y,
	unsigned int stride_out) 
{ 
	int y;
	uint8_t* puc_out2;
	unsigned int stride_diff = 4 * stride_out - 2 * width_y; 

	if (height_y < 0) {

		height_y  = -height_y;
		puc_y     += (height_y   - 1) * stride_y ;
		puc_u     += (height_y/2 - 1) * stride_uv;
		puc_v     += (height_y/2 - 1) * stride_uv;
		stride_y  = -stride_y;
		stride_uv = -stride_uv;
	}
	puc_out2 = puc_out + 2 * stride_out;
	for (y=height_y/2; y; y--) {
		register uint8_t *py, *py2, *pu, *pv;
		register int x;
		uint32_t tmp;

		py = puc_y;
		py2 = puc_y + stride_y;
		pu = puc_u;
		pv = puc_v;
		for (x=width_y/2; x; x--) {
			tmp = *(pu++);
			tmp |= *(py++) << 8;
			tmp |= *(pv++) << 16;
			tmp |= *(py++) << 24;
			*(uint32_t*)puc_out=tmp;
			puc_out += 4;

			tmp &= 0x00FF00FF;
			tmp |= *(py2++) << 8;
			tmp |= *(py2++) << 24;
			*(uint32_t*)puc_out2=tmp;
			puc_out2 += 4;
		}

		puc_y += 2*stride_y;
		puc_u += stride_uv;
		puc_v += stride_uv;

		puc_out += stride_diff;
		puc_out2 += stride_diff;
	}

}



void yuv12_out(uint8_t *puc_y, int stride_y, 
  uint8_t *puc_u, uint8_t *puc_v, int stride_uv, 
  uint8_t *puc_out, int width_y, int height_y,
	unsigned int stride_out) 
{ 
	int i;

	unsigned char * pauc_out[3];

	if (height_y < 0) {
		
		height_y = -height_y;
		puc_y     += (height_y   - 1) * stride_y ;
		puc_u     += (height_y/2 - 1) * stride_uv;
		puc_v     += (height_y/2 - 1) * stride_uv;
		stride_y  = -stride_y;
		stride_uv = -stride_uv;
	}

	pauc_out[0] = puc_out;
	pauc_out[1] = puc_out + stride_out * height_y;
	pauc_out[2] = puc_out + stride_out * height_y * 5 / 4;

	for (i=0; i<height_y; i++) {
		
		memcpy(pauc_out[0], puc_y, width_y);

		pauc_out[0] += stride_out;
		puc_y += stride_y;
	}

	for (i=0; i<height_y/2; i++) {
		
		memcpy(pauc_out[2], puc_u, width_y/2); 
		memcpy(pauc_out[1], puc_v, width_y/2);

		pauc_out[1] += stride_out/2;
		pauc_out[2] += stride_out/2;
		puc_u += stride_uv;
		puc_v += stride_uv;
	}
}

/***/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99热这里都是精品| 成人一区二区三区| 国产精品女人毛片| 91精品婷婷国产综合久久性色| 91麻豆精品国产自产在线| 久久av资源站| 依依成人综合视频| 亚洲国产精品成人综合| 欧美丰满嫩嫩电影| 99精品国产91久久久久久| 韩国av一区二区三区四区| 日韩成人午夜精品| 伊人夜夜躁av伊人久久| 欧美国产视频在线| 日韩欧美中文字幕制服| 欧美三级韩国三级日本一级| 成人国产免费视频| 国产一区二区h| 久久国内精品自在自线400部| 精品久久久久久亚洲综合网| 欧美亚洲日本国产| 成人妖精视频yjsp地址| 国内不卡的二区三区中文字幕| 国产拍欧美日韩视频二区| 欧美一区午夜精品| 欧美午夜在线一二页| 91高清视频免费看| 99国产精品久久久久久久久久久| 亚洲一区在线视频| 亚洲激情图片一区| 国产精品国产三级国产有无不卡| 欧美性受xxxx黑人xyx性爽| 99免费精品在线观看| 粉嫩aⅴ一区二区三区四区| 韩国av一区二区三区| 激情av综合网| 国产又黄又大久久| 久久国产剧场电影| 久久se这里有精品| 另类调教123区| 国精产品一区一区三区mba桃花| 一区二区在线观看视频| 亚洲欧洲国产专区| 中文字幕一区二区三区不卡在线| 91精品国产综合久久久久久漫画| 国产一二三精品| 国内精品伊人久久久久影院对白| 国产精品欧美极品| 国产精品不卡一区二区三区| 国产精品久久三| 综合自拍亚洲综合图不卡区| 亚洲欧美日韩久久| 亚洲国产日韩av| 日韩黄色一级片| 久久99精品久久久久久动态图 | 中文在线资源观看网站视频免费不卡 | 国产精品一区二区三区99| 精品一二三四在线| 成人一区二区在线观看| 色婷婷亚洲综合| 67194成人在线观看| 精品国产人成亚洲区| 国产婷婷色一区二区三区在线| 欧美日韩亚洲综合| 精品视频一区三区九区| 欧美夫妻性生活| 久久日一线二线三线suv| 中文字幕av一区二区三区免费看 | 久久久久免费观看| 国产精品伦理在线| 亚欧色一区w666天堂| 久久成人av少妇免费| 成人一区二区视频| 欧美区在线观看| 久久久久久久久一| 国产精品久久久久aaaa| 亚洲综合区在线| 韩国欧美国产1区| 一本大道久久精品懂色aⅴ| 欧美一级精品大片| 中文av一区特黄| 日韩高清一级片| 99热精品国产| 日韩精品综合一本久道在线视频| 在线成人午夜影院| 欧美国产禁国产网站cc| 夜夜精品视频一区二区 | 久久99久国产精品黄毛片色诱| 性做久久久久久免费观看| 韩国av一区二区三区在线观看| 喷白浆一区二区| www.亚洲色图| 精品黑人一区二区三区久久| 一区二区三区欧美日| 国产乱码精品1区2区3区| 欧美日韩免费观看一区三区| 久久青草欧美一区二区三区| 亚洲一级在线观看| 99久久综合99久久综合网站| 日韩免费一区二区三区在线播放| 精品久久一二三区| 亚洲成a人在线观看| 不卡一区二区在线| 日韩女优av电影| 亚洲成人一区在线| 97精品国产露脸对白| 久久亚洲综合av| 日本成人超碰在线观看| 91精品福利视频| 最新中文字幕一区二区三区| 国产一区二区三区av电影| 欧美人妇做爰xxxⅹ性高电影| 欧美一区二区福利在线| 专区另类欧美日韩| 成人白浆超碰人人人人| 久久人人爽爽爽人久久久| 久久精品国产第一区二区三区| 成人深夜视频在线观看| 久久久综合视频| 黄页网站大全一区二区| 欧美一级爆毛片| 亚洲v精品v日韩v欧美v专区| 在线观看av不卡| 亚洲激情图片小说视频| a级精品国产片在线观看| 中文字幕va一区二区三区| 国产精品一区在线观看你懂的| 91亚洲永久精品| 中文字幕亚洲成人| 国产成人一级电影| 国产亚洲成aⅴ人片在线观看| 亚洲激情图片小说视频| 日本久久电影网| 一区二区三区四区五区视频在线观看 | 亚洲国产成人午夜在线一区| 国产综合色视频| 日韩欧美国产系列| 麻豆91免费观看| 欧美一区二区三区视频免费播放| 国产精品网友自拍| 国产成人精品1024| 国产日韩v精品一区二区| 韩日av一区二区| 国产亚洲精品资源在线26u| 国产成人免费视频一区| 中文字幕精品综合| 色诱亚洲精品久久久久久| 亚洲综合在线观看视频| 欧美伊人久久久久久久久影院| 国产欧美日韩精品在线| 处破女av一区二区| 亚洲人成亚洲人成在线观看图片 | 欧美丝袜第三区| 丝袜国产日韩另类美女| 91.xcao| 国产主播一区二区三区| 国产欧美一区二区精品性| 91蜜桃在线免费视频| 亚洲国产精品影院| 日韩欧美国产一二三区| 成人午夜av在线| 亚洲一区二区免费视频| 欧美本精品男人aⅴ天堂| 国产一区二区三区高清播放| 亚洲人亚洲人成电影网站色| 欧美系列在线观看| 国产在线精品免费av| 国产精品久久久久久久久免费桃花| 久久91精品国产91久久小草 | 94-欧美-setu| 一区二区在线观看av| 欧美日韩黄色一区二区| 国内精品伊人久久久久影院对白| 日韩一区二区在线看| 成人妖精视频yjsp地址| 一区二区三区中文免费| 日韩免费视频一区| 久久疯狂做爰流白浆xx| 久久欧美中文字幕| 色婷婷综合五月| 激情综合五月婷婷| 亚洲男人电影天堂| 精品国产sm最大网站免费看| 91在线一区二区| 另类人妖一区二区av| 亚洲你懂的在线视频| 精品国产百合女同互慰| 在线免费观看不卡av| 国产一区二区三区最好精华液| 日韩欧美国产1| 色屁屁一区二区| 美女视频网站黄色亚洲| 一区二区三区日韩欧美| 久久精品在线观看| 8x8x8国产精品| 91蜜桃在线观看| 成人性生交大片免费看在线播放| 中文字幕av在线一区二区三区| 成人黄色片在线观看| 奇米在线7777在线精品|