📄 fyuvrgb.c5
字号:
asm js FixedB1BH4
asm jmp Next6BH4
FixedR1BH4:
asm or ch,ch
asm jnl Next1BH4
asm xor ah,ah
asm jmp Next1BH4
FixedG1BH4:
asm or dl,dl
asm jl Next2BH4
asm xor al,al
asm jmp Next2BH4
FixedB1BH4:
asm or cl,cl
asm jnl Next3BH4
asm xor bh,bh
Next3BH4:
asm jmp Next6BH4
///////////////// Y > 128 ////////////////////
Granthen128BH4:
asm mov ah,bh //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm jns FixedR2BH4
Next4BH4:
asm shr ah,3 ;//R[5]
asm mov al,bh //////
asm sub al,DL ;//AL=G=Y-Cg //////
asm jns FixedG2BH4
Next5BH4:
asm add bh,cl ;//DH=B=Y+Cb //////
asm jns FixedB2BH4
asm jmp Next6BH4
FixedR2BH4:
asm or ch,ch
asm jl Next4BH4
asm mov ah,255
asm jmp Next4BH4
FixedG2BH4:
asm or dl,dl
asm jnl Next5BH4
asm mov al,255
asm jmp Next5BH4
FixedB2BH4:
asm or cl,cl
asm jl Next6BH4
asm mov bh,255
Next6BH4:
//////////////////////////////////////////////////////
asm shr ax,2 ;//G[6]
asm shld ax,bx,5 ;//B[5]
asm mov es:[edi+1280+0x0C],ax ;//Write AX=RGB16[5:6:5]
asm mov es:[edi+1280+0x0E],ax ;//Write AX=RGB16[5:6:5]
asm sub edi,dword ptr lStride
asm add edi,16 ;//Y source 4 byte
asm add esi,4 ;//Y source 4 byte
asm add ebp,2 ;//UV source 2 byts
// EDI had add when write pixel
}
static void Align5(void)
{
asm nop
}
void FastYUV2RGB16BitsDoubleDeletePixel(void)
{ //EAX,EBX,ECX,EDX,EDI,ESI,EBP changed
//GS->Video data selector
//ES->Video Buffer
//Must compile with Fastest code optimization,the EBP will not save
asm mov bx,gs:[ebp] ;//U1U2
asm mov cx,gs:[ebp+0x240] ;//V1V2
asm xchg cl,bh
//CH=U2 CL=V2 BH=U1 BL=V1(Store in BX)
////////////Use DX to compute U2V2////////////////////
////Compute U & V ///////// //////
asm sub cl,128 ;//Cb=V-=128 //////
asm sub ch,128 ;//Cr=U-=128 //////
////////Compute U/2+V/5 ////////// //////
asm mov dl,ch //////
asm sar dl,1 ;//Cr/2 //////
////////////// CH=Cr DL=Cg CL=Cb /////////////////////
asm mov Cg,dx //Store in high 16 bits
asm mov CrCb,cx
//////////////////////////////////////////////////////
asm mov cx,bx
////////////Use DX to compute U1V1////////////////////
////Compute U & V ///////// //////
asm sub cl,128 ;//Cb=V-=128 //////
asm sub ch,128 ;//Cr=U-=128 //////
////////Compute U/2+V/5 ////////// //////
asm mov dl,ch //////
asm sar dl,1 ;//Cr/2 //////
////////////// CH=Cr DL=Cg CL=Cb /////////////////////
//////////////////////////////////////////////////////
asm mov bx,gs:[esi] //Line 1 Y1 Y2
//////////////////////////////////////////////////////
asm or bl,bl
asm js Granthen128BL1
/////////////////////// Y < 128 /////////////////////
asm mov ah,bl //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm js FixedR1BL1
Next1BL1:
asm shr ah,3 ;//R[5]
asm mov al,bl
asm sub al,DL ;//AL=G=Y-Cg //////
asm js FixedG1BL1
Next2BL1:
asm mov dh,bl //////
asm add dh,cl ;//DH=B=Y+Cb //////
asm js FixedB1BL1
asm jmp Next6BL1
FixedR1BL1:
asm or ch,ch
asm jnl Next1BL1
asm xor ah,ah
asm jmp Next1BL1
FixedG1BL1:
asm or dl,dl
asm jl Next2BL1
asm xor al,al
asm jmp Next2BL1
FixedB1BL1:
asm or cl,cl
asm jnl Next3BL1
asm xor dh,dh
Next3BL1:
asm jmp Next6BL1
///////////////////////// Y > 128 //////////////////////
Granthen128BL1:
asm mov ah,bl //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm jns FixedR2BL1
Next4BL1:
asm shr ah,3 ;//R[5]
asm mov al,bl
asm sub al,DL ;//AL=G=Y-Cg //////
asm jns FixedG2BL1
Next5BL1:
asm mov dh,bl //////
asm add dh,cl ;//DH=B=Y+Cb //////
asm jns FixedB2BL1
asm jmp Next6BL1
FixedR2BL1:
asm or ch,ch
asm jl Next4BL1
asm mov ah,255
asm jmp Next4BL1
FixedG2BL1:
asm or dl,dl
asm jnl Next5BL1
asm mov al,255
asm jmp Next5BL1
FixedB2BL1:
asm or cl,cl
asm jl Next6BL1
asm mov dh,255
Next6BL1:
//////////////////////////////////////////////////////
asm shr ax,2 ;//G[6]
asm shld ax,dx,5 ;//B[5]
asm mov es:[edi],ax ;//Write AX=RGB16[5:6:5]
asm mov es:[edi+2],ax ;//Write AX=RGB16[5:6:5]
///////// R G B ////// //////
asm or bh,bh
asm js Granthen128BH1
///////////////////// Y < 128 ////////////////////
asm mov ah,bh //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm js FixedR1BH1
Next1BH1:
asm shr ah,3 ;//R[5]
asm mov al,bh //////
asm sub al,DL ;//AL=G=Y-Cg //////
asm js FixedG1BH1
Next2BH1:
asm add bh,cl ;//DH=B=Y+Cb //////
asm js FixedB1BH1
asm jmp Next6BH1
FixedR1BH1:
asm or ch,ch
asm jnl Next1BH1
asm xor ah,ah
asm jmp Next1BH1
FixedG1BH1:
asm or dl,dl
asm jl Next2BH1
asm xor al,al
asm jmp Next2BH1
FixedB1BH1:
asm or cl,cl
asm jnl Next3BH1
asm xor bh,bh
Next3BH1:
asm jmp Next6BH1
///////////////// Y > 128 ////////////////////
Granthen128BH1:
asm mov ah,bh //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm jns FixedR2BH1
Next4BH1:
asm shr ah,3 ;//R[5]
asm mov al,bh //////
asm sub al,DL ;//AL=G=Y-Cg //////
asm jns FixedG2BH1
Next5BH1:
asm add bh,cl ;//DH=B=Y+Cb //////
asm jns FixedB2BH1
asm jmp Next6BH1
FixedR2BH1:
asm or ch,ch
asm jl Next4BH1
asm mov ah,255
asm jmp Next4BH1
FixedG2BH1:
asm or dl,dl
asm jnl Next5BH1
asm mov al,255
asm jmp Next5BH1
FixedB2BH1:
asm or cl,cl
asm jl Next6BH1
asm mov bh,255
Next6BH1:
//////////////////////////////////////////////////////
asm shr ax,2 ;//G[6]
asm shld ax,bx,5 ;//B[5]
asm mov es:[edi+4],ax ;//Write AX=RGB16[5:6:5]
asm mov es:[edi+6],ax ;//Write AX=RGB16[5:6:5]
//////////////////////////////////////////////////////
asm mov bx,gs:[esi+0x480]//Line 2 Y1 Y2
//////////////////////////////////////////////////////
asm or bl,bl
asm js Granthen128BL2
/////////////////////// Y < 128 /////////////////////
asm mov ah,bl //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm js FixedR1BL2
Next1BL2:
asm shr ah,3 ;//R[5]
asm mov al,bl
asm sub al,DL ;//AL=G=Y-Cg //////
asm js FixedG1BL2
Next2BL2:
asm mov dh,bl //////
asm add dh,cl ;//DH=B=Y+Cb //////
asm js FixedB1BL2
asm jmp Next6BL2
FixedR1BL2:
asm or ch,ch
asm jnl Next1BL2
asm xor ah,ah
asm jmp Next1BL2
FixedG1BL2:
asm or dl,dl
asm jl Next2BL2
asm xor al,al
asm jmp Next2BL2
FixedB1BL2:
asm or cl,cl
asm jnl Next3BL2
asm xor dh,dh
Next3BL2:
asm jmp Next6BL2
///////////////////////// Y > 128 //////////////////////
Granthen128BL2:
asm mov ah,bl //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm jns FixedR2BL2
Next4BL2:
asm shr ah,3 ;//R[5]
asm mov al,bl
asm sub al,DL ;//AL=G=Y-Cg //////
asm jns FixedG2BL2
Next5BL2:
asm mov dh,bl //////
asm add dh,cl ;//DH=B=Y+Cb //////
asm jns FixedB2BL2
asm jmp Next6BL2
FixedR2BL2:
asm or ch,ch
asm jl Next4BL2
asm mov ah,255
asm jmp Next4BL2
FixedG2BL2:
asm or dl,dl
asm jnl Next5BL2
asm mov al,255
asm jmp Next5BL2
FixedB2BL2:
asm or cl,cl
asm jl Next6BL2
asm mov dh,255
Next6BL2:
//////////////////////////////////////////////////////
asm shr ax,2 ;//G[6]
asm shld ax,dx,5 ;//B[5]
asm add edi,dword ptr lStride
asm mov es:[edi+1280],ax ;//Write AX=RGB16[5:6:5]
asm mov es:[edi+1280+2],ax ;//Write AX=RGB16[5:6:5]
///////// R G B ////// //////
asm or bh,bh
asm js Granthen128BH2
///////////////////// Y < 128 ////////////////////
asm mov ah,bh //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm js FixedR1BH2
Next1BH2:
asm shr ah,3 ;//R[5]
asm mov al,bh //////
asm sub al,DL ;//AL=G=Y-Cg //////
asm js FixedG1BH2
Next2BH2:
asm add bh,cl ;//DH=B=Y+Cb //////
asm js FixedB1BH2
asm jmp Next6BH2
FixedR1BH2:
asm or ch,ch
asm jnl Next1BH2
asm xor ah,ah
asm jmp Next1BH2
FixedG1BH2:
asm or dl,dl
asm jl Next2BH2
asm xor al,al
asm jmp Next2BH2
FixedB1BH2:
asm or cl,cl
asm jnl Next3BH2
asm xor bh,bh
Next3BH2:
asm jmp Next6BH2
///////////////// Y > 128 ////////////////////
Granthen128BH2:
asm mov ah,bh //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm jns FixedR2BH2
Next4BH2:
asm shr ah,3 ;//R[5]
asm mov al,bh //////
asm sub al,DL ;//AL=G=Y-Cg //////
asm jns FixedG2BH2
Next5BH2:
asm add bh,cl ;//DH=B=Y+Cb //////
asm jns FixedB2BH2
asm jmp Next6BH2
FixedR2BH2:
asm or ch,ch
asm jl Next4BH2
asm mov ah,255
asm jmp Next4BH2
FixedG2BH2:
asm or dl,dl
asm jnl Next5BH2
asm mov al,255
asm jmp Next5BH2
FixedB2BH2:
asm or cl,cl
asm jl Next6BH2
asm mov bh,255
Next6BH2:
//////////////////////////////////////////////////////
asm shr ax,2 ;//G[6]
asm shld ax,bx,5 ;//B[5]
asm mov es:[edi+1280+4],ax ;//Write AX=RGB16[5:6:5]
asm mov es:[edi+1280+6],ax ;//Write AX=RGB16[5:6:5]
asm sub edi,dword ptr lStride
/////////////////////////////////////////////////////
///U2 V2\\\
//////////////////////////////////////////////////////
asm mov cx,CrCb
asm mov dx,Cg
//////////////////////////////////////////////////////
asm mov bx,gs:[esi+2] //Line 1 Y3 Y4
asm shr bl,1
asm shr bh,1
asm add bh,bl
//////////////////////////////////////////////////////
asm or bh,bh
asm js Granthen128BH3
///////////////////// Y < 128 ////////////////////
asm mov ah,bh //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm js FixedR1BH3
Next1BH3:
asm shr ah,3 ;//R[5]
asm mov al,bh //////
asm sub al,DL ;//AL=G=Y-Cg //////
asm js FixedG1BH3
Next2BH3:
asm add bh,cl ;//DH=B=Y+Cb //////
asm js FixedB1BH3
asm jmp Next6BH3
FixedR1BH3:
asm or ch,ch
asm jnl Next1BH3
asm xor ah,ah
asm jmp Next1BH3
FixedG1BH3:
asm or dl,dl
asm jl Next2BH3
asm xor al,al
asm jmp Next2BH3
FixedB1BH3:
asm or cl,cl
asm jnl Next3BH3
asm xor bh,bh
Next3BH3:
asm jmp Next6BH3
///////////////// Y > 128 ////////////////////
Granthen128BH3:
asm mov ah,bh //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm jns FixedR2BH3
Next4BH3:
asm shr ah,3 ;//R[5]
asm mov al,bh //////
asm sub al,DL ;//AL=G=Y-Cg //////
asm jns FixedG2BH3
Next5BH3:
asm add bh,cl ;//DH=B=Y+Cb //////
asm jns FixedB2BH3
asm jmp Next6BH3
FixedR2BH3:
asm or ch,ch
asm jl Next4BH3
asm mov ah,255
asm jmp Next4BH3
FixedG2BH3:
asm or dl,dl
asm jnl Next5BH3
asm mov al,255
asm jmp Next5BH3
FixedB2BH3:
asm or cl,cl
asm jl Next6BH3
asm mov bh,255
Next6BH3:
//////////////////////////////////////////////////////
asm shr ax,2 ;//G[6]
asm shld ax,bx,5 ;//B[5]
asm mov es:[edi+8],ax ;//Write 1 AX=RGB16[5:6:5]
asm mov es:[edi+10],ax ;//Write 1 AX=RGB16[5:6:5]
//////////////////////////////////////////////////////
asm mov bx,gs:[esi+0x480+2]//Line 2 Y1 Y2
asm shr bl,1
asm shr bh,1
asm add bh,bl
//////////////////////////////////////////////////////
asm or bh,bh
asm js Granthen128BH4
///////////////////// Y < 128 ////////////////////
asm mov ah,bh //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm js FixedR1BH4
Next1BH4:
asm shr ah,3 ;//R[5]
asm mov al,bh //////
asm sub al,DL ;//AL=G=Y-Cg //////
asm js FixedG1BH4
Next2BH4:
asm add bh,cl ;//DH=B=Y+Cb //////
asm js FixedB1BH4
asm jmp Next6BH4
FixedR1BH4:
asm or ch,ch
asm jnl Next1BH4
asm xor ah,ah
asm jmp Next1BH4
FixedG1BH4:
asm or dl,dl
asm jl Next2BH4
asm xor al,al
asm jmp Next2BH4
FixedB1BH4:
asm or cl,cl
asm jnl Next3BH4
asm xor bh,bh
Next3BH4:
asm jmp Next6BH4
///////////////// Y > 128 ////////////////////
Granthen128BH4:
asm mov ah,bh //////
asm add ah,ch ;//AH=R=Y+Cr //////
asm jns FixedR2BH4
Next4BH4:
asm shr ah,3 ;//R[5]
asm mov al,bh //////
asm sub al,DL ;//AL=G=Y-Cg //////
asm jns FixedG2BH4
Next5BH4:
asm add bh,cl ;//DH=B=Y+Cb //////
asm jns FixedB2BH4
asm jmp Next6BH4
FixedR2BH4:
asm or ch,ch
asm jl Next4BH4
asm mov ah,255
asm jmp Next4BH4
FixedG2BH4:
asm or dl,dl
asm jnl Next5BH4
asm mov al,255
asm jmp Next5BH4
FixedB2BH4:
asm or cl,cl
asm jl Next6BH4
asm mov bh,255
Next6BH4:
//////////////////////////////////////////////////////
asm shr ax,2 ;//G[6]
asm shld ax,bx,5 ;//B[5]
asm mov ebx,dword ptr lStride
asm mov es:[edi+ebx+1280+8],ax ;//Write AX=RGB16[5:6:5]
asm mov es:[edi+ebx+1280+10],ax ;//Write AX=RGB16[5:6:5]
asm add edi,12 ;//Y source 4 byte
asm add esi,4 ;//Y source 4 byte
asm add ebp,2 ;//UV source 2 byts
// EDI had add when write pixel
}
static void Align6(void)
{
asm nop
asm nop
}
//////////// One line only ///////////
void FastYUV2RGB16BitsDouble1Line(void)
{ //EAX,EBX,ECX,EDX,EDI,ESI,EBP changed
//GS->Video data selector
//ES->Video Buffer
//Must compile with Fastest code optimization,the EBP will not save
asm mo
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -