📄 rgb2yuv.c
字号:
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 + -