Set stricter warning rules for gcc
This commit is contained in:
@@ -35,12 +35,12 @@ static PyObject* opencv_error = 0;
|
||||
static int failmsg(const char *fmt, ...)
|
||||
{
|
||||
char str[1000];
|
||||
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
vsnprintf(str, sizeof(str), fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
|
||||
PyErr_SetString(PyExc_TypeError, str);
|
||||
return 0;
|
||||
}
|
||||
@@ -49,7 +49,7 @@ class PyAllowThreads
|
||||
{
|
||||
public:
|
||||
PyAllowThreads() : _state(PyEval_SaveThread()) {}
|
||||
~PyAllowThreads()
|
||||
~PyAllowThreads()
|
||||
{
|
||||
PyEval_RestoreThread(_state);
|
||||
}
|
||||
@@ -61,7 +61,7 @@ class PyEnsureGIL
|
||||
{
|
||||
public:
|
||||
PyEnsureGIL() : _state(PyGILState_Ensure()) {}
|
||||
~PyEnsureGIL()
|
||||
~PyEnsureGIL()
|
||||
{
|
||||
PyGILState_Release(_state);
|
||||
}
|
||||
@@ -147,7 +147,7 @@ class NumpyAllocator : public MatAllocator
|
||||
public:
|
||||
NumpyAllocator() {}
|
||||
~NumpyAllocator() {}
|
||||
|
||||
|
||||
void allocate(int dims, const int* sizes, int type, int*& refcount,
|
||||
uchar*& datastart, uchar*& data, size_t* step)
|
||||
{
|
||||
@@ -180,7 +180,7 @@ public:
|
||||
step[i] = (size_t)_strides[i];
|
||||
datastart = data = (uchar*)PyArray_DATA(o);
|
||||
}
|
||||
|
||||
|
||||
void deallocate(int* refcount, uchar* datastart, uchar* data)
|
||||
{
|
||||
PyEnsureGIL gil;
|
||||
@@ -193,7 +193,7 @@ public:
|
||||
};
|
||||
|
||||
NumpyAllocator g_numpyAllocator;
|
||||
|
||||
|
||||
enum { ARG_NONE = 0, ARG_MAT = 1, ARG_SCALAR = 2 };
|
||||
|
||||
static int pyopencv_to(const PyObject* o, Mat& m, const char* name = "<unknown>", bool allowND=true)
|
||||
@@ -204,72 +204,72 @@ static int pyopencv_to(const PyObject* o, Mat& m, const char* name = "<unknown>"
|
||||
m.allocator = &g_numpyAllocator;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
if( !PyArray_Check(o) )
|
||||
{
|
||||
failmsg("%s is not a numpy array", name);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
int typenum = PyArray_TYPE(o);
|
||||
int type = typenum == NPY_UBYTE ? CV_8U : typenum == NPY_BYTE ? CV_8S :
|
||||
typenum == NPY_USHORT ? CV_16U : typenum == NPY_SHORT ? CV_16S :
|
||||
typenum == NPY_USHORT ? CV_16U : typenum == NPY_SHORT ? CV_16S :
|
||||
typenum == NPY_INT || typenum == NPY_LONG ? CV_32S :
|
||||
typenum == NPY_FLOAT ? CV_32F :
|
||||
typenum == NPY_DOUBLE ? CV_64F : -1;
|
||||
|
||||
|
||||
if( type < 0 )
|
||||
{
|
||||
failmsg("%s data type = %d is not supported", name, typenum);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
int ndims = PyArray_NDIM(o);
|
||||
if(ndims >= CV_MAX_DIM)
|
||||
{
|
||||
failmsg("%s dimensionality (=%d) is too high", name, ndims);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
int size[CV_MAX_DIM+1];
|
||||
size_t step[CV_MAX_DIM+1], elemsize = CV_ELEM_SIZE1(type);
|
||||
const npy_intp* _sizes = PyArray_DIMS(o);
|
||||
const npy_intp* _strides = PyArray_STRIDES(o);
|
||||
bool transposed = false;
|
||||
|
||||
|
||||
for(int i = 0; i < ndims; i++)
|
||||
{
|
||||
size[i] = (int)_sizes[i];
|
||||
step[i] = (size_t)_strides[i];
|
||||
}
|
||||
|
||||
|
||||
if( ndims == 0 || step[ndims-1] > elemsize ) {
|
||||
size[ndims] = 1;
|
||||
step[ndims] = elemsize;
|
||||
ndims++;
|
||||
}
|
||||
|
||||
|
||||
if( ndims >= 2 && step[0] < step[1] )
|
||||
{
|
||||
std::swap(size[0], size[1]);
|
||||
std::swap(step[0], step[1]);
|
||||
transposed = true;
|
||||
}
|
||||
|
||||
|
||||
if( ndims == 3 && size[2] <= CV_CN_MAX && step[1] == elemsize*size[2] )
|
||||
{
|
||||
ndims--;
|
||||
type |= CV_MAKETYPE(0, size[2]);
|
||||
}
|
||||
|
||||
|
||||
if( ndims > 2 && !allowND )
|
||||
{
|
||||
failmsg("%s has more than 2 dimensions", name);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
m = Mat(ndims, size, type, PyArray_DATA(o), step);
|
||||
|
||||
|
||||
if( m.data )
|
||||
{
|
||||
m.refcount = refcountFromPyObject(o);
|
||||
@@ -277,7 +277,7 @@ static int pyopencv_to(const PyObject* o, Mat& m, const char* name = "<unknown>"
|
||||
// (since Mat destructor will decrement the reference counter)
|
||||
};
|
||||
m.allocator = &g_numpyAllocator;
|
||||
|
||||
|
||||
if( transposed )
|
||||
{
|
||||
Mat tmp;
|
||||
@@ -503,12 +503,12 @@ static inline bool pyopencv_to(PyObject* obj, CvSlice& r, const char* name = "<u
|
||||
}
|
||||
return PyArg_ParseTuple(obj, "ii", &r.start_index, &r.end_index) > 0;
|
||||
}
|
||||
|
||||
|
||||
static inline PyObject* pyopencv_from(const CvSlice& r)
|
||||
{
|
||||
return Py_BuildValue("(ii)", r.start_index, r.end_index);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static inline bool pyopencv_to(PyObject* obj, Point& p, const char* name = "<unknown>")
|
||||
{
|
||||
if(!obj || obj == Py_None)
|
||||
@@ -584,18 +584,18 @@ template<typename _Tp> struct pyopencvVecConverter
|
||||
return false;
|
||||
int i, j, n = (int)PySequence_Fast_GET_SIZE(seq);
|
||||
value.resize(n);
|
||||
|
||||
|
||||
int type = DataType<_Tp>::type;
|
||||
int depth = CV_MAT_DEPTH(type), channels = CV_MAT_CN(type);
|
||||
PyObject** items = PySequence_Fast_ITEMS(seq);
|
||||
|
||||
|
||||
for( i = 0; i < n; i++ )
|
||||
{
|
||||
PyObject* item = items[i];
|
||||
PyObject* seq_i = 0;
|
||||
PyObject** items_i = &item;
|
||||
_Cp* data = (_Cp*)&value[i];
|
||||
|
||||
|
||||
if( channels == 2 && PyComplex_CheckExact(item) )
|
||||
{
|
||||
Py_complex c = PyComplex_AsCComplex(obj);
|
||||
@@ -619,7 +619,7 @@ template<typename _Tp> struct pyopencvVecConverter
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
seq_i = PySequence_Fast(item, name);
|
||||
if( !seq_i || (int)PySequence_Fast_GET_SIZE(seq_i) != channels )
|
||||
{
|
||||
@@ -628,7 +628,7 @@ template<typename _Tp> struct pyopencvVecConverter
|
||||
}
|
||||
items_i = PySequence_Fast_ITEMS(seq_i);
|
||||
}
|
||||
|
||||
|
||||
for( j = 0; j < channels; j++ )
|
||||
{
|
||||
PyObject* item_ij = items_i[j];
|
||||
@@ -656,7 +656,7 @@ template<typename _Tp> struct pyopencvVecConverter
|
||||
Py_DECREF(seq);
|
||||
return i == n;
|
||||
}
|
||||
|
||||
|
||||
static PyObject* from(const vector<_Tp>& value)
|
||||
{
|
||||
if(value.empty())
|
||||
@@ -691,9 +691,9 @@ template<typename _Tp> static inline bool pyopencv_to_generic_vec(PyObject* obj,
|
||||
return false;
|
||||
int i, n = (int)PySequence_Fast_GET_SIZE(seq);
|
||||
value.resize(n);
|
||||
|
||||
|
||||
PyObject** items = PySequence_Fast_ITEMS(seq);
|
||||
|
||||
|
||||
for( i = 0; i < n; i++ )
|
||||
{
|
||||
PyObject* item = items[i];
|
||||
@@ -709,7 +709,7 @@ template<typename _Tp> static inline PyObject* pyopencv_from_generic_vec(const v
|
||||
int i, n = (int)value.size();
|
||||
PyObject* seq = PyList_New(n);
|
||||
for( i = 0; i < n; i++ )
|
||||
{
|
||||
{
|
||||
PyObject* item = pyopencv_from(value[i]);
|
||||
if(!item)
|
||||
break;
|
||||
@@ -730,7 +730,7 @@ template<typename _Tp> struct pyopencvVecConverter<vector<_Tp> >
|
||||
{
|
||||
return pyopencv_to_generic_vec(obj, value, name);
|
||||
}
|
||||
|
||||
|
||||
static PyObject* from(const vector<vector<_Tp> >& value)
|
||||
{
|
||||
return pyopencv_from_generic_vec(value);
|
||||
@@ -743,7 +743,7 @@ template<> struct pyopencvVecConverter<Mat>
|
||||
{
|
||||
return pyopencv_to_generic_vec(obj, value, name);
|
||||
}
|
||||
|
||||
|
||||
static PyObject* from(const vector<Mat>& value)
|
||||
{
|
||||
return pyopencv_from_generic_vec(value);
|
||||
@@ -756,7 +756,7 @@ template<> struct pyopencvVecConverter<KeyPoint>
|
||||
{
|
||||
return pyopencv_to_generic_vec(obj, value, name);
|
||||
}
|
||||
|
||||
|
||||
static PyObject* from(const vector<KeyPoint>& value)
|
||||
{
|
||||
return pyopencv_from_generic_vec(value);
|
||||
@@ -769,7 +769,7 @@ template<> struct pyopencvVecConverter<DMatch>
|
||||
{
|
||||
return pyopencv_to_generic_vec(obj, value, name);
|
||||
}
|
||||
|
||||
|
||||
static PyObject* from(const vector<DMatch>& value)
|
||||
{
|
||||
return pyopencv_from_generic_vec(value);
|
||||
@@ -782,7 +782,7 @@ template<> struct pyopencvVecConverter<string>
|
||||
{
|
||||
return pyopencv_to_generic_vec(obj, value, name);
|
||||
}
|
||||
|
||||
|
||||
static PyObject* from(const vector<string>& value)
|
||||
{
|
||||
return pyopencv_from_generic_vec(value);
|
||||
@@ -850,7 +850,7 @@ static bool pyopencv_to(PyObject *o, cv::flann::IndexParams& p, const char *name
|
||||
bool ok = false;
|
||||
PyObject* keys = PyObject_CallMethod(o,(char*)"keys",0);
|
||||
PyObject* values = PyObject_CallMethod(o,(char*)"values",0);
|
||||
|
||||
|
||||
if( keys && values )
|
||||
{
|
||||
int i, n = (int)PyList_GET_SIZE(keys);
|
||||
@@ -886,7 +886,7 @@ static bool pyopencv_to(PyObject *o, cv::flann::IndexParams& p, const char *name
|
||||
}
|
||||
ok = i == n && !PyErr_Occurred();
|
||||
}
|
||||
|
||||
|
||||
Py_XDECREF(keys);
|
||||
Py_XDECREF(values);
|
||||
return ok;
|
||||
@@ -914,10 +914,10 @@ static void OnMouse(int event, int x, int y, int flags, void* param)
|
||||
{
|
||||
PyGILState_STATE gstate;
|
||||
gstate = PyGILState_Ensure();
|
||||
|
||||
|
||||
PyObject *o = (PyObject*)param;
|
||||
PyObject *args = Py_BuildValue("iiiiO", event, x, y, flags, PyTuple_GetItem(o, 1));
|
||||
|
||||
|
||||
PyObject *r = PyObject_Call(PyTuple_GetItem(o, 0), args, NULL);
|
||||
if (r == NULL)
|
||||
PyErr_Print();
|
||||
@@ -933,7 +933,7 @@ static PyObject *pycvSetMouseCallback(PyObject *self, PyObject *args, PyObject *
|
||||
char* name;
|
||||
PyObject *on_mouse;
|
||||
PyObject *param = NULL;
|
||||
|
||||
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kw, "sO|O", (char**)keywords, &name, &on_mouse, ¶m))
|
||||
return NULL;
|
||||
if (!PyCallable_Check(on_mouse)) {
|
||||
@@ -947,11 +947,11 @@ static PyObject *pycvSetMouseCallback(PyObject *self, PyObject *args, PyObject *
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
void OnChange(int pos, void *param)
|
||||
static void OnChange(int pos, void *param)
|
||||
{
|
||||
PyGILState_STATE gstate;
|
||||
gstate = PyGILState_Ensure();
|
||||
|
||||
|
||||
PyObject *o = (PyObject*)param;
|
||||
PyObject *args = Py_BuildValue("(i)", pos);
|
||||
PyObject *r = PyObject_Call(PyTuple_GetItem(o, 0), args, NULL);
|
||||
@@ -968,7 +968,7 @@ static PyObject *pycvCreateTrackbar(PyObject *self, PyObject *args)
|
||||
char* window_name;
|
||||
int *value = new int;
|
||||
int count;
|
||||
|
||||
|
||||
if (!PyArg_ParseTuple(args, "ssiiO", &trackbar_name, &window_name, value, &count, &on_change))
|
||||
return NULL;
|
||||
if (!PyCallable_Check(on_change)) {
|
||||
@@ -1011,13 +1011,14 @@ extern "C"
|
||||
#if defined WIN32 || defined _WIN32
|
||||
__declspec(dllexport)
|
||||
#endif
|
||||
void initcv2();
|
||||
|
||||
void initcv2()
|
||||
{
|
||||
#if PYTHON_USE_NUMPY
|
||||
import_array();
|
||||
#endif
|
||||
|
||||
|
||||
#if PYTHON_USE_NUMPY
|
||||
#include "pyopencv_generated_type_reg.h"
|
||||
#endif
|
||||
@@ -1029,10 +1030,10 @@ void initcv2()
|
||||
|
||||
opencv_error = PyErr_NewException((char*)MODULESTR".error", NULL, NULL);
|
||||
PyDict_SetItemString(d, "error", opencv_error);
|
||||
|
||||
|
||||
PyObject* cv_m = init_cv();
|
||||
|
||||
PyDict_SetItemString(d, "cv", cv_m);
|
||||
PyDict_SetItemString(d, "cv", cv_m);
|
||||
|
||||
#define PUBLISH(I) PyDict_SetItemString(d, #I, PyInt_FromLong(I))
|
||||
#define PUBLISHU(I) PyDict_SetItemString(d, #I, PyLong_FromUnsignedLong(I))
|
||||
|
Reference in New Issue
Block a user