aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/qmmp/qmmpaudioengine.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/qmmp/qmmpaudioengine.cpp b/src/qmmp/qmmpaudioengine.cpp
index 62612b990..9e41954a9 100644
--- a/src/qmmp/qmmpaudioengine.cpp
+++ b/src/qmmp/qmmpaudioengine.cpp
@@ -525,15 +525,31 @@ void QmmpAudioEngine::sendMetaData()
OutputWriter *QmmpAudioEngine::createOutput()
{
OutputWriter *output = new OutputWriter(this);
- if (!output->initialize(m_ap.sampleRate(), m_ap.channels(), m_ap.format()) ||
- output->audioParameters() != m_ap) //TODO add soundconverter
+ if (!output->initialize(m_ap.sampleRate(), m_ap.channels(), m_ap.format()))
{
qWarning("QmmpAudioEngine: unable to initialize output");
delete output;
- output = 0;
StateHandler::instance()->dispatch(Qmmp::FatalError);
return 0;
}
+ if(output->audioParameters() != m_ap)
+ {
+ if(output->audioParameters().format() == Qmmp::PCM_S16LE) //output supports 16 bit only
+ {
+ Effect *effect = new AudioConverter();
+ effect->configure(m_ap.sampleRate(), m_ap.channels(), m_ap.format());
+ m_ap = effect->audioParameters();
+ qDebug("QmmpAudioEngine: output plugin requires 16 bit, using 16-bit converter");
+ }
+ else
+ {
+ qWarning("QmmpAudioEngine: unsupported audio format");
+ delete output;
+ StateHandler::instance()->dispatch(Qmmp::FatalError);
+ return 0;
+ }
+ }
+
if(m_output_buf)
delete [] m_output_buf;
m_bks = QMMP_BLOCK_FRAMES * m_ap.channels() * m_ap.sampleSize();