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

📄 image.c

📁 包含了从MPEG4的视频解码到H.264的视频编码部分的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
				add eax,imgw
				movd mm5,[eax]
				PUNPCKLBW mm5,mm7
				add eax,imgw
				movd mm6,[eax]
				PUNPCKLBW mm6,mm7
				add eax,imgw
				movd mm7,[eax]
				PUNPCKLBW mm7,zero
				

				//转秩					
				PUNPCKLWD mm4,mm5
				PUNPCKLWD mm6,mm7
				movq mm5,mm4
				PUNPCKLDQ mm4,mm6
				PUNPCKHDQ mm5,mm6			

				movq mm6,mm4
				PSLLW mm6,2
				paddw mm6,mm4
				psubw mm0,mm6

				paddw mm0,mm5				
				pxor mm6,mm6
				movq [edi],mm0
				add [edi],8
				paddw mm0,f16
				PSRAW mm0,5
				PACKUSWB mm0,mm6
				PUNPCKLBW mm0,mm6

				movq2dq xmm0,mm0
				movq [ebx],mm0
				
				paddw mm0,mm2
				paddw mm0,f1
				PSRAw mm0,1
				movq [ecx],mm0				

				movdq2q mm0,xmm0
				paddw mm0,mm3
				paddw mm0,f1
				PSRAw mm0,1
				movq [edx],mm0
				add ebx,8
				add ecx,8
				add edx,8

								
				
				//计算第二列
				//再读入两列
				mov eax,pt1
				add eax,5				
				pxor mm7,mm7
				movd mm5,[eax]
				PUNPCKLBW mm5,mm7
				add eax,imgw
				movd mm0,[eax]
				PUNPCKLBW mm0,mm7
				add eax,imgw
				movd mm6,[eax]
				PUNPCKLBW mm6,mm7
				add eax,imgw
				movd mm7,[eax]
				PUNPCKLBW mm7,zero			

				//转秩					
				PUNPCKLWD mm5,mm0
				PUNPCKLWD mm6,mm7
				movq mm0,mm5
				PUNPCKLDQ mm5,mm6
				PUNPCKHDQ mm0,mm6	
				

				movq mm6,mm2
				PSLLW mm6,2
				paddw mm6,mm2
				psubw mm1,mm6

				movq mm6,mm3
				movq mm7,mm3
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm1,mm6

				movq mm6,mm4
				movq mm7,mm4
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm1,mm6

				movq mm6,mm5
				PSLLW mm6,2
				paddw mm6,mm5
				psubw mm1,mm6

				

				paddw mm1,mm0

				pxor mm6,mm6
				movq [edi],mm1
				add [edi],8
				paddw mm1,f16
				PSRAW mm1,5
				PACKUSWB mm1,mm6
				PUNPCKLBW mm1,mm6

				movq2dq xmm0,mm1
				movq [ebx],mm1
				
				paddw mm1,mm3
				paddw mm1,f1
				PSRAw mm1,1
				movq [ecx],mm1				

				movdq2q mm1,xmm0
				paddw mm1,mm4
				paddw mm1,f1
				PSRAw mm1,1
				movq [edx],mm1
				add ebx,8
				add ecx,8
				add edx,8


				
				//计算第三列
				//再读入两列
				mov eax,pt1
				add eax,6				
				pxor mm7,mm7
				movd mm0,[eax]
				PUNPCKLBW mm0,mm7
				add eax,imgw
				movd mm1,[eax]
				PUNPCKLBW mm1,mm7
				add eax,imgw
				movd mm6,[eax]
				PUNPCKLBW mm6,mm7
				add eax,imgw
				movd mm7,[eax]
				PUNPCKLBW mm7,zero			

				//转秩					
				PUNPCKLWD mm0,mm1
				PUNPCKLWD mm6,mm7
				movq mm1,mm0
				PUNPCKLDQ mm0,mm6
				PUNPCKHDQ mm1,mm6	

				movq mm6,mm3
				PSLLW mm6,2
				paddw mm6,mm3
				psubw mm2,mm6

				movq mm6,mm4
				movq mm7,mm4
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm2,mm6

				movq mm6,mm5
				movq mm7,mm5
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm2,mm6

				movq mm6,mm0
				PSLLW mm6,2
				paddw mm6,mm0
				psubw mm2,mm6
				paddw mm2,mm1
				pxor mm6,mm6
				movq [edi],mm2
				add [edi],8
				
				paddw mm2,f16
				PSRAW mm2,5
				PACKUSWB mm2,mm6
				PUNPCKLBW mm2,mm6

				movq2dq xmm0,mm2
				movq [ebx],mm2
				
				paddw mm2,mm4
				paddw mm2,f1
				PSRAw mm2,1
				movq [ecx],mm2				

				movdq2q mm2,xmm0
				paddw mm2,mm5
				paddw mm2,f1
				PSRAw mm2,1
				movq [edx],mm2
				add ebx,8
				add ecx,8
				add edx,8


				
				//计算第四列
				//再读入两列
				mov eax,pt1
				add eax,7				
				pxor mm7,mm7
				movd mm1,[eax]
				PUNPCKLBW mm1,mm7
				add eax,imgw
				movd mm2,[eax]
				PUNPCKLBW mm2,mm7
				add eax,imgw
				movd mm6,[eax]
				PUNPCKLBW mm6,mm7
				add eax,imgw
				movd mm7,[eax]
				PUNPCKLBW mm7,zero			

				//转秩					
				PUNPCKLWD mm1,mm2
				PUNPCKLWD mm6,mm7
				movq mm2,mm1
				PUNPCKLDQ mm1,mm6
				PUNPCKHDQ mm2,mm6	

				
				movq mm6,mm4
				PSLLW mm6,2
				paddw mm6,mm4
				psubw mm3,mm6

				movq mm6,mm5
				movq mm7,mm5
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm3,mm6

				movq mm6,mm0
				movq mm7,mm0
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm3,mm6

				movq mm6,mm1
				PSLLW mm6,2
				paddw mm6,mm1
				psubw mm3,mm6
				paddw mm3,mm2
				pxor mm6,mm6
				movq [edi],mm3				
				
				paddw mm3,f16
				PSRAW mm3,5
				PACKUSWB mm3,mm6
				PUNPCKLBW mm3,mm6

				movq2dq xmm0,mm3
				movq [ebx],mm3
				
				paddw mm3,mm5
				paddw mm3,f1
				PSRAw mm3,1
				movq [ecx],mm3				

				movdq2q mm3,xmm0
				paddw mm3,mm0
				paddw mm3,f1
				PSRAw mm3,1
				movq [edx],mm3	

 
				emms
			} 
}

static void calcdhn(byte *pt1,_int16*pt2,_int16*pt3,_int16*pt4,_int16 *pt5)
{
	static _int64 zero=0;
    static _int64 f16=0x0010001000100010;
	static _int64 f1=0x0001000100010001;
	int imgw=img->width+32;
		_asm
			{

				mov eax,pt1
				mov ebx,pt2
				mov ecx,pt3
				mov edx,pt4
				mov edi,pt5
				//计算第一行
				pxor mm6,mm6
				movq mm0,[eax]
				PUNPCKLBW mm0,mm6
				add eax,imgw
				movq mm1,[eax]
				PUNPCKLBW mm1,mm6
				add eax,imgw
				movq mm2,[eax]
				PUNPCKLBW mm2,mm6
				add eax,imgw
				movq mm3,[eax]
				PUNPCKLBW mm3,mm6
				add eax,imgw
				movq mm4,[eax]
				PUNPCKLBW mm4,mm6
				add eax,imgw
				movq mm5,[eax]
				PUNPCKLBW mm5,mm6
				
				movq mm6,mm1
				PSLLW mm6,2
				paddw mm6,mm1
				psubw mm0,mm6

				movq mm6,mm2
				movq mm7,mm2
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm0,mm6

				movq mm6,mm3
				movq mm7,mm3
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm0,mm6

				movq mm6,mm4
				PSLLW mm6,2
				paddw mm6,mm4
				psubw mm0,mm6

				paddw mm0,mm5

				pxor mm6,mm6
				movq [edi],mm0				
				paddw mm0,f16
				PSRAW mm0,5
				PACKUSWB mm0,mm6
				PUNPCKLBW mm0,mm6

				movq2dq xmm0,mm0
				movq [ebx],mm0
				
				paddw mm0,mm2
				paddw mm0,f1
				PSRAw mm0,1
				movq [ecx],mm0				

				movdq2q mm0,xmm0
				paddw mm0,mm3
				paddw mm0,f1
				PSRAw mm0,1
				movq [edx],mm0
				add ebx,8
				add ecx,8
				add edx,8
				add edi,8


				
				//计算第二行
				add eax,imgw
				movq mm0,[eax]
				PUNPCKLBW mm0,mm6

				movq mm6,mm2
				PSLLW mm6,2
				paddw mm6,mm2
				psubw mm1,mm6

				movq mm6,mm3
				movq mm7,mm3
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm1,mm6

				movq mm6,mm4
				movq mm7,mm4
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm1,mm6

				movq mm6,mm5
				PSLLW mm6,2
				paddw mm6,mm5
				psubw mm1,mm6	

				paddw mm1,mm0

				pxor mm6,mm6
				movq [edi],mm1				
				paddw mm1,f16
				PSRAW mm1,5
				PACKUSWB mm1,mm6
				PUNPCKLBW mm1,mm6

				movq2dq xmm0,mm1
				movq [ebx],mm1
				
				paddw mm1,mm3
				paddw mm1,f1
				PSRAw mm1,1
				movq [ecx],mm1				

				movdq2q mm1,xmm0
				paddw mm1,mm4
				paddw mm1,f1
				PSRAw mm1,1
				movq [edx],mm1
				add ebx,8
				add ecx,8
				add edx,8
				add edi,8

				
				//计算第三行
				add eax,imgw
				movq mm1,[eax]
				PUNPCKLBW mm1,mm6

				movq mm6,mm3
				PSLLW mm6,2
				paddw mm6,mm3
				psubw mm2,mm6

				movq mm6,mm4
				movq mm7,mm4
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm2,mm6

				movq mm6,mm5
				movq mm7,mm5
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm2,mm6

				movq mm6,mm0
				PSLLW mm6,2
				paddw mm6,mm0
				psubw mm2,mm6
				paddw mm2,mm1
				pxor mm6,mm6
				movq [edi],mm2				
				
				paddw mm2,f16
				PSRAW mm2,5
				PACKUSWB mm2,mm6
				PUNPCKLBW mm2,mm6


				movq2dq xmm0,mm2
				movq [ebx],mm2
				
				paddw mm2,mm4
				paddw mm2,f1
				PSRAw mm2,1
				movq [ecx],mm2				

				movdq2q mm2,xmm0
				paddw mm2,mm5
				paddw mm2,f1
				PSRAw mm2,1
				movq [edx],mm2
				add ebx,8
				add ecx,8
				add edx,8
				add edi,8


				
				//计算第四行
				add eax,imgw
				movq mm2,[eax]
				PUNPCKLBW mm2,mm6

				
				movq mm6,mm4
				PSLLW mm6,2
				paddw mm6,mm4
				psubw mm3,mm6

				movq mm6,mm5
				movq mm7,mm5
				PSLLW mm6,4
				PSLLW mm7,2
				paddw mm6,mm7
				paddw mm3,mm6

				movq mm6,mm0
				movq mm7,mm0

⌨️ 快捷键说明

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