diff options
| -rw-r--r-- | src/qmmp/qmmpaudioengine.cpp | 22 |
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(); |
