From bf3c2b0bbb51de78e1a8d4eece07c44c1f2a70f9 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 15 Jan 2013 19:23:49 +0400 Subject: [PATCH] Fix incorrect Mat address reconstruction on 64-bit platforms This fixes random failures in Java wrappers. --- modules/java/generator/src/cpp/converters.cpp | 2 +- modules/java/generator/src/java/utils+Converters.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/java/generator/src/cpp/converters.cpp b/modules/java/generator/src/cpp/converters.cpp index 289a8194f3..6bf52c00e3 100644 --- a/modules/java/generator/src/cpp/converters.cpp +++ b/modules/java/generator/src/cpp/converters.cpp @@ -219,7 +219,7 @@ void Mat_to_vector_Mat(cv::Mat& mat, std::vector& v_mat) for(int i=0; i a = mat.at< Vec >(i, 0); - long long addr = (((long long)a[0])<<32) | a[1]; + long long addr = (((long long)a[0])<<32) | (a[1]&0xffffffff); Mat& m = *( (Mat*) addr ); v_mat.push_back(m); } diff --git a/modules/java/generator/src/java/utils+Converters.java b/modules/java/generator/src/java/utils+Converters.java index 7734841954..49c0844a87 100644 --- a/modules/java/generator/src/java/utils+Converters.java +++ b/modules/java/generator/src/java/utils+Converters.java @@ -262,7 +262,7 @@ public class Converters { int[] buff = new int[count * 2]; m.get(0, 0, buff); for (int i = 0; i < count; i++) { - long addr = (((long) buff[i * 2]) << 32) | ((long) buff[i * 2 + 1]); + long addr = (((long) buff[i * 2]) << 32) | (((long) buff[i * 2 + 1]) & 0xffffffffL); mats.add(new Mat(addr)); } }