Fix building for MS VS C++: remove allocation of arrays of dynamic size in stack
authorVictor Passichenko <victor.passichenko@gmail.com>
Tue, 21 Aug 2012 11:41:51 +0000 (15:41 +0400)
committerVictor Passichenko <victor.passichenko@gmail.com>
Tue, 21 Aug 2012 11:41:51 +0000 (15:41 +0400)
modules/photo/src/denoising.cpp
modules/photo/src/fast_nlmeans_denoising_invoker.hpp
modules/photo/src/fast_nlmeans_multi_denoising_invoker.hpp

index 39643e3..b980b40 100644 (file)
@@ -103,7 +103,7 @@ static void fastNlMeansDenoisingMultiCheckPreconditions(
                                int imgToDenoiseIndex, int temporalWindowSize,
                                int templateWindowSize, int searchWindowSize) 
 {
-    int src_imgs_size = srcImgs.size();
+    int src_imgs_size = (int)srcImgs.size();
     if (src_imgs_size == 0) {
         CV_Error(CV_StsBadArg, "Input images vector should not be empty!");
     }
@@ -176,7 +176,7 @@ void cv::fastNlMeansDenoisingColoredMulti( const std::vector<Mat>& srcImgs,
         temporalWindowSize, templateWindowSize, searchWindowSize
     );
 
-    int src_imgs_size = srcImgs.size();
+    int src_imgs_size = (int)srcImgs.size();
 
     if (srcImgs[0].type() != CV_8UC3) {
         CV_Error(CV_StsBadArg, "Type of input images should be CV_8UC3!");
index 58e4a45..a45cb15 100644 (file)
@@ -62,6 +62,10 @@ struct FastNlMeansDenoisingInvoker {
 
         void operator() (const BlockedRange& range) const;
 
+               void operator= (const FastNlMeansDenoisingInvoker& invoker) {
+                       CV_Error(CV_StsNotImplemented, "Assigment operator is not implemented");
+               }
+
     private:
         const Mat& src_;
         Mat& dst_;
@@ -153,16 +157,12 @@ void FastNlMeansDenoisingInvoker<T>::operator() (const BlockedRange& range) cons
     int row_from = range.begin();
     int row_to = range.end() - 1;
 
-    int dist_sums_array[search_window_size_ * search_window_size_];
-    Array2d<int> dist_sums(dist_sums_array, search_window_size_, search_window_size_);
+    Array2d<int> dist_sums(search_window_size_, search_window_size_);
     
     // for lazy calc optimization
-    int col_dist_sums_array[template_window_size_ * search_window_size_ * search_window_size_];
-    Array3d<int> col_dist_sums(&col_dist_sums_array[0], 
-        template_window_size_, search_window_size_, search_window_size_);
+    Array3d<int> col_dist_sums(template_window_size_, search_window_size_, search_window_size_);
     
     int first_col_num = -1;
-
     Array3d<int> up_col_dist_sums(src_.cols, search_window_size_, search_window_size_);
 
     for (int i = row_from; i <= row_to; i++) {
@@ -233,7 +233,7 @@ void FastNlMeansDenoisingInvoker<T>::operator() (const BlockedRange& range) cons
             // calc weights
             int weights_sum = 0;
             
-            int estimation[src_.channels()];            
+            int estimation[3];            
             for (int channel_num = 0; channel_num < src_.channels(); channel_num++) {
                 estimation[channel_num] = 0;
             }
index cb08c7e..8a6a819 100644 (file)
@@ -63,6 +63,10 @@ struct FastNlMeansMultiDenoisingInvoker {
 
         void operator() (const BlockedRange& range) const;
 
+               void operator= (const FastNlMeansMultiDenoisingInvoker& invoker) {
+                       CV_Error(CV_StsNotImplemented, "Assigment operator is not implemented");
+               }
+
     private:
         int rows_;
         int cols_;
@@ -175,16 +179,11 @@ void FastNlMeansMultiDenoisingInvoker<T>::operator() (const BlockedRange& range)
     int row_from = range.begin();
     int row_to = range.end() - 1;
 
-    int dist_sums_array[temporal_window_size_ * search_window_size_ * search_window_size_];
-    Array3d<int> dist_sums(dist_sums_array, 
-        temporal_window_size_, search_window_size_, search_window_size_);
+    Array3d<int> dist_sums(temporal_window_size_, search_window_size_, search_window_size_);
     
     // for lazy calc optimization
-    int col_dist_sums_array[
-        template_window_size_ * temporal_window_size_ * search_window_size_ * search_window_size_];
-
-    Array4d<int> col_dist_sums(col_dist_sums_array, 
-        template_window_size_, temporal_window_size_, search_window_size_, search_window_size_);
+    Array4d<int> col_dist_sums(
+               template_window_size_, temporal_window_size_, search_window_size_, search_window_size_);
     
     int first_col_num = -1;
 
@@ -263,7 +262,7 @@ void FastNlMeansMultiDenoisingInvoker<T>::operator() (const BlockedRange& range)
             // calc weights
             int weights_sum = 0;
             
-            int estimation[channels_count_];            
+            int estimation[3];            
             for (int channel_num = 0; channel_num < channels_count_; channel_num++) {
                 estimation[channel_num] = 0;
             }