aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/CommandLineOptions/IncDecVolumeOption/translations/incdecvolume_plugin_hu.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/CommandLineOptions/IncDecVolumeOption/translations/incdecvolume_plugin_hu.ts')
0 files changed, 0 insertions, 0 deletions
='n70' href='#n70'>70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
/***************************************************************************
 *   Copyright (C) 2007-2012 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 <QSettings>
#include <math.h>
#include <stdlib.h>
#include <qmmp/qmmp.h>

#include "srconverter.h"

SRConverter::SRConverter() : Effect()
{
    int converter_type_array[] = {SRC_SINC_BEST_QUALITY, SRC_SINC_MEDIUM_QUALITY, SRC_SINC_FASTEST,
                                  SRC_ZERO_ORDER_HOLD,  SRC_LINEAR};
    m_src_state = 0;
    m_srcError = 0;
    QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
    m_overSamplingFs = settings.value("SRC/sample_rate",48000).toInt();
    m_converter_type = converter_type_array[settings.value("SRC/engine", 0).toInt()];
}

SRConverter::~SRConverter()
{
    src_reset (m_src_state) ;
    freeSRC();
    m_src_data.data_in = 0;
    m_src_data.data_out = 0;
    m_src_data.end_of_input = 0;
    m_src_data.input_frames = 0;
    m_src_data.output_frames = 0;
}

void SRConverter::applyEffect(Buffer *b)
{
    if (m_src_state && b->nbytes > 0)
    {
        m_src_data.input_frames = b->nbytes / 2 / channels();
        m_src_data.data_in = new float [m_src_data.input_frames * channels()];
        m_src_data.output_frames = m_src_data.src_ratio * m_src_data.input_frames + 1;
        m_src_data.end_of_input = 0;
        m_src_data.data_out = new float [m_src_data.output_frames * channels()];
        src_short_to_float_array((short*) b->data, m_src_data.data_in,
                                 m_src_data.input_frames * channels());
        if ((m_srcError = src_process(m_src_state, &m_src_data)) > 0)
        {
            qWarning("SRConverter: src_process(): %s\n", src_strerror(m_srcError));
        }
        else
        {
            qint16 *out_data = new qint16 [m_src_data.output_frames_gen * channels()];
            src_float_to_short_array(m_src_data.data_out, out_data,
                                     m_src_data.output_frames_gen*channels());
            b->nbytes = m_src_data.output_frames_gen * channels() * 2;
            if(b->nbytes > b->size)
            {
                delete [] b->data;