亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? yuyv_to_yv12_mmx.asm

?? MPEG-4編解碼的實現(xiàn)(包括MPEG4視音頻編解碼)
?? ASM
字號:
;/**************************************************************************
; *
; *	XVID MPEG-4 VIDEO CODEC
; *	mmx yuyv/uyvy to yuv planar
; *
; *	This program is an implementation of a part of one or more MPEG-4
; *	Video tools as specified in ISO/IEC 14496-2 standard.  Those intending
; *	to use this software module in hardware or software products are
; *	advised that its use may infringe existing patents or copyrights, and
; *	any such use would be at such party's own risk.  The original
; *	developer of this software module and his/her company, and subsequent
; *	editors and their companies, will have no liability for use of this
; *	software or modifications or derivatives thereof.
; *
; *	This program is free software; you can redistribute it and/or modify
; *	it under the terms of the GNU General Public License as published by
; *	the Free Software Foundation; either version 2 of the License, or
; *	(at your option) any later version.
; *
; *	This program is distributed in the hope that it will be useful,
; *	but WITHOUT ANY WARRANTY; without even the implied warranty of
; *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; *	GNU General Public License for more details.
; *
; *	You should have received a copy of the GNU General Public License
; *	along with this program; if not, write to the Free Software
; *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
; *
; *************************************************************************/

;/**************************************************************************
; *
; *	History:
; *
; *	30.11.2001	initial version; (c)2001 peter ross <pross@cs.rmit.edu.au>
; *
; *************************************************************************/

bits 32


section .data

%macro cglobal 1 
	%ifdef PREFIX
		global _%1 
		%define %1 _%1
	%else
		global %1
	%endif
%endmacro

align 16


section .data


;===========================================================================
; masks for extracting yuv components
;===========================================================================
;			y     u     y     v     y     u     y     v

mask1	db	0xff, 0,    0xff, 0,    0xff, 0,    0xff, 0
mask2	db	0,    0xff, 0,    0xff, 0,    0xff, 0,    0xff


section .text

;===========================================================================
;
;	void yuyv_to_yv12_mmx(uint8_t * const y_out,
;						uint8_t * const u_out,
;						uint8_t * const v_out,
;						const uint8_t * const src,
;						const uint32_t width,
;						const uint32_t height,
;						const uint32_t stride);
;
;	width must be multiple of 8
;	does not flip
;	~30% faster than plain c
;
;===========================================================================

align 16
cglobal yuyv_to_yv12_mmx
yuyv_to_yv12_mmx

		push ebx
		push ecx
		push esi
		push edi			
		push ebp		; STACK BASE = 20

		; some global consants

		mov ecx, [esp + 20 + 20]	; width
		mov eax, [esp + 20 + 28]	; stride
		sub eax, ecx				; eax = stride - width
		mov edx, eax
		add edx, [esp + 20 + 28]	; edx = y_dif + stride
		push edx					; [esp + 12] = y_dif

		shr eax, 1
		push eax					; [esp + 8] = uv_dif

		shr ecx, 3
		push ecx					; [esp + 4] = width/8

		sub	esp, 4					; [esp + 0] = tmp_height_counter
						; STACK_BASE = 36
		
		movq mm6, [mask1]
		movq mm7, [mask2]

		mov edi, [esp + 36 + 4]		; y_out
		mov ebx, [esp + 36 + 8]		; u_out
		mov edx, [esp + 36 + 12]	; v_out
		mov esi, [esp + 36 + 16]	; src

		mov eax, [esp + 36 + 20]
		mov ebp, [esp + 36 + 24]
		mov ecx, [esp + 36 + 28]	; ecx = stride
		shr ebp, 1					; ebp = height /= 2
		add eax, eax				; eax = 2 * width

.yloop
		mov [esp], ebp
		mov ebp, [esp + 4]			; width/8
.xloop
		movq mm2, [esi]				; y 1st row
		movq mm3, [esi + 8]
		movq mm0, mm2
		movq mm1, mm3
		pand mm2, mm6 ; mask1
		pand mm3, mm6 ; mask1
		pand mm0, mm7 ; mask2
		pand mm1, mm7 ; mask2
		packuswb mm2, mm3
		psrlq mm0, 8
		psrlq mm1, 8
		movq [edi], mm2

		movq mm4, [esi + eax]		; y 2nd row
		movq mm5, [esi + eax + 8]
		movq mm2, mm4
		movq mm3, mm5
		pand mm4, mm6 ; mask1
		pand mm5, mm6 ; mask1
		pand mm2, mm7 ; mask2
		pand mm3, mm7 ; mask2
		packuswb mm4, mm5
		psrlq mm2, 8
		psrlq mm3, 8
		movq [edi + ecx], mm4

		paddw mm0, mm2			; uv avg 1st & 2nd
		paddw mm1, mm3
		psrlw mm0, 1
		psrlw mm1, 1
		packuswb mm0, mm1
		movq mm2, mm0
		pand mm0, mm6 ; mask1
		pand mm2, mm7 ; mask2
		packuswb mm0, mm0
		psrlq mm2, 8
		movd [ebx], mm0
		packuswb mm2, mm2
		movd [edx], mm2

		add	esi, 16
		add	edi, 8
		add	ebx, 4
		add	edx, 4
		dec ebp
		jnz near .xloop

		mov ebp, [esp]

		add esi, eax			; += width2
		add edi, [esp + 12]		; += y_dif + stride
		add ebx, [esp + 8]		; += uv_dif
		add edx, [esp + 8]		; += uv_dif

		dec ebp
		jnz near .yloop

		emms

		add esp, 16
		pop ebp
		pop edi
		pop esi
		pop ecx
		pop ebx

		ret


;===========================================================================
;
;	void uyvy_to_yv12_mmx(uint8_t * const y_out,
;						uint8_t * const u_out,
;						uint8_t * const v_out,
;						const uint8_t * const src,
;						const uint32_t width,
;						const uint32_t height,
;						const uint32_t stride);
;
;	width must be multiple of 8
;	does not flip
;	~30% faster than plain c
;
;===========================================================================

align 16
cglobal uyvy_to_yv12_mmx
uyvy_to_yv12_mmx

		push ebx
		push ecx
		push esi
		push edi			
		push ebp		; STACK BASE = 20

		; some global consants

		mov ecx, [esp + 20 + 20]	; width
		mov eax, [esp + 20 + 28]	; stride
		sub eax, ecx				; eax = stride - width
		mov edx, eax
		add edx, [esp + 20 + 28]	; edx = y_dif + stride
		push edx					; [esp + 12] = y_dif

		shr eax, 1
		push eax					; [esp + 8] = uv_dif

		shr ecx, 3
		push ecx					; [esp + 4] = width/8

		sub	esp, 4					; [esp + 0] = tmp_height_counter
						; STACK_BASE = 36
		
		movq mm6, [mask1]
		movq mm7, [mask2]

		mov edi, [esp + 36 + 4]		; y_out
		mov ebx, [esp + 36 + 8]		; u_out
		mov edx, [esp + 36 + 12]	; v_out
		mov esi, [esp + 36 + 16]	; src

		mov eax, [esp + 36 + 20]
		mov ebp, [esp + 36 + 24]
		mov ecx, [esp + 36 + 28]	; ecx = stride
		shr ebp, 1					; ebp = height /= 2
		add eax, eax				; eax = 2 * width

.yloop
		mov [esp], ebp
		mov ebp, [esp + 4]			; width/8
.xloop
		movq mm2, [esi]				; y 1st row
		movq mm3, [esi + 8]
		movq mm0, mm2
		movq mm1, mm3
		pand mm2, mm7 ; mask2
		pand mm3, mm7 ; mask2
		psrlq mm2, 8
		psrlq mm3, 8
		pand mm0, mm6 ; mask1
		pand mm1, mm6 ; mask1
		packuswb mm2, mm3
		movq [edi], mm2

		movq mm4, [esi + eax]		; y 2nd row
		movq mm5, [esi + eax + 8]
		movq mm2, mm4
		movq mm3, mm5
		pand mm4, mm7 ; mask2
		pand mm5, mm7 ; mask2
		psrlq mm4, 8
		psrlq mm5, 8
		pand mm2, mm6 ; mask1
		pand mm3, mm6 ; mask1
		packuswb mm4, mm5
		movq [edi + ecx], mm4

		paddw mm0, mm2			; uv avg 1st & 2nd
		paddw mm1, mm3
		psrlw mm0, 1
		psrlw mm1, 1
		packuswb mm0, mm1
		movq mm2, mm0
		pand mm0, mm6 ; mask1
		pand mm2, mm7 ; mask2
		packuswb mm0, mm0
		psrlq mm2, 8
		movd [ebx], mm0
		packuswb mm2, mm2
		movd [edx], mm2

		add	esi, 16
		add	edi, 8
		add	ebx, 4
		add	edx, 4
		dec ebp
		jnz near .xloop

		mov ebp, [esp]

		add esi, eax			; += width2
		add edi, [esp + 12]		; += y_dif + stride
		add ebx, [esp + 8]		; += uv_dif
		add edx, [esp + 8]		; += uv_dif

		dec ebp
		jnz near .yloop

		emms

		add esp, 16
		pop ebp
		pop edi
		pop esi
		pop ecx
		pop ebx

		ret

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人一区二区三区片免费 | 久久www免费人成看片高清| 久久婷婷久久一区二区三区| 91蝌蚪porny九色| 精品一区二区三区在线视频| 亚洲激情图片一区| 欧美精品一区二区三区久久久| 在线看不卡av| 懂色av一区二区夜夜嗨| 亚州成人在线电影| 18涩涩午夜精品.www| 久久精品人人做人人综合| 欧美美女喷水视频| 色播五月激情综合网| 成人美女视频在线观看18| 麻豆一区二区99久久久久| 亚洲综合免费观看高清完整版| 国产欧美日韩精品a在线观看| 9191精品国产综合久久久久久| 国产一区二区美女诱惑| 日韩精品成人一区二区在线| 亚洲国产精品高清| 日韩一区二区三区视频| av激情综合网| 国产精品中文欧美| 视频在线观看91| 亚洲天堂a在线| 久久亚洲综合色一区二区三区| 欧美日韩一区二区三区四区五区| 国产成人啪免费观看软件| 视频在线观看一区二区三区| 亚洲色图一区二区| 久久精品视频一区| 欧美精品一区二区三区蜜桃视频 | 精品视频在线视频| www.日韩在线| 国产一区二区导航在线播放| 国产精品国产三级国产普通话99 | 91一区二区在线| 蜜桃av一区二区三区电影| 亚洲最快最全在线视频| 国产精品女上位| 欧美韩国日本不卡| 久久免费美女视频| 欧美一级一级性生活免费录像| 日本久久电影网| 91免费看`日韩一区二区| 国产91精品欧美| 国产精品一区一区| 国产精品一二三四区| 久久国产剧场电影| 久久99国产精品免费网站| 天堂午夜影视日韩欧美一区二区| 亚洲激情av在线| 自拍av一区二区三区| 中文字幕一区二区三区在线不卡| 国产亚洲综合色| 2020日本不卡一区二区视频| 精品福利一二区| 久久免费美女视频| 久久久精品tv| 久久久久久97三级| 国产嫩草影院久久久久| 亚洲国产精品v| 亚洲人成在线播放网站岛国| 亚洲精品国产高清久久伦理二区 | 亚洲精品乱码久久久久久黑人 | 日本一区二区三区久久久久久久久不 | 久久久久国产一区二区三区四区 | 麻豆91精品91久久久的内涵| 日韩高清在线观看| 日韩 欧美一区二区三区| 久久国产精品第一页| 精品一区二区三区免费视频| 国产在线精品一区二区不卡了| 国模一区二区三区白浆| 国产精品18久久久久久久久久久久| 国产综合色精品一区二区三区| 国产精品99久久久久久久女警| 成人丝袜高跟foot| 一本色道久久加勒比精品 | 国产mv日韩mv欧美| 成人综合婷婷国产精品久久| 国产成人精品综合在线观看| 成人手机在线视频| 91美女视频网站| 欧美色图天堂网| 5月丁香婷婷综合| 精品成人a区在线观看| 国产日韩av一区| 亚洲欧美国产毛片在线| 国产精品大尺度| 亚洲综合久久久久| 久久av中文字幕片| 成人精品一区二区三区四区| 99久久伊人精品| 欧美视频三区在线播放| www成人在线观看| 国产亚洲精品中文字幕| 亚洲欧美激情插| 另类人妖一区二区av| www.亚洲人| 欧美成人激情免费网| 国产欧美精品区一区二区三区| 亚洲伦理在线免费看| 国内精品国产三级国产a久久| 色吧成人激情小说| 久久久综合九色合综国产精品| 亚洲婷婷综合久久一本伊一区| 琪琪久久久久日韩精品| 成人av先锋影音| 欧美一级日韩不卡播放免费| 国产精品网曝门| 免费视频最近日韩| 色综合久久久久网| 国产色91在线| 日韩成人免费电影| 97久久人人超碰| 欧美日韩成人综合天天影院| 亚洲精品一区二区三区四区高清 | 韩国视频一区二区| 欧美日韩久久久久久| 欧美激情中文不卡| 免费在线成人网| 久久久久久久一区| 青青草原综合久久大伊人精品优势| 99精品欧美一区二区三区小说| 欧美成人一区二区| 五月天激情小说综合| www.激情成人| 国产日韩欧美高清| 久久疯狂做爰流白浆xx| 欧美日韩成人综合天天影院| 亚洲视频免费观看| 国产成a人亚洲精品| 精品国产伦一区二区三区观看体验| 午夜欧美一区二区三区在线播放| 99久久精品一区| 国产精品私人自拍| 麻豆精品久久精品色综合| 日本电影欧美片| 国产精品久久久久aaaa| 麻豆国产精品一区二区三区| 欧美三级三级三级爽爽爽| 国产精品色哟哟| 成人av片在线观看| 久久麻豆一区二区| 美脚の诱脚舐め脚责91| 91视频国产资源| 国产精品国产成人国产三级| 高清beeg欧美| 欧美成人video| 国产在线精品一区二区三区不卡| 欧美成人一区二区三区在线观看| 麻豆91在线播放| 精品国产乱码久久久久久久| 久久精品国产一区二区三区免费看| 日韩欧美色电影| 久久国产精品一区二区| 精品日韩一区二区| 国产乱码一区二区三区| 久久久久久久久久看片| 国产精品18久久久久久vr| 欧美—级在线免费片| 国产91富婆露脸刺激对白| 国产精品短视频| 色中色一区二区| 亚洲一区二区三区四区在线| 欧美日韩一二三区| 奇米四色…亚洲| 久久蜜桃香蕉精品一区二区三区| 国产美女精品在线| 国产欧美日韩激情| 国产69精品久久久久毛片| 国产精品网站导航| 国产一区二区三区精品视频| 成人免费在线视频观看| 欧美视频在线不卡| 久久99这里只有精品| 亚洲国产精品精华液ab| 一本一本大道香蕉久在线精品 | 欧美日韩午夜在线视频| 日韩不卡一区二区三区| 精品福利一二区| 97精品电影院| 蜜桃视频第一区免费观看| 国产日韩亚洲欧美综合| 在线观看网站黄不卡| 人人狠狠综合久久亚洲| 久久久噜噜噜久噜久久综合| 99精品欧美一区二区蜜桃免费| 亚洲18色成人| 欧美国产激情二区三区 | 欧美性受xxxx黑人xyx性爽| 奇米综合一区二区三区精品视频| 久久久亚洲国产美女国产盗摄| 97aⅴ精品视频一二三区| 男人的j进女人的j一区| 国产精品色眯眯| 日韩一级完整毛片|