mirror of
https://github.com/opencv/opencv.git
synced 2026-07-31 00:03:03 +04:00
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
This commit is contained in:
@@ -714,24 +714,24 @@ public:
|
||||
//! the default constructor
|
||||
CV_WRAP KeyPoint();
|
||||
/**
|
||||
@param _pt x & y coordinates of the keypoint
|
||||
@param _size keypoint diameter
|
||||
@param _angle keypoint orientation
|
||||
@param _response keypoint detector response on the keypoint (that is, strength of the keypoint)
|
||||
@param _octave pyramid octave in which the keypoint has been detected
|
||||
@param _class_id object id
|
||||
@param pt x & y coordinates of the keypoint
|
||||
@param size keypoint diameter
|
||||
@param angle keypoint orientation
|
||||
@param response keypoint detector response on the keypoint (that is, strength of the keypoint)
|
||||
@param octave pyramid octave in which the keypoint has been detected
|
||||
@param class_id object id
|
||||
*/
|
||||
KeyPoint(Point2f _pt, float _size, float _angle=-1, float _response=0, int _octave=0, int _class_id=-1);
|
||||
KeyPoint(Point2f pt, float size, float angle=-1, float response=0, int octave=0, int class_id=-1);
|
||||
/**
|
||||
@param x x-coordinate of the keypoint
|
||||
@param y y-coordinate of the keypoint
|
||||
@param _size keypoint diameter
|
||||
@param _angle keypoint orientation
|
||||
@param _response keypoint detector response on the keypoint (that is, strength of the keypoint)
|
||||
@param _octave pyramid octave in which the keypoint has been detected
|
||||
@param _class_id object id
|
||||
@param size keypoint diameter
|
||||
@param angle keypoint orientation
|
||||
@param response keypoint detector response on the keypoint (that is, strength of the keypoint)
|
||||
@param octave pyramid octave in which the keypoint has been detected
|
||||
@param class_id object id
|
||||
*/
|
||||
CV_WRAP KeyPoint(float x, float y, float _size, float _angle=-1, float _response=0, int _octave=0, int _class_id=-1);
|
||||
CV_WRAP KeyPoint(float x, float y, float size, float angle=-1, float response=0, int octave=0, int class_id=-1);
|
||||
|
||||
size_t hash() const;
|
||||
|
||||
|
||||
@@ -375,6 +375,8 @@ cv::Mutex& getInitializationMutex();
|
||||
#define CV_SINGLETON_LAZY_INIT(TYPE, INITIALIZER) CV_SINGLETON_LAZY_INIT_(TYPE, INITIALIZER, instance)
|
||||
#define CV_SINGLETON_LAZY_INIT_REF(TYPE, INITIALIZER) CV_SINGLETON_LAZY_INIT_(TYPE, INITIALIZER, *instance)
|
||||
|
||||
CV_EXPORTS void releaseTlsStorageThread();
|
||||
|
||||
int cv_snprintf(char* buf, int len, const char* fmt, ...);
|
||||
int cv_vsnprintf(char* buf, int len, const char* fmt, va_list args);
|
||||
}
|
||||
|
||||
@@ -1520,6 +1520,9 @@ struct ThreadData
|
||||
size_t idx; // Thread index in TLS storage. This is not OS thread ID!
|
||||
};
|
||||
|
||||
|
||||
static bool g_isTlsStorageInitialized = false;
|
||||
|
||||
// Main TLS storage class
|
||||
class TlsStorage
|
||||
{
|
||||
@@ -1529,6 +1532,7 @@ public:
|
||||
{
|
||||
tlsSlots.reserve(32);
|
||||
threads.reserve(32);
|
||||
g_isTlsStorageInitialized = true;
|
||||
}
|
||||
~TlsStorage()
|
||||
{
|
||||
@@ -1747,6 +1751,13 @@ static void WINAPI opencv_fls_destructor(void* pData)
|
||||
} // namespace details
|
||||
using namespace details;
|
||||
|
||||
void releaseTlsStorageThread()
|
||||
{
|
||||
if (!g_isTlsStorageInitialized)
|
||||
return; // nothing to release, so prefer to avoid creation of new global structures
|
||||
getTlsStorage().releaseThread();
|
||||
}
|
||||
|
||||
TLSDataContainer::TLSDataContainer()
|
||||
{
|
||||
key_ = (int)getTlsStorage().reserveSlot(this); // Reserve key from TLS storage
|
||||
@@ -1830,7 +1841,7 @@ BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID lpReserved)
|
||||
{
|
||||
// Not allowed to free resources if lpReserved is non-null
|
||||
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx
|
||||
cv::getTlsStorage().releaseThread();
|
||||
releaseTlsStorageThread();
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
Reference in New Issue
Block a user