summaryrefslogtreecommitdiffstats
path: root/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp
diff options
context:
space:
mode:
authorMarkus Nolvi <markus.nolvi@digia.com>2010-06-03 16:31:07 +0300
committerMarkus Nolvi <markus.nolvi@digia.com>2010-06-03 16:31:07 +0300
commit71922888d6bcf5225ace0268b1f6b83be0563d00 (patch)
tree6edf1dfcda89e8f534074e06e2e43d7c00f23e23 /plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp
parent5ca9956f80ad4d0b7bdaf99e741da10155b1030c (diff)
Symbian: MMF multimedia backend/examples/testcases refactor due to API
changes
Diffstat (limited to 'plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp')
-rw-r--r--plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp335
1 files changed, 177 insertions, 158 deletions
diff --git a/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp b/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp
index 0cf1682dbe..0e186f4285 100644
--- a/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp
+++ b/plugins/multimedia/symbian/mmf/audiosource/s60audiocapturesession.cpp
@@ -52,26 +52,27 @@
#include <mmf\common\mmfcontroller.h>
#include <BADESCA.H>
#include <BAUTILS.H>
-#include <coemain.h>
+#include <coemain.h>
_LIT(KAudioDummyFile, "c:\\data\\temp\\temp.wav");
S60AudioCaptureSession::S60AudioCaptureSession(QObject *parent):
QObject(parent)
- , m_recorderUtility(NULL)
- , m_captureState(ENotInitialized)
- , m_controllerIdMap(QHash<QString, ControllerData>())
- , m_audioCodeclist(QHash<QString, CodecData>())
- , m_error(QMediaRecorder::NoError)
+ , m_recorderUtility(NULL)
+ , m_captureState(ENotInitialized)
+ , m_controllerIdMap(QHash<QString, ControllerData>())
+ , m_audioCodeclist(QHash<QString, CodecData>())
+ , m_error(QMediaRecorder::NoError)
+ , isMuted(false)
{
TRAPD(err, initializeSessionL());
setError(err);
}
void S60AudioCaptureSession::initializeSessionL()
-{
- m_recorderUtility = CMdaAudioRecorderUtility::NewL(*this, 0, 80,(TMdaPriorityPreference) 0x5210001);
- updateAudioContainersL();
+{
+ m_recorderUtility = CMdaAudioRecorderUtility::NewL(*this, 0, 80,(TMdaPriorityPreference) 0x5210001);
+ updateAudioContainersL();
populateAudioCodecsDataL();
setDefaultSettings();
}
@@ -80,13 +81,13 @@ void S60AudioCaptureSession::setError(TInt aError)
{
if (aError == KErrNone)
return;
-
+
m_error = aError;
QMediaRecorder::Error recorderError = fromSymbianErrorToMultimediaError(m_error);
-
+
// TODO: fix to user friendly string at some point
// These error string are only dev usable
- QString symbianError;
+ QString symbianError;
symbianError.append("Symbian:");
symbianError.append(QString::number(m_error));
emit error(recorderError, symbianError);
@@ -98,21 +99,21 @@ QMediaRecorder::Error S60AudioCaptureSession::fromSymbianErrorToMultimediaError(
case KErrNoMemory:
case KErrNotFound:
case KErrBadHandle:
- case KErrAbort:
+ case KErrAbort:
case KErrCorrupt:
- case KErrGeneral:
- case KErrPathNotFound:
+ case KErrGeneral:
+ case KErrPathNotFound:
case KErrUnknown:
case KErrNotReady:
case KErrInUse:
case KErrAccessDenied:
case KErrLocked:
case KErrPermissionDenied:
- case KErrAlreadyExists:
- return QMediaRecorder::ResourceError;
- case KErrNotSupported:
- case KErrArgument:
- return QMediaRecorder::FormatError;
+ case KErrAlreadyExists:
+ return QMediaRecorder::ResourceError;
+ case KErrNotSupported:
+ case KErrArgument:
+ return QMediaRecorder::FormatError;
case KErrNone:
default:
return QMediaRecorder::NoError;
@@ -120,8 +121,8 @@ QMediaRecorder::Error S60AudioCaptureSession::fromSymbianErrorToMultimediaError(
}
S60AudioCaptureSession::~S60AudioCaptureSession()
-{
- delete m_recorderUtility;
+{
+ delete m_recorderUtility;
}
QAudioFormat S60AudioCaptureSession::format() const
@@ -130,7 +131,7 @@ QAudioFormat S60AudioCaptureSession::format() const
}
bool S60AudioCaptureSession::setFormat(const QAudioFormat &format)
-{
+{
m_format = format;
return true;
}
@@ -154,7 +155,7 @@ QString S60AudioCaptureSession::codecDescription(const QString &codecName)
}
QString S60AudioCaptureSession::audioContainerDescription(const QString &containerName)
-{
+{
if (m_controllerIdMap.keys().contains(containerName))
return m_controllerIdMap.value(containerName).destinationFormatDescription;
else
@@ -162,19 +163,19 @@ QString S60AudioCaptureSession::audioContainerDescription(const QString &contain
}
bool S60AudioCaptureSession::setAudioCodec(const QString &codecName)
-{
+{
QStringList codecs = supportedAudioCodecs();
if(codecs.contains(codecName)) {
m_format.setCodec(codecName);
return true;
- }
+ }
return false;
}
-bool S60AudioCaptureSession::setAudioContainer(const QString &containerMimeType)
-{
+bool S60AudioCaptureSession::setAudioContainer(const QString &containerMimeType)
+{
QStringList containers = supportedAudioContainers();
- if(containers.contains(containerMimeType)) {
+ if(containers.contains(containerMimeType)) {
m_container = containerMimeType;
return true;
}
@@ -182,7 +183,7 @@ bool S60AudioCaptureSession::setAudioContainer(const QString &containerMimeType)
}
QString S60AudioCaptureSession::audioCodec() const
-{
+{
return m_format.codec();
}
@@ -199,7 +200,7 @@ QUrl S60AudioCaptureSession::outputLocation() const
bool S60AudioCaptureSession::setOutputLocation(const QUrl& sink)
{
QString filename = QDir::toNativeSeparators(m_sink.toString());
- TPtrC16 path(reinterpret_cast<const TUint16*>(filename.utf16()));
+ TPtrC16 path(reinterpret_cast<const TUint16*>(filename.utf16()));
TRAPD(err, BaflUtils::EnsurePathExistsL(CCoeEnv::Static()->FsSession(),path));
if (err==KErrNone) {
m_sink = sink;
@@ -212,48 +213,66 @@ bool S60AudioCaptureSession::setOutputLocation(const QUrl& sink)
}
qint64 S60AudioCaptureSession::position() const
-{
- if ((m_captureState != ERecording) || !m_recorderUtility)
+{
+ if ((m_captureState != ERecording) || !m_recorderUtility)
return 0;
-
- return m_recorderUtility->Duration().Int64() / 1000;
+
+ return m_recorderUtility->Duration().Int64() / 1000;
}
QString S60AudioCaptureSession::initializeSinkL()
-{
- QString sink = QDir::toNativeSeparators(m_sink.toString());
+{
+ QString sink = QDir::toNativeSeparators(m_sink.toString());
int index = sink.lastIndexOf('.');
if (index != -1)
sink.chop(sink.length()-index);
-
- sink.append(m_controllerIdMap.value(m_container).fileExtension);
- return sink;
+
+ sink.append(m_controllerIdMap.value(m_container).fileExtension);
+ return sink;
}
void S60AudioCaptureSession::record()
-{
+{
if (!m_recorderUtility)
return;
-
+
if (m_captureState == EInitialized || m_captureState == ERecordComplete) {
QString filename = initializeSinkL();
- TPtrC16 sink(reinterpret_cast<const TUint16*>(filename.utf16()));
+ TPtrC16 sink(reinterpret_cast<const TUint16*>(filename.utf16()));
TUid controllerUid(TUid::Uid(m_controllerIdMap.value(m_container).controllerUid));
- TUid formatUid(TUid::Uid(m_controllerIdMap.value(m_container).destinationFormatUid));
- TRAPD(err,
- if (m_container != "audio/amr")
+ TUid formatUid(TUid::Uid(m_controllerIdMap.value(m_container).destinationFormatUid));
+ TRAPD(err,
+ if (m_container != "audio/amr")
m_recorderUtility->OpenFileL(sink, controllerUid, KNullUid, formatUid);
- else
+ else
m_recorderUtility->OpenFileL(sink);
- );
+ );
setError(err);
- }else if (m_captureState == EPaused) {
+ }else if (m_captureState == EPaused) {
m_recorderUtility->SetPosition(m_pausedPosition);
TRAPD(error, m_recorderUtility->RecordL());
setError(error);
m_captureState = ERecording;
emit stateChanged(m_captureState);
- }
+ }
+}
+
+void S60AudioCaptureSession::mute(bool muted)
+{
+ if (!m_recorderUtility)
+ return;
+
+ if (muted)
+ m_recorderUtility->SetGain(0);
+ else
+ m_recorderUtility->SetGain(m_recorderUtility->MaxGain());
+
+ isMuted = muted;
+}
+
+bool S60AudioCaptureSession::muted()
+{
+ return isMuted;
}
void S60AudioCaptureSession::setDefaultSettings()
@@ -266,11 +285,11 @@ void S60AudioCaptureSession::setDefaultSettings()
m_container = m_controllerIdMap.keys()[0];
}
if (m_audioCodeclist.keys().count() > 0) {
- if (m_audioCodeclist.keys().contains("AMR")) {
+ if (m_audioCodeclist.keys().contains("AMR")) {
m_format.setSampleSize(8);
m_format.setChannels(1);
m_format.setFrequency(8000);
- m_format.setSampleType(QAudioFormat::SignedInt);
+ m_format.setSampleType(QAudioFormat::SignedInt);
m_format.setCodec("AMR");
}else
m_format.setCodec(m_audioCodeclist.keys()[0]);
@@ -278,25 +297,25 @@ void S60AudioCaptureSession::setDefaultSettings()
}
void S60AudioCaptureSession::pause()
-{
+{
if (!m_recorderUtility)
return;
-
+
m_pausedPosition = m_recorderUtility->Position();
m_recorderUtility->Stop();
m_captureState = EPaused;
- emit stateChanged(m_captureState);
+ emit stateChanged(m_captureState);
}
void S60AudioCaptureSession::stop()
-{
+{
if (!m_recorderUtility)
return;
-
+
m_recorderUtility->Stop();
- m_recorderUtility->Close();
+ m_recorderUtility->Close();
m_captureState = ERecordComplete;
- emit stateChanged(m_captureState);
+ emit stateChanged(m_captureState);
}
void S60AudioCaptureSession::setCaptureDevice(const QString &deviceName)
@@ -316,110 +335,110 @@ void S60AudioCaptureSession::MoscoStateChangeEvent(CBase* aObject,
void S60AudioCaptureSession::MoscoStateChangeEventL(CBase* aObject,
TInt aPreviousState, TInt aCurrentState, TInt aErrorCode)
-{
+{
if (aObject != m_recorderUtility)
return;
-
+
switch(aCurrentState) {
- case CMdaAudioClipUtility::EOpen: {
- if(aPreviousState == CMdaAudioClipUtility::ENotReady) {
- if (m_captureState == EInitializing) {
- retrieveSupportedAudioSampleRatesL();
- m_recorderUtility->Close();
+ case CMdaAudioClipUtility::EOpen: {
+ if(aPreviousState == CMdaAudioClipUtility::ENotReady) {
+ if (m_captureState == EInitializing) {
+ retrieveSupportedAudioSampleRatesL();
+ m_recorderUtility->Close();
m_captureState = EInitialized;
emit stateChanged(m_captureState);
- }else {
- applyAudioSettingsL();
- m_recorderUtility->SetGain(m_recorderUtility->MaxGain());
+ }else {
+ applyAudioSettingsL();
+ m_recorderUtility->SetGain(m_recorderUtility->MaxGain());
m_recorderUtility->RecordL();
- m_captureState = EOpenCompelete;
+ m_captureState = EOpenCompelete;
emit stateChanged(m_captureState);
}
break;
}
- }
- case CMdaAudioClipUtility::ENotReady: {
- m_captureState = EInitialized;
+ }
+ case CMdaAudioClipUtility::ENotReady: {
+ m_captureState = EInitialized;
emit stateChanged(m_captureState);
break;
}
- case CMdaAudioClipUtility::ERecording: {
- m_captureState = ERecording;
+ case CMdaAudioClipUtility::ERecording: {
+ m_captureState = ERecording;
emit stateChanged(m_captureState);
break;
}
- default: {
+ default: {
break;
- }
- }
+ }
+ }
}
void S60AudioCaptureSession::updateAudioContainersL()
{
- CMMFControllerPluginSelectionParameters* pluginParameters =
+ CMMFControllerPluginSelectionParameters* pluginParameters =
CMMFControllerPluginSelectionParameters::NewLC();
- CMMFFormatSelectionParameters* formatParameters =
+ CMMFFormatSelectionParameters* formatParameters =
CMMFFormatSelectionParameters::NewLC();
-
+
pluginParameters->SetRequiredRecordFormatSupportL(*formatParameters);
-
+
RArray<TUid> ids;
CleanupClosePushL(ids);
- User::LeaveIfError(ids.Append(KUidMediaTypeAudio));
+ User::LeaveIfError(ids.Append(KUidMediaTypeAudio));
- pluginParameters->SetMediaIdsL(ids,
+ pluginParameters->SetMediaIdsL(ids,
CMMFPluginSelectionParameters::EAllowOnlySuppliedMediaIds);
-
- RMMFControllerImplInfoArray controllers;
+
+ RMMFControllerImplInfoArray controllers;
CleanupResetAndDestroyPushL(controllers);
-
+
//Get all audio record controllers/formats that are supported
pluginParameters->ListImplementationsL(controllers);
-
+
for (TInt index=0; index<controllers.Count(); index++) {
- const RMMFFormatImplInfoArray& recordFormats =
+ const RMMFFormatImplInfoArray& recordFormats =
controllers[index]->RecordFormats();
for (TInt j=0; j<recordFormats.Count(); j++) {
const CDesC8Array& mimeTypes = recordFormats[j]->SupportedMimeTypes();
const CDesC8Array& fileExtensions = recordFormats[j]->SupportedFileExtensions();
TInt mimeCount = mimeTypes.Count();
TInt fileExtCount = fileExtensions.Count();
-
+
if (mimeCount > 0 && fileExtCount > 0) {
TPtrC8 extension = fileExtensions[0];
- TPtrC8 mimeType = mimeTypes[0];
- QString type = QString::fromUtf8((char *)mimeType.Ptr(), mimeType.Length());
-
+ TPtrC8 mimeType = mimeTypes[0];
+ QString type = QString::fromUtf8((char *)mimeType.Ptr(), mimeType.Length());
+
if (type != "audio/mp4" && type != "audio/basic") {
ControllerData data;
data.controllerUid = controllers[index]->Uid().iUid;
data.destinationFormatUid = recordFormats[j]->Uid().iUid;
data.destinationFormatDescription = QString::fromUtf16(
recordFormats[j]->DisplayName().Ptr(),
- recordFormats[j]->DisplayName().Length());
- data.fileExtension = QString::fromUtf8((char *)extension.Ptr(), extension.Length());
+ recordFormats[j]->DisplayName().Length());
+ data.fileExtension = QString::fromUtf8((char *)extension.Ptr(), extension.Length());
m_controllerIdMap[type] = data;
}
}
}
- }
+ }
CleanupStack::PopAndDestroy(4);//controllers, ids, formatParameters, pluginParameters
}
void S60AudioCaptureSession::retrieveSupportedAudioSampleRatesL()
-{
- if (!m_recorderUtility || m_captureState != EInitializing)
+{
+ if (!m_recorderUtility || m_captureState != EInitializing)
return;
-
+
m_supportedSampleRates.clear();
-
+
RArray<TUint> supportedSampleRates;
CleanupClosePushL(supportedSampleRates);
- m_recorderUtility->GetSupportedSampleRatesL(supportedSampleRates);
- for (TInt j = 0; j < supportedSampleRates.Count(); j++ )
- m_supportedSampleRates.append(supportedSampleRates[j]);
+ m_recorderUtility->GetSupportedSampleRatesL(supportedSampleRates);
+ for (TInt j = 0; j < supportedSampleRates.Count(); j++ )
+ m_supportedSampleRates.append(supportedSampleRates[j]);
- CleanupStack::PopAndDestroy(&supportedSampleRates);
+ CleanupStack::PopAndDestroy(&supportedSampleRates);
}
QList<int> S60AudioCaptureSession::supportedAudioSampleRates(const QAudioEncoderSettings &settings) const
@@ -427,107 +446,107 @@ QList<int> S60AudioCaptureSession::supportedAudioSampleRates(const QAudioEncoder
QList<int> supportedSampleRates;
if (!settings.codec().isEmpty()) {
- if (settings.codec() == "AMR")
+ if (settings.codec() == "AMR")
supportedSampleRates.append(8000);
else
- supportedSampleRates = m_supportedSampleRates;
- }else
- supportedSampleRates = m_supportedSampleRates;
-
+ supportedSampleRates = m_supportedSampleRates;
+ }else
+ supportedSampleRates = m_supportedSampleRates;
+
return supportedSampleRates;
}
void S60AudioCaptureSession::populateAudioCodecsDataL()
-{
- if (!m_recorderUtility)
+{
+ if (!m_recorderUtility)
return;
-
- if (m_controllerIdMap.contains("audio/amr")) {
- CodecData data;
+
+ if (m_controllerIdMap.contains("audio/amr")) {
+ CodecData data;
data.codecDescription = QString("GSM AMR Codec");
m_audioCodeclist[QString("AMR")]=data;
- }
+ }
if (m_controllerIdMap.contains("audio/basic")) {
- CodecData data;
- data.fourCC = KMMFFourCCCodeALAW;
+ CodecData data;
+ data.fourCC = KMMFFourCCCodeALAW;
data.codecDescription = QString("Sun/Next ""Au"" audio codec");
- m_audioCodeclist[QString("AULAW")]=data;
+ m_audioCodeclist[QString("AULAW")]=data;
}
- if (m_controllerIdMap.contains("audio/wav")) {
- CodecData data;
- data.fourCC = KMMFFourCCCodePCM16;
+ if (m_controllerIdMap.contains("audio/wav")) {
+ CodecData data;
+ data.fourCC = KMMFFourCCCodePCM16;
data.codecDescription = QString("Pulse code modulation");
m_audioCodeclist[QString("PCM")]=data;
- }
- if (m_controllerIdMap.contains("audio/mp4")) {
- CodecData data;
- data.fourCC = KMMFFourCCCodeAAC;
+ }
+ if (m_controllerIdMap.contains("audio/mp4")) {
+ CodecData data;
+ data.fourCC = KMMFFourCCCodeAAC;
data.codecDescription = QString("Advanced Audio Codec");
m_audioCodeclist[QString("AAC")]=data;
- }
-
+ }
+
// default samplerates
m_supportedSampleRates << 96000 << 88200 << 64000 << 48000 << 44100 << 32000 << 24000 << 22050 << 16000 << 12000 << 11025 << 8000;
m_captureState = EInitialized;
- if (m_controllerIdMap.contains("audio/wav") && m_captureState != EInitialized) {
- TMdaFileClipLocation location;
+ if (m_controllerIdMap.contains("audio/wav") && m_captureState != EInitialized) {
+ TMdaFileClipLocation location;
location.iName = KAudioDummyFile();
TMdaWavClipFormat format;
m_captureState = EInitializing;
- m_recorderUtility->OpenL(&location, &format);
- }
+ m_recorderUtility->OpenL(&location, &format);
+ }
}
void S60AudioCaptureSession::applyAudioSettingsL()
-{
+{
if (!m_recorderUtility || m_format.codec() == "AMR")
- return;
-
- TFourCC fourCC = m_audioCodeclist.value(m_format.codec()).fourCC;
-
- if (m_format.codec() == "PCM")
- fourCC = determinePCMFormat();
-
+ return;
+
+ TFourCC fourCC = m_audioCodeclist.value(m_format.codec()).fourCC;
+
+ if (m_format.codec() == "PCM")
+ fourCC = determinePCMFormat();
+
RArray<TFourCC> supportedDataTypes;
CleanupClosePushL(supportedDataTypes);
- m_recorderUtility->GetSupportedDestinationDataTypesL(supportedDataTypes);
+ m_recorderUtility->GetSupportedDestinationDataTypesL(supportedDataTypes);
- for (TInt k = 0; k < supportedDataTypes.Count(); k++ ) {
- if (supportedDataTypes[k].FourCC() == fourCC.FourCC()) {
+ for (TInt k = 0; k < supportedDataTypes.Count(); k++ ) {
+ if (supportedDataTypes[k].FourCC() == fourCC.FourCC()) {
m_recorderUtility->SetDestinationDataTypeL(supportedDataTypes[k]);
break;
}
}
- CleanupStack::PopAndDestroy(&supportedDataTypes);
-
+ CleanupStack::PopAndDestroy(&supportedDataTypes);
+
RArray<TUint> supportedSampleRates;
CleanupClosePushL(supportedSampleRates);
- m_recorderUtility->GetSupportedSampleRatesL(supportedSampleRates);
+ m_recorderUtility->GetSupportedSampleRatesL(supportedSampleRates);
for (TInt i = 0; i < supportedSampleRates.Count(); i++ ) {
TUint supportedSampleRate = supportedSampleRates[i];
- if (supportedSampleRate == m_format.frequency()) {
+ if (supportedSampleRate == m_format.frequency()) {
m_recorderUtility->SetDestinationSampleRateL(m_format.frequency());
break;
- }
+ }
}
CleanupStack::PopAndDestroy(&supportedSampleRates);
-
+
RArray<TUint> supportedChannels;
CleanupClosePushL(supportedChannels);
- m_recorderUtility->GetSupportedNumberOfChannelsL(supportedChannels);
- for (TInt l = 0; l < supportedChannels.Count(); l++ ) {
- if (supportedChannels[l] == m_format.channels()) {
+ m_recorderUtility->GetSupportedNumberOfChannelsL(supportedChannels);
+ for (TInt l = 0; l < supportedChannels.Count(); l++ ) {
+ if (supportedChannels[l] == m_format.channels()) {
m_recorderUtility->SetDestinationNumberOfChannelsL(m_format.channels());
break;
}
}
- CleanupStack::PopAndDestroy(&supportedChannels);
+ CleanupStack::PopAndDestroy(&supportedChannels);
}
TFourCC S60AudioCaptureSession::determinePCMFormat()
-{
- TFourCC fourCC;
-
+{
+ TFourCC fourCC;
+
if (m_format.sampleSize() == 8) {
// 8 bit
switch (m_format.sampleType()) {
@@ -539,7 +558,7 @@ TFourCC S60AudioCaptureSession::determinePCMFormat()
fourCC.Set(KMMFFourCCCodePCMU8);
break;
}
- case QAudioFormat::Float:
+ case QAudioFormat::Float:
case QAudioFormat::Unknown:
default: {
fourCC.Set(KMMFFourCCCodePCM8);
@@ -547,7 +566,7 @@ TFourCC S60AudioCaptureSession::determinePCMFormat()
}
}
} else if (m_format.sampleSize() == 16) {
- // 16 bit
+ // 16 bit
switch (m_format.sampleType()) {
case QAudioFormat::SignedInt: {
fourCC.Set(m_format.byteOrder()==QAudioFormat::BigEndian?
@@ -563,7 +582,7 @@ TFourCC S60AudioCaptureSession::determinePCMFormat()
fourCC.Set(KMMFFourCCCodePCM16);
break;
}
- }
+ }
}
return fourCC;
}