From e5c5a1cb3d80aa5b61a2595e9bf51b58c41fb32b Mon Sep 17 00:00:00 2001
From: Maria Dimashova <no@email>
Date: Fri, 17 Dec 2010 14:24:59 +0000
Subject: [PATCH] fixed traincascade

---
 modules/traincascade/boost.cpp | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/modules/traincascade/boost.cpp b/modules/traincascade/boost.cpp
index 363d30c5c..d65004b78 100644
--- a/modules/traincascade/boost.cpp
+++ b/modules/traincascade/boost.cpp
@@ -445,22 +445,30 @@ void CvCascadeBoostTrainData::get_ord_var_data( CvDTreeNode* n, int vi, float* o
     *ordValues = ordValuesBuf;
 }
  
-const int* CvCascadeBoostTrainData::get_cat_var_data( CvDTreeNode* n, int vi, int* catValuesBuf)
+const int* CvCascadeBoostTrainData::get_cat_var_data( CvDTreeNode* n, int vi, int* catValuesBuf )
 {
-    int nodeSampleCount = n->sample_count; 
+    int nodeSampleCount = n->sample_count;
     int* sampleIndicesBuf = catValuesBuf; //
     const int* sampleIndices = get_sample_indices(n, sampleIndicesBuf);
 
     if ( vi < numPrecalcVal )
-	{
-		for( int i = 0; i < nodeSampleCount; i++ )
+    {
+        for( int i = 0; i < nodeSampleCount; i++ )
             catValuesBuf[i] = (int) valCache.at<float>( vi, sampleIndices[i]);
-	}
-	else
-	{
-		for( int i = 0; i < nodeSampleCount; i++ )
-			catValuesBuf[i] = (int)(*featureEvaluator)( vi, sampleIndices[i] );
-	}
+    }
+    else
+    {
+        if( vi >= numPrecalcVal && vi < var_count )
+        {
+            for( int i = 0; i < nodeSampleCount; i++ )
+                catValuesBuf[i] = (int)(*featureEvaluator)( vi, sampleIndices[i] );
+        }
+        else
+        {
+            get_cv_labels( n, catValuesBuf );
+        }
+    }
+
     return catValuesBuf;
 }