used cudaMalloc for 1-row or 1-column matrix instead of cudaMallocPitch
authorVladislav Vinogradov <vlad.vinogradov@itseez.com>
Thu, 30 May 2013 09:11:32 +0000 (13:11 +0400)
committerVladislav Vinogradov <vlad.vinogradov@itseez.com>
Mon, 10 Jun 2013 08:40:32 +0000 (12:40 +0400)
modules/core/src/gpu_mat.cpp

index 1bbcb84..a2e8da6 100644 (file)
@@ -678,11 +678,17 @@ void cv::gpu::GpuMat::create(int _rows, int _cols, int _type)
         size_t esz = elemSize();
 
         void* devPtr;
-        cudaSafeCall( cudaMallocPitch(&devPtr, &step, esz * cols, rows) );
 
-        // Single row must be continuous
-        if (rows == 1)
+        if (rows > 1 && cols > 1)
+        {
+            cudaSafeCall( cudaMallocPitch(&devPtr, &step, esz * cols, rows) );
+        }
+        else
+        {
+            // Single row or single column must be continuous
+            cudaSafeCall( cudaMalloc(&devPtr, esz * cols * rows) );
             step = esz * cols;
+        }
 
         if (esz * cols == step)
             flags |= Mat::CONTINUOUS_FLAG;