diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-01-15 19:36:50 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-01-15 19:36:50 +0000 |
| commit | 726fd5077f211d047b6bfb906276f5de2b3dcf0b (patch) | |
| tree | 82658fe826d79b177905f7a2291ff96a6b67f0e9 | |
| parent | ce4ebc27744e529c6b790c4fe790ce85c9349da3 (diff) | |
| download | qmmp-726fd5077f211d047b6bfb906276f5de2b3dcf0b.tar.gz qmmp-726fd5077f211d047b6bfb906276f5de2b3dcf0b.tar.bz2 qmmp-726fd5077f211d047b6bfb906276f5de2b3dcf0b.zip | |
added function Visual::clearQueue();
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@6982 90c681e8-e032-0410-971d-27865f9a5e38
| -rw-r--r-- | src/qmmp/outputwriter.cpp | 2 | ||||
| -rw-r--r-- | src/qmmp/visual.cpp | 11 | ||||
| -rw-r--r-- | src/qmmp/visual.h | 1 | ||||
| -rw-r--r-- | src/qmmp/visualbuffer.cpp | 17 | ||||
| -rw-r--r-- | src/qmmp/visualbuffer_p.h | 1 |
5 files changed, 28 insertions, 4 deletions
diff --git a/src/qmmp/outputwriter.cpp b/src/qmmp/outputwriter.cpp index 523462511..c5a9c92f5 100644 --- a/src/qmmp/outputwriter.cpp +++ b/src/qmmp/outputwriter.cpp @@ -201,6 +201,7 @@ void OutputWriter::dispatchVisual (Buffer *buffer) void OutputWriter::clearVisuals() { + Visual::clearQueue(); foreach (Visual *visual, *Visual::visuals()) { visual->mutex()->lock (); @@ -287,6 +288,7 @@ void OutputWriter::run() { if(m_pause) { + Visual::clearQueue(); m_output->suspend(); mutex()->unlock(); m_prev_pause = m_pause; diff --git a/src/qmmp/visual.cpp b/src/qmmp/visual.cpp index 17c54f8e2..a45f0a267 100644 --- a/src/qmmp/visual.cpp +++ b/src/qmmp/visual.cpp @@ -75,8 +75,8 @@ void Visual::takeData(float *left, float *right) { m_buffer.mutex()->lock(); VisualNode *node = m_buffer.take(); - memcpy(left, node->data[0], 512); - memcpy(right, node->data[1], 512); + memcpy(left, node->data[0], 512 * sizeof(float)); + memcpy(right, node->data[1], 512 * sizeof(float)); m_buffer.mutex()->unlock(); } @@ -217,6 +217,13 @@ void Visual::addData(float *pcm, int samples, int channels, qint64 ts, qint64 de m_buffer.mutex()->unlock(); } +void Visual::clearQueue() +{ + m_buffer.mutex()->lock(); + m_buffer.clear(); + m_buffer.mutex()->unlock(); +} + void Visual::checkFactories() { if (!m_factories) diff --git a/src/qmmp/visual.h b/src/qmmp/visual.h index 9f3b99b07..a9e03efa7 100644 --- a/src/qmmp/visual.h +++ b/src/qmmp/visual.h @@ -114,6 +114,7 @@ public: static void addData(float *pcm, int samples, int channels, qint64 ts, qint64 delay); + static void clearQueue(); signals: /*! diff --git a/src/qmmp/visualbuffer.cpp b/src/qmmp/visualbuffer.cpp index 6feb266d2..91403ff47 100644 --- a/src/qmmp/visualbuffer.cpp +++ b/src/qmmp/visualbuffer.cpp @@ -68,8 +68,8 @@ void VisualBuffer::add(float *pcm, int samples, int channels, qint64 ts, qint64 VisualNode *VisualBuffer::take() { int steps = 0; - int t = m_elapsed + m_time.elapsed(); - while(!m_buffer[consumer_pos].ts || ((m_buffer[consumer_pos].ts < t) && (steps++ < VISUAL_BUFFER_SIZE))) + int t = m_elapsed/* + m_time.elapsed()*/; + while((m_buffer[consumer_pos].ts < t) && (steps++ < VISUAL_BUFFER_SIZE)) { consumer_pos++; if(consumer_pos == VISUAL_BUFFER_SIZE) @@ -80,6 +80,19 @@ VisualNode *VisualBuffer::take() return &m_buffer[consumer_pos]; } +void VisualBuffer::clear() +{ + consumer_pos = 0; + insertion_pos = 0; + for(int i = 0; i < VISUAL_BUFFER_SIZE; ++i) + { + m_buffer[i].ts = 0; + m_buffer[i].used = false; + memset(m_buffer[i].data[0], 0, 512 * sizeof(float)); + memset(m_buffer[i].data[1], 0, 512 * sizeof(float)); + } +} + QMutex *VisualBuffer::mutex() { return &m_mutex; diff --git a/src/qmmp/visualbuffer_p.h b/src/qmmp/visualbuffer_p.h index 73eb66ba9..3f9a87269 100644 --- a/src/qmmp/visualbuffer_p.h +++ b/src/qmmp/visualbuffer_p.h @@ -48,6 +48,7 @@ public: void add(float *pcm, int samples, int channels, qint64 ts, qint64 delay); VisualNode *take(); + void clear(); QMutex *mutex(); private: |
