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

📄 fyuvrgb.c5

📁 超级解霸源代码。纯c语言写的。适合有一定编程基础的开发人员用来学习提高
💻 C5
📖 第 1 页 / 共 5 页
字号:
	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 + -