aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General/rgscan/rgscaner.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-10-10 11:34:03 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-10-10 11:34:03 +0000
commit188288cea6960dc7153136eb11217ef8382452b5 (patch)
tree07e5bd6219d33817b4c812d547ce80950f3c30c2 /src/plugins/General/rgscan/rgscaner.cpp
parent32dc2e325f765da1292d255cb937c3ad02ae0774 (diff)
downloadqmmp-188288cea6960dc7153136eb11217ef8382452b5.tar.gz
qmmp-188288cea6960dc7153136eb11217ef8382452b5.tar.bz2
qmmp-188288cea6960dc7153136eb11217ef8382452b5.zip
rgscan: fixed class name
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3771 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/General/rgscan/rgscaner.cpp')
-rw-r--r--src/plugins/General/rgscan/rgscaner.cpp314
1 files changed, 0 insertions, 314 deletions
diff --git a/src/plugins/General/rgscan/rgscaner.cpp b/src/plugins/General/rgscan/rgscaner.cpp
deleted file mode 100644
index 203a2a7ab..000000000
--- a/src/plugins/General/rgscan/rgscaner.cpp
+++ /dev/null
@@ -1,314 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2013 by Ilya Kotov *
- * forkotov02@hotmail.ru *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-
-#include <QStringList>
-#include <math.h>
-#include <qmmp/inputsourcefactory.h>
-#include <qmmp/decoderfactory.h>
-#include "rgscaner.h"
-
-RGScaner::RGScaner()
-{
- m_gain = 0.;
- m_peak = 0.;
- m_user_stop = false;
- m_is_running = false;
- m_has_values = false;
- m_handle = 0;
- m_decoder = 0;
- m_source = 0;
-}
-
-RGScaner::~RGScaner()
-{
- stop();
- deinit();
- if(m_handle)
- {
- DeinitGainAbalysis(m_handle);
- m_handle = 0;
- }
-}
-
-bool RGScaner::prepare(const QString &url)
-{
- deinit();
- m_url = url;
- QString name = m_url.section("/", -1);
- InputSource *source = InputSource::create(url, 0);
- if(!source->initialize())
- {
- delete source;
- qWarning("RGScaner: Invalid url");
- return false;
- }
-
- if(source->ioDevice() && !source->ioDevice()->open(QIODevice::ReadOnly))
- {
- delete source;
- qWarning("RGScaner: [%s] unable to open input stream, error: %s",
- qPrintable(name),
- qPrintable(source->ioDevice()->errorString()));
- return false;
- }
-
- DecoderFactory *factory = Decoder::findByPath(source->url());
-
- if(!factory)
- {
- qWarning("RGScaner: [%s] unable to find factory", qPrintable(name));
- delete source;
- return false;
- }
- qDebug("RGScaner: [%s] selected decoder: %s",
- qPrintable(factory->properties().shortName), qPrintable(name));
-
- if(factory->properties().noInput && source->ioDevice())
- source->ioDevice()->close();
-
- Decoder *decoder = factory->create(source->url(), source->ioDevice());
- if(!decoder->initialize())
- {
- qWarning("RGScaner: [%s] invalid file format", qPrintable(name));
- delete source;
- delete decoder;
- return false;
- }
- m_decoder = decoder;
- m_source = source;
- m_user_stop = false;
- m_has_values = false;
- return true;
-}
-
-void RGScaner::stop()
-{
- m_mutex.lock();
- m_user_stop = true;
- m_mutex.unlock();
-}
-
-bool RGScaner::isRunning()
-{
- return m_is_running;
-}
-
-bool RGScaner::hasValues() const
-{
- return m_has_values;
-}
-
-double RGScaner::gain() const
-{
- return m_gain;
-}
-
-double RGScaner::peak() const
-{
- return m_peak;
-}
-
-QString RGScaner::url() const
-{
- return m_url;
-}
-
-GainHandle_t *RGScaner::handle()
-{
- return m_handle;
-}
-
-void RGScaner::run()
-{
- if(m_user_stop)
- return;
- QString name = m_url.section("/", -1);
- qDebug("RGScaner: [%s] staring thread", qPrintable(name));
- m_is_running = true;
- bool error = false;
-
- AudioParameters ap = m_decoder->audioParameters();
- Qmmp::AudioFormat format = ap.format();
- bool headroom = m_decoder->hasHeadroom();
- const int buf_size = 8192; //samples
- double out_left[buf_size], out_right[buf_size]; //replay gain buffers
- float float_buf[buf_size]; //float buffer
- char char_buf[buf_size*ap.sampleSize()]; //char buffer
- qint64 totalSamples = m_decoder->totalTime() * ap.sampleRate() * ap.channels() / 1000;
- qint64 sample_counter = 0;
- qint64 samples = 0;
- double max = 0;
-
- if(m_handle)
- DeinitGainAbalysis(m_handle);
- InitGainAnalysis(&m_handle, ap.sampleRate());
-
- forever
- {
- if(headroom)
- {
- samples = m_decoder->read(float_buf, buf_size);
-
- if(samples < 0)
- {
- error = true;
- break;
- }
- else if(samples == 0)
- break;
-
- if(ap.channels() == 2)
- {
- for(int i = 0; i < (samples >> 1); ++i)
- {
- out_left[i] = float_buf[i*2]*32768.0;
- out_right[i] = float_buf[i*2+1]*32768.0;
- max = qMax(fabs(out_left[i]), max);
- max = qMax(fabs(out_right[i]), max);
- }
- }
- else if(ap.channels() == 1)
- {
- for(int i = 0; i < samples; ++i)
- {
- out_left[i] = float_buf[i]*32768.0;
- max = qMax(fabs(out_left[i]), max);
- }
- }
- }
- else
- {
- qint64 len = m_decoder->read(char_buf, buf_size*ap.sampleSize());
-
- if(samples < 0)
- {
- error = true;
- break;
- }
- else if(samples == 0)
- break;
-
- samples = len / ap.sampleSize();
-
- if(ap.channels() == 2)
- {
- for(int i = 0; i < (samples >> 1); ++i)
- {
- switch (format)
- {
- case Qmmp::PCM_S8:
- out_left[i] = char_buf[i*2]*32768.0/128.0;
- out_right[i] = char_buf[i*2+1]*32768.0/128.0;
- break;
- case Qmmp::PCM_S16LE:
- out_left[i] = ((short *)char_buf)[i*2];
- out_right[i] = ((short *)char_buf)[i*2+1];
- break;
- case Qmmp::PCM_S24LE:
- out_left[i] = ((qint32 *)char_buf)[i*2]*32768.0/((1U << 23));
- out_right[i] = ((qint32 *)char_buf)[i*2+1]*32768.0/((1U << 23));
- break;
- case Qmmp::PCM_S32LE:
- out_left[i] = ((qint32 *)char_buf)[i*2]*32768.0/((1U << 31));
- out_right[i] = ((qint32 *)char_buf)[i*2+1]*32768.0/((1U << 31));
- break;
- default:
- break;
- }
- max = qMax(fabs(out_left[i]), max);
- max = qMax(fabs(out_right[i]), max);
- }
- }
- else if(ap.channels() == 1)
- {
- for(int i = 0; i < samples; ++i)
- {
- switch (format)
- {
- case Qmmp::PCM_S8:
- out_left[i] = char_buf[i*2]*32768.0/128.0;
- break;
- case Qmmp::PCM_S16LE:
- out_left[i] = ((short *)char_buf)[i*2];
- break;
- case Qmmp::PCM_S24LE:
- out_left[i] = ((qint32 *)char_buf)[i*2]*32768.0/((1U << 23));
- break;
- case Qmmp::PCM_S32LE:
- out_left[i] = ((qint32 *)char_buf)[i*2]*32768.0/((1U << 31));
- break;
- default:
- break;
- }
- max = qMax(fabs(out_left[i]), max);
- }
- }
- }
-
- size_t samples_per_channel = samples >> ((ap.channels() == 2) ? 1 : 0);
-
- AnalyzeSamples(m_handle, out_left, out_right, samples_per_channel, ap.channels());
- sample_counter += samples;
- emit progress(100 * sample_counter / totalSamples);
-
- m_mutex.lock();
- if(m_user_stop)
- {
- m_mutex.unlock();
- break;
- }
- m_mutex.unlock();
- }
-
- if(error)
- {
- qWarning("RGScaner: [%s] finished with error", qPrintable(name));
- }
- else if(m_user_stop)
- {
- qDebug("RGScaner: [%s] stopped by user", qPrintable(name));
- }
- else
- {
- m_gain = GetTitleGain(m_handle);
- m_peak = max/32768.0;
- emit progress(100);
- qDebug("RGScaner: [%s] peak=%f, gain=%f", qPrintable(name), m_peak, m_gain);
- qDebug("RGScaner: [%s] finished with success ", qPrintable(name));
- m_has_values = true;
- }
- deinit();
- emit finished(m_url);
- m_is_running = false;
-}
-
-void RGScaner::deinit()
-{
- if(m_decoder)
- {
- delete m_decoder;
- m_decoder = 0;
- }
- if(m_source)
- {
- delete m_source;
- m_source = 0;
- }
-}