45 #include <QAudioFormat> |
45 #include <QAudioFormat> |
46 |
46 |
47 #include <QtCore/qdebug.h> |
47 #include <QtCore/qdebug.h> |
48 |
48 |
49 S60AudioEncoderControl::S60AudioEncoderControl(QObject *session, QObject *parent) |
49 S60AudioEncoderControl::S60AudioEncoderControl(QObject *session, QObject *parent) |
50 :QAudioEncoderControl(parent), m_quality(QtMediaServices::NormalQuality) |
50 :QAudioEncoderControl(parent), m_quality(QtMultimedia::NormalQuality) |
51 { |
51 { |
52 m_session = qobject_cast<S60AudioCaptureSession*>(session); |
52 m_session = qobject_cast<S60AudioCaptureSession*>(session); |
53 QAudioFormat fmt = m_session->format(); |
53 QAudioFormat fmt = m_session->format(); |
54 // medium, 22050Hz mono S16 |
54 // medium, 22050Hz mono S16 |
55 fmt.setSampleType(QAudioFormat::SignedInt); |
55 fmt.setSampleType(QAudioFormat::SignedInt); |
66 QStringList S60AudioEncoderControl::supportedAudioCodecs() const |
66 QStringList S60AudioEncoderControl::supportedAudioCodecs() const |
67 { |
67 { |
68 return m_session->supportedAudioCodecs(); |
68 return m_session->supportedAudioCodecs(); |
69 } |
69 } |
70 |
70 |
71 QString S60AudioEncoderControl::audioCodec() const |
|
72 { |
|
73 return m_session->format().codec(); |
|
74 } |
|
75 |
|
76 bool S60AudioEncoderControl::setAudioCodec(const QString &codecName) |
|
77 { |
|
78 QAudioFormat fmt = m_session->format(); |
|
79 fmt.setCodec(codecName); |
|
80 return m_session->setFormat(fmt); |
|
81 } |
|
82 |
|
83 QString S60AudioEncoderControl::codecDescription(const QString &codecName) const |
71 QString S60AudioEncoderControl::codecDescription(const QString &codecName) const |
84 { |
72 { |
85 return m_session->codecDescription(codecName); |
73 return m_session->codecDescription(codecName); |
86 } |
74 } |
87 |
75 |
88 int S60AudioEncoderControl::bitRate() const |
76 QtMultimedia::EncodingQuality S60AudioEncoderControl::quality() const |
89 { |
|
90 return (m_session->format().frequency() * m_session->format().channels() * (m_session->format().sampleSize() / 8)); |
|
91 } |
|
92 |
|
93 void S60AudioEncoderControl::setBitRate(int value) |
|
94 { |
|
95 Q_UNUSED(value) |
|
96 //Note: None of the default codecs provided in the MMF support the setting of bit rates. |
|
97 } |
|
98 |
|
99 QtMediaServices::EncodingQuality S60AudioEncoderControl::quality() const |
|
100 { |
77 { |
101 return m_quality; |
78 return m_quality; |
102 } |
79 } |
103 |
80 |
104 void S60AudioEncoderControl::setQuality(QtMediaServices::EncodingQuality value) |
81 void S60AudioEncoderControl::setQuality(QtMultimedia::EncodingQuality value, QAudioFormat &fmt) |
105 { |
82 { |
106 QAudioFormat fmt = m_session->format(); |
|
107 |
|
108 switch (value) { |
83 switch (value) { |
109 case QtMediaServices::VeryLowQuality: |
84 case QtMultimedia::VeryLowQuality: |
110 case QtMediaServices::LowQuality: |
85 case QtMultimedia::LowQuality: |
111 // low, 8000Hz mono U8 |
86 // low, 8000Hz mono U8 |
112 fmt.setSampleType(QAudioFormat::UnSignedInt); |
87 fmt.setSampleType(QAudioFormat::UnSignedInt); |
113 fmt.setSampleSize(8); |
88 fmt.setSampleSize(8); |
114 fmt.setFrequency(8000); |
89 fmt.setFrequency(8000); |
115 fmt.setChannels(1); |
90 fmt.setChannels(1); |
116 break; |
91 break; |
117 case QtMediaServices::NormalQuality: |
92 case QtMultimedia::NormalQuality: |
118 // medium, 22050Hz mono S16 |
93 // medium, 22050Hz mono S16 |
119 fmt.setSampleType(QAudioFormat::SignedInt); |
94 fmt.setSampleType(QAudioFormat::SignedInt); |
120 fmt.setSampleSize(16); |
95 fmt.setSampleSize(16); |
121 fmt.setFrequency(22050); |
96 fmt.setFrequency(22050); |
122 fmt.setChannels(1); |
97 fmt.setChannels(1); |
123 break; |
98 break; |
124 case QtMediaServices::HighQuality: |
99 case QtMultimedia::HighQuality: |
125 case QtMediaServices::VeryHighQuality: |
100 case QtMultimedia::VeryHighQuality: |
126 // high, 44100Hz mono S16 |
101 // high, 44100Hz mono S16 |
127 fmt.setSampleType(QAudioFormat::SignedInt); |
102 fmt.setSampleType(QAudioFormat::SignedInt); |
128 fmt.setSampleSize(16); |
103 fmt.setSampleSize(16); |
129 fmt.setFrequency(44100); |
104 fmt.setFrequency(44100); |
130 fmt.setChannels(1); |
105 fmt.setChannels(2); |
131 break; |
106 break; |
132 default: |
107 default: |
133 break; |
108 break; |
134 } |
109 } |
135 m_session->setFormat(fmt); |
|
136 m_quality = value; |
|
137 } |
110 } |
138 |
111 |
139 QStringList S60AudioEncoderControl::supportedEncodingOptions(const QString &codec) const |
112 QStringList S60AudioEncoderControl::supportedEncodingOptions(const QString &codec) const |
140 { |
113 { |
141 Q_UNUSED(codec) |
114 Q_UNUSED(codec) |
148 QVariant S60AudioEncoderControl::encodingOption(const QString &codec, const QString &name) const |
121 QVariant S60AudioEncoderControl::encodingOption(const QString &codec, const QString &name) const |
149 { |
122 { |
150 if (codec == "PCM") { |
123 if (codec == "PCM") { |
151 QAudioFormat fmt = m_session->format(); |
124 QAudioFormat fmt = m_session->format(); |
152 |
125 |
153 if(qstrcmp(name.toLocal8Bit().constData(), "bitrate") == 0) { |
126 if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0) { |
154 return QVariant(bitRate()); |
|
155 } |
|
156 else if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0) { |
|
157 return QVariant(quality()); |
127 return QVariant(quality()); |
158 } |
128 } |
159 else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0) { |
129 else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0) { |
160 return QVariant(fmt.channels()); |
130 return QVariant(fmt.channels()); |
161 } |
131 } |
168 |
138 |
169 void S60AudioEncoderControl::setEncodingOption( |
139 void S60AudioEncoderControl::setEncodingOption( |
170 const QString &codec, const QString &name, const QVariant &value) |
140 const QString &codec, const QString &name, const QVariant &value) |
171 { |
141 { |
172 if (codec == "PCM") { |
142 if (codec == "PCM") { |
173 if(qstrcmp(name.toLocal8Bit().constData(), "bitrate") == 0) { |
143 QAudioFormat fmt = m_session->format(); |
174 setBitRate(value.toInt()); |
144 |
175 } else if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0) { |
145 if(qstrcmp(name.toLocal8Bit().constData(), "quality") == 0) { |
176 setQuality((QtMediaServices::EncodingQuality)value.toInt()); |
146 setQuality((QtMultimedia::EncodingQuality)value.toInt(), fmt); |
177 } else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0) { |
147 } else if(qstrcmp(name.toLocal8Bit().constData(), "channels") == 0) { |
178 setChannelCount(value.toInt()); |
148 fmt.setChannels(value.toInt()); |
179 } else if(qstrcmp(name.toLocal8Bit().constData(), "samplerate") == 0) { |
149 } else if(qstrcmp(name.toLocal8Bit().constData(), "samplerate") == 0) { |
180 setSampleRate(value.toInt()); |
150 fmt.setFrequency(value.toInt()); |
181 } |
151 } |
|
152 m_session->setFormat(fmt); |
182 } |
153 } |
183 } |
|
184 |
|
185 int S60AudioEncoderControl::sampleRate() const |
|
186 { |
|
187 return m_session->format().frequency(); |
|
188 } |
|
189 |
|
190 void S60AudioEncoderControl::setSampleRate(int sampleRate) |
|
191 { |
|
192 QAudioFormat fmt = m_session->format(); |
|
193 fmt.setFrequency(sampleRate); |
|
194 m_session->setFormat(fmt); |
|
195 } |
154 } |
196 |
155 |
197 QList<int> S60AudioEncoderControl::supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous) const |
156 QList<int> S60AudioEncoderControl::supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous) const |
198 { |
157 { |
199 if (continuous) |
158 if (continuous) |
200 *continuous = false; |
159 *continuous = false; |
201 |
160 |
202 return m_session->supportedAudioSampleRates(settings); |
161 return m_session->supportedAudioSampleRates(settings); |
203 } |
162 } |
204 |
163 |
205 int S60AudioEncoderControl::channelCount() const |
|
206 { |
|
207 return m_session->format().channels(); |
|
208 } |
|
209 |
|
210 void S60AudioEncoderControl::setChannelCount(int channels) |
|
211 { |
|
212 QAudioFormat fmt = m_session->format(); |
|
213 fmt.setChannels(channels); |
|
214 m_session->setFormat(fmt); |
|
215 } |
|
216 |
|
217 int S60AudioEncoderControl::sampleSize() const |
|
218 { |
|
219 return m_session->format().sampleSize(); |
|
220 } |
|
221 |
|
222 void S60AudioEncoderControl::setSampleSize(int sampleSize) |
|
223 { |
|
224 QAudioFormat fmt = m_session->format(); |
|
225 fmt.setSampleSize(sampleSize); |
|
226 m_session->setFormat(fmt); |
|
227 } |
|
228 |
|
229 QAudioEncoderSettings S60AudioEncoderControl::audioSettings() const |
164 QAudioEncoderSettings S60AudioEncoderControl::audioSettings() const |
230 { |
165 { |
231 QAudioEncoderSettings settings; |
166 return m_settings; |
232 settings.setCodec(audioCodec()); |
|
233 settings.setBitRate(bitRate()); |
|
234 settings.setQuality(quality()); |
|
235 settings.setSampleRate(sampleRate()); |
|
236 settings.setChannelCount(channelCount()); |
|
237 return settings; |
|
238 } |
167 } |
239 |
168 |
240 void S60AudioEncoderControl::setAudioSettings(const QAudioEncoderSettings &settings) |
169 void S60AudioEncoderControl::setAudioSettings(const QAudioEncoderSettings &settings) |
241 { |
170 { |
242 if (settings.encodingMode() == QtMediaServices::ConstantQualityEncoding) { |
171 QAudioFormat fmt = m_session->format(); |
243 setAudioCodec(settings.codec()); |
172 if (settings.encodingMode() == QtMultimedia::ConstantQualityEncoding) { |
244 setQuality(settings.quality()); |
173 fmt.setCodec(settings.codec()); |
245 if (settings.sampleRate() > 0) |
174 setQuality(settings.quality(), fmt); |
246 setSampleRate(settings.sampleRate()); |
175 if (settings.sampleRate() > 0) { |
|
176 fmt.setFrequency(settings.sampleRate()); |
|
177 } |
247 if (settings.channelCount() > 0) |
178 if (settings.channelCount() > 0) |
248 setChannelCount(settings.channelCount()); |
179 fmt.setChannels(settings.channelCount()); |
249 }else { |
180 }else { |
250 setAudioCodec(settings.codec()); |
181 if (settings.sampleRate() == 8000) { |
251 setSampleRate(settings.sampleRate()); |
182 fmt.setSampleType(QAudioFormat::UnSignedInt); |
252 setChannelCount(settings.channelCount()); |
183 fmt.setSampleSize(8); |
253 } |
184 } else { |
|
185 fmt.setSampleType(QAudioFormat::SignedInt); |
|
186 fmt.setSampleSize(16); |
|
187 } |
|
188 fmt.setCodec(settings.codec()); |
|
189 fmt.setFrequency(settings.sampleRate()); |
|
190 fmt.setChannels(settings.channelCount()); |
|
191 } |
|
192 m_session->setFormat(fmt); |
|
193 m_settings = settings; |
254 } |
194 } |