diff dsp/signalconditioning/DFProcess.cpp @ 74:769da847732b

* A few fixes prompted by vamp-plugin-tester
author cannam
date Mon, 08 Jun 2009 12:30:20 +0000
parents d72fcd34d9a7
children a5eae96a357c
line wrap: on
line diff
--- a/dsp/signalconditioning/DFProcess.cpp	Fri Jun 05 15:12:39 2009 +0000
+++ b/dsp/signalconditioning/DFProcess.cpp	Mon Jun 08 12:30:20 2009 +0000
@@ -82,8 +82,8 @@
 
 void DFProcess::medianFilter(double *src, double *dst)
 {
-    unsigned int i,k,j,l;
-    unsigned int index = 0;
+    int i,k,j,l;
+    int index = 0;
 
     double val = 0;
 
@@ -92,8 +92,10 @@
 
     double* scratch = new double[ m_length ];
 
-    for( i = 0; i < m_winPre; i++)
+    for( i = 0; i < m_winPre && index; i++)
     {
+        if (index >= m_length) break;
+
 	k = i + m_winPost + 1;
 
 	for( j = 0; j < k; j++)
@@ -104,8 +106,10 @@
 	index++;
     }
 
-    for(  i = 0; i < ( m_length - ( m_winPost + m_winPre ) ); i ++)
+    for(  i = 0; i + m_winPost + m_winPre < m_length; i ++)
     {
+        if (index >= m_length) break;
+
 			 
 	l = 0;
 	for(  j  = i; j < ( i + m_winPost + m_winPre + 1); j++)
@@ -117,9 +121,11 @@
 	scratch[ index++ ] = MathUtilities::median( y, (m_winPost + m_winPre + 1 ));
     }
 
-    for( i = std::max( m_length - m_winPost, (unsigned)1); i < m_length; i++)
+    for( i = std::max( m_length - m_winPost, 1); i < m_length; i++)
     {
-	k = std::max( i - m_winPre, (unsigned)1);
+        if (index >= m_length) break;
+
+	k = std::max( i - m_winPre, 1);
 
 	l = 0;
 	for( j = k; j < m_length; j++)