summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaszlo Papp <lpapp@kde.org>2011-12-07 03:58:45 +0200
committerLaszlo Papp <ext-laszlo.papp@nokia.com>2011-12-07 03:58:45 +0200
commitd14291938f72c2269a8d00bc5ddddf477eb4f00a (patch)
tree03fc114a058427c9380bf8e2a6041a337d40176c
parent28875ef07c93710878f1a70fe408ec24b240a046 (diff)
Use QMutexLocker, static reference counter and isValid members properly
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/decoders/qalmpg123audiodecoder.cpp19
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)
{