fixed some warnings on Windows and added debug messages
authorIlya Lavrenov <ilya.lavrenov@itseez.com>
Tue, 27 Nov 2012 09:54:11 +0000 (13:54 +0400)
committerIlya Lavrenov <ilya.lavrenov@itseez.com>
Tue, 27 Nov 2012 09:54:11 +0000 (13:54 +0400)
modules/imgproc/src/demosaicing.cpp

index 38ec17e..00983bd 100644 (file)
@@ -43,6 +43,7 @@
 #include "precomp.hpp"
 
 #include <limits>
+#include <iostream>
 
 namespace cv
 {
@@ -310,7 +311,29 @@ static void Bayer2Gray_( const Mat& srcmat, Mat& dstmat, int code )
             dst0[i] = dst0[i + (size.height-1)*dst_step] = 0;
         }
 }
-    
+
+template <typename T>
+struct Alpha
+{
+    static T value() { return std::numeric_limits<T>::max(); }
+};
+
+template <>
+struct Alpha<float>
+{
+    static float value() { return 1.0f; }
+};
+
+static cv::Mutex m;
+
+template <typename T>
+static void print(const T& value)
+{
+    m.lock();
+    std::cout << value << " ";
+    m.unlock();
+}
+
 template <typename T, typename SIMDInterpolator>
 class Bayer2RGB_Invoker :
     public ParallelLoopBody
@@ -319,11 +342,14 @@ public:
     Bayer2RGB_Invoker(const Mat& _srcmat, Mat& _dstmat, int _start_with_green, int _blue, const Size& _size) :
         srcmat(_srcmat), dstmat(_dstmat), Start_with_green(_start_with_green), Blue(_blue), size(_size)
     {
+        print("Bayer2RGB_Invoker()\n");
     }
     
     virtual void operator() (const Range& range) const
     {
         SIMDInterpolator vecOp;
+        T alpha = Alpha<T>::value();
+
         const T* bayer0 = (const T*)srcmat.data;
         int bayer_step = (int)(srcmat.step/sizeof(T));
         
@@ -331,7 +357,6 @@ public:
         int dst_step = (int)(dstmat.step/sizeof(T));
         
         int blue = Blue, start_with_green = Start_with_green;
-        int alpha = std::numeric_limits<T>::max();
         if (range.start % 2)
         {
             blue = -blue;
@@ -344,6 +369,8 @@ public:
         
         dst0 += dst_step * range.start;
         bayer0 += bayer_step * range.start;
+
+        print(range.start);
         
         for (int i = range.start; i < range.end; bayer0 += bayer_step, dst0 += dst_step, ++i )
         {
@@ -525,6 +552,9 @@ public:
     Mat dstmat;
     int Start_with_green, Blue;
     const Size size;
+
+    const Bayer2RGB_Invoker& operator= (const Bayer2RGB_Invoker&);
+    Bayer2RGB_Invoker(const Bayer2RGB_Invoker&);
 };
 
 template<typename T, class SIMDInterpolator>
@@ -542,7 +572,9 @@ static void Bayer2RGB_( const Mat& srcmat, Mat& dstmat, int code )
     Range range(0, size.height);
     Bayer2RGB_Invoker<T, SIMDInterpolator> invoker(srcmat, dstmat, start_with_green, blue, size);
 
+    print("before parallel_for_\n");
     parallel_for_(range, invoker);
+    print("after parallel_for_\n");
     
     // filling the first and the last rows
     size = dstmat.size();