Code updates
This commit is contained in:
@@ -1764,7 +1764,8 @@ section .text
|
|||||||
mov [prev0],edx
|
mov [prev0],edx
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
EXTSYM fir_downsample
|
;EXTSYM fir_downsample
|
||||||
|
EXTSYM fir_lut_co
|
||||||
|
|
||||||
%macro ProcessDynamicLowPass 0
|
%macro ProcessDynamicLowPass 0
|
||||||
mov ecx,[curvoice]
|
mov ecx,[curvoice]
|
||||||
@@ -1948,6 +1949,42 @@ ALIGN16
|
|||||||
mov [ebx+20*4],eax
|
mov [ebx+20*4],eax
|
||||||
mov [ebx+25*4],eax
|
mov [ebx+25*4],eax
|
||||||
|
|
||||||
|
%if 1
|
||||||
|
mov ecx,16
|
||||||
|
sub edx,0F80000h
|
||||||
|
shr edx,15
|
||||||
|
and edx,7FFF0h
|
||||||
|
add edx,[fir_lut_co]
|
||||||
|
movq mm2,[edx]
|
||||||
|
movq mm3,[edx+8]
|
||||||
|
%%DLPF_fir_loop
|
||||||
|
movq mm0,[ebx]
|
||||||
|
packssdw mm0,[ebx+8]
|
||||||
|
movq mm1,[ebx+16]
|
||||||
|
packssdw mm1,[ebx+24]
|
||||||
|
pmaddwd mm0,mm2
|
||||||
|
pmaddwd mm1,mm3
|
||||||
|
paddd mm0,mm1
|
||||||
|
movq [fir_tmp],mm0
|
||||||
|
mov edx,[fir_tmp]
|
||||||
|
add edx,[fir_tmp+4]
|
||||||
|
sar edx,14
|
||||||
|
cmp edx,32767
|
||||||
|
jle %%DLPF_fir_clip
|
||||||
|
mov edx,32767
|
||||||
|
%%DLPF_fir_clip
|
||||||
|
cmp edx,-32768
|
||||||
|
jge %%DLPF_fir_clip2
|
||||||
|
mov edx,-32768
|
||||||
|
%%DLPF_fir_clip2
|
||||||
|
mov [edi],dx
|
||||||
|
add edi,2
|
||||||
|
add ebx,4
|
||||||
|
dec ecx
|
||||||
|
jnz %%DLPF_fir_loop
|
||||||
|
emms
|
||||||
|
|
||||||
|
%else
|
||||||
|
|
||||||
push edi
|
push edi
|
||||||
push ebx
|
push ebx
|
||||||
@@ -1955,6 +1992,7 @@ ALIGN16
|
|||||||
call fir_downsample
|
call fir_downsample
|
||||||
add esp,+12
|
add esp,+12
|
||||||
add edi,32
|
add edi,32
|
||||||
|
%endif
|
||||||
ret
|
ret
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ inline float log2(float f) {
|
|||||||
// cutoff (1.0 == pi/2)
|
// cutoff (1.0 == pi/2)
|
||||||
#define WFIR_CUTOFF 0.90f
|
#define WFIR_CUTOFF 0.90f
|
||||||
#define WFIR_CUTOFFBITS 12
|
#define WFIR_CUTOFFBITS 12
|
||||||
#define WFIR_CUTOFFLEN (1L<<(WFIR_CUTOFFBITS))
|
#define WFIR_CUTOFFLEN ((1L<<(WFIR_CUTOFFBITS))+1)
|
||||||
// wfir type
|
// wfir type
|
||||||
#define WFIR_HANN 0
|
#define WFIR_HANN 0
|
||||||
#define WFIR_HAMMING 1
|
#define WFIR_HAMMING 1
|
||||||
@@ -139,11 +139,11 @@ class CzWINDOWEDFIR
|
|||||||
return (float)(_LWc*_LSi);
|
return (float)(_LWc*_LSi);
|
||||||
}
|
}
|
||||||
static signed short lut[WFIR_LUTLEN*WFIR_WIDTH];
|
static signed short lut[WFIR_LUTLEN*WFIR_WIDTH];
|
||||||
static signed int lut_co[WFIR_CUTOFFLEN*WFIR_WIDTH];
|
static signed short lut_co[WFIR_CUTOFFLEN*WFIR_WIDTH];
|
||||||
};
|
};
|
||||||
|
|
||||||
signed short CzWINDOWEDFIR::lut[WFIR_LUTLEN*WFIR_WIDTH];
|
signed short CzWINDOWEDFIR::lut[WFIR_LUTLEN*WFIR_WIDTH];
|
||||||
signed int CzWINDOWEDFIR::lut_co[WFIR_CUTOFFLEN*WFIR_WIDTH];
|
signed short CzWINDOWEDFIR::lut_co[WFIR_CUTOFFLEN*WFIR_WIDTH];
|
||||||
|
|
||||||
CzWINDOWEDFIR::CzWINDOWEDFIR()
|
CzWINDOWEDFIR::CzWINDOWEDFIR()
|
||||||
{ int _LPcl;
|
{ int _LPcl;
|
||||||
@@ -177,7 +177,7 @@ CzWINDOWEDFIR::CzWINDOWEDFIR()
|
|||||||
for( _LCc=0; _LCc<WFIR_WIDTH;_LCc++ )
|
for( _LCc=0; _LCc<WFIR_WIDTH;_LCc++ )
|
||||||
{
|
{
|
||||||
float _LCoef = (float)floor( 0.5 + _LScale*_LCoefs[_LCc]*_LGain );
|
float _LCoef = (float)floor( 0.5 + _LScale*_LCoefs[_LCc]*_LGain );
|
||||||
lut_co[_LIdx+_LCc] = (signed int)( (_LCoef<-_LScale)?-_LScale:((_LCoef>_LScale)?_LScale:_LCoef) );
|
lut_co[_LIdx+_LCc] = (signed short)( (_LCoef<-_LScale)?-_LScale:((_LCoef>_LScale)?_LScale:_LCoef) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -239,6 +239,7 @@ float coef( int _PCnr, float _POfs, float _PCut, int _PWidth, int _PType ) //flo
|
|||||||
CzWINDOWEDFIR sfir;
|
CzWINDOWEDFIR sfir;
|
||||||
|
|
||||||
extern "C" signed short *fir_lut = &CzWINDOWEDFIR::lut[0];
|
extern "C" signed short *fir_lut = &CzWINDOWEDFIR::lut[0];
|
||||||
|
extern "C" signed short *fir_lut_co = &CzWINDOWEDFIR::lut_co[0];
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@@ -273,8 +274,10 @@ extern "C" int fir_interpolate(unsigned int nPos, int *p)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define WFIR_CUTOFFSHIFT (32-(WFIR_CUTOFFBITS+WFIR_LOG2WIDTH))
|
#if 0
|
||||||
#define WFIR_CUTOFFMASK ((((1L<<(32-WFIR_CUTOFFSHIFT))-1)&~((1L<<WFIR_LOG2WIDTH)-1)))
|
|
||||||
|
#define WFIR_CUTOFFSHIFT (32-(WFIR_CUTOFFBITS+1+WFIR_LOG2WIDTH))
|
||||||
|
#define WFIR_CUTOFFMASK ((((1L<<(33-WFIR_CUTOFFSHIFT))-1)&~((1L<<WFIR_LOG2WIDTH)-1)))
|
||||||
#define WFIR_CUTOFFHALVE (1L<<(32-(WFIR_CUTOFFBITS+1)))
|
#define WFIR_CUTOFFHALVE (1L<<(32-(WFIR_CUTOFFBITS+1)))
|
||||||
|
|
||||||
inline void __fir_downsample(unsigned int freq, signed int *p, signed short *out)
|
inline void __fir_downsample(unsigned int freq, signed int *p, signed short *out)
|
||||||
@@ -328,3 +331,5 @@ extern "C" void fir_downsample(unsigned int freq, signed int *p, signed short *o
|
|||||||
{
|
{
|
||||||
__fir_downsample(freq, p, out);
|
__fir_downsample(freq, p, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user