📄 quant.sa
字号:
;filename:quant.sa
;author:lvxu
.sect ".text:Mpeg4IntraQuant2sa"
.global _Mpeg4IntraQuant2sa
_Mpeg4IntraQuant2sa .cproc dst,src,iScalar,dcMulti,acMulti
.no_mdep
.reg acLevel,acSign,acResult
.reg loop_num ;
LDH *src++,acLevel
CMPLT acLevel,0,acSign;acLevel<0,acSign=1;else acSign=0
[acSign] NEG iScalar,iScalar
SHRU iScalar,1,iScalar
ADD iScalar,acLevel,acLevel
MPYU acLevel,dcMulti,acResult
SHRU acResult,16,acResult
STH acResult,*dst++
MVK 63,loop_num
Mpeg4IntraQuant2sa_LOOP:.trip 63,63
LDH *src++,acLevel
CMPLT acLevel,0,acSign
ABS acLevel,acLevel
MPYU acLevel,acMulti,acResult
SHRU acResult,16,acResult
[acSign] NEG acResult,acResult
STH acResult,*dst++
SUB loop_num,1,loop_num
[loop_num] B Mpeg4IntraQuant2sa_LOOP
.endproc
.sect ".text:Mpeg4IntraDeQuant2sa"
.global _Mpeg4IntraDeQuant2sa
_Mpeg4IntraDeQuant2sa .cproc dst,src,iQuant,iScalar
.no_mdep
.reg quant_m_2,level
.reg loop_num,tmpdata,tmp,maxValue,minValue
.reg quant_addnum,temp
SHL iQuant,1,quant_m_2 ;quant_m_2 = iQuant << 1;
MVK 2047,maxValue
MVK -2048,minValue
ZERO quant_addnum ;
AND 0x01,iQuant,tmp
[!tmp] MVK -1,quant_addnum ;even
ADD quant_addnum,iQuant,temp ;quant_add = (iQuant & 1 ? iQuant : iQuant - 1);
MV temp,quant_addnum
LDH *src++,level
MPYU level,iScalar,level
CMPGT level,maxValue,tmp
[tmp] MV maxValue,level
CMPLT level,minValue,tmp
[tmp] MV minValue,level ;DC dequant
STH level,*dst++
MVK 63,loop_num
Mpeg4IntraDeQuant2sa_LOOP: .trip 63,63
LDH *src++,level
CMPLT level,0,tmp ;level<0,tmp=1;level>=0,tmp=0
[tmp] NEG level,level
MPYU quant_m_2,level,level
ADD level,quant_addnum,level
CMPGT level,maxValue,tmp
[tmp] MV maxValue,level
CMPLT level,minValue,tmp
[tmp] MV minValue,level ;DC dequant
STH level,*dst++
SUB loop_num,1,loop_num
[loop_num] B Mpeg4IntraDeQuant2sa_LOOP
.endproc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -