replaced alloca() (a.k.a. cvStackAlloc) with AutoBuffer or vector() everywhere. cvStackAlloc() is still defined, but we do not need alloca() anymore to compile and run OpenCV (fixes #889 and may be some others)
This commit is contained in:
@@ -294,7 +294,8 @@ cvCloneMatND( const CvMatND* src )
|
||||
if( !CV_IS_MATND_HDR( src ))
|
||||
CV_Error( CV_StsBadArg, "Bad CvMatND header" );
|
||||
|
||||
int* sizes = (int*)cvStackAlloc( src->dims*sizeof(sizes[0]) );
|
||||
CV_Assert( src->dims <= CV_MAX_DIM );
|
||||
int sizes[CV_MAX_DIM];
|
||||
|
||||
for( int i = 0; i < src->dims; i++ )
|
||||
sizes[i] = src->dim[i].size;
|
||||
@@ -1717,7 +1718,8 @@ cvPtr1D( const CvArr* arr, int idx, int* _type )
|
||||
else
|
||||
{
|
||||
int i, n = m->dims;
|
||||
int* _idx = (int*)cvStackAlloc(n*sizeof(_idx[0]));
|
||||
CV_DbgAssert( n <= CV_MAX_DIM_HEAP );
|
||||
int _idx[CV_MAX_DIM_HEAP];
|
||||
|
||||
for( i = n - 1; i >= 0; i-- )
|
||||
{
|
||||
|
@@ -132,6 +132,7 @@ GEMMSingleMul( const T* a_data, size_t a_step,
|
||||
{
|
||||
int i, j, k, n = a_size.width, m = d_size.width, drows = d_size.height;
|
||||
const T *_a_data = a_data, *_b_data = b_data, *_c_data = c_data;
|
||||
cv::AutoBuffer<T> _a_buf;
|
||||
T* a_buf = 0;
|
||||
size_t a_step0, a_step1, c_step0, c_step1, t_step;
|
||||
|
||||
@@ -154,16 +155,21 @@ GEMMSingleMul( const T* a_data, size_t a_step,
|
||||
CV_SWAP( a_step0, a_step1, t_step );
|
||||
n = a_size.height;
|
||||
if( a_step > 1 && n > 1 )
|
||||
a_buf = (T*)cvStackAlloc(n*sizeof(a_data[0]));
|
||||
{
|
||||
_a_buf.allocate(n);
|
||||
a_buf = _a_buf;
|
||||
}
|
||||
}
|
||||
|
||||
if( n == 1 ) /* external product */
|
||||
{
|
||||
cv::AutoBuffer<T> _b_buf;
|
||||
T* b_buf = 0;
|
||||
|
||||
if( a_step > 1 && a_size.height > 1 )
|
||||
{
|
||||
a_buf = (T*)cvStackAlloc(drows*sizeof(a_data[0]));
|
||||
_a_buf.allocate(drows);
|
||||
a_buf = _a_buf;
|
||||
for( k = 0; k < drows; k++ )
|
||||
a_buf[k] = a_data[a_step*k];
|
||||
a_data = a_buf;
|
||||
@@ -171,7 +177,8 @@ GEMMSingleMul( const T* a_data, size_t a_step,
|
||||
|
||||
if( b_step > 1 )
|
||||
{
|
||||
b_buf = (T*)cvStackAlloc(d_size.width*sizeof(b_buf[0]) );
|
||||
_b_buf.allocate(d_size.width);
|
||||
b_buf = _b_buf;
|
||||
for( j = 0; j < d_size.width; j++ )
|
||||
b_buf[j] = b_data[j*b_step];
|
||||
b_data = b_buf;
|
||||
@@ -309,7 +316,8 @@ GEMMSingleMul( const T* a_data, size_t a_step,
|
||||
}
|
||||
else
|
||||
{
|
||||
WT* d_buf = (WT*)cvStackAlloc(m*sizeof(d_buf[0]));
|
||||
cv::AutoBuffer<WT> _d_buf(m);
|
||||
WT* d_buf = _d_buf;
|
||||
|
||||
for( i = 0; i < drows; i++, _a_data += a_step0, _c_data += c_step0, d_data += d_step )
|
||||
{
|
||||
@@ -369,6 +377,7 @@ GEMMBlockMul( const T* a_data, size_t a_step,
|
||||
{
|
||||
int i, j, k, n = a_size.width, m = d_size.width;
|
||||
const T *_a_data = a_data, *_b_data = b_data;
|
||||
cv::AutoBuffer<T> _a_buf;
|
||||
T* a_buf = 0;
|
||||
size_t a_step0, a_step1, t_step;
|
||||
int do_acc = flags & 16;
|
||||
@@ -384,7 +393,8 @@ GEMMBlockMul( const T* a_data, size_t a_step,
|
||||
{
|
||||
CV_SWAP( a_step0, a_step1, t_step );
|
||||
n = a_size.height;
|
||||
a_buf = (T*)cvStackAlloc(n*sizeof(a_data[0]));
|
||||
_a_buf.allocate(n);
|
||||
a_buf = _a_buf;
|
||||
}
|
||||
|
||||
if( flags & GEMM_2_T )
|
||||
|
@@ -3620,7 +3620,7 @@ icvReadSparseMat( CvFileStorage* fs, CvFileNode* node )
|
||||
CvSeqReader reader;
|
||||
CvSeq* elements;
|
||||
int* idx;
|
||||
int* sizes = 0, dims, elem_type, cn;
|
||||
int sizes[CV_MAX_DIM_HEAP], dims, elem_type, cn;
|
||||
int i;
|
||||
|
||||
sizes_node = cvGetFileNodeByName( fs, node, "sizes" );
|
||||
@@ -3635,7 +3635,6 @@ icvReadSparseMat( CvFileStorage* fs, CvFileNode* node )
|
||||
if( dims <= 0 || dims > CV_MAX_DIM_HEAP )
|
||||
CV_Error( CV_StsParseError, "Could not determine sparse matrix dimensionality" );
|
||||
|
||||
sizes = (int*)cvStackAlloc( dims*sizeof(sizes[0]));
|
||||
cvReadRawData( fs, sizes_node, sizes, "i" );
|
||||
elem_type = icvDecodeSimpleFormat( dt );
|
||||
|
||||
|
Reference in New Issue
Block a user