static MDynamicAudioNormalizer *instance_add(MDynamicAudioNormalizer *const instance) { MY_CRITSEC_ENTER(g_instance_mutex); g_instances.insert(instance); MY_CRITSEC_LEAVE(g_instance_mutex); return instance; }
static bool instance_check(MDynamicAudioNormalizer *const instance) { bool result; MY_CRITSEC_ENTER(g_instance_mutex); result = (g_instances.find(instance) != g_instances.end()); MY_CRITSEC_LEAVE(g_instance_mutex); return result; }
DYNAUDNORM_LOG_CALLBACK *DYNAUDNORM_LOG_SETCALLBACK(DYNAUDNORM_LOG_CALLBACK *const callback) { MY_CRITSEC_ENTER(g_mutex); DYNAUDNORM_LOG_CALLBACK *const oldCallback = g_loggingCallback; g_loggingCallback = callback; MY_CRITSEC_LEAVE(g_mutex); return oldCallback; }
static MDynamicAudioNormalizer *instance_remove(MDynamicAudioNormalizer *const instance) { MY_CRITSEC_ENTER(g_instance_mutex); const std::unordered_set<MDynamicAudioNormalizer*>::iterator iter = g_instances.find(instance); if (iter != g_instances.end()) { g_instances.erase(iter); } MY_CRITSEC_LEAVE(g_instance_mutex); return instance; }
static bool global_exit(void) { bool success = false; MY_CRITSEC_ENTER(g_initalization_mutex); if (g_initialized) { success = (--g_initialized) ? true : global_exit_function(); } MY_CRITSEC_LEAVE(g_initalization_mutex); return success; }
static bool global_init(void) { bool success = false; MY_CRITSEC_ENTER(g_initalization_mutex); if ((success = (g_initialized ? true : global_init_function()))) { g_initialized++; } MY_CRITSEC_LEAVE(g_initalization_mutex); return success; }
static int log_callback_set(PyObject *const callback) { int result = (-1); if ((callback) && PyCallable_Check(callback)) { MY_CRITSEC_ENTER(g_logging_mutex); result = (g_log_callback) ? 0 : 1; PY_FREE(&g_log_callback); g_log_callback = callback; Py_INCREF(g_log_callback); MY_CRITSEC_LEAVE(g_logging_mutex); } return result; }
void DYNAUDNORM_LOG_POSTMESSAGE(const int &logLevel, const char *const message, ...) { MY_CRITSEC_ENTER(g_mutex); if(g_loggingCallback) { va_list args; va_start (args, message); vsnprintf(g_messageBuffer, 1024, message, args); va_end(args); g_loggingCallback(logLevel, g_messageBuffer); } MY_CRITSEC_LEAVE(g_mutex); }
static void log_callback_invoke(const int logLevel, const char *const message) { PyObject *callback; MY_CRITSEC_ENTER(g_logging_mutex); callback = g_log_callback; MY_CRITSEC_LEAVE(g_logging_mutex); if (callback) { if (PyObject *const result = PyObject_CallFunction(callback, "is", logLevel, message)) { Py_DECREF(result); /*discard result*/ } } }