diff options
author | Laszlo Papp <lpapp@kde.org> | 2011-12-07 03:58:45 +0200 |
---|---|---|
committer | Laszlo Papp <ext-laszlo.papp@nokia.com> | 2011-12-07 03:58:45 +0200 |
commit | d14291938f72c2269a8d00bc5ddddf477eb4f00a (patch) | |
tree | 03fc114a058427c9380bf8e2a6041a337d40176c | |
parent | 28875ef07c93710878f1a70fe408ec24b240a046 (diff) |
Use QMutexLocker, static reference counter and isValid members properly
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/decoders/qalmpg123audiodecoder.cpp | 19 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5ac02cc..45068e1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -51,6 +51,7 @@ set(QtOpenAL_SRCS qalcontext.cpp qalsource.cpp + decoders/qalmpg123audiodecoder.cpp decoders/qalsndfileaudiodecoder.cpp decoders/qalvorbisfileaudiodecoder.cpp ) @@ -64,6 +65,7 @@ set(QtOpenAL_HEADERS qalsource.h ${CMAKE_CURRENT_BINARY_DIR}/qtopenal_global.h + decoders/qalmpg123audiodecoder.h decoders/qalsndfileaudiodecoder.h decoders/qalvorbisfileaudiodecoder.h ) diff --git a/src/decoders/qalmpg123audiodecoder.cpp b/src/decoders/qalmpg123audiodecoder.cpp index a2ec57b..85e3d5e 100644 --- a/src/decoders/qalmpg123audiodecoder.cpp +++ b/src/decoders/qalmpg123audiodecoder.cpp @@ -23,18 +23,20 @@ #include <QtCore/QString> #include <QtCore/QUrl> #include <QtCore/QDebug> +#include <QtCore/QMutexLocker> class QALMpg123AudioDecoder::Private { public: Private() - : referenceCounter(0) - , mpg123Handle(0) + : mpg123Handle(0) { - referenceCounter.ref(); - if (int(referenceCounter) == 1) { + QMutexLocker mutexLocker; + if (++referenceCounter == 1) { int error; if ((error = mpg123_init()) == MPG123_OK) { + isValid = true; + } else { qWarning() << Q_FUNC_INFO << "Failed to initialize the mpg123 library:" << error; } } @@ -42,7 +44,8 @@ class QALMpg123AudioDecoder::Private ~Private() { - if (referenceCounter.deref() == false) { + QMutexLocker mutexLocker; + if (--referenceCounter == 0) { mpg123_exit(); } } @@ -52,7 +55,8 @@ class QALMpg123AudioDecoder::Private static sf_count_t readCallback(void *ptr, sf_count_t count, void *user_data); static sf_count_t tellCallback(void *user_data); - QAtomicInt referenceCounter; + static int referenceCounter; + static bool isValid; QFile file; @@ -62,6 +66,9 @@ class QALMpg123AudioDecoder::Private SF_INFO sfInfo; }; +bool QALMpg123AudioDecoder::Private::referenceCounter = 0; +bool QALMpg123AudioDecoder::Private::isValid = false; + sf_count_t QALMpg123AudioDecoder::Private::fileLengthCallback(void *user_data) { |