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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ccvt_mmx.s

?? 卡內(nèi)基梅隆大學(CMU)開發(fā)的移動機器人控制開發(fā)軟件包??蓪Χ喾N機器人進行控制
?? S
字號:
/*  CCVT: ColourConVerT: simple library for converting colourspaces    Copyright (C) 2002 Nemosoft Unv.    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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA    For questions, remarks, patches, etc. for this program, the author can be    reached at nemosoft@smcc.demon.nl.*//* The ccvt_* functions always have 4 paramaters:   width    8(%ebp)   height  12(%ebp)   src     16(%ebp)   dst     20(%ebp) */   #define __ASSEMBLY__#include <linux/linkage.h>#define Width   8(%ebp)#define Height 12(%ebp)/* 2 parameters, 1 in, 1 out */#define Src    16(%ebp)#define Dst    20(%ebp)/* The buffer space is in the MMX registers :-)   We only need the U and V pointers on the stack */#define Uptr        -4(%ebp)#define Vptr        -8(%ebp)	.data/* Some constants used during processing */mm_0:	 .byte    0,   0,   0,   0,   0,   0,   0,   0mm_128:	 .byte  128, 128, 128, 128, 128, 128, 128, 128mm_mask: .byte  255, 255, 255,   0, 255, 255, 255,   0mm_low:	 .byte  255, 255, 255, 255,   0,   0,   0,   0mm_high: .byte    0,   0,   0,   0, 255, 255, 255, 255/* Multiplication factors for Vb, Vg, Ug, Ur */mm_mul_bgr:	 .word  454,  -88, -183,  359mm_mul_rgb:	 .word  359, -183,  -88,  454	.text/* This function will load the src and destination pointers, and test the   width/height parameters.     - %esi will be set to Src    - %edi will be set to Dst   the carry flag will be set if any of these tests fail.    It assumes %ebp has been set. */test_params:	mov Src, %esi	mov Dst, %edi		cmp $0, %esi		# NULL pointers?	je param_fail	cmp $0, %edi	je param_failtest_width_height:	cmpl $0, Width	jbe param_fail	testl $1, Width		# Odd no. of columns?	jnz param_fail		# Aye	cmp $0, Height	jbe param_fail	testl $1, Height	# Odd no. of lines?	jnz param_fail		# Aye	/* fall through *//* exit points */param_ok:	clc			# Success: clear carry	retparam_fail:	stc			# Fail: set carry	ret# Our output is YUV; UV-pointers are relative to ediparam_yuv_dst:	mov Width, %eax		# add width * height to Y ptr, set in U	mull Height	mov %edi, Uptr		# U = Y	mov %edi, Vptr		# V = Y	add %eax, Uptr		# U = Y + w*h	add %eax, Vptr		# V = Y + w*h	shr $2, %eax			add %eax, Vptr		# V = Y + w*h + (w*h)/4	ret# Our input is YUV; UV-pointers are relative to esiparam_yuv_src:	mov Width, %eax		# add width * height to Y ptr, set in U	mull Height	mov %esi, Uptr		# U = Y	mov %esi, Vptr		# V = Y	add %eax, Uptr		# U = Y + w*h	add %eax, Vptr		# V = Y + w*h	shr $2, %eax			add %eax, Vptr		# V = Y + w*h + (w*h)/4	ret/*************************************/.macro ENTER_FUNC	enter $8, $0		# 8 bytes for UV pointers	push %ebx	push %esi	push %edi		call test_params	jc 9f.endm.macro START_LOOP_YUV order	call param_yuv_src	# our input is YUVp	mov Width, %ebx		# Use in offset calculation for Y2 / Dst2	shrl $1, Height		# Only half the lines	shrl $1, Width		# Only half the columns	movq mm_128, %mm6	# load constants	movq mm_mask, %mm5	movq mm_mul_\order, %mm40:	mov Width, %ecx		# number of loops.endm.macro LOAD_MUL_UV is_rgb=01:	push %ebx// Section A1: load and prepare UV values        mov Uptr, %ebx        movzbl (%ebx), %eax     # load U byte        inc %ebx        mov %al, %ah            # duplicate byte        mov %ebx, Uptr		# Faster than "incl Uptr"                mov Vptr, %ebx        movzbl (%ebx), %edx	# load U byte        inc %ebx        mov %dl, %dh            # duplicate byte        mov %ebx, Vptr.if \is_rgb        shl $16, %eax        or %edx, %eax		# move to lower 16 bits of eax        movd %eax, %mm2         # 00 00 00 00 UU UU VV VV .else        shl $16, %edx        or %eax, %edx		# move to lower 16 bits of edx        movd %edx, %mm2         # 00 00 00 00 VV VV UU UU.endif// Section A2: multiply UV values and shuffle// Note: byte orders shown in the MMX registers are for BGR order        psubb %mm6, %mm2	# -128        punpcklbw mm_0, %mm2    # 00 VV 00 VV 00 UU 00 UU        psllw $8, %mm2          # VV 00 VV 00 UU 00 UU 00        pmulhw %mm4, %mm2       # multiply with factors, signed                movq %mm2, %mm7		# vr vr vg vg ug ug ub ub	pand mm_low, %mm7	# 00 00 00 00 ug ug ub ub	pand mm_high, %mm2	# vr vr vg vg 00 00 00 00	psrlq $16, %mm2		# 00 00 vr vr vg vg 00 00	paddw %mm2, %mm7	# 00 00 vr vr *g *g ub ub	packsswb %mm7, %mm7	# pack signed saturated, and duplicate values (!)				/* 00 vr *g ub 00 vr *g ub				   NB! This introduces saturation before the				   end result is calculated. In strongly				   saturated areas with high or low luminance				   this is visible as a darkening resp.				   brightening.				   I doubt this is a real problem... The 				   only real solution is to keep these values				   as 16 bits, and subtract at the end, which				   unfortunately introduces extra cycles.				 */	pop %ebx.endm// load 2 Y values and add UV values// Unfortunately, there is no  'duplicate byte into 4 mmx bytes' instruction// In: %eax.macro _DO_2Y_UV reg	mov %eax, %edx		# dup AX register	shl $8, %eax		#  00 Yx1 Yx0  00	ror $8, %edx		# Yx0  00  00 Yx1	bswap %edx		# Yx1  00  00 Yx0	or %edx, %eax		# Yx1 Yx1 Yx0 Yx0	movd %eax, %mm3		# Load into MMX register	movq %mm3, %mm\reg	# Double, and....	punpcklbw %mm3, %mm\reg	# Poof! Yx1 Yx1 Yx1 Yx1 Yx0 Yx0 Yx0 Yx0	pand %mm5, %mm\reg	# This isnt strictly necessary, but keeps the alpha byte at 0	psubb %mm6, %mm\reg	# Turn into signed	paddsb %mm7, %mm\reg	# add UV part (8 bytes!)	paddb %mm6, %mm\reg	# Make unsigned again.endm.macro LOAD_4Y_ADD_UV	movzwl (%esi, %ebx), %eax	# load Y10 & Y11, bits 0..15	_DO_2Y_UV 1			# stuff in MM1	xor %eax, %eax			# clear		lodsw				# load Y00 & Y01	_DO_2Y_UV 0			# stuff in MM0.endm.macro STORE_MMX32// Section B2		movq %mm0, (%edi)		# store 2 pixels at once at [dst]	movq %mm1, (%edi, %ebx, 4)	# [dst + 4 * width] At moments like this,					#   you must admire the Intel engineers :)	add $8, %edi.endm.macro _PUSH_EAX24 reg	stosw 	shr $16, %eax	stosb.endm.macro _PUSH_MMX24 reg	movd %mm\reg, %eax			# eax = x0	_PUSH_EAX24	psrlq $32, %mm\reg			# pixel x1	movd %mm\reg, %eax	_PUSH_EAX24.endm.macro STORE_MMX24	# Blegh; this is more work.	push %edi	mov %ebx, %edx	shl $1, %edx	add %ebx, %edx			# edx = 3 * ebx	add %edx, %edi			# edi = edi + 3 * width	_PUSH_MMX24 1	pop %edi			# restore edi	_PUSH_MMX24 0.endm.macro END_LOOP_32	# end of calculations	dec %ecx	jnz 1b			# perform column loop	add %ebx, %esi		# Done; go to next line	add %ebx, %edi	add %ebx, %edi	add %ebx, %edi	add %ebx, %edi	decl Height		# decrement line counter	jnz 0b.endm.macro END_LOOP_24	# end of calculations	dec %ecx	jnz 1b			# perform column loop	add %ebx, %esi		# Done; go to next line	add %ebx, %edi	add %ebx, %edi	add %ebx, %edi	decl Height		# decrement line counter	jnz 0b.endm.macro LEAVE_FUNC	emms			# Clear MMX state9:	pop %edi	pop %esi	pop %ebx	leave	ret.endm/* Functions to go from YUV interlaced formats to RGB. Note that these   functions are build entirely from macros */ENTRY(ccvt_420p_bgr32)	ENTER_FUNC	START_LOOP_YUV bgr	LOAD_MUL_UV 0	LOAD_4Y_ADD_UV	STORE_MMX32	END_LOOP_32	LEAVE_FUNCENTRY(ccvt_420p_bgr24)	ENTER_FUNC	START_LOOP_YUV bgr	LOAD_MUL_UV 0	LOAD_4Y_ADD_UV	STORE_MMX24	END_LOOP_24	LEAVE_FUNCENTRY(ccvt_420p_rgb32)	ENTER_FUNC	START_LOOP_YUV rgb	LOAD_MUL_UV 1	LOAD_4Y_ADD_UV	STORE_MMX32	END_LOOP_32	LEAVE_FUNCENTRY(ccvt_420p_rgb24)	ENTER_FUNC	START_LOOP_YUV rgb	LOAD_MUL_UV 1	LOAD_4Y_ADD_UV	STORE_MMX24	END_LOOP_24	LEAVE_FUNC

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女视频黄久久| 日韩欧美一区二区免费| 风间由美一区二区三区在线观看| 久久成人免费网| 麻豆精品一二三| 精品亚洲aⅴ乱码一区二区三区| 日本欧美加勒比视频| 日本欧美一区二区三区乱码| 奇米四色…亚洲| 黄网站免费久久| 国产精品99久久久久| 丁香啪啪综合成人亚洲小说 | 久久精品国产网站| 久久av老司机精品网站导航| 国产一区 二区| 不卡的av电影| 欧美亚洲国产一卡| 91精品国产欧美日韩| 欧美大尺度电影在线| 久久久电影一区二区三区| 欧美激情在线一区二区三区| 亚洲人吸女人奶水| 亚洲成人黄色影院| 毛片基地黄久久久久久天堂| 国产露脸91国语对白| 不卡电影免费在线播放一区| 欧美在线观看一区| 欧美一级欧美三级在线观看 | 日韩精品五月天| 国模冰冰炮一区二区| 处破女av一区二区| 视频一区二区三区入口| 夜夜揉揉日日人人青青一国产精品| 一区二区国产视频| 日本不卡一区二区三区 | 欧美性大战xxxxx久久久| 日韩一级黄色大片| 欧美激情一区在线观看| 亚洲一区二区四区蜜桃| 国内成人免费视频| 91片黄在线观看| 日韩欧美一区二区视频| 国产精品美女久久久久久2018| 亚洲一区二区三区四区的| 美女性感视频久久| 91美女视频网站| 日韩一区二区三区视频在线| 中文字幕欧美日韩一区| 亚洲成人1区2区| 国产精品亚洲第一区在线暖暖韩国| 在线视频一区二区免费| 久久综合九色综合久久久精品综合| 亚洲免费资源在线播放| 久久成人精品无人区| 色综合一个色综合| 久久久一区二区三区| 亚洲一二三区在线观看| 国产mv日韩mv欧美| 欧美一级理论片| 亚洲丝袜美腿综合| 国产在线精品一区二区夜色| 91官网在线观看| 久久中文娱乐网| 午夜精品一区二区三区电影天堂| www.欧美日韩| 久久久久青草大香线综合精品| 五月激情六月综合| av一区二区不卡| 久久综合九色综合欧美98| 婷婷综合五月天| 91啦中文在线观看| 国产亚洲午夜高清国产拍精品| 婷婷成人综合网| 日本久久精品电影| 中文字幕久久午夜不卡| 韩日av一区二区| 欧美精品在线观看一区二区| 亚洲美女电影在线| 成人av资源在线观看| 精品国产3级a| 日本视频一区二区三区| 欧美在线免费播放| 亚洲男人的天堂网| 99久久久久久| 久久久国产综合精品女国产盗摄| 久久se精品一区精品二区| 91精品一区二区三区久久久久久 | 麻豆国产欧美一区二区三区| 欧美日韩国产影片| 亚洲电影中文字幕在线观看| av福利精品导航| 国产精品麻豆久久久| 丁香一区二区三区| 久久久99精品久久| 国产精品综合网| 久久夜色精品国产噜噜av| 久久精工是国产品牌吗| 日韩欧美亚洲国产精品字幕久久久| 亚洲成在人线免费| 欧美三级日韩三级国产三级| 亚洲精品国产高清久久伦理二区| 色婷婷av一区二区三区gif| 成人免费一区二区三区视频| 99久久精品国产网站| 亚洲精品videosex极品| 91成人国产精品| 亚洲午夜一区二区三区| 欧美调教femdomvk| 午夜久久电影网| 日韩西西人体444www| 九九久久精品视频| 久久影视一区二区| 国产福利精品一区| 中文字幕一区二区不卡| 色综合天天综合狠狠| 亚洲综合在线观看视频| 欧美精品一卡二卡| 久久精工是国产品牌吗| 欧美国产精品中文字幕| 91社区在线播放| 天堂精品中文字幕在线| 欧美电影免费观看完整版| 国产传媒久久文化传媒| 亚洲视频 欧洲视频| 欧美色偷偷大香| 久久国产精品99久久人人澡| 国产人成一区二区三区影院| 成人手机电影网| 亚洲午夜视频在线观看| 日韩免费看的电影| 国产成人av福利| 亚洲精品视频在线观看网站| 欧美老女人在线| 国产一区二区三区精品视频| 17c精品麻豆一区二区免费| 欧美偷拍一区二区| 国产曰批免费观看久久久| 国产精品久久久久影视| 欧美日本在线播放| 国产高清久久久久| 亚洲人精品午夜| 日韩精品一区二| 91丝袜美腿高跟国产极品老师| 日本欧洲一区二区| 国产精品丝袜一区| 777亚洲妇女| 99久久精品免费看| 青娱乐精品视频| 亚洲欧洲另类国产综合| 91麻豆精品国产自产在线观看一区 | 亚洲视频免费在线| 日韩女优毛片在线| 99视频有精品| 日本亚洲欧美天堂免费| 国产精品区一区二区三区| 国产丝袜欧美中文另类| 91麻豆成人久久精品二区三区| 日韩中文字幕麻豆| 国产精品蜜臀av| 日韩午夜小视频| 91高清视频在线| 国产在线国偷精品产拍免费yy | 一本色道久久加勒比精品| 美女在线一区二区| 亚洲综合激情另类小说区| 久久久久国产精品麻豆ai换脸 | 欧美精品欧美精品系列| 国产xxx精品视频大全| 日本网站在线观看一区二区三区 | 久国产精品韩国三级视频| 亚洲欧美日韩国产另类专区| 久久色在线视频| 欧美欧美欧美欧美首页| 91首页免费视频| 国产精品一区二区三区99| 奇米一区二区三区| 亚洲自拍偷拍九九九| 国产精品国产成人国产三级| 精品日韩av一区二区| 欧美日韩在线播放| 99r精品视频| 国产精品亚洲专一区二区三区| 日本亚洲最大的色成网站www| 亚洲综合另类小说| 国产精品国产馆在线真实露脸| 久久久久成人黄色影片| 日韩三级av在线播放| 欧美日韩激情一区二区三区| 91碰在线视频| 成人av资源在线观看| 国产精品综合二区| 九九精品一区二区| 麻豆一区二区三| 日韩精品亚洲一区二区三区免费| 亚洲国产视频一区| 亚洲高清视频中文字幕| 亚洲综合久久久| 亚洲高清不卡在线| 亚洲成人自拍网| 日日骚欧美日韩|