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

📄 rgb2yuv.c

📁 采用intel奔腾2以后处理器支持的mmx指令集
💻 C
📖 第 1 页 / 共 2 页
字号:
			psrad xmm4,11;
			packssdw xmm1,xmm4
			pmaddwd xmm1,ONES
			psrad xmm1,4       //U2_11_8->xmm1  32bit

			pmaddwd xmm6,VBGR0;
			psrad xmm6,11;
			pmaddwd xmm7,VBGR0;
			psrad xmm7,11;
			packssdw xmm6,xmm7;
			pmaddwd xmm6,ONES
			psrad xmm6,4       //V2_11_8->xmm6  32bit


			movdqa xmm4,[eax+4144]  //1024
			pshufd xmm7, xmm4,0xE4;
			punpcklbw xmm4,ZEROS;
			movdqa MMTMP4,xmm4;
			pmaddwd xmm4,UBGR0;
			psrad xmm4,11;
			punpckhbw xmm7,ZEROS;
			movdqa MMTMP7,xmm7;
			pmaddwd xmm7,UBGR0;
			psrad xmm7,11
			packssdw xmm4,xmm7
			pmaddwd xmm4,ONES
			psrad xmm4,4;      //U2_15_12->xmm1  32bit
			packssdw xmm1,xmm4;//U2_15_8->xmm1  16bit
			paddsw xmm0,xmm1;
			pmaddwd xmm0,ONES;
			psrad xmm0,2;        //U7_4->xmm0      32bit

            packssdw xmm3,xmm0;//U7_0->xmm3      16bit
			paddsw xmm3,DELTAUV;//U7_0->xmm3      16bit

			movdqa MMTMP3,xmm3;  //U7_0->MMTMP3      16bit
             
            movdqa xmm4,MMTMP4;
			pmaddwd xmm4,VBGR0;
			psrad xmm4,11;
			movdqa xmm7,MMTMP7;
			pmaddwd xmm7,VBGR0;
			psrad xmm7,11;
			packssdw xmm4,xmm7
			pmaddwd xmm4,ONES
			psrad xmm4,4;      //V2_15_12->xmm1  32bit
			packssdw xmm6,xmm4;//V2_15_8->xmm6  16bit

			
    		paddsw xmm2,xmm6;
			pmaddwd xmm2,ONES;
			psrad xmm2,2;        //V8_5->xmm2      32bit
			packssdw xmm5,xmm2;    //V7_0->xmm5      16bit
			paddsw xmm5,DELTAUV;  //V7_0->xmm5      16bit

			movdqa MMTMP5,xmm5;  //V7_0->MMTMP5     16bit



			movdqa xmm3,[eax+8192]       //XR3G3B3XR2G2B2XR1G1B1XR0G0B0->xmm3 
			pshufd xmm4, xmm3,0xE4; //XR3G3B3XR2G2B2XR1G1B1XR0G0B0->xmm4
			punpcklbw xmm3,ZEROS;  //XR1G1B1XR0G0B0->xmm3 
			pshufd xmm5, xmm3,0xE4;//XR1G1B1XR0G0B0->xmm5
			pmaddwd xmm3,UBGR0
			psrad xmm3,11
			punpckhbw xmm4,ZEROS;  //XR3G3B3XR2G2B2->xmm4
			pshufd xmm6, xmm4,0xE4;//XR3G3B3XR2G2B2->xmm6
			pmaddwd xmm4,UBGR0
			psrad xmm4,11
			packssdw xmm3,xmm4     //YbB3+YgG3,YrR3,YbB2+YgG2,YrR2,YbB1+YgG1,YrR1,YbB0+YgG0,YrR0->xmm3
			pmaddwd xmm3,ONES      //YbB3+YgG3+YrR3,YbB2+YgG2+YrR2,YbB1+YgG1+YrR1,YbB0+YgG0+YrR0->xmm3
			psrad xmm3,4           //U3U2U1U0->xmm3

			pmaddwd xmm5,VBGR0
			psrad xmm5,11
			pmaddwd xmm6,VBGR0
			psrad xmm6,11
			packssdw xmm5,xmm6
			pmaddwd xmm5,ONES
			psrad xmm5,4          //V3V2V1V0->xmm5


			movdqa xmm4,[eax+8208];  //XR7G7B7XR6G6B6XR5G5B5XR4G4B4->xmm4
			pshufd xmm6, xmm4,0xE4; //XR7G7B7XR6G6B6XR5G5B5XR4G4B4->xmm6
			punpcklbw xmm4,ZEROS;  //XR5G5B5XR4G4B4->xmm4
            pshufd xmm1, xmm4,0xE4; //XR5G5B5XR4G4B4->xmm1
			pmaddwd xmm4,UBGR0;
			psrad xmm4,11;
			punpckhbw xmm6,ZEROS;  //XR7G7B7XR6G6B6->xmm6
			pshufd xmm2, xmm6,0xE4;     //XR7G7B7XR6G6B6->xmm2
			pmaddwd xmm6,UBGR0;
			psrad xmm6,11;
			packssdw xmm4,xmm6;//
			pmaddwd xmm4,ONES;
			psrad xmm4,4;        //U7U6U5U4->xmm4
			packssdw xmm3,xmm4;  //U7U6U5U4U3U2U1U0->xmm3 16bit

			
			pmaddwd xmm1,VBGR0;
			psrad xmm1,11;
			pmaddwd xmm2,VBGR0;
			psrad xmm2,11;
			packssdw xmm1,xmm2
			pmaddwd xmm1,ONES
			psrad xmm1,4         //V7V6V5V4->xmm1   32bit
			packssdw xmm5,xmm1;  //V7V6V5V4V3V2V1V0->xmm5   16bit


			movdqa xmm1,[eax+12288]
			pshufd xmm2, xmm1,0xE4;
			punpcklbw xmm1,ZEROS;
			pshufd xmm6,xmm1,0x4E;
			pmaddwd xmm1,UBGR0;
			psrad xmm1,11;
			punpckhbw xmm2,ZEROS;
			pshufd xmm7,xmm2,0x4E;
			pmaddwd xmm2,UBGR0;
			psrad xmm2,11;	
			packssdw xmm1,xmm2
			pmaddwd xmm1,ONES
			psrad xmm1,4        //U_2_3-0->xmm1

            pmaddwd xmm6,VBGR0
			psrad xmm6,11
			pmaddwd xmm7,VBGR0
			psrad xmm7,11
			packssdw xmm6,xmm7
			pmaddwd xmm6,ONES
			psrad xmm6,4       //V_2_3-0->xmm6


			movdqa xmm0,[eax+12304]
			pshufd xmm2, xmm0,0xE4;
			punpcklbw xmm0,ZEROS;
			pshufd xmm4, xmm0,0xE4;
			pmaddwd xmm0,UBGR0;
			psrad xmm0,11;
			punpckhbw xmm2,ZEROS;
			pshufd xmm7, xmm2,0xE4;
			pmaddwd xmm2,UBGR0;
			psrad xmm2,11;
			packssdw xmm0,xmm2
			pmaddwd xmm0,ONES
			psrad xmm0,4    //U_2_7_4->xmm0   32bit
	
			packssdw xmm1,xmm0; //U_2_7_0->xmm1   16bit
			
			paddsw xmm3,xmm1;
			pmaddwd xmm3,ONES;
			psrad xmm3,2;        //U4_0->xmm3      32bit

			pmaddwd xmm4,VBGR0;
			psrad xmm4,11;
			pmaddwd xmm7,VBGR0;
			psrad xmm7,11
			packssdw xmm4,xmm7
			pmaddwd xmm4,ONES
			psrad xmm4,4    //V_2_7_4->xmm4   32bit

			packssdw xmm6,xmm4; //V_2_7_0->xmm6   16bit
			
			paddsw xmm5,xmm6;
			pmaddwd xmm5,ONES;
			psrad xmm5,2;        //U4_0->xmm5      32bit
			
			movdqa xmm0,[eax+8224]  //XR11G11B11XR10G10B10XR9G9B9XR8G8B8->xmm0
			pshufd xmm1, xmm0,0xE4;
			punpcklbw xmm0,ZEROS;
			pshufd xmm2, xmm0,0xE4;
			pmaddwd xmm0,UBGR0;
			psrad xmm0,11;
			punpckhbw xmm1,ZEROS;
			pshufd xmm4, xmm1,0xE4;
			pmaddwd xmm1,UBGR0;	
			psrad xmm1,11
			packssdw xmm0,xmm1;
			pmaddwd xmm0,ONES;
			psrad xmm0,4        //U11_8->xmm0
      
			pmaddwd xmm2,VBGR0;
			psrad xmm2,11;
			pmaddwd xmm4,VBGR0;
			psrad xmm4,11;
			packssdw xmm2,xmm4;
			pmaddwd xmm2,ONES;
			psrad xmm2,4        //V11_8->xmm2


			movdqa xmm1,[eax+8240]   //1024
			pshufd xmm4, xmm1,0xE4;
			punpcklbw xmm1,ZEROS;
			pshufd xmm6, xmm1,0xE4;
			pmaddwd xmm1,UBGR0
			psrad xmm1,11
			punpckhbw xmm4,ZEROS;			
			pshufd xmm7, xmm4,0xE4;
			pmaddwd xmm4,UBGR0
			psrad xmm4,11             
			packssdw xmm1,xmm4;    
			pmaddwd xmm1,ONES;
			psrad xmm1,4        //U15_12->xmm1
			packssdw xmm0,xmm1;  //U15_8->xmm0 16bit

			pmaddwd xmm6,VBGR0;
			psrad xmm6,11;
			pmaddwd xmm7,VBGR0;
			psrad xmm7,11;
			packssdw xmm6,xmm7
			pmaddwd xmm6,ONES
			psrad xmm6,4     //V15_12->xmm6 
			packssdw xmm2,xmm6; //V15_8->xmm2 16bit


			movdqa xmm1,[eax+12320]// 1024
			pshufd xmm4, xmm1,0xE4;
			punpcklbw xmm1,ZEROS;
			pshufd xmm6, xmm1,0xE4;
			pmaddwd xmm1,UBGR0;
			psrad xmm1,11;
			punpckhbw xmm4,ZEROS;
			pshufd xmm7, xmm4,0xE4;
			pmaddwd xmm4,UBGR0;
			psrad xmm4,11;
			packssdw xmm1,xmm4
			pmaddwd xmm1,ONES
			psrad xmm1,4       //U2_11_8->xmm1  32bit

			pmaddwd xmm6,VBGR0;
			psrad xmm6,11;
			pmaddwd xmm7,VBGR0;
			psrad xmm7,11;
			packssdw xmm6,xmm7;
			pmaddwd xmm6,ONES
			psrad xmm6,4       //V2_11_8->xmm6  32bit


			movdqa xmm4,[eax+12336]  //1024
			pshufd xmm7, xmm4,0xE4;
			punpcklbw xmm4,ZEROS;
			movdqa MMTMP4,xmm4;
			pmaddwd xmm4,UBGR0;
			psrad xmm4,11;
			punpckhbw xmm7,ZEROS;
			movdqa MMTMP7,xmm7;
			pmaddwd xmm7,UBGR0;
			psrad xmm7,11
			packssdw xmm4,xmm7
			pmaddwd xmm4,ONES
			psrad xmm4,4;      //U2_15_12->xmm1  32bit
			packssdw xmm1,xmm4;//U2_15_8->xmm1  16bit
			paddsw xmm0,xmm1;
			pmaddwd xmm0,ONES;
			psrad xmm0,2;        //U7_4->xmm0      32bit

            packssdw xmm3,xmm0;//U7_0->xmm3      16bit
			paddsw xmm3,DELTAUV;//U7_0->xmm3      16bit

		////////	movdqa MMTMP3,xmm3;  //U7_0->MMTMP3      16bit
			movdqa xmm0,MMTMP3
			packuswb xmm0,xmm3;     //U15_7_0->xmm0     8bit
			movdqa [ecx],xmm0       //U15_7_0->UData
			add ecx,16


             
            movdqa xmm4,MMTMP4;
			pmaddwd xmm4,VBGR0;
			psrad xmm4,11;
			movdqa xmm7,MMTMP7;
			pmaddwd xmm7,VBGR0;
			psrad xmm7,11;
			packssdw xmm4,xmm7
			pmaddwd xmm4,ONES
			psrad xmm4,4;      //V2_15_12->xmm1  32bit
			packssdw xmm6,xmm4;//V2_15_8->xmm6  16bit			
    		paddsw xmm2,xmm6;
			pmaddwd xmm2,ONES;
			psrad xmm2,2;        //V8_5->xmm2      32bit
			packssdw xmm5,xmm2;    //V7_0->xmm5      16bit
			paddsw xmm5,DELTAUV;  //V7_0->xmm5      16bit

	/////////  movdqa MMTMP5,xmm5;  //U7_0->MMTMP3      16bit
			movdqa xmm2,MMTMP5;
			packuswb xmm2,xmm5;     //V15_7_0->xmm2      8bit

			movdqa [edx],xmm2;     //V15_7_0->VData
			add edx,16
		
			add  eax,16384;
			dec BLOCK_Y_NUM;
			jnz BLOCK_YUV;

			mov eax,TMPEAX
			add eax,64 
			mov TMPEAX,eax

		    dec BLOCK_X_NUM
				jnz BLOCK_XUV

			mov eax,TMP2EAX;
			add eax,65536; 
			mov TMP2EAX,eax;
			mov TMPEAX,eax;
			dec BLOCK_LIE_NUM
				jnz BLOCK_LIEUV		
			mov eax,TMPEAAX;
			mov ebx,TMPEBX;
			mov ecx,TMPECX;
			mov edx,TMPEDX;
				emms			
}
return 1;
}

⌨️ 快捷键说明

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