Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/libmv/libmv-capi.cc')
-rw-r--r--extern/libmv/libmv-capi.cc27
1 files changed, 14 insertions, 13 deletions
diff --git a/extern/libmv/libmv-capi.cc b/extern/libmv/libmv-capi.cc
index a7509fd6b45..717c54acd85 100644
--- a/extern/libmv/libmv-capi.cc
+++ b/extern/libmv/libmv-capi.cc
@@ -43,12 +43,17 @@
# include <png.h>
#endif
+#if defined(_MSC_VER)
+# define __func__ __FUNCTION__
+#endif
+
#ifdef WITH_LIBMV_GUARDED_ALLOC
# include "MEM_guardedalloc.h"
# define LIBMV_OBJECT_NEW OBJECT_GUARDED_NEW
# define LIBMV_OBJECT_DELETE OBJECT_GUARDED_DELETE
# define LIBMV_OBJECT_DELETE OBJECT_GUARDED_DELETE
-# define LIBMV_OBJECT_DELETE_ARRAY OBJECT_GUARDED_DELETE_ARRAY
+# define LIBMV_STRUCT_NEW(type, count) (type*)MEM_mallocN(sizeof(type) * count, __func__)
+# define LIBMV_STRUCT_DELETE(what) MEM_freeN(what)
#else
// Need this to keep libmv-capi potentially standalone.
# if defined __GNUC__ || defined __sun
@@ -63,11 +68,8 @@
((type*)(what))->~type(); \
free(what); \
} } (void)0
-#define LIBMV_OBJECT_DELETE_ARRAY(what, type, count) \
- { if(what) { \
- for (int i = 0; i < count; i++) ((type*)(what))[i].~type(); \
- free(what); \
- } } (void)0
+# define LIBMV_STRUCT_NEW(type, count) (type*)malloc(sizeof(type) * count)
+# define LIBMV_STRUCT_DELETE(what) { if (what) free(what); } (void)0
#endif
#include "libmv/logging/logging.h"
@@ -875,7 +877,7 @@ struct libmv_Features *libmv_detectFeaturesFAST(const unsigned char *data,
{
libmv::Feature *features = NULL;
std::vector<libmv::Feature> v;
- struct libmv_Features *libmv_features = LIBMV_OBJECT_NEW(libmv_Features);
+ struct libmv_Features *libmv_features = LIBMV_STRUCT_NEW(libmv_Features, 1);
int i = 0, count;
if (margin) {
@@ -889,7 +891,7 @@ struct libmv_Features *libmv_detectFeaturesFAST(const unsigned char *data,
count = v.size();
if (count) {
- features = LIBMV_OBJECT_NEW(libmv::Feature[count]);
+ features = LIBMV_STRUCT_NEW(libmv::Feature, count);
for(std::vector<libmv::Feature>::iterator it = v.begin(); it != v.end(); it++) {
features[i++] = *it;
@@ -908,7 +910,7 @@ struct libmv_Features *libmv_detectFeaturesMORAVEC(const unsigned char *data,
int margin, int count, int min_distance)
{
libmv::Feature *features = NULL;
- struct libmv_Features *libmv_features = LIBMV_OBJECT_NEW(libmv_Features);
+ struct libmv_Features *libmv_features = LIBMV_STRUCT_NEW(libmv_Features, 1);
if (count) {
if (margin) {
@@ -917,7 +919,7 @@ struct libmv_Features *libmv_detectFeaturesMORAVEC(const unsigned char *data,
height -= 2 * margin;
}
- features = LIBMV_OBJECT_NEW(libmv::Feature[count]);
+ features = LIBMV_STRUCT_NEW(libmv::Feature, count);
libmv::DetectMORAVEC(data, stride, width, height, features, &count, min_distance, NULL);
}
@@ -931,11 +933,10 @@ struct libmv_Features *libmv_detectFeaturesMORAVEC(const unsigned char *data,
void libmv_featuresDestroy(struct libmv_Features *libmv_features)
{
if (libmv_features->features) {
- using libmv::Feature;
- LIBMV_OBJECT_DELETE_ARRAY(libmv_features->features, Feature, libmv_features->count);
+ LIBMV_STRUCT_DELETE(libmv_features->features);
}
- LIBMV_OBJECT_DELETE(libmv_features, libmv_Features);
+ LIBMV_STRUCT_DELETE(libmv_features);
}
int libmv_countFeatures(const struct libmv_Features *libmv_features)