diff options
author | Markus Nolvi <markus.nolvi@digia.com> | 2010-09-01 13:22:51 +0300 |
---|---|---|
committer | Mica <qt-info@nokia.com> | 2010-09-03 15:39:18 +0300 |
commit | b10a282d4460bed5df86cc78329536695aee8a30 (patch) | |
tree | 5cf5f90d4fbcd228427b11325608be1349f24de8 /plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp | |
parent | 44481e4de4c286c1744331579ebcf02e5da86044 (diff) |
Symbian: Implemented AudioInput device support for MMF Audio recording
Diffstat (limited to 'plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp')
-rw-r--r-- | plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp | 129 |
1 files changed, 122 insertions, 7 deletions
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp b/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp index b5b7696b83..4e5a48cd26 100644 --- a/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp +++ b/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp @@ -56,6 +56,12 @@ _LIT(KAudioDummyFile, "c:\\data\\temp\\temp.wav"); +const QString S60AudioCaptureSession::defaultMic("Default Mic"); +const QString S60AudioCaptureSession::voiceCall("Voice Call"); +const QString S60AudioCaptureSession::fmRadio("FM Radio"); +const QString S60AudioCaptureSession::speaker("Speaker"); +const QString S60AudioCaptureSession::lineIn("Line In"); + S60AudioCaptureSession::S60AudioCaptureSession(QObject *parent): QObject(parent) , m_recorderUtility(NULL) @@ -63,8 +69,12 @@ S60AudioCaptureSession::S60AudioCaptureSession(QObject *parent): , m_controllerIdMap(QHash<QString, ControllerData>()) , m_audioCodeclist(QHash<QString, CodecData>()) , m_error(QMediaRecorder::NoError) - , isMuted(false) + , m_isMuted(false) + , m_audioEndpoint(S60AudioCaptureSession::defaultMic) { +#ifdef AUDIOINPUT_ROUTING + m_audioInput = NULL; +#endif //AUDIOINPUT_ROUTING TRAPD(err, initializeSessionL()); setError(err); } @@ -75,6 +85,7 @@ void S60AudioCaptureSession::initializeSessionL() updateAudioContainersL(); populateAudioCodecsDataL(); setDefaultSettings(); + initAudioInputs(); } void S60AudioCaptureSession::setError(TInt aError) @@ -82,6 +93,7 @@ void S60AudioCaptureSession::setError(TInt aError) if (aError == KErrNone) return; + stop(); m_error = aError; QMediaRecorder::Error recorderError = fromSymbianErrorToMultimediaError(m_error); @@ -122,6 +134,9 @@ QMediaRecorder::Error S60AudioCaptureSession::fromSymbianErrorToMultimediaError( S60AudioCaptureSession::~S60AudioCaptureSession() { +#ifdef AUDIOINPUT_ROUTING + delete m_audioInput; +#endif //AUDIOINPUT_ROUTING delete m_recorderUtility; } @@ -269,12 +284,12 @@ void S60AudioCaptureSession::mute(bool muted) else m_recorderUtility->SetGain(m_recorderUtility->MaxGain()); - isMuted = muted; + m_isMuted = muted; } bool S60AudioCaptureSession::muted() { - return isMuted; + return m_isMuted; } void S60AudioCaptureSession::setDefaultSettings() @@ -320,11 +335,101 @@ void S60AudioCaptureSession::stop() emit stateChanged(m_captureState); } -void S60AudioCaptureSession::setCaptureDevice(const QString &deviceName) +void S60AudioCaptureSession::initAudioInputs() +{ + m_audioInputs[S60AudioCaptureSession::defaultMic] = QString("Microphone associated with the currently active speaker."); +#ifdef AUDIOINPUT_ROUTING + m_audioInputs[S60AudioCaptureSession::voiceCall] = QString("Audio stream associated with the current phone call."); + m_audioInputs[S60AudioCaptureSession::fmRadio] = QString("Audio of the currently tuned FM radio station."); + m_audioInputs[S60AudioCaptureSession::lineIn] = QString("Audio being received from the line-in (if available)."); + m_audioInputs[S60AudioCaptureSession::speaker] = QString("Audio currently being sent to the currently active speaker."); +#endif //AUDIOINPUT_ROUTING +} + +void S60AudioCaptureSession::setActiveEndpoint(const QString& audioEndpoint) +{ + if (!m_audioInputs.keys().contains(audioEndpoint)) + return; + + if (activeEndpoint().compare(audioEndpoint) != 0) { + m_audioEndpoint = audioEndpoint; + emit activeEndpointChanged(audioEndpoint); + } +} + +QList<QString> S60AudioCaptureSession::availableEndpoints() const +{ + return m_audioInputs.keys(); +} + +QString S60AudioCaptureSession::endpointDescription(const QString& name) const +{ + if (m_audioInputs.keys().contains(name)) + return m_audioInputs.value(name); + return QString(); +} + +QString S60AudioCaptureSession::activeEndpoint() const +{ + QString inputName = QString(S60AudioCaptureSession::defaultMic); +#ifdef AUDIOINPUT_ROUTING + if (m_audioInput) { + CAudioInput::TAudioInputArray input = m_audioInput->AudioInput(); + inputName = qStringFromTAudioInputPreference(input[0]); + } +#endif //AUDIOINPUT_ROUTING + return inputName; +} + +QString S60AudioCaptureSession::defaultEndpoint() const { - m_captureDevice = deviceName; + return QString(S60AudioCaptureSession::defaultMic); } +void S60AudioCaptureSession::doSetActiveEndpointL(const QString& name) +{ +#ifdef AUDIOINPUT_ROUTING + if (!m_recorderUtility) + return; + + CAudioInput::TAudioInputPreference input = CAudioInput::EDefaultMic; + + if (name.compare(S60AudioCaptureSession::voiceCall) == 0) + input = CAudioInput::EVoiceCall; + else if (name.compare(S60AudioCaptureSession::fmRadio) == 0) + input = CAudioInput::EFMRadio; + else if (name.compare(S60AudioCaptureSession::lineIn)== 0) + input = CAudioInput::ELineIn; + else if (name.compare(S60AudioCaptureSession::speaker) == 0) + input = CAudioInput::EOutputToSpeaker; + else // S60AudioCaptureSession::defaultMic + input = CAudioInput::EDefaultMic; + + RArray<CAudioInput::TAudioInputPreference> inputArray; + inputArray.Append(input); + + if (m_audioInput) + m_audioInput->SetAudioInputL(inputArray.Array()); + +#endif //AUDIOINPUT_ROUTING +} + +#ifdef AUDIOINPUT_ROUTING +QString S60AudioCaptureSession::qStringFromTAudioInputPreference(CAudioInput::TAudioInputPreference input) const +{ + if (input == CAudioInput::EVoiceCall) + return S60AudioCaptureSession::voiceCall; + else if (input == CAudioInput::EFMRadio) + return S60AudioCaptureSession::fmRadio; + else if (input == CAudioInput::ELineIn) + return S60AudioCaptureSession::lineIn; + else if (input == CAudioInput::EOutputToSpeaker) + return S60AudioCaptureSession::speaker; + return S60AudioCaptureSession::defaultMic; // CAudioInput::EDefaultMic +} +#endif //AUDIOINPUT_ROUTING + + void S60AudioCaptureSession::MoscoStateChangeEvent(CBase* aObject, TInt aPreviousState, TInt aCurrentState, TInt aErrorCode) { @@ -501,7 +606,18 @@ void S60AudioCaptureSession::populateAudioCodecsDataL() void S60AudioCaptureSession::applyAudioSettingsL() { - if (!m_recorderUtility || m_format.codec() == "AMR") + if (!m_recorderUtility) + return; +#ifdef AUDIOINPUT_ROUTING + //CAudioInput needs to be re-initialized everytime recording starts + if (m_audioInput) { + delete m_audioInput; + m_audioInput = NULL; + } + m_audioInput = CAudioInput::NewL(*m_recorderUtility); + doSetActiveEndpointL(m_audioEndpoint); +#endif //AUDIOINPUT_ROUTING + if (m_format.codec() == "AMR") return; TFourCC fourCC = m_audioCodeclist.value(m_format.codec()).fourCC; @@ -608,4 +724,3 @@ QUrl S60AudioCaptureSession::generateAudioFilePath() QUrl location(QDir::toNativeSeparators(outputDir.canonicalPath()+QString("/testclip_%1").arg(lastImage+1,4,10,QLatin1Char('0')))); return location; } - |