Skip to content

Commit 0a0f920

Browse files
committed
Lazy static init the OCR pool.
1 parent 9ef5d0a commit 0a0f920

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

SerialPrograms/Source/CommonTools/OCR/OCR_RawOCR.cpp

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,16 @@ class TesseractPool{
155155
std::vector<TesseractAPI*> m_idle;
156156
};
157157

158-
SpinLock ocr_pool_lock;
159-
std::map<Language, TesseractPool> ocr_pool;
158+
struct OcrGlobals{
159+
SpinLock ocr_pool_lock;
160+
std::map<Language, TesseractPool> ocr_pool;
161+
162+
static OcrGlobals& instance(){
163+
static OcrGlobals globals;
164+
return globals;
165+
}
166+
};
167+
160168

161169

162170
std::string ocr_read(Language language, const ImageViewRGB32& image){
@@ -167,9 +175,12 @@ std::string ocr_read(Language language, const ImageViewRGB32& image){
167175
throw InternalProgramError(nullptr, PA_CURRENT_FUNCTION, "Attempted to call OCR without a language.");
168176
}
169177

178+
OcrGlobals& globals = OcrGlobals::instance();
179+
std::map<Language, TesseractPool>& ocr_pool = globals.ocr_pool;
180+
170181
std::map<Language, TesseractPool>::iterator iter;
171182
{
172-
WriteSpinLock lg(ocr_pool_lock, "ocr_read()");
183+
WriteSpinLock lg(globals.ocr_pool_lock, "ocr_read()");
173184
iter = ocr_pool.find(language);
174185
if (iter == ocr_pool.end()){
175186
iter = ocr_pool.emplace(language, language).first;
@@ -182,9 +193,12 @@ void ensure_instances(Language language, size_t instances){
182193
throw InternalProgramError(nullptr, PA_CURRENT_FUNCTION, "Attempted to call OCR without a language.");
183194
}
184195

196+
OcrGlobals& globals = OcrGlobals::instance();
197+
std::map<Language, TesseractPool>& ocr_pool = globals.ocr_pool;
198+
185199
std::map<Language, TesseractPool>::iterator iter;
186200
{
187-
WriteSpinLock lg(ocr_pool_lock, "ocr_read()");
201+
WriteSpinLock lg(globals.ocr_pool_lock, "ocr_read()");
188202
iter = ocr_pool.find(language);
189203
if (iter == ocr_pool.end()){
190204
iter = ocr_pool.emplace(language, language).first;

0 commit comments

Comments
 (0)