Esempio n. 1
0
DWORD FilteredWave::Sample(TimeValue t0,TimeValue t1,int channel)
	{
	if (!sat || channel>=channels) return 0;
	int s,e,den;

	if (end<=start) return 0;
	if (t1-t0 > end-start) {
		t0 = start;
		t1 = end;
		}
	if (t0<start) {
		int d = (end-start) * ((start-t0)/(end-start) + 1);
		t0 += d;
		t1 += d; 
		}
	t0 = t0 % (end-start);
	t1 = t1 % (end-start);
	if (t1<t0) t1 = end-1;

	//s = ((t0-start) * satLen)/(end-start);
	//e = ((t1-start) * satLen)/(end-start);
	s = MulDiv32((t0-start), satLen, (end-start));
	e = MulDiv32((t1-start), satLen, (end-start));

	if (s==e) {
		if (e) s = e-1;
		else e = s+1;
		if (s<0 || e>=(int)satLen) return 0;
		}
	assert(s>=0);
	assert(e<(int)satLen);

	den = numSum * (e-s);
	if (!den) return 0;
	else return (sat[e*channels+channel]-sat[s*channels+channel])/den;
	}
Esempio n. 2
0
		SIMD_INLINE __m128i MulDiv16(__m128i dividend, __m128i divisor, const __m128 & KF_255_DIV_6)
		{
			const __m128i quotientLo = MulDiv32(_mm_unpacklo_epi16(dividend, K_ZERO), _mm_unpacklo_epi16(divisor, K_ZERO), KF_255_DIV_6);
			const __m128i quotientHi = MulDiv32(_mm_unpackhi_epi16(dividend, K_ZERO), _mm_unpackhi_epi16(divisor, K_ZERO), KF_255_DIV_6);
			return _mm_packs_epi32(quotientLo, quotientHi);
		}