沉闷的世界
-

原来在blogcn的头部,挪这里。因blogbus改模板要给钱。
配上字:
原本平静的湖水
原本平静的我的心
你轻轻的走来
信手投了一颗石子
于是湖水不再平静
心也泛起涟漪
但,你没有继续投石子,或掬清凉的湖水入口,或荡起一叶扁舟,就走远了
留下的,湖水依旧平静
可我的心呢……----湖水.心
-
条码扫描枪引线的排列 - [嵌入式硬件]
2008-07-20
条码扫描枪引线的排列:
以symbol 2208手持式量度,单量了串口的.
2 --- +5V 0.2A电压少于5.02V
3 --- GND
4 --- female DB-9 pin2 RXD
5 --- female DB-9 pin3 TXD
-
今日主题曲:让我跟你走-彭羚 - [今日主题曲]
2008-07-15
时常心痛
彭羚:让我跟你走
作曲:梁文福 作词:張美賢
逃避你的眼光
還是要一再偷看
逃避卻偏退不去
泛濫我心裡
掛念的感覺
容許在這晚上
甚麼都不聽不看
坐在房的中央
對著燈光
想你又想你
小心一些不算過份
不想再愛會再次痛心
但你一笑一語可以一秒間
扭轉天昏跟地暗
假使拘謹不去接近
剩餘寂寞伴我繼續做人
就以畢生的勇敢
將我的愛賭這下半生
來讓我跟你走
流浪到天邊海角
如若你肯靠緊我
你願痛惜我
未悔當初
來讓我跟你走
尋覓最真摯感覺
陪著痛苦也經過
快樂也經過
讓你好好愛我
小心一些不算過份
不想再愛會再次痛心
但你一笑一語可以一秒間
扭轉天昏跟地暗
假使拘謹不去接近
剩餘寂寞伴我繼續做人
就以畢生的勇敢
將我的愛賭這下半生
來讓我跟你走
流浪到天邊海角
如若你肯靠緊我
你願痛惜我
未悔當初
來讓我跟你走
尋覓最真摯感覺
陪著痛苦也經過
快樂也經過
讓你好好愛我
來讓我跟你走
流浪到天邊海角
如若你肯靠緊我
你願痛惜我
未悔當初
來讓我跟你走
一生一世都不够
陪著痛苦也經過
快樂也經過
讓你好好愛我 -
51单片机P1口做输入时,P0口输出时 - [单片机]
2008-07-15
51单片机P1口做输入时,如果拉高,用了setb p1.x或者mov p1,#0ffH,期望读入p1时为1。
即mov c,p1,x,c不是1
拉低则容易处理
P0口做输出时,使用mov p0,#0ffh,不能得到高电位以拉动led。须使用setb p0.x方可。
-
做一51单片机,串口传输,LED显示字符。本以小事一宗,做过很多次了,也不用仿真器,不数日即可。周六经几次反复,想来已是差不多成了,烧写毕,发现,输出怪字符,输入没有反应。思之再三,程序改为原来可用版本,照样。换一PC,输入有反应,但输出没有动静。以为maxim232片子烧了,因为51片子插反过。打下来,换个,如故。今日突然想到,光顾着检查DB9的RXD TXD两线的通路,没有查过DB9的地线,果然地线断了。折腾我这些天!
-
观绿路有UV 77紫外线固化油漆卖;
海珠中11,大德路口有盘状滚珠垫圈卖;
惠福西96有工业陶瓷、工业电炉、炉盘、陶瓷管卖。
-
改变屏幕分辨率的程序 - [软件/算法]
2008-06-26
1 快捷方式:rundll32 desk.cpl,DeskSetCurrentScheme 我这台机器不行,未经验证。
2 写个VC对话框,InitDialog里:
DEVMODE *lpdevmode;
BOOL bxypret;
long lret;
lpdevmode=(DEVMODE *)malloc(sizeof(DEVMODE)+100);
lpdevmode->dmSize=sizeof(DEVMODE);
lpdevmode->dmDriverExtra=0;
bxypret=::EnumDisplaySettings(NULL,0,lpdevmode);//NULL是第一个屏幕相当于\\\\.\\Display1,0是当前设置
lpdevmode->dmPelsHeight=600;
lpdevmode->dmPelsWidth=800;
lpdevmode->dmFields=DM_PELSWIDTH | DM_PELSHEIGHT;
lret=ChangeDisplaySettings(lpdevmode,0);//xuyingpin:CDS_TEST可以出询问窗口
CDialog::OnCancel(); -
编译了一个VC下的ado程序release版本,放到目标机器上运行。出以下错误:The application requested the runtime to terminate it in an unusual way. Please contact .....。也就是联系我自己了。
查网页,微软说:
在 Microsoft Windows XP 中运行自定义 Microsoft Visual C++ 6.0 程序时,您可能会收到以下错误消息:
This application has requested the Runtime to terminate it in an unusual way.Please contact the application''s support team for more information.
回到顶端原因
如果使用 /GR 和 /MD 编译器开关,并且 Msvcrt.dll 文件和 Msvcirt.dll 文件的版本是 7.0.x,则可能出现此问题。注意:当使用早于 7.0 版本的 Msvcrt.dll 文件和 Msvcirt.dll 文件时,不会出现此问题。
回到顶端解决方案
Microsoft 现在提供了一个受支持的修补程序,但该程序只用于解决本文中提到的问题。仅当系统遇到本文描述的特定问题时才可应用此修补程序。此修补程序可能还会接受进一步的测试。因此,如果这个问题没有对您造成严重影响,我们建议您等待包含此修补程序的下一个 Windows XP Service Pack。要立即解决此问题,请与 Microsoft 产品支持服务联系,以获取此修补程序。要获取 Microsoft 产品支持服务电话号码和支持费用信息的完整列表,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support根据微软的方案可以如下解决这个问题:
1、下载早期的 Msvcrt.dll 文件和 Msvcirt.dll 文件。
2、在C:\Program Files\或者是其他软件安装目录下搜索这两个文件。
3、下载微软官方补丁。自然去下载了那个微软说的不那么管用的补丁,看是msvcirt.dll,我看那俩dll都是7.0x版本的。难道要我替换,又怕别的程序不能运行。打了该补丁不管用。
以为是ado1.5没有安装,去program files\comon file\system\ado下看了一下,好像ado15也在。
按他的说法要把\MD \GR编译开关关掉,也不可能,MD是多线程开关,关不掉。
后来在ado的execute的语句加上try catch __com_error,发现是sql语句执行时的错误产生这个错误。改之则好。
-
VC用DAO,想访问SQL server。
目前搞不定:
1 无法使用select newid()这种使用系统函数的语句。
2 使用 ...where a like '100%' 之类的要把%改成*
应该是DAO把SQL语句做了自己的翻译,因此有这些变化。
-
昨日下午,叔公死了。他打牌完毕,向家走了几步,委地暴猝。
叔公瘦,总是叫我pin仔。跟他说话没几句,因他说客家话,我听不懂。本来回去也没几次。上次拜山,他领着一大家人,其中大大小小很多小孩是他的孙辈,小孩抢东西,他喝斥几句。
昨天才知道,原来他父和我父爷爷是堂兄弟,所以叫他叔公。这已经是家乡关系最近的亲戚了。其实父家真的是人丁不旺,收养了父后起名接源,想接续香火。看来到我这里是彻底没希望了。
-
念奴娇 曲名来源于唐天宝中名倡“念奴”。元稹有《连昌宫词》赞,流传甚广。玄宗称:此女妖丽,眼色媚人。本是艳词
正体:
念奴娇 苏轼凭高眺远,见长空万里,云无留迹。
○ ● ● ○ ● ○●△
桂魄飞来光射处,冷浸一天秋碧。
● ○○●● ● ○○●△
玉宇琼楼,乘鸾来去,人在清凉国。
●○○ ○ ● ●○○●△
江山如画,望中烟树历历。
○○● ●○○● ●△我醉拍手狂歌,举杯邀月,对影成三客。
● ●○○ ○ ● ○○●△
起舞徘徊风露下,今夕不知何夕。
● ○○●● ● ○○●△
便欲乘风,翩然归去,何用骑鹏翼。
●○○ ○ ● ●○○●△
水晶宫里,一声吹断横笛。
○○● ○○●○●△○平声 ●仄声 △韵
词谱:此调仄韵词以此词为正体。双调一百字,上片四十九字十句四仄韵,下片五十一字十句四仄韵。变体太多了,句读参次,多字少字,韵位变化:
念奴娇 赤壁怀古 苏轼大江东去,浪淘尽、千古风流人物。
故垒西边,人道是、三国周郎赤壁。
乱石崩云,惊涛裂岸,卷起千堆雪。
江山如画,一时多少豪杰。遥想公瑾当年,小乔初嫁了,雄姿英发。
羽扇纶巾,谈笑间、樯橹灰飞烟灭。
故国神游,多情应笑我、早生华发。
人生如梦,一尊还酹江月。此词是经典。“柳郎中词,只合十七八女郎,执红牙板,歌《杨柳岸晓风残月》;学士词,须关西大汉,铜琵琶,铁焯板,唱《大江东去》”
但大家注意此词韵脚:
物,壁,雪,杰
发,灭,发,月
什么叫压韵?不知当时四川话发音这几个字是否压韵。而且在苏学士填这经典豪放词前,念奴娇还是咏叹女子的婉约作品。苏轼不但把十七八女郎唱的填成关西大汉唱的,还不顾这什么韵不韵的,委实豪放得很。例子:看看稼轩的婉约
念奴娇·赋雨岩效朱希体 辛弃疾近来何处有吾愁, 何处还知吾乐。 一点凄凉千古意, 独倚西风寥廓。 并竹寻泉, 和云种树, 唤做真闲客。 此心闲处, 不应长藉邱壑。
休说往事皆非, 而今云是, 且把清尊酌。 醉里不知谁是我, 非月非云非鹤。 露冷风高, 松梢桂子, 醉了还醒却。 北窗高卧, 莫教啼鸟惊著。
念奴娇·题梅 辛弃疾
疏疏淡淡, 问阿谁、 堪比天真颜色。 笑杀东君虚占断, 多少朱朱白白。 雪里温柔, 水边明秀, 不借春工力。 骨清春嫩, 迥然天与奇绝。
尝记宝御寒轻, 琐窗人睡起, 玉纤轻摘。 漂泊天涯空瘦损, 犹有当年标格。 万里风烟, 一溪霜月, 未怕欺他得。 不如归去, 阆苑有个人忆。
-
昨天搭了个H桥,想正反向驱动直流电机。
考虑到51单片机初始时端口置高,如果用NPN搭就会在复位时电流比较大,于是选PNP管。开始选PNP管子什么2N2904之类的,就是没得卖。于是用9012,但发热。后来用8550。但不能使电机转动,而且地侧的管子还热。想了一下原来如果用三极管作开关管高侧和地侧管子导通不能用同一个电压触发。需要有区别。难怪书上都喜欢用场效应管做开关管了。加了一对电阻和稳压管,解决了。
另:FAIRCHILD的FAN8100和FAN8082好像很合我用,只是买不到就自己搭了,FAN8100工作电压低些。
-
VC下控制Microsoft DataGrid Control 6.0 (Sp6) (OLEDB) - [软件/算法]
2008-05-13
续VC下使用Microsoft DataGrid Control 6.0 (Sp6) (OLEDB) 。
上次只是用到columns column对象。轮到最基本的取表格内内容时又遇到问题。本以为像上次般取出column然后再想办法取某行。结果取得column只能控制增列相关的比如类型、头、数据列之类的。需要取表格内容要用如下办法:
m_statgrid.SetCol(0);//column从0开始计数,取的是当前行的0列,如果指定哪一行用SetRow()
CString cstr=m_statgrid.GetText();取得某列的方法:
CColumns cols;
CColumn col;
VARIANT vart;
cols=m_statgrid.GetColumns();
vart.lVal=0;
vart.vt=VT_I4;
col=cols.GetItem(vart);//就是这么麻烦以下摘自http://topic.csdn.net/t/20061221/01/5245367.html,论述把datagrid数据导出为excel表格.
VC++6.0通过ADO连接到SQL Server2000;
查询出记录后可正常显示,但当要把DataGrid的记录导出为excel文件时(采用模板文件的方式),如果要导出的记录数大于68,就提示“Invalid row number,导出失败。
我调试以及在网上看了很多文章,但不是很明白。
刚刚调试时,却变为在57行时出错了。出错后,不在循环,而是跳到wincore.cpp的CATCH_ALL(e)里。
本人刚接触VC。
请大家指教,或给出其它的解决方法(最好详细)谢谢!
hotmail:kaitonsong#hotmail.com (请把#替换为@)
相关代码如下:
void CMaterialDlg::OnButtonReport()
{
// TODO: Add your control notification handler code here
//定义操作Excel必要的对象
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
_Application objApp;
Workbooks objBooks;
_Workbook objBook;
Worksheets objSheets;
_Worksheet objSheet;
Range objRange;
//创建Excel对象
objApp.CreateDispatch("Excel.Application");
objBooks = objApp.GetWorkbooks();//返回工作薄对象
//获取主程序所在路径,存在sPath中
CString sPath,sExcelFile;
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
if (node_name == "产品明细")
{
//打开指定Excel文件
sExcelFile = sPath + "\\Product.xls";
objBook.AttachDispatch(objBooks.Add(_variant_t(sExcelFile)));
objSheets = objBook.GetSheets();
//定义第一个Sheet为对象
objSheet = objSheets.GetItem((_variant_t)short(1));
objRange.AttachDispatch(objSheet.GetCells(),true);
//取得结果集中记录个数,列数
int RowTotal;
int ColumnTotal;
//double dTotal;
//dTotal = 0;
CString GridContent;
//得到结果集中记录个数
RowTotal = m_adodc.GetRecordset().GetRecordCount();
//定义列对象并取得列的个数
CColumns cls;
cls = m_DataGrid.GetColumns();
ColumnTotal=cls.GetCount();
//双层循环取得所有数据放入Excel表中
for (int i=0;i<RowTotal;i++)
{
//设定数据所在行
m_DataGrid.SetRow(i);
for (int j=0;j<ColumnTotal;j++)
{
m_DataGrid.SetCol(j);
//取得指定列的值
GridContent = m_DataGrid.GetText();
//计算原值
if (j==11)
// dTotal = dTotal+atoi(cc);
//把列值放入Excel指定单元格
objRange.SetItem(_variant_t((long)(i+2)),_variant_t((long)(j+1)),_variant_t(GridContent));
}
}
//设置Excel为可见
objApp.SetVisible(true);
//释放句柄
objRange.ReleaseDispatch();
objSheet.ReleaseDispatch();
objSheets.ReleaseDispatch();
objBook.ReleaseDispatch();
objBooks.ReleaseDispatch();
objApp.ReleaseDispatch();
} -
日前看电视《流言终结者》,两人做一个单人直升机。如下图。不成功,甚至升力未能举起机器本身重量。
我不怀疑两个鬼佬主持的团队的加工制作能力,比我强多了。但还是没有飞起来,我觉得这是有根本原理上的问题。我推断是风扇旋转面积不够大。
上面几个参数:旋转速度5000转/min(主持人测量的),风扇半径34cm,函道高度23cm。
w=5000r/min=83.3r/s
T=0.012s每转一圈耗时0.12秒,假设每一圈都把函道内的空气由4级风6m/s加速到台风的等级35m/s,他不可能大于台风的速度,从画面上看,如果达到台风的速度,下面的主持人根本不能张开嘴呼吸。脸会吹得变形。这个推断值我感觉很合理。
a=(v1-v0)/t=(35-6)/0.0002=2416.67 加速度
m=2*S*h*ρ=2*pi*sqr(r)*h*ρ=2*3.14*0.34*0.34*0.23*1.2=0.2004 两个风扇函道内的容积乘以空气密度得到空气的质量
f=ma=0.2*2416.67=483.33kg照计算这应该能推得动一个人飞起来的。
附空气密度和风力等级
根据中国气象局“关于实施热带气旋等级国家标准”GBT 19201-2006 的通知,热带气旋按中心附近地面最大风速划分为六个等级:
名称 属性
超强台风(Super TY) 底层中心附近最大平均风速≥51.0 米/秒,也即16级或以上
强台风(STY) 底层中心附近最大平均风速41.5-50.9 米/秒,也即14-15 级
台风(TY) 底层中心附近最大平均风速32.7-41.4 米/秒,也即12-13 级
强热带风暴(STS) 底层中心附近最大平均风速24.5-32.6 米/秒,也即风力10-11 级
热带风暴(TS) 底层中心附近最大平均风速17.2-24.4 米/秒,也即风力8-9 级
热带低压(TD) 底层中心附近最大平均风速10.8-17.1 米/秒,也即风力为6-7 级
根据需要还可以将风力换算成所对应的风速,也就是单位时间内空气流动的距离,用米/秒表示,其换算口诀供参考:二是二来一是一,三级三上加个一。四到九级不难算,级数减二乘个三。十到十二不多见,牢记十级就好办。十级风速二十七,每加四来多一级。
即:一级风的风速等于1米/秒,二级风的风速等于2米/秒。三级风的风级上加1,其风速等于4米/秒。四到九级在级数上减去2再乘3,就得到相应级别的风速。十至十二级的风速算法是一样的,十级风速是27米/秒,在此基础上加4得十一级风速31米/秒,再加4得十二级风速35米/秒。标准状态指大气压p a=101300Pa,大气温度t=20℃,相对湿度50%,空气密度ρ=1.2kg/m 3
-
转贴MMX算法实现YUV到RGB - [软件/算法]
2008-05-11
搜索到一个mmx实现yuv到rgb的算法,没看,记录如下但没看出它怎么快速法,肯定比我的那个慢,连存储都应该比我的大,而且它的是yuv32转换rgb32的,不是常用的yuv422格式。我的想法是yuv到rgb根本不适合用mmx指令,虽然一次运算操作数多,但运算前准备太大。
yuv到32位rgb的快速转换算法基于mmx实现
/// baojinlong@sohu.com
// if have any problem, contact me.
// the asm function nearly have the same speed as mmx!
/////// asm code
unsigned char *clip;
void init_clip()
{
unsigned char *p;
p=(unsigned char*)malloc(2048);
clip=p+1024;
for (int i=-1024;i<1024;i++)
{
clip[i]=(i>=0)? ((i<=255)?i:255):0;
}
}// r=1.164(y-16)+1.596(v-128)
// g=1.164(y-16)-0.391(u-128)-0.813(v-128)
// b=1.164(y-16)+2.018(u-128)const static int p_1164 = 75;
const static int p_1596 = 102;
const static int p_0391 = 25;
const static int p_0813 = 52;
const static int p_2018 = 129;const static int ooffooff=0x00ff00ff;
const static int ffooffoo=0xff00ff00;const static short p_223[]= {25632,25632};
const static short p_135[]= {4349,4349};
const static short p_277[]= { 23906,23906};void paroll_yuv2rgb(unsigned char *y,
unsigned char *u,
unsigned char *v,
unsigned char *r,
int h ,
int w)
{
// h: height of y matrix
// w: width of y matrix
// chroma type:: must be 420// r=1.164*y + 1.596*v -223
// g=1.164*y - 0.391*u - 0.813*v +135.9
// b=1.164*y + 2.018*u -276.93
int py1164_20;
int py1164_31;
int pv1596;
int pv0813;
int pu0391;
int pu2018;
int pr20,pr31,pg20,pg31,pb20,pb31;int rw=w<<2;
int rws16=rw-16;
int lw=w>>2;
int lh=h>>1;
int lw0=lw;
int iclip=(int)clip;__asm
{
mov esi,y
llw:
mov edi,vadd [v],2
movzx ebx,byte ptr [edi]
movzx eax,byte ptr [edi+1]mov edi,u
add [u],2shl eax,16
or eax,ebx // 00 v1 00 v0movzx ecx,byte ptr [edi+1]
mov ebx,eax
mul [p_0813]
shl ecx,16
mov [pv0813],eax
mov eax,ebx
mul dword ptr p_1596movzx ebx,byte ptr [edi]
mov [pv1596],eax
mov eax,ecx
or eax,ebx // 00 u1 00 u0mov ecx,[esi] // y3 y2 y1 y0
mov ebx,eax
mul dword ptr p_0391mov edi,ecx
mov [pu0391],eax
mov eax,ebx
mul dword ptr p_2018and ecx,ooffooff // 0 y2 0 y0
mov [pu2018],eaxmov eax,ecx
mul [p_1164] // y2 y0
and edi,ffooffoo // y3 0 y1 0
mov [py1164_20],eax
mov eax,edi
shr eax,8 // 0 y3 0 y2mul [p_1164] // y3 y1
mov ecx,[pv1596]
mov ebx,[py1164_20]
mov edx,dword ptr p_223
mov [py1164_31],eax
add eax,ecx
add ebx,ecx
shr eax,1
shr ebx,1
add eax,edx
add ebx,edx
shl eax,1
shl ebx,1mov [pr31],eax // r3 r1
mov [pr20],ebx // r2 r0mov ecx,[pu2018]
mov eax,[py1164_20]
mov ebx,[py1164_31]
mov edx,dword ptr [p_277]
add eax,ecx
add ebx,ecx
shr eax,1
shr ebx,1
add eax,edx
add ebx,edx
shl eax,1
shl ebx,1
mov [pb20],eax
mov [pb31],ebxmov eax,[py1164_20]
mov ebx,[py1164_31]
mov ecx,[pu0391]
mov edx,[pv0813]
shr eax,1
shr ebx,1
shr ecx,1
shr edx,1
sub eax,ecx
sub ebx,ecx
mov ecx,dword ptr [p_135]
sub eax,edx
sub ebx,edx
add eax,ecx
add ebx,ecx
shl eax,1
shl ebx,1
mov [pg20],eax
mov [pg31],ebx// clip and output
mov edi,rlea edx, [pr20]
mov ecx,iclip
movsx eax,word ptr [edx]
movsx ebx,word ptr [edx+2]
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // r0
mov dl,[ebx] // r2
mov [edi+2],cl
mov [edi+10],dllea edx,[pr31]
mov ecx,iclip
movsx eax,word ptr [edx]
movsx ebx,word ptr [edx+2]
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // r1
mov dl,[ebx] // r3
mov [edi+6],cl
mov [edi+14],dllea edx,[pg20]
mov ecx,iclip
movsx eax,word ptr [edx]
movsx ebx,word ptr [edx+2]
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // g0
mov dl,[ebx] // g2
mov [edi+1],cl
mov [edi+9],dllea edx,[pg31]
mov ecx,iclip
movsx eax,word ptr [edx]
movsx ebx,word ptr [edx+2]
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // g1
mov dl,[ebx] // g3
mov [edi+5],cl
mov [edi+13],dllea edx,[pb20]
mov ecx,iclip
movsx eax,word ptr [edx]
movsx ebx,word ptr [edx+2]
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // b0
mov dl,[ebx] // b2
mov [edi],cl
mov [edi+8],dllea edx,[pb31]
mov ecx,iclip
movsx eax,word ptr [edx]
movsx ebx,word ptr [edx+2]
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // b1
mov dl,[ebx] // b3mov ebx,rw
add esi,w
add [r],ebx
mov eax,[esi] // y3 y2 y1 y0mov [edi+4],cl
mov [edi+12],dl// next row of y
mov ebx,eax
and eax,ooffooff // 0 y2 0 y0
mul [p_1164]
and ebx,ffooffoo // y3 0 y1 0
shr ebx,8
mov [py1164_20],eax
mov eax,ebxmul [p_1164]
mov ecx,pv1596
mov ebx,py1164_20
mov edx,dword ptr p_223mov [py1164_31],eax
add eax,ecx
add ebx,ecx
shr eax,1
shr ebx,1
add eax,edx
add ebx,edx
shl eax,1
shl ebx,1
mov [pr31],eax // r3 r1
mov [pr20],ebx // r2 r0mov ecx,[pu2018]
mov eax,[py1164_20]
mov ebx,[py1164_31]
mov edx,dword ptr [p_277]
add eax,ecx
add ebx,ecx
shr eax,1
shr ebx,1
add eax,edx
add ebx,edx
shl eax,1
shl ebx,1
mov [pb20],eax
mov [pb31],ebxmov ecx,[pu0391]
mov eax,[py1164_20]
mov ebx,[py1164_31]
mov edx,[pv0813]
shr ecx,1
shr eax,1
shr ebx,1
shr edx,1
sub eax,ecx
sub ebx,ecx
mov ecx,dword ptr [p_135]
sub eax,edx
sub ebx,edx
add eax,ecx
add ebx,ecx
shl eax,1
shl ebx,1
mov [pg20],eax
mov [pg31],ebx// clip and output
mov edi,rlea edx,[pr20]
mov ecx,iclip
movsx eax,word ptr [edx]
movsx ebx,word ptr [edx+2]
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // r0
mov dl,[ebx] // r2
mov [edi+2],cl
mov [edi+10],dllea edx,[pr31]
mov ecx,iclip
movsx eax,word ptr [edx]
movsx ebx,word ptr [edx+2]
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // r1
mov dl,[ebx] // r3
mov [edi+6],cl
mov [edi+14],dllea edx,[pg20]
mov ecx,iclip
movsx eax,word ptr [edx]
movsx ebx,word ptr [edx+2]
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // g0
mov dl,[ebx] // g2
mov [edi+1],cl
mov [edi+9],dllea edx,[pg31]
mov ecx,iclip
movsx eax,word ptr [edx]
movsx ebx,word ptr [edx+2]
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // g1
mov dl,[ebx] // g3
mov [edi+5],cl
mov [edi+13],dllea edx,[pb20]
mov ecx,iclip
movsx eax,word ptr [edx]
movsx ebx,word ptr [edx+2]
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // b0
mov dl,[ebx] // b2
mov [edi],cl
mov [edi+8],dllea edx,[pb31]
mov ecx,iclip
movsx eax,word ptr [edx] //b1
movsx ebx,word ptr [edx+2] //b3
sar eax,6
sar ebx,6
add eax,ecx
add ebx,ecxxor ecx,ecx
xor edx,edx
mov cl,[eax] // b1
mov dl,[ebx] // b3
mov [edi+4],cl
mov [edi+12],dlmov eax,rws16
sub esi,w
add esi,4
sub [r],eaxsub [lw],1
jnz llwmov eax,lw0
mov ebx,rwadd esi,w
add [r],ebxmov [lw],eax
sub [lh],1
jnz llw
}}
///// asm code end
///// mmx code begin
#ifdef __yuv2rgb_mul32
const static short t16[4]={16,16,16,16};
const static short t128[4]={128,128,128,128};
const short t1164[4]=
{
4768,4768,4768,4768
};
const short t1596[4]=
{
6538,6538,6538,6538
};
const short t0391[4]=
{
1602,1602,1602,1602
};
const short t0813[4]=
{
3330,3330,3330,3330
};
const short t2018[4]=
{
8266,8266,8266,8266
};// r=1.164(y-16)+1.596(v-128)
// g=1.164(y-16)-0.391(u-128)-0.813(v-128)
// b=1.164(y-16)+2.018(u-128)#define ___0rgb
void VideoPlayer::yuv2rgb4XmmxC420(unsigned char *lpY,
unsigned char *lpU,
unsigned char *lpV,
unsigned char *lpRGB,
int nSrcHeight ,
int nSrcWidth)
{
int rgbwidth=nSrcWidth<<2;// 32 bits 0rgb;
int nyw=nSrcWidth;
int col=nSrcWidth>>3;
int row=nSrcHeight>>1;int t1596v_128_10[2];
int t1596v_128_32[2];
int t0813v_128_10[2];
int t0813v_128_32[2];
int t0391u_128_10[2];
int t0391u_128_32[2];
int t2018u_128_10[2];
int t2018u_128_32[2];__asm
{
mov esi,lpU
mov edi,lpV
mov eax,lpY
mov edx,lpRGB
mov ecx,col
mov ebx,rowrrr: pxor mm0,mm0
movq mm3,qword ptr t128
movd mm2,dword ptr [edi] //00 00 00 00 v3 v2 v1 v0
movd mm1,dword ptr [esi] //00 00 00 00 u3 u2 u1 u0
punpcklbw mm2,mm0 //00 v3 00 v2 00 v1 00 v0
punpcklbw mm1,mm0 //00 u3 00 u2 00 u1 00 u0
psubsw mm1,mm3 //u-128
psubsw mm2,mm3 //v-128
//compute u,v data
//t0391u_128
movq mm7,qword ptr t0391
movq mm3,mm1
movq mm4,mm1
pmullw mm4,mm7
pmulhw mm3,mm7
movq mm7,mm4
punpckhwd mm4,mm3 //t0391u_128_32-->mm4
punpcklwd mm7,mm3 //t0391u_128_10-->mm7
movq qword ptr t0391u_128_32,mm4
movq qword ptr t0391u_128_10,mm7
//t2018u_128
movq mm7,qword ptr t2018
movq mm3,mm1
pmullw mm1,mm7
pmulhw mm3,mm7
movq mm7,mm1
punpckhwd mm1,mm3 //t2018u_128_32-->mm1
punpcklwd mm7,mm3 //t2018u_128_10-->mm7
movq qword ptr t2018u_128_32,mm1
movq qword ptr t2018u_128_10,mm7
//t1596v_128
movq mm7,qword ptr t1596
movq mm3,mm2movq mm4,mm2
pmullw mm4,mm7
pmulhw mm3,mm7
movq mm7,mm4
punpckhwd mm4,mm3 //t1596v_128_32-->mm4
punpcklwd mm7,mm3 //t1596v_128_10-->mm7
movq qword ptr t1596v_128_32,mm4
movq qword ptr t1596v_128_10,mm7
//t0813v_128
movq mm7,qword ptr t0813
movq mm3,mm2
pmullw mm2,mm7
pmulhw mm3,mm7
movq mm7,mm2
punpckhwd mm2,mm3 //t0813v_128_32-->mm2
punpcklwd mm7,mm3 //t0813v_128_10-->mm7
movq qword ptr t0813v_128_32,mm2
movq qword ptr t0813v_128_10,mm7movq mm3,dword ptr [eax] // 76 54 32 10
pxor mm0,mm0
movq mm2,mm3
punpcklbw mm2,mm0 // 03 02 01 00
punpckhbw mm3,mm0 // 07 06 05 04
movq mm4,mm2
movq mm5,mm3
punpcklwd mm2,mm0 // 00 01 00 00
punpckhwd mm0,mm4 // 03 00 02 00
pxor mm4,mm4
por mm0,mm2 // 03 01 02 00--->mm0
movq mm7,qword ptr t16
punpcklwd mm3,mm4 // 00 05 00 04
punpckhwd mm4,mm5 // 07 00 06 00
por mm4,mm3 // 07 05 06 04-->mm5
psubsw mm0,mm7 //y-16
movq mm5,mm4
psubsw mm5,mm7 //y-16
//compute
movq mm7,qword ptr t1164
movq mm6,mm0 //y3 y1 y2 y0
pmullw mm6,mm7
pmulhw mm0,mm7
movq mm7,mm6
punpckhwd mm7,mm0 // y3 y1 //1.164(y-16)-->mm7
punpcklwd mm6,mm0 // y2 y0 //1.164(y-16)-->mm6movq mm0,qword ptr t1596v_128_10
movq mm1,mm6 // y2 y0
movq mm2,mm7 // y3 y1
// r=1.164(y-16)+1.596(v-128)
paddd mm1,mm0 // r2 r0
paddd mm2,mm0 // r3 r1
psrad mm1,12
psrad mm2,12
movq mm0,mm1
punpckhdq mm1,mm2 // r3 r2
punpckldq mm0,mm2 // r1 r0
packssdw mm0,mm1 // r3 r2 r1 r0 --->mm0movq mm1,qword ptr t0391u_128_10
movq mm4,qword ptr t0813v_128_10
// g=1.164(y-16)-0.391(u-128)-0.813(v-128)
movq mm2,mm6
movq mm3,mm7
psubd mm2,mm1
psubd mm3,mm1
psubd mm2,mm4
psubd mm3,mm4
psrad mm2,12
psrad mm3,12
movq mm4,mm2
movq mm1,qword ptr t2018u_128_10
punpckhdq mm2,mm3
punpckldq mm4,mm3
packssdw mm4,mm2 // g3 g2 g1 g0 --->mm4// b=1.164(y-16)+2.018(u-128)
paddd mm6,mm1 // b2 b0
paddd mm7,mm1 // b3 b1
psrad mm6,12
psrad mm7,12
movq mm1,mm6
punpckhdq mm1,mm7
punpckldq mm6,mm7
pxor mm2,mm2
packssdw mm6,mm1 // b3 b2 b1 b0 --->mm6// b-->mm6,g-->mm4,r-->mm0
#ifdef ___0rgb
packuswb mm6,mm2
packuswb mm4,mm2
packuswb mm0,mm2
punpcklbw mm6,mm4 // g3 b3 g2 b2 g1 b1 g0 b0 -->mm6
punpcklbw mm0,mm2 // 00 r3 00 r2 00 r1 00 r0 -->mm0
movq mm7,mm6
punpcklwd mm6,mm0 // 00 r1 g1 b1 00 r0 g0 b0
punpckhwd mm7,mm0 // 00 r3 g3 b3 00 r2 g2 b2
movq qword ptr[edx], mm6
movq qword ptr[edx+8], mm7
#else
packuswb mm0,mm2 //r
packuswb mm4,mm2 //g
packuswb mm6,mm2 //bpunpcklbw mm0,mm4 // g3 r3 g2 r2 g1 r1 g0 r0 -->mm0
punpcklbw mm6,mm2 // 00 b3 00 b2 00 b1 00 b0 -->mm6
movq mm7,mm0punpcklwd mm0,mm6 // 00 b1 g1 r1 00 r0 g0 b0
punpckhwd mm7,mm6 // 00 r3 g3 b3 00 r2 g2 b2
movq qword ptr[edx], mm0
movq qword ptr[edx+8], mm7
#endif
//compute
movq mm7,qword ptr t1164
movq mm6,mm5 //y7 y5 y6 y4
pmullw mm6,mm7
pmulhw mm5,mm7
movq mm7,mm6
punpckhwd mm7,mm5 // y7 y5 //1.164(y-16)-->mm7
punpcklwd mm6,mm5 // y6 y4 //1.164(y-16)-->mm6movq mm0,qword ptr t1596v_128_32
movq mm1,mm6 // y6 y4
movq mm2,mm7 // y7 y5
// r=1.164(y-16)+1.596(v-128)
paddd mm1,mm0 // r2 r0
paddd mm2,mm0 // r3 r1
psrad mm2,12
psrad mm1,12
movq mm0,mm1
punpckhdq mm1,mm2 // r3 r2
punpckldq mm0,mm2 // r1 r0
packssdw mm0,mm1 // r3 r2 r1 r0 --->mm0movq mm1,qword ptr t0391u_128_32
movq mm4,qword ptr t0813v_128_32
//g=1.164(y-16)-0.391(u-128)-0.813(v-128)
movq mm2,mm6
movq mm3,mm7
psubd mm2,mm1
psubd mm3,mm1
psubd mm2,mm4
psubd mm3,mm4
psrad mm2,12
psrad mm3,12
movq mm1,qword ptr t2018u_128_32
movq mm4,mm2
punpckhdq mm2,mm3
punpckldq mm4,mm3
packssdw mm4,mm2 // g3 g2 g1 g0 --->mm4// b=1.164(y-16)+2.018(u-128)
paddd mm6,mm1 // b2 b0
paddd mm7,mm1 // b3 b1psrad mm6,12
psrad mm7,12
movq mm1,mm6
punpckhdq mm1,mm7
punpckldq mm6,mm7
pxor mm2,mm2
packssdw mm6,mm1 // b3 b2 b1 b0 --->mm6// b-->mm6,g-->mm4,r-->mm0
#ifdef ___0rgb
packuswb mm6,mm2
packuswb mm4,mm2
punpcklbw mm6,mm4 // g3 b3 g2 b2 g1 b1 g0 b0 -->mm6
packuswb mm0,mm2
punpcklbw mm0,mm2 // 00 r3 00 r2 00 r1 00 r0 -->mm0
movq mm7,mm6
punpcklwd mm6,mm0 // 00 r1 g1 b1 00 r0 g0 b0
punpckhwd mm7,mm0 // 00 r3 g3 b3 00 r2 g2 b2
movq qword ptr[edx+16], mm6
movq qword ptr[edx+24], mm7
#else
packuswb mm0,mm2 //r
packuswb mm4,mm2 //g
packuswb mm6,mm2 //bpunpcklbw mm0,mm4 // g3 r3 g2 r2 g1 r1 g0 r0 -->mm0
punpcklbw mm6,mm2 // 00 b3 00 b2 00 b1 00 b0 -->mm6
movq mm7,mm0punpcklwd mm0,mm6 // 00 b1 g1 r1 00 r0 g0 b0
punpckhwd mm7,mm6 // 00 r3 g3 b3 00 r2 g2 b2
movq qword ptr[edx+16], mm0
movq qword ptr[edx+24], mm7
#endif
/////
//second stage , next row of y
add eax,nyw
add edx,rgbwidthmovq mm3,dword ptr [eax] // 76 54 32 10
pxor mm0,mm0
movq mm2,mm3
punpcklbw mm2,mm0 // 03 02 01 00
punpckhbw mm3,mm0 // 07 06 05 04
movq mm4,mm2
punpcklwd mm2,mm0 // 00 01 00 00
punpckhwd mm0,mm4 // 03 00 02 00
pxor mm4,mm4
por mm0,mm2 // 03 01 02 00--->mm0
movq mm7,qword ptr t16
movq mm5,mm3
punpcklwd mm3,mm4 // 00 05 00 04
punpckhwd mm4,mm5 // 07 00 06 00
por mm4,mm3 // 07 05 06 04-->mm4
psubsw mm0,mm7 //y-16
movq mm5,mm4
psubsw mm5,mm7 //y-16
//compute
movq mm7,qword ptr t1164
movq mm6,mm0 //y3 y1 y2 y0
pmullw mm6,mm7
pmulhw mm0,mm7
movq mm7,mm6
punpckhwd mm7,mm0 // y3 y1 //1.164(y-16)-->mm7
punpcklwd mm6,mm0 // y2 y0 //1.164(y-16)-->mm6movq mm0,qword ptr t1596v_128_10
movq mm1,mm6 // y2 y0
movq mm2,mm7 // y3 y1
// r=1.164(y-16)+1.596(v-128)
paddd mm1,mm0 // r2 r0
paddd mm2,mm0 // r3 r1
psrad mm2,12
psrad mm1,12
movq mm0,mm1
punpckhdq mm1,mm2 // r3 r2
punpckldq mm0,mm2 // r1 r0
packssdw mm0,mm1 // r3 r2 r1 r0 --->mm0movq mm1,qword ptr t0391u_128_10
movq mm4,qword ptr t0813v_128_10
//g=1.164(y-16)-0.391(u-128)-0.813(v-128)
movq mm2,mm6
movq mm3,mm7
psubd mm2,mm1
psubd mm3,mm1
psubd mm2,mm4
psubd mm3,mm4
psrad mm2,12
psrad mm3,12
movq mm4,mm2
movq mm1,qword ptr t2018u_128_10
punpckhdq mm2,mm3
punpckldq mm4,mm3
packssdw mm4,mm2 // g3 g2 g1 g0 --->mm4// b=1.164(y-16)+2.018(u-128)
paddd mm6,mm1 // b2 b0
paddd mm7,mm1 // b3 b1
psrad mm6,12
psrad mm7,12
movq mm1,mm6
punpckhdq mm1,mm7
punpckldq mm6,mm7
pxor mm2,mm2
packssdw mm6,mm1 // b3 b2 b1 b0 --->mm6// b-->mm6,g-->mm4,r-->mm0
#ifdef ___0rgb
packuswb mm6,mm2
packuswb mm4,mm2
punpcklbw mm6,mm4 // g3 b3 g2 b2 g1 b1 g0 b0 -->mm6
packuswb mm0,mm2
punpcklbw mm0,mm2 // 00 r3 00 r2 00 r1 00 r0 -->mm0
movq mm7,mm6
punpcklwd mm6,mm0 // 00 r1 g1 b1 00 r0 g0 b0
punpckhwd mm7,mm0 // 00 r3 g3 b3 00 r2 g2 b2
movq qword ptr[edx], mm6
movq qword ptr[edx+8], mm7
#else
packuswb mm0,mm2 //r
packuswb mm4,mm2 //g
packuswb mm6,mm2 //bpunpcklbw mm0,mm4 // g3 r3 g2 r2 g1 r1 g0 r0 -->mm0
punpcklbw mm6,mm2 // 00 b3 00 b2 00 b1 00 b0 -->mm6
movq mm7,mm0punpcklwd mm0,mm6 // 00 b1 g1 r1 00 r0 g0 b0
punpckhwd mm7,mm6 // 00 r3 g3 b3 00 r2 g2 b2
movq qword ptr[edx], mm0
movq qword ptr[edx+8], mm7
#endif
//compute
movq mm7,qword ptr t1164
movq mm6,mm5 //y7 y5 y6 y4
pmullw mm6,mm7
pmulhw mm5,mm7
movq mm7,mm6
punpckhwd mm7,mm5 // y7 y5 //1.164(y-16)-->mm7
punpcklwd mm6,mm5 // y6 y4 //1.164(y-16)-->mm6movq mm0,qword ptr t1596v_128_32
movq mm1,mm6 // y6 y4
movq mm2,mm7 // y7 y5
// r=1.164(y-16)+1.596(v-128)
paddd mm1,mm0 // r2 r0
paddd mm2,mm0 // r3 r1
psrad mm1,12
psrad mm2,12
movq mm0,mm1
punpckhdq mm1,mm2 // r3 r2
punpckldq mm0,mm2 // r1 r0
packssdw mm0,mm1 // r3 r2 r1 r0 --->mm0movq mm1,qword ptr t0391u_128_32
movq mm4,qword ptr t0813v_128_32
//g=1.164(y-16)-0.391(u-128)-0.813(v-128)
movq mm2,mm6
movq mm3,mm7
psubd mm2,mm1
psubd mm3,mm1
psubd mm2,mm4
psubd mm3,mm4
psrad mm2,12
psrad mm3,12
movq mm1,qword ptr t2018u_128_32
movq mm4,mm2
punpckhdq mm2,mm3
punpckldq mm4,mm3
packssdw mm4,mm2 // g3 g2 g1 g0 --->mm4// b=1.164(y-16)+2.018(u-128)
paddd mm6,mm1 // b2 b0
paddd mm7,mm1 // b3 b1
psrad mm6,12
psrad mm7,12
movq mm1,mm6
punpckhdq mm1,mm7
punpckldq mm6,mm7
pxor mm2,mm2
packssdw mm6,mm1 // b3 b2 b1 b0 --->mm6// b-->mm6,g-->mm4,r-->mm0
#ifdef ___0rgb
packuswb mm6,mm2
packuswb mm4,mm2
punpcklbw mm6,mm4 // g3 b3 g2 b2 g1 b1 g0 b0 -->mm6
packuswb mm0,mm2
punpcklbw mm0,mm2 // 00 r3 00 r2 00 r1 00 r0 -->mm0
movq mm7,mm6
punpcklwd mm6,mm0 // 00 r1 g1 b1 00 r0 g0 b0
punpckhwd mm7,mm0 // 00 r3 g3 b3 00 r2 g2 b2
movq qword ptr[edx+16], mm6
movq qword ptr[edx+24], mm7
#else
packuswb mm0,mm2 //r
packuswb mm4,mm2 //g
packuswb mm6,mm2 //bpunpcklbw mm0,mm4 // g3 r3 g2 r2 g1 r1 g0 r0 -->mm0
punpcklbw mm6,mm2 // 00 b3 00 b2 00 b1 00 b0 -->mm6
movq mm7,mm0punpcklwd mm0,mm6 // 00 b1 g1 r1 00 r0 g0 b0
punpckhwd mm7,mm6 // 00 r3 g3 b3 00 r2 g2 b2
movq qword ptr[edx+16], mm0
movq qword ptr[edx+24], mm7
#endif
sub eax,nyw
sub edx,rgbwidth
add esi,4
add edi,4
add eax,8
add edx,32
dec ecx
jnz rrrmov ecx,col
add eax,nyw
add edx,rgbwidth
dec ebx
jnz rrr
emms
}
}#else
short t1164[4]=
{
19071,19071,19071,19071//<<2
};
short t1596[4]=
{
26149,26149,26149,26149//<<2
};
short t0391[4]=
{
25625,25625,25625,25625//<<0
};
short t0813[4]=
{
26641,26641,26641,26641//<<1
};
short t2018[4]=
{
16532,16532,16532,16532//<<3
};
short t16[4]=
{
16,16,16,16
};
short t128[4]=
{
128,128,128,128
};void VideoPlayer::yuv2rgb4XmmxC420(unsigned char *lpY,
unsigned char *lpU,
unsigned char *lpV,
unsigned char *lpRGB,
int nSrcHeight,
int nSrcWidth)
{
int rgbwidth=nSrcWidth<<2;// 32 bits rgb0;
int nyw=nSrcWidth;
int col=nSrcWidth>>3;
int row=nSrcHeight>>1;#define mmt2018u mm1
#define mmt0813v mm2
#define mmt0391u mm3
#define mmt1596v mm4__int64 ty;
__asm
{
mov esi,lpU
mov edi,lpV
mov eax,lpY
mov edx,lpRGB
mov ecx,col
mov ebx,rowrrr:
pxor mm0,mm0movq mm3,qword ptr t128
movq mm4,qword ptr t0391
movq mm5,qword ptr t2018
movq mm6,qword ptr t1596
movq mm7,qword ptr t0813movd mm1,dword ptr [esi]
movd mm2,dword ptr [edi]
punpcklbw mm1,mm0
punpcklbw mm2,mm0//copute u,v
psubsw mm1,mm3 //u-128
psubsw mm2,mm3 //v-128
movq mm3,mm1
psllw mm1,3
pmulhw mm3,mm4 // t0391u-->mm3
pmulhw mm1,mm5 // t2018u-->mm1
movq mm4,mm2
psllw mm2,1
psllw mm4,2
pmulhw mm2,mm7 // t0813v-->mm2
pmulhw mm4,mm6 // t1596v-->mm4movq mm5,dword ptr [eax] // 76 54 32 10
pxor mm0,mm0
movq mm6,mm5
punpcklbw mm5,mm0 // 03 02 01 00
punpckhbw mm0,mm6 // 70 60 50 40
por mm0,mm5 // 73 62 51 40
pxor mm6,mm6
pxor mm5,mm5
punpckhbw mm6,mm0 // 70 30 60 20
punpcklbw mm0,mm5 // 05 01 04 00
por mm0,mm6 // 75 31 64 20
pxor mm5,mm5
movq mm6,mm0
punpckhbw mm6,mm5 // y7 y5 y3 y1
punpcklbw mm0,mm5
movq mm5,qword ptr t16
movq mm7,qword ptr t1164
psubsw mm6,mm5
psubsw mm0,mm5
psllw mm6,2
psllw mm0,2
pmulhw mm6,mm7
pmulhw mm0,mm7 // y6 y4 y2 y0 -->mm0
movq qword ptr ty,mm6 // y7 y5 y3 y1 -->ty
//compute
pxor mm7,mm7
movq mm5,mmt1596v
movq mm6,mm0 //copy 1.164(y-16)
paddsw mm5,mm0 // r=1.164(y-16)+1.596(v-128) r-->mm5
psubsw mm6,mmt0391u //1.164(y-16)-0.391(u-128)
psubsw mm6,mmt0813v//g=1.164(y-16)-0.391(u-128)-0.813(v-128) g-->mm6
paddsw mm0,mmt2018u // b=1.164(y-16)+2.018(u-128) b-->mm0// b-->mm0,g-->mm6,r-->mm5
packuswb mm6,mm7
packuswb mm0,mm7
punpcklbw mm0,mm6 // g3 b3 g2 b2 g1 b1 g0 b0 -->mm0
packuswb mm5,mm7
punpcklbw mm5,mm7 // 00 r3 00 r2 00 r1 00 r0 -->mm5
movq mm7,mm0
punpcklwd mm0,mm5 // 00 r1 g1 b1 00 r0 g0 b0
punpckhwd mm7,mm5 // 00 r3 g3 b3 00 r2 g2 b2
movq qword ptr[edx], mm0
movq mm0,qword ptr ty
movq qword ptr[edx+8], mm7//compute
pxor mm7,mm7
movq mm5,mmt1596v
paddsw mm5,mm0 // r=1.164(y-16)+1.596(v-128) r-->mm5
movq mm6,mm0 //copy 1.164(y-16)
psubsw mm6,mmt0391u //1.164(y-16)-0.391(u-128)
psubsw mm6,mmt0813v//g=1.164(y-16)-0.391(u-128)-0.813(v-128) g-->mm6
paddsw mm0,mmt2018u // b=1.164(y-16)+2.018(u-128) b-->mm0// b-->mm0,g-->mm6,r-->mm5
packuswb mm6,mm7
packuswb&n






