mirror of
https://github.com/opencv/opencv.git
synced 2026-07-31 00:03:03 +04:00
Merge branch 4.x
This commit is contained in:
@@ -92,7 +92,7 @@ static bool ocl_binary_op(InputArray _src1, InputArray _src2, OutputArray _dst,
|
||||
const int dstType1 = CV_MAKETYPE(dstDepth, 1);
|
||||
const int scalarType = CV_MAKETYPE(srcdepth, scalarcn);
|
||||
|
||||
sprintf(opts, "-D %s%s -D %s%s -D dstT=%s -D DEPTH_dst=%d -D dstT_C1=%s -D workST=%s -D cn=%d -D rowsPerWI=%d",
|
||||
snprintf(opts, sizeof(opts), "-D %s%s -D %s%s -D dstT=%s -D DEPTH_dst=%d -D dstT_C1=%s -D workST=%s -D cn=%d -D rowsPerWI=%d",
|
||||
haveMask ? "MASK_" : "", haveScalar ? "UNARY_OP" : "BINARY_OP", oclop2str[oclop],
|
||||
doubleSupport ? " -D DOUBLE_SUPPORT" : "",
|
||||
bitwise ? ocl::memopTypeToStr(dstType) : ocl::typeToStr(dstType),
|
||||
@@ -490,7 +490,7 @@ static bool ocl_arithm_op(InputArray _src1, InputArray _src2, OutputArray _dst,
|
||||
int scalarcn = kercn == 3 ? 4 : kercn, rowsPerWI = d.isIntel() ? 4 : 1;
|
||||
|
||||
char cvtstr[4][32], opts[1024];
|
||||
sprintf(opts, "-D %s%s -D %s -D srcT1=%s -D srcT1_C1=%s -D srcT2=%s -D srcT2_C1=%s "
|
||||
snprintf(opts, sizeof(opts), "-D %s%s -D %s -D srcT1=%s -D srcT1_C1=%s -D srcT2=%s -D srcT2_C1=%s "
|
||||
"-D dstT=%s -D DEPTH_dst=%d -D dstT_C1=%s -D workT=%s -D workST=%s -D scaleT=%s -D wdepth=%d -D convertToWT1=%s "
|
||||
"-D convertToWT2=%s -D convertToDT=%s%s -D cn=%d -D rowsPerWI=%d -D convertFromU=%s",
|
||||
(haveMask ? "MASK_" : ""), (haveScalar ? "UNARY_OP" : "BINARY_OP"),
|
||||
|
||||
@@ -266,24 +266,30 @@ struct op_absdiff
|
||||
template<>
|
||||
struct op_absdiff<schar, v_int8>
|
||||
{
|
||||
#if CV_SIMD
|
||||
static inline v_int8 r(const v_int8& a, const v_int8& b)
|
||||
{ return v_absdiffs(a, b); }
|
||||
#endif
|
||||
static inline schar r(schar a, schar b)
|
||||
{ return c_absdiff(a, b); }
|
||||
};
|
||||
template<>
|
||||
struct op_absdiff<short, v_int16>
|
||||
{
|
||||
#if CV_SIMD
|
||||
static inline v_int16 r(const v_int16& a, const v_int16& b)
|
||||
{ return v_absdiffs(a, b); }
|
||||
#endif
|
||||
static inline short r(short a, short b)
|
||||
{ return c_absdiff(a, b); }
|
||||
};
|
||||
template<>
|
||||
struct op_absdiff<int, v_int32>
|
||||
{
|
||||
#if CV_SIMD
|
||||
static inline v_int32 r(const v_int32& a, const v_int32& b)
|
||||
{ return v_reinterpret_as_s32(v_absdiff(a, b)); }
|
||||
#endif
|
||||
static inline int r(int a, int b)
|
||||
{ return c_absdiff(a, b); }
|
||||
};
|
||||
@@ -1430,11 +1436,13 @@ struct op_mul
|
||||
template<typename T1, typename T2, typename Tvec>
|
||||
struct op_mul_scale
|
||||
{
|
||||
#if CV_SIMD
|
||||
static inline v_float32 r(const v_float32& a, const v_float32& b, const T2* scalar)
|
||||
{
|
||||
const v_float32 v_scalar = vx_setall_f32(*scalar);
|
||||
return v_scalar * a * b;
|
||||
}
|
||||
#endif
|
||||
static inline T1 r(T1 a, T1 b, const T2* scalar)
|
||||
{ return c_mul(a, b, *scalar); }
|
||||
static inline Tvec pre(const Tvec&, const Tvec& res)
|
||||
@@ -1569,6 +1577,7 @@ struct op_div_f
|
||||
template<typename T1, typename T2, typename Tvec>
|
||||
struct op_div_scale
|
||||
{
|
||||
#if CV_SIMD
|
||||
static inline v_float32 r(const v_float32& a, const v_float32& b, const T2* scalar)
|
||||
{
|
||||
const v_float32 v_scalar = vx_setall_f32(*scalar);
|
||||
@@ -1579,6 +1588,7 @@ struct op_div_scale
|
||||
const Tvec v_zero = vx_setall<typename Tvec::lane_type>(0);
|
||||
return v_select(denom == v_zero, v_zero, res);
|
||||
}
|
||||
#endif
|
||||
static inline T1 r(T1 a, T1 denom, const T2* scalar)
|
||||
{
|
||||
CV_StaticAssert(std::numeric_limits<T1>::is_integer, "");
|
||||
@@ -1589,11 +1599,13 @@ struct op_div_scale
|
||||
template<>
|
||||
struct op_div_scale<float, float, v_float32>
|
||||
{
|
||||
#if CV_SIMD
|
||||
static inline v_float32 r(const v_float32& a, const v_float32& b, const float* scalar)
|
||||
{
|
||||
const v_float32 v_scalar = vx_setall_f32(*scalar);
|
||||
return a * v_scalar / b;
|
||||
}
|
||||
#endif
|
||||
static inline float r(float a, float denom, const float* scalar)
|
||||
{ return c_div(a, denom, *scalar); }
|
||||
};
|
||||
@@ -1673,11 +1685,13 @@ DEFINE_SIMD_ALL(div, div_loop)
|
||||
template<typename T1, typename T2, typename Tvec>
|
||||
struct op_add_scale
|
||||
{
|
||||
#if CV_SIMD
|
||||
static inline v_float32 r(const v_float32& a, const v_float32& b, const T2* scalar)
|
||||
{
|
||||
const v_float32 v_alpha = vx_setall_f32(*scalar);
|
||||
return v_fma(a, v_alpha, b);
|
||||
}
|
||||
#endif
|
||||
static inline T1 r(T1 a, T1 b, const T2* scalar)
|
||||
{ return c_add(a, b, *scalar); }
|
||||
static inline Tvec pre(const Tvec&, const Tvec& res)
|
||||
@@ -1704,6 +1718,7 @@ struct op_add_scale<double, double, v_float64>
|
||||
template<typename T1, typename T2, typename Tvec>
|
||||
struct op_add_weighted
|
||||
{
|
||||
#if CV_SIMD
|
||||
static inline v_float32 r(const v_float32& a, const v_float32& b, const T2* scalars)
|
||||
{
|
||||
const v_float32 v_alpha = vx_setall_f32(scalars[0]);
|
||||
@@ -1711,6 +1726,7 @@ struct op_add_weighted
|
||||
const v_float32 v_gamma = vx_setall_f32(scalars[2]);
|
||||
return v_fma(a, v_alpha, v_fma(b, v_beta, v_gamma));
|
||||
}
|
||||
#endif
|
||||
static inline T1 r(T1 a, T1 b, const T2* scalars)
|
||||
{ return c_add(a, b, scalars[0], scalars[1], scalars[2]); }
|
||||
static inline Tvec pre(const Tvec&, const Tvec& res)
|
||||
@@ -1819,6 +1835,7 @@ DEFINE_SIMD_F64(addWeighted, add_weighted_loop_d)
|
||||
template<typename T1, typename T2, typename Tvec>
|
||||
struct op_recip
|
||||
{
|
||||
#if CV_SIMD
|
||||
static inline v_float32 r(const v_float32& a, const T2* scalar)
|
||||
{
|
||||
const v_float32 v_scalar = vx_setall_f32(*scalar);
|
||||
@@ -1829,6 +1846,7 @@ struct op_recip
|
||||
const Tvec v_zero = vx_setall<typename Tvec::lane_type>(0);
|
||||
return v_select(denom == v_zero, v_zero, res);
|
||||
}
|
||||
#endif
|
||||
static inline T1 r(T1 denom, const T2* scalar)
|
||||
{
|
||||
CV_StaticAssert(std::numeric_limits<T1>::is_integer, "");
|
||||
@@ -1839,11 +1857,13 @@ struct op_recip
|
||||
template<>
|
||||
struct op_recip<float, float, v_float32>
|
||||
{
|
||||
#if CV_SIMD
|
||||
static inline v_float32 r(const v_float32& a, const float* scalar)
|
||||
{
|
||||
const v_float32 v_scalar = vx_setall_f32(*scalar);
|
||||
return v_scalar / a;
|
||||
}
|
||||
#endif
|
||||
static inline float r(float denom, const float* scalar)
|
||||
{ return c_div(*scalar, denom); }
|
||||
};
|
||||
|
||||
@@ -29,8 +29,7 @@ public:
|
||||
}
|
||||
void cleanup() const
|
||||
{
|
||||
CV_Assert(ptr && *ptr);
|
||||
*ptr = 0;
|
||||
CV_DbgAssert(ptr);
|
||||
if (raw_mem)
|
||||
fastFree(raw_mem);
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ const char* depthToString(int depth)
|
||||
return s ? s : "<invalid depth>";
|
||||
}
|
||||
|
||||
const cv::String typeToString(int type)
|
||||
cv::String typeToString(int type)
|
||||
{
|
||||
cv::String s = detail::typeToString_(type);
|
||||
if (s.empty())
|
||||
@@ -47,7 +47,7 @@ const char* depthToString_(int depth)
|
||||
return (depth <= CV_16F && depth >= 0) ? depthNames[depth] : NULL;
|
||||
}
|
||||
|
||||
const cv::String typeToString_(int type)
|
||||
cv::String typeToString_(int type)
|
||||
{
|
||||
int depth = CV_MAT_DEPTH(type);
|
||||
int cn = CV_MAT_CN(type);
|
||||
|
||||
@@ -133,8 +133,6 @@ cvCreateChildMemStorage( CvMemStorage * parent )
|
||||
static void
|
||||
icvDestroyMemStorage( CvMemStorage* storage )
|
||||
{
|
||||
int k = 0;
|
||||
|
||||
CvMemBlock *block;
|
||||
CvMemBlock *dst_top = 0;
|
||||
|
||||
@@ -144,7 +142,7 @@ icvDestroyMemStorage( CvMemStorage* storage )
|
||||
if( storage->parent )
|
||||
dst_top = storage->parent->top;
|
||||
|
||||
for( block = storage->bottom; block != 0; k++ )
|
||||
for( block = storage->bottom; block != 0; )
|
||||
{
|
||||
CvMemBlock *temp = block;
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
#if defined(__clang__) && defined(__has_feature)
|
||||
#if __has_feature(memory_sanitizer)
|
||||
#define CV_ANNOTATE_MEMORY_IS_INITIALIZED(address, size) \
|
||||
__msan_unpoison(adresse, size)
|
||||
__msan_unpoison(address, size)
|
||||
#endif
|
||||
#endif
|
||||
#ifndef CV_ANNOTATE_MEMORY_IS_INITIALIZED
|
||||
|
||||
@@ -253,11 +253,8 @@ static int initialize_simplex(Mat_<double>& c, Mat_<double>& b,double& v,vector<
|
||||
}
|
||||
|
||||
static int inner_simplex(Mat_<double>& c, Mat_<double>& b,double& v,vector<int>& N,vector<int>& B,vector<unsigned int>& indexToRow){
|
||||
int count=0;
|
||||
for(;;){
|
||||
dprintf(("iteration #%d\n",count));
|
||||
count++;
|
||||
|
||||
for(;;){
|
||||
static MatIterator_<double> pos_ptr;
|
||||
int e=-1,pos_ctr=0,min_var=INT_MAX;
|
||||
bool all_nonzero=true;
|
||||
|
||||
@@ -231,7 +231,7 @@ static const bool CV_OPENCL_DISABLE_BUFFER_RECT_OPERATIONS = utils::getConfigura
|
||||
#endif
|
||||
);
|
||||
|
||||
static const String getBuildExtraOptions()
|
||||
static String getBuildExtraOptions()
|
||||
{
|
||||
static String param_buildExtraOptions;
|
||||
static bool initialized = false;
|
||||
|
||||
+10
-10
@@ -70,14 +70,14 @@ namespace cv
|
||||
char braces[5];
|
||||
|
||||
void (FormattedImpl::*valueToStr)();
|
||||
void valueToStr8u() { sprintf(buf, "%3d", (int)mtx.ptr<uchar>(row, col)[cn]); }
|
||||
void valueToStr8s() { sprintf(buf, "%3d", (int)mtx.ptr<schar>(row, col)[cn]); }
|
||||
void valueToStr16u() { sprintf(buf, "%d", (int)mtx.ptr<ushort>(row, col)[cn]); }
|
||||
void valueToStr16s() { sprintf(buf, "%d", (int)mtx.ptr<short>(row, col)[cn]); }
|
||||
void valueToStr32s() { sprintf(buf, "%d", mtx.ptr<int>(row, col)[cn]); }
|
||||
void valueToStr32f() { sprintf(buf, floatFormat, mtx.ptr<float>(row, col)[cn]); }
|
||||
void valueToStr64f() { sprintf(buf, floatFormat, mtx.ptr<double>(row, col)[cn]); }
|
||||
void valueToStr16f() { sprintf(buf, floatFormat, (float)mtx.ptr<float16_t>(row, col)[cn]); }
|
||||
void valueToStr8u() { snprintf(buf, sizeof(buf), "%3d", (int)mtx.ptr<uchar>(row, col)[cn]); }
|
||||
void valueToStr8s() { snprintf(buf, sizeof(buf), "%3d", (int)mtx.ptr<schar>(row, col)[cn]); }
|
||||
void valueToStr16u() { snprintf(buf, sizeof(buf), "%d", (int)mtx.ptr<ushort>(row, col)[cn]); }
|
||||
void valueToStr16s() { snprintf(buf, sizeof(buf), "%d", (int)mtx.ptr<short>(row, col)[cn]); }
|
||||
void valueToStr32s() { snprintf(buf, sizeof(buf), "%d", mtx.ptr<int>(row, col)[cn]); }
|
||||
void valueToStr32f() { snprintf(buf, sizeof(buf), floatFormat, mtx.ptr<float>(row, col)[cn]); }
|
||||
void valueToStr64f() { snprintf(buf, sizeof(buf), floatFormat, mtx.ptr<double>(row, col)[cn]); }
|
||||
void valueToStr16f() { snprintf(buf, sizeof(buf), floatFormat, (float)mtx.ptr<float16_t>(row, col)[cn]); }
|
||||
void valueToStrOther() { buf[0] = 0; }
|
||||
|
||||
public:
|
||||
@@ -151,10 +151,10 @@ namespace cv
|
||||
}
|
||||
else
|
||||
row = 0;
|
||||
sprintf(buf, "\n(:, :, %d) = \n", cn+1);
|
||||
snprintf(buf, sizeof(buf), "\n(:, :, %d) = \n", cn+1);
|
||||
return buf;
|
||||
}
|
||||
sprintf(buf, "(:, :, %d) = \n", cn+1);
|
||||
snprintf(buf, sizeof(buf), "(:, :, %d) = \n", cn+1);
|
||||
return buf;
|
||||
case STATE_EPILOGUE:
|
||||
state = STATE_FINISHED;
|
||||
|
||||
@@ -986,7 +986,7 @@ int getNumberOfCPUs_()
|
||||
|
||||
#endif
|
||||
|
||||
#if !defined(_WIN32) && !defined(__APPLE__)
|
||||
#if !defined(_WIN32) && !defined(__APPLE__) && defined(_SC_NPROCESSORS_ONLN)
|
||||
|
||||
static unsigned cpu_count_sysconf = (unsigned)sysconf( _SC_NPROCESSORS_ONLN );
|
||||
ncpus = minNonZero(ncpus, cpu_count_sysconf);
|
||||
|
||||
@@ -56,7 +56,7 @@ char* itoa( int _val, char* buffer, int /*radix*/ )
|
||||
return ptr;
|
||||
}
|
||||
|
||||
char* doubleToString( char* buf, double value, bool explicitZero )
|
||||
char* doubleToString( char* buf, size_t bufSize, double value, bool explicitZero )
|
||||
{
|
||||
Cv64suf val;
|
||||
unsigned ieee754_hi;
|
||||
@@ -70,15 +70,15 @@ char* doubleToString( char* buf, double value, bool explicitZero )
|
||||
if( ivalue == value )
|
||||
{
|
||||
if( explicitZero )
|
||||
sprintf( buf, "%d.0", ivalue );
|
||||
snprintf( buf, bufSize, "%d.0", ivalue );
|
||||
else
|
||||
sprintf( buf, "%d.", ivalue );
|
||||
snprintf( buf, bufSize, "%d.", ivalue );
|
||||
}
|
||||
else
|
||||
{
|
||||
static const char* fmt = "%.16e";
|
||||
char* ptr = buf;
|
||||
sprintf( buf, fmt, value );
|
||||
snprintf( buf, bufSize, fmt, value );
|
||||
if( *ptr == '+' || *ptr == '-' )
|
||||
ptr++;
|
||||
for( ; cv_isdigit(*ptr); ptr++ )
|
||||
@@ -99,7 +99,7 @@ char* doubleToString( char* buf, double value, bool explicitZero )
|
||||
return buf;
|
||||
}
|
||||
|
||||
char* floatToString( char* buf, float value, bool halfprecision, bool explicitZero )
|
||||
char* floatToString( char* buf, size_t bufSize, float value, bool halfprecision, bool explicitZero )
|
||||
{
|
||||
Cv32suf val;
|
||||
unsigned ieee754;
|
||||
@@ -112,17 +112,17 @@ char* floatToString( char* buf, float value, bool halfprecision, bool explicitZe
|
||||
if( ivalue == value )
|
||||
{
|
||||
if( explicitZero )
|
||||
sprintf( buf, "%d.0", ivalue );
|
||||
snprintf( buf, bufSize, "%d.0", ivalue );
|
||||
else
|
||||
sprintf( buf, "%d.", ivalue );
|
||||
snprintf( buf, bufSize, "%d.", ivalue );
|
||||
}
|
||||
else
|
||||
{
|
||||
char* ptr = buf;
|
||||
if (halfprecision)
|
||||
sprintf(buf, "%.4e", value);
|
||||
snprintf(buf, bufSize, "%.4e", value);
|
||||
else
|
||||
sprintf(buf, "%.8e", value);
|
||||
snprintf(buf, bufSize, "%.8e", value);
|
||||
if( *ptr == '+' || *ptr == '-' )
|
||||
ptr++;
|
||||
for( ; cv_isdigit(*ptr); ptr++ )
|
||||
@@ -585,7 +585,7 @@ bool FileStorage::Impl::open(const char *filename_or_buf, int _flags, const char
|
||||
|
||||
CV_Assert(strlen(encoding) < 1000);
|
||||
char buf[1100];
|
||||
sprintf(buf, "<?xml version=\"1.0\" encoding=\"%s\"?>\n", encoding);
|
||||
snprintf(buf, sizeof(buf), "<?xml version=\"1.0\" encoding=\"%s\"?>\n", encoding);
|
||||
puts(buf);
|
||||
} else
|
||||
puts("<?xml version=\"1.0\"?>\n");
|
||||
@@ -1107,15 +1107,15 @@ void FileStorage::Impl::writeRawData(const std::string &dt, const void *_data, s
|
||||
data += sizeof(int);
|
||||
break;
|
||||
case CV_32F:
|
||||
ptr = fs::floatToString(buf, *(float *) data, false, explicitZero);
|
||||
ptr = fs::floatToString(buf, sizeof(buf), *(float *) data, false, explicitZero);
|
||||
data += sizeof(float);
|
||||
break;
|
||||
case CV_64F:
|
||||
ptr = fs::doubleToString(buf, *(double *) data, explicitZero);
|
||||
ptr = fs::doubleToString(buf, sizeof(buf), *(double *) data, explicitZero);
|
||||
data += sizeof(double);
|
||||
break;
|
||||
case CV_16F: /* reference */
|
||||
ptr = fs::floatToString(buf, (float) *(float16_t *) data, true, explicitZero);
|
||||
ptr = fs::floatToString(buf, sizeof(buf), (float) *(float16_t *) data, true, explicitZero);
|
||||
data += sizeof(float16_t);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -86,8 +86,8 @@ namespace fs
|
||||
{
|
||||
int strcasecmp(const char* str1, const char* str2);
|
||||
char* itoa( int _val, char* buffer, int /*radix*/ );
|
||||
char* floatToString( char* buf, float value, bool halfprecision, bool explicitZero );
|
||||
char* doubleToString( char* buf, double value, bool explicitZero );
|
||||
char* floatToString( char* buf, size_t bufSize, float value, bool halfprecision, bool explicitZero );
|
||||
char* doubleToString( char* buf, size_t bufSize, double value, bool explicitZero );
|
||||
|
||||
int calcStructSize( const char* dt, int initial_size );
|
||||
int calcElemSize( const char* dt, int initial_size );
|
||||
|
||||
@@ -84,7 +84,7 @@ public:
|
||||
void write( const char* key, double value )
|
||||
{
|
||||
char buf[128];
|
||||
writeScalar( key, fs::doubleToString( buf, value, true ));
|
||||
writeScalar( key, fs::doubleToString( buf, sizeof(buf), value, true ));
|
||||
}
|
||||
|
||||
void write(const char* key, const char* str, bool quote)
|
||||
|
||||
@@ -148,7 +148,7 @@ public:
|
||||
void write( const char* key, double value )
|
||||
{
|
||||
char buf[128];
|
||||
writeScalar( key, fs::doubleToString( buf, value, false ) );
|
||||
writeScalar( key, fs::doubleToString( buf, sizeof(buf), value, false ) );
|
||||
}
|
||||
|
||||
void write(const char* key, const char* str, bool quote)
|
||||
|
||||
@@ -40,7 +40,7 @@ public:
|
||||
{
|
||||
/* reset struct flag. in order not to print ']' */
|
||||
struct_flags = FileNode::SEQ;
|
||||
sprintf(buf, "!!binary |");
|
||||
snprintf(buf, sizeof(buf), "!!binary |");
|
||||
data = buf;
|
||||
}
|
||||
else if( FileNode::isFlow(struct_flags))
|
||||
@@ -49,7 +49,7 @@ public:
|
||||
struct_flags |= FileNode::FLOW;
|
||||
|
||||
if( type_name )
|
||||
sprintf( buf, "!!%s %c", type_name, c );
|
||||
snprintf( buf, sizeof(buf), "!!%s %c", type_name, c );
|
||||
else
|
||||
{
|
||||
buf[0] = c;
|
||||
@@ -59,7 +59,7 @@ public:
|
||||
}
|
||||
else if( type_name )
|
||||
{
|
||||
sprintf( buf, "!!%s", type_name );
|
||||
snprintf( buf, sizeof(buf), "!!%s", type_name );
|
||||
data = buf;
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ public:
|
||||
void write( const char* key, double value )
|
||||
{
|
||||
char buf[128];
|
||||
writeScalar( key, fs::doubleToString( buf, value, false ));
|
||||
writeScalar( key, fs::doubleToString( buf, sizeof(buf), value, false ));
|
||||
}
|
||||
|
||||
void write(const char* key, const char* str, bool quote)
|
||||
|
||||
@@ -365,6 +365,7 @@ extern CV_EXPORTS
|
||||
bool __termination; // skip some cleanups, because process is terminating
|
||||
// (for example, if ExitProcess() was already called)
|
||||
|
||||
CV_EXPORTS
|
||||
cv::Mutex& getInitializationMutex();
|
||||
|
||||
/// @brief Returns timestamp in nanoseconds since program launch
|
||||
|
||||
@@ -305,6 +305,9 @@ DECLARE_CV_CPUID_X86
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined CV_CXX11
|
||||
#include <chrono>
|
||||
#endif
|
||||
|
||||
namespace cv
|
||||
{
|
||||
@@ -414,6 +417,7 @@ struct HWFeatures
|
||||
g_hwFeatureNames[CPU_AVX_5124FMAPS] = "AVX5124FMAPS";
|
||||
|
||||
g_hwFeatureNames[CPU_NEON] = "NEON";
|
||||
g_hwFeatureNames[CPU_NEON_DOTPROD] = "NEON_DOTPROD";
|
||||
|
||||
g_hwFeatureNames[CPU_VSX] = "VSX";
|
||||
g_hwFeatureNames[CPU_VSX3] = "VSX3";
|
||||
@@ -561,6 +565,24 @@ struct HWFeatures
|
||||
#ifdef __aarch64__
|
||||
have[CV_CPU_NEON] = true;
|
||||
have[CV_CPU_FP16] = true;
|
||||
int cpufile = open("/proc/self/auxv", O_RDONLY);
|
||||
|
||||
if (cpufile >= 0)
|
||||
{
|
||||
Elf64_auxv_t auxv;
|
||||
const size_t size_auxv_t = sizeof(auxv);
|
||||
|
||||
while ((size_t)read(cpufile, &auxv, size_auxv_t) == size_auxv_t)
|
||||
{
|
||||
if (auxv.a_type == AT_HWCAP)
|
||||
{
|
||||
have[CV_CPU_NEON_DOTPROD] = (auxv.a_un.a_val & (1 << 20)) != 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
close(cpufile);
|
||||
}
|
||||
#elif defined __arm__ && defined __ANDROID__
|
||||
#if defined HAVE_CPUFEATURES
|
||||
CV_LOG_INFO(NULL, "calling android_getCpuFeatures() ...");
|
||||
@@ -604,13 +626,20 @@ struct HWFeatures
|
||||
close(cpufile);
|
||||
}
|
||||
#endif
|
||||
#elif (defined __clang__ || defined __APPLE__)
|
||||
#elif (defined __APPLE__)
|
||||
#if (defined __ARM_NEON__ || (defined __ARM_NEON && defined __aarch64__))
|
||||
have[CV_CPU_NEON] = true;
|
||||
#endif
|
||||
#if (defined __ARM_FP && (((__ARM_FP & 0x2) != 0) && defined __ARM_NEON__))
|
||||
have[CV_CPU_FP16] = true;
|
||||
#endif
|
||||
#elif (defined __clang__)
|
||||
#if (defined __ARM_NEON__ || (defined __ARM_NEON && defined __aarch64__))
|
||||
have[CV_CPU_NEON] = true;
|
||||
#if (defined __ARM_FP && ((__ARM_FP & 0x2) != 0))
|
||||
have[CV_CPU_FP16] = true;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#if defined _ARM_ && (defined(_WIN32_WCE) && _WIN32_WCE >= 0x800)
|
||||
have[CV_CPU_NEON] = true;
|
||||
@@ -846,7 +875,10 @@ bool useOptimized(void)
|
||||
|
||||
int64 getTickCount(void)
|
||||
{
|
||||
#if defined _WIN32 || defined WINCE
|
||||
#if defined CV_CXX11
|
||||
std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now();
|
||||
return (int64)now.time_since_epoch().count();
|
||||
#elif defined _WIN32 || defined WINCE
|
||||
LARGE_INTEGER counter;
|
||||
QueryPerformanceCounter( &counter );
|
||||
return (int64)counter.QuadPart;
|
||||
@@ -865,7 +897,11 @@ int64 getTickCount(void)
|
||||
|
||||
double getTickFrequency(void)
|
||||
{
|
||||
#if defined _WIN32 || defined WINCE
|
||||
#if defined CV_CXX11
|
||||
using clock_period_t = std::chrono::steady_clock::duration::period;
|
||||
double clock_freq = clock_period_t::den / clock_period_t::num;
|
||||
return clock_freq;
|
||||
#elif defined _WIN32 || defined WINCE
|
||||
LARGE_INTEGER freq;
|
||||
QueryPerformanceFrequency(&freq);
|
||||
return (double)freq.QuadPart;
|
||||
@@ -1326,7 +1362,7 @@ CV_IMPL const char* cvErrorStr( int status )
|
||||
case CV_OpenGlApiCallError : return "OpenGL API call";
|
||||
};
|
||||
|
||||
sprintf(buf, "Unknown %s code %d", status >= 0 ? "status":"error", status);
|
||||
snprintf(buf, sizeof(buf), "Unknown %s code %d", status >= 0 ? "status":"error", status);
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
@@ -988,7 +988,6 @@ void parallelForFinalize(const Region& rootRegion)
|
||||
std::vector<TraceManagerThreadLocal*> threads_ctx;
|
||||
getTraceManager().tls.gather(threads_ctx);
|
||||
RegionStatistics parallel_for_stat;
|
||||
int threads = 0;
|
||||
for (size_t i = 0; i < threads_ctx.size(); i++)
|
||||
{
|
||||
TraceManagerThreadLocal* child_ctx = threads_ctx[i];
|
||||
@@ -996,7 +995,6 @@ void parallelForFinalize(const Region& rootRegion)
|
||||
if (child_ctx && child_ctx->stackTopRegion() == &rootRegion)
|
||||
{
|
||||
CV_LOG_PARALLEL(NULL, "Thread=" << child_ctx->threadID << " " << child_ctx->stat);
|
||||
threads++;
|
||||
RegionStatistics child_stat;
|
||||
child_ctx->stat.grab(child_stat);
|
||||
parallel_for_stat.append(child_stat);
|
||||
@@ -1012,6 +1010,7 @@ void parallelForFinalize(const Region& rootRegion)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float parallel_coeff = std::min(1.0f, duration / (float)(parallel_for_stat.duration));
|
||||
CV_LOG_PARALLEL(NULL, "parallel_coeff=" << 1.0f / parallel_coeff);
|
||||
CV_LOG_PARALLEL(NULL, parallel_for_stat);
|
||||
|
||||
@@ -56,7 +56,7 @@ void* DynamicLib::getSymbol(const char* symbolName) const
|
||||
return res;
|
||||
}
|
||||
|
||||
const std::string DynamicLib::getName() const
|
||||
std::string DynamicLib::getName() const
|
||||
{
|
||||
return toPrintablePath(fname);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user