diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2010-01-20 23:03:05 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2010-01-20 23:03:05 +0000 |
| commit | dbcf03bb3946253d0156834cc8e49c0575c8fcc5 (patch) | |
| tree | 2ccda5534f1c982842d468e846043888d7c15264 /src | |
| parent | c05c3679e4fad5034a53ce2b7cfde8ad932faa59 (diff) | |
| download | qmmp-dbcf03bb3946253d0156834cc8e49c0575c8fcc5.tar.gz qmmp-dbcf03bb3946253d0156834cc8e49c0575c8fcc5.tar.bz2 qmmp-dbcf03bb3946253d0156834cc8e49c0575c8fcc5.zip | |
fixed visualization
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1519 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/ui/inlines.h | 85 | ||||
| -rw-r--r-- | src/ui/mainvisual.cpp | 47 | ||||
| -rw-r--r-- | src/ui/mainvisual.h | 2 |
3 files changed, 35 insertions, 99 deletions
diff --git a/src/ui/inlines.h b/src/ui/inlines.h index d8dbc966d..e2c48d019 100644 --- a/src/ui/inlines.h +++ b/src/ui/inlines.h @@ -47,49 +47,27 @@ calc_mono_freq(short dest[2][256], short src[2][512], int nch) } } -static inline void stereo16_from_stereopcm8(register short *l, - register short *r, - register uchar *c, - long cnt) +static inline void stereo16_from_multichannel(register short *l, + register short *r, + register short *s, + long cnt, int chan) { - while (cnt >= 4l) + while (cnt > 0) { - l[0] = c[0]; - r[0] = c[1]; - l[1] = c[2]; - r[1] = c[3]; - l[2] = c[4]; - r[2] = c[5]; - l[3] = c[6]; - r[3] = c[7]; - l += 4; - r += 4; - c += 8; - cnt -= 4l; - } - - if (cnt > 0l) - { - l[0] = c[0]; - r[0] = c[1]; - if (cnt > 1l) - { - l[1] = c[2]; - r[1] = c[3]; - if (cnt > 2l) - { - l[2] = c[4]; - r[2] = c[5]; - } - } + l[0] = s[0]; + r[0] = s[1]; + s += chan; + l++; + r++; + cnt--; } } static inline void stereo16_from_stereopcm16(register short *l, - register short *r, - register short *s, - long cnt) + register short *r, + register short *s, + long cnt) { while (cnt >= 4l) { @@ -124,40 +102,9 @@ static inline void stereo16_from_stereopcm16(register short *l, } } - -static inline void mono16_from_monopcm8(register short *l, - register uchar *c, - long cnt) -{ - while (cnt >= 4l) - { - l[0] = c[0]; - l[1] = c[1]; - l[2] = c[2]; - l[3] = c[3]; - l += 4; - c += 4; - cnt -= 4l; - } - - if (cnt > 0l) - { - l[0] = c[0]; - if (cnt > 1l) - { - l[1] = c[1]; - if (cnt > 2l) - { - l[2] = c[2]; - } - } - } -} - - static inline void mono16_from_monopcm16(register short *l, - register short *s, - long cnt) + register short *s, + long cnt) { while (cnt >= 4l) { diff --git a/src/ui/mainvisual.cpp b/src/ui/mainvisual.cpp index ada7291df..185107e7a 100644 --- a/src/ui/mainvisual.cpp +++ b/src/ui/mainvisual.cpp @@ -52,7 +52,6 @@ MainVisual::MainVisual (QWidget *parent) m_nodes.clear(); createMenu(); readSettings(); - m_buf_at = 0; m_instance = this; } @@ -102,36 +101,28 @@ void MainVisual::add (unsigned char *data, qint64 size, int chan) { if (!m_timer->isActive () || !m_vis) return; - long len = size, cnt; - short *l = 0, *r = 0; - - memcpy(m_buf + m_buf_at, data, qMin(qint64(2048 - m_buf_at), size)); - m_buf_at += qMin(qint64(2048 - m_buf_at), size); - if(m_buf_at < 2048) - return; - len = m_buf_at; - len /= chan; - len /= 2; - if (len > 512) - len = 512; - cnt = len; - - if (chan >= 2) - { - l = new short[len]; - r = new short[len]; - stereo16_from_stereopcm16 (l, r, (short *) m_buf, cnt); - } - else if (chan == 1) + short *l = 0, *r = 0; + qint64 samples = size/chan >> 1; + int frames = samples/512; + for (int i = 0; i < frames; ++i) { - l = new short[len]; - mono16_from_monopcm16 (l, (short *) m_buf, cnt); + l = new short[512]; + r = 0; + if (chan == 2) + { + r = new short[512]; + stereo16_from_stereopcm16 (l, r, (short *) (data + i*4*512), 512); + } + else if (chan == 1) + mono16_from_monopcm16 (l, (short *) (data + i*2*512), 512); + else + { + r = new short[512]; + stereo16_from_multichannel(l, r, (short *) (data + i*2*chan*512), 512, chan); + } + m_nodes.append (new VisualNode (l, r, 512)); } - else - len = 0; - m_buf_at = 0; - m_nodes.append (new VisualNode (l, r, len)); } void MainVisual::timeout() diff --git a/src/ui/mainvisual.h b/src/ui/mainvisual.h index 30fcd67ab..dbd3cd9c0 100644 --- a/src/ui/mainvisual.h +++ b/src/ui/mainvisual.h @@ -111,8 +111,6 @@ private: QActionGroup *m_analyzerTypeGroup; QAction *m_peaksAction; QAction *m_transparentAction; - unsigned char m_buf[2048]; - int m_buf_at; int m_ratio; }; |
