summaryrefslogtreecommitdiffstats
path: root/src/encoder/encodermp3settings.cpp
blob: 3fca377eca4a50d2715d0427cda4ff9569060e18 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// storage of setting for mp3 encoder

#include "encoder/encodermp3settings.h"
#include "recording/defs_recording.h"

const int EncoderMp3Settings::DEFAULT_BITRATE_INDEX = 6;
const QString EncoderMp3Settings::ENCODING_MODE_GROUP = "MP3_VBR_MODE";

EncoderMp3Settings::EncoderMp3Settings(UserSettingsPointer pConfig) :
    m_pConfig(pConfig)
{
    // Added "32" because older settings started at index 1 with 48.
    m_qualList.append(32); // mono
    m_qualList.append(48); // mono
    m_qualList.append(64); // mono
    m_qualList.append(80); // mono
    m_qualList.append(96); // mono
    m_qualList.append(112); // stereo
    m_qualList.append(128); // stereo
    m_qualList.append(160); // stereo
    m_qualList.append(192); // stereo
    m_qualList.append(224); // stereo
    m_qualList.append(256); // stereo
    m_qualList.append(320); // stereo

    m_qualVBRList.append(55);// V7 mono
    m_qualVBRList.append(65);// V6 mono
    m_qualVBRList.append(75);// V5 mono
    m_qualVBRList.append(85);// V4 mono
    m_qualVBRList.append(110);// V7
    m_qualVBRList.append(120);// V6
    m_qualVBRList.append(140);// V5
    m_qualVBRList.append(160);// V4
    m_qualVBRList.append(190);// V3
    m_qualVBRList.append(200);// V2
    m_qualVBRList.append(240);// V1
    m_qualVBRList.append(260);// V0

    QList<QString> vbrmodes;
    vbrmodes.append("CBR");
    vbrmodes.append("ABR");
    vbrmodes.append("VBR");
    m_radioList.append(OptionsGroup(QObject::tr("Bitrate Mode"), ENCODING_MODE_GROUP, vbrmodes));
}

QList<int> EncoderMp3Settings::getQualityValues() const
{
    return m_qualList;
}

QList<int> EncoderMp3Settings::getVBRQualityValues() const
{
    return m_qualVBRList;
}

void EncoderMp3Settings::setQualityByIndex(int qualityIndex)
{
    if (qualityIndex >= 0 && qualityIndex < m_qualList.size()) {
        m_pConfig->set(ConfigKey(RECORDING_PREF_KEY, "MP3_Quality"), ConfigValue(qualityIndex));
    } else {
        qWarning() << "Invalid qualityIndex given to EncoderMp3Settings: "
                   << qualityIndex << ". Ignoring it";
    }
}

int EncoderMp3Settings::getQuality() const
{
    return m_qualList.at(getQualityIndex());
}
int EncoderMp3Settings::getQualityIndex() const
{
    int qualityIndex = m_pConfig->getValue(
            ConfigKey(RECORDING_PREF_KEY, "MP3_Quality"), DEFAULT_BITRATE_INDEX);
    if (qualityIndex >= 0 && qualityIndex < m_qualList.size()) {
        return qualityIndex;
    }
    else {
        qWarning() << "Invalid qualityIndex in EncoderMp3Settings"
                   << qualityIndex << "(Max is:" << m_qualList.size() << "). Ignoring it"
                   << "and returning default, which is:" << DEFAULT_BITRATE_INDEX;
    }
    return DEFAULT_BITRATE_INDEX;
}

// Returns the list of radio options to show to the user
QList<EncoderSettings::OptionsGroup> EncoderMp3Settings::getOptionGroups() const
{
    return m_radioList;
}
// Selects the option by its index. If it is a single-element option,
// index 0 means disabled and 1 enabled.
void EncoderMp3Settings::setGroupOption(const QString& groupCode, int optionIndex) {
    bool found=false;
    for (const auto& group : qAsConst(m_radioList)) {
        if (groupCode == group.groupCode) {
            found=true;
            if (optionIndex < group.controlNames.size() || optionIndex == 1) {
                m_pConfig->set(ConfigKey(RECORDING_PREF_KEY, ENCODING_MODE_GROUP),
                    ConfigValue(optionIndex));
            } else {
                qWarning() << "Received an index out of range for: "
                           << groupCode << ", index: " << optionIndex;
            }
        }
    }
    if (!found) {
        qWarning() << "Received an unknown groupCode on setGroupOption: " << groupCode;
    }
}
// Return the selected option of the group. If it is a single-element option,
// 0 means disabled and 1 enabled.
int EncoderMp3Settings::getSelectedOption(const QString& groupCode) const {
    bool found=false;
    int value = m_pConfig->getValue(
        ConfigKey(RECORDING_PREF_KEY, ENCODING_MODE_GROUP), 0);
    for (const auto& group : m_radioList) {
        if (groupCode == group.groupCode) {
            found=true;
            if (value >= group.controlNames.size() && value > 1) {
                qWarning() << "Value saved for " << groupCode
                           << " on preferences is out of range " << value
                           << ". Returning 0";
                value=0;
            }
        }
    }
    if (!found) {
        qWarning() << "Received an unknown groupCode on getSelectedOption: " << groupCode;
    }
    return value;
}