diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-04-04 10:39:13 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-04-04 10:39:13 +0000 |
| commit | c685eb34a9657ab6788c8e785936b0bfe0bc7cfc (patch) | |
| tree | 646cea5b81bee187b83b487a9c33bfcd714d474b /src/plugins | |
| parent | 2f05ffcee8b6fee8c0a18adc9137fa7b45d7f658 (diff) | |
| download | qmmp-c685eb34a9657ab6788c8e785936b0bfe0bc7cfc.tar.gz qmmp-c685eb34a9657ab6788c8e785936b0bfe0bc7cfc.tar.bz2 qmmp-c685eb34a9657ab6788c8e785936b0bfe0bc7cfc.zip | |
alsa plugin: added hard restart
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@890 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/Output/alsa/outputalsa.cpp | 10 | ||||
| -rw-r--r-- | src/plugins/Output/alsa/outputalsa.h | 1 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/plugins/Output/alsa/outputalsa.cpp b/src/plugins/Output/alsa/outputalsa.cpp index 6ed462e16..da361c0bd 100644 --- a/src/plugins/Output/alsa/outputalsa.cpp +++ b/src/plugins/Output/alsa/outputalsa.cpp @@ -49,6 +49,7 @@ OutputALSA::OutputALSA(QObject * parent) m_prebuf_size = 0; m_prebuf_fill = 0; m_pause = FALSE; + m_can_pause = FALSE; } OutputALSA::~OutputALSA() @@ -182,7 +183,8 @@ void OutputALSA::configure(quint32 freq, int chan, int prec) //setup needed values m_bits_per_frame = snd_pcm_format_physical_width(format) * chan; m_chunk_size = period_size; - //} + m_can_pause = snd_pcm_hw_params_can_pause(hwparams); + qDebug("OutputALSA: can pause: %d", m_can_pause); Output::configure(freq, chan, prec); //apply configuration //create alsa prebuffer; m_prebuf_size = Buffer::size() + m_bits_per_frame * m_chunk_size / 8; @@ -229,7 +231,9 @@ qint64 OutputALSA::latency() void OutputALSA::pause() { m_pause = !m_pause; - if (m_pause && pcm_handle) + if (m_can_pause) + snd_pcm_pause(pcm_handle, m_pause); + else if (m_pause && pcm_handle) { snd_pcm_drop(pcm_handle); snd_pcm_prepare(pcm_handle); @@ -345,7 +349,7 @@ long OutputALSA::alsa_write(unsigned char *data, long size) return 0; } qDebug ("OutputALSA: error: %s", snd_strerror(m)); - return -1; + return snd_pcm_prepare (pcm_handle); } void OutputALSA::uninitialize() diff --git a/src/plugins/Output/alsa/outputalsa.h b/src/plugins/Output/alsa/outputalsa.h index 9b8118dda..b3dc92a68 100644 --- a/src/plugins/Output/alsa/outputalsa.h +++ b/src/plugins/Output/alsa/outputalsa.h @@ -68,6 +68,7 @@ private: qint64 m_prebuf_size; qint64 m_prebuf_fill; bool m_pause; + bool m_can_pause; }; class VolumeControlALSA : public VolumeControl |
