diff -r 2f5c9ee7098c -r 072a5fa0c63b voicerecorder/RecViewSrc/CVRMdaRecorder.cpp --- a/voicerecorder/RecViewSrc/CVRMdaRecorder.cpp Thu Aug 19 09:57:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1639 +0,0 @@ -/* -* Copyright (c) 2002 - 2006 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* This class acts as a high level wrapper around the media server -* playback and recording functionalities. -* -*/ - - -// INCLUDE FILES -#include "CVRSystemEventHandler.h" -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include // Feature manager - -#include -#include -#include "VoiceRecorderPrivatePSKeys.h" -#include "CVRMemo.h" -#include "MVRObserver.h" -#include "VRConsts.h" -#include "VRUtils.h" -#include "CVRTonePlayer.h" -#include "CVRMdaRecorder.h" -#include "CVRDiskSpaceWatcher.h" -#include "CVRRecViewModel.h" -#include - - -// MACROS -#ifdef _DEBUG -#define DEB_PRN_0(str) RDebug::Print(str) -#else -#define DEB_PRN_0(str) -#endif - -// CONSTANTS -const TInt KVRMdaRecorderDefaultStep( 5 ); -const TInt KVRObserverArrayGranularity( 2 ); -const TInt KVRMaxNoteLabelLength( 256 ); - - -// ================= MEMBER FUNCTIONS ======================================== - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::CVRMdaRecorder -// -// --------------------------------------------------------------------------- -// -CVRMdaRecorder::CVRMdaRecorder() : - iObservers( KVRObserverArrayGranularity ), - iIsAttachedToMemo( EFalse ), - iMediaServerError( KErrNone ), - iDimLight (EFalse), - iAttachingToMemo(EFalse), - ifInRecording(EFalse), - ifStopCalled(EFalse) - { - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::~CVRMdaRecorder -// -// --------------------------------------------------------------------------- -// -CVRMdaRecorder::~CVRMdaRecorder() - { - - delete iGlobalNote; - delete iAudioInput; - delete iAudioRecorder; - delete iErrorUI; - delete iTimer; - delete iTonePlayer; - delete iLight; - delete iDiskSpaceWatcher; - iObservers.Close(); - - if (iCurrentCallHandler) - { - delete iCurrentCallHandler; - } - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::ConstructL -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::ConstructL() - { - _LIT_SECURITY_POLICY_S0( KVRWritePolicy, KVoiceRecorderAppUID3 ); - _LIT_SECURITY_POLICY_PASS( KVRReadPolicy ); - // Connect to Pub&Sub: - // Error ignored, key may be already defined which is ok for us - iPropVRState.Define( KPSUidVoiceRecorder, KVoiceRecorderMode, 0, - KVRReadPolicy, KVRWritePolicy ); - - User::LeaveIfError( - iPropVRState.Attach( - KPSUidVoiceRecorder, KVoiceRecorderMode ) ); - - // To allow/don't allow screensaver - // Errors ignored, no actions needed if API is not available - iPropScreenSaver.Attach( KPSUidScreenSaver, - KScreenSaverAllowScreenSaver ); - iAudioRecorder = CMdaAudioRecorderUtility::NewL( *this, NULL, - KAudioPriorityRecording, TMdaPriorityPreference( - KAudioPrefRealOneLocalPlayback ) ); - - iGlobalNote = CAknGlobalNote::NewL(); - - iErrorUI = CErrorUI::NewL(); - - iTonePlayer = CVRTonePlayer::NewL(); - iTonePlayer->PrepareToneL( EAvkonSIDVoiceRecordingStartTone ); - - iLight = CHWRMLight::NewL(this); - - // start observe diskdrive - RFs& fs( CEikonEnv::Static()->FsSession() ); - - iDiskSpaceWatcher = CVRDiskSpaceWatcher::NewL(*this, fs); - - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::MoscoStateChangeEvent -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::MoscoStateChangeEvent( CBase* /*aObject*/, - TInt aPreviousState, - TInt aCurrentState, - TInt aErrorCode ) - { -#ifdef _DEBUG - RDebug::Print( _L( "VoiceRecorder: MoscoStateChangeEvent() prev: %d, current: %d, error: %d" ), - aPreviousState, aCurrentState, aErrorCode ); -#endif - iMediaServerError = aErrorCode; - - TRAP_IGNORE(CreateAudioInputL()); - - - // Stop the active scheduler wait (if present) - if ( iActiveWait.IsStarted() ) - { - iActiveWait.AsyncStop(); - } - - if (iMediaServerError != KErrNone ) - { - - // when mmc card is used and unpluged, this error returned - if (iMediaServerError == KErrCorrupt || iMediaServerError == KErrNotReady) - { - CVRRecViewModel* iViewModel = NULL; - //iAudioRecorder->Close(); - iViewModel = dynamic_cast (iAutoStopObserver); - if(iViewModel != NULL) - { - TRAP_IGNORE( iViewModel->HandleCommandL(EEikCmdExit) ); - } - else - { - TRAP_IGNORE( CEikonEnv::Static()->EikAppUi()->HandleCommandL( EAknSoftkeyExit) ); - } - } - - // Media server reports KErrDied if the playing was interrupted - // by some other system sound triggered by for example incoming SMS - - if (aPreviousState == CMdaAudioClipUtility::ERecording || aPreviousState == CMdaAudioClipUtility::EPlaying ) - { - - //if ( iMediaServerError != KErrDied && iMediaServerError != KErrAccessDenied ) - if ( iMediaServerError != KErrDied && - iMediaServerError != KErrAccessDenied && - iMediaServerError != KErrInUse ) - { - TBuf< KVRMaxNoteLabelLength > label; - - // If showing of error note fails, then.. well it fails - if ( iMediaServerError == KErrNotSupported ) - { - CCoeEnv::Static()-> - ReadResourceAsDes16( label, R_VR_UNSUPPORTED_INFONOTE_LABEL ); - - TRAP_IGNORE( iGlobalNote-> - ShowNoteL( EAknGlobalErrorNote, label ) ); - - } - else if ( iMediaServerError == KErrCorrupt ) - { - CCoeEnv::Static()-> - ReadResourceAsDes16( label, R_VR_CORRUPT_INFONOTE_LABEL ); - - TRAP_IGNORE( iGlobalNote->ShowNoteL( EAknGlobalErrorNote, - label ) ); - } - - else - { - TRAP_IGNORE( iErrorUI->ShowGlobalErrorNoteL( iMediaServerError ) ); - } - - } - if(iMediaServerError == KErrInUse && aPreviousState == CMdaAudioClipUtility::EPlaying) - { - CVRRecViewModel* iViewModel = NULL; - iViewModel = dynamic_cast (iAutoStopObserver); - if(iViewModel != NULL) - { - iViewModel->HandleCommandL(ECmdPause); - } - return; - } - else - { - StopAndNotify(); - } - } - - //it will happen when the openfile fails - if (aPreviousState == CMdaAudioClipUtility::ENotReady && aCurrentState == CMdaAudioClipUtility::ENotReady ) - { -#ifdef _DEBUG - RDebug::Print( _L( "VoiceRecorder: callback stop called" ) ); -#endif - iAudioRecorder->Close(); - } - -#ifdef _DEBUG - if ( aCurrentState == CMdaAudioClipUtility::ERecording) - { - RDebug::Print( _L( "VoiceRecorder: ERecording" ) ); - } -#endif - - } // if ( iMediaServerError != KErrNone ) - - if ( aCurrentState == CMdaAudioClipUtility::ERecording || - aCurrentState == CMdaAudioClipUtility::EPlaying ) - { - // Do not allow screen saver while playing - // Errors ignored, no actions needed if API is not available - iPropScreenSaver.Set( KPSUidScreenSaver, - KScreenSaverAllowScreenSaver, EVRScreenSaverNotAllowed ); - } - - if ( aCurrentState == CMdaAudioClipUtility::EOpen ) - { - switch ( aPreviousState ) - { - case CMdaAudioClipUtility::ENotReady: - { - iMemo->UpdateModifiedDate(); - if ( iAttachingToMemo ) - { - iAttachingToMemo = EFalse; - TRAP_IGNORE( ConfigureMemoL()); - } - break; - } - default: - { - StopAndNotify(); - break; - } - } - } - DEB_PRN_0( _L( "CVRMdaRecorder::MoscoStateChangeEvent::Exit")); - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::RegisterObserver -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::RegisterObserver( MVRObserver* aObserver ) - { - if ( aObserver && iObservers.Find( aObserver ) == KErrNotFound ) - { - iObservers.Append( aObserver ); - } - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::UnregisterObserver -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::UnregisterObserver( MVRObserver* aObserver ) - { - if ( !aObserver ) - { - return; - } - - TInt index( iObservers.Find( aObserver ) ); - if ( index != KErrNotFound ) - { - iObservers.Remove( index ); - } - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::SetAutoStopObserver -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::SetAutoStopObserver( MVRObserver* aObserver ) - { - iAutoStopObserver = aObserver; - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::AttachToMemoL -// Opens a memo file. -// If the specified file does not exist (yet), it is created. -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::AttachToMemoL( CVRMemo* aMemo ) - { -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL -enter" )); -#endif - - // if error happen, attach will fail - - if( iIsAttachedToMemo ) - { - User::Panic( KVRPanic,EPanicAlreadyAttached ); - } - - if( !aMemo ) - { - User::Panic( KVRPanic, KErrNotFound ); - } - - iMemo = aMemo; - - // if the mmc card is full, should not attach to it - - RFs& fs( CEikonEnv::Static()->FsSession() ); - - -// old storage system -#ifndef RD_MULTIPLE_DRIVE - if ( iMemo->MemoStore() == EMemoStorePhoneMemory ) - { -#ifdef __AAC_ENCODER_PLUGIN - if (((iMemo->Quality() != EQualityHigh) && SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) || - ((iMemo->Quality() == EQualityHigh) && SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel ))) -#else - // now AAC format is not enabled - if (SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) -#endif - { - VRUtils::ShowMemoryFullConfirmationQuery(); - if(GetInRecordingFlag()) - { - SetInRecordingFlag(EFalse); - } - } - - } - - // MMC card - else - { -#ifdef __AAC_ENCODER_PLUGIN - if (((iMemo->Quality() != EQualityHigh) && SysUtil::MMCSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) || - ((iMemo->Quality() == EQualityHigh) && SysUtil::MMCSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel ))) -#else - // now AAC format is not enabled - if (SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) -#endif - { - VRUtils::ShowMemoryFullConfirmationQuery(ETrue); - - if(GetInRecordingFlag()) - { - SetInRecordingFlag(EFalse); - } - } - } - -// now multiple drives -#else - -#ifdef __AAC_ENCODER_PLUGIN - if (((iMemo->Quality() != EQualityHigh) && SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf, iMemo->StorageDrive())) || - ((iMemo->Quality() == EQualityHigh) && SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel, iMemo->StorageDrive()))) -#else - // now AAC format is not enabled - if (SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf, iMemo->StorageDrive())) -#endif - - { - //mmc card - if ( iMemo->StorageDrive() == VRUtils::GetRemovableMassStorageL()) - { - VRUtils::ShowMemoryFullConfirmationQuery(ETrue); - } - else - { - VRUtils::ShowMemoryFullConfirmationQuery(); - } - if(GetInRecordingFlag()) - { - SetInRecordingFlag(EFalse); - } - } - - -#endif - - // opens an existing file or creates new - iAudioRecorder->OpenFileL( iMemo->File() ); - - iAttachingToMemo = ETrue; - - if( !iActiveWait.IsStarted() ) - { -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL::AWaitStarting...")); -#endif - iActiveWait.Start(); // CSI: 10 # - -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL::AWResuming...[%d]"), iMediaServerError); -#endif - } - - User::LeaveIfError( iMediaServerError ); - - - -/* - if( !iActiveWait.IsStarted() ) - { - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL::AWaitStarting...")); - iActiveWait.Start(); // CSI: 10 # - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL::AWResuming...[%d]"), iMediaServerError); - } - - User::LeaveIfError( iMediaServerError ); - - // Configure bitrate if recording an AMR clip. - // Default bitrate is 12200 and it's used if codec doesn't support - // the bitrate that is retrieved from Central Repository. - if (iMemo->Quality() == EQualityMMSOptimized ) - { - TUint configuredAmrBitrate( VRUtils::AMRBitrateL() ); - TUint amrBitrate( KVRDefaultAmrBitrate ); - - // Fetch supported bitrates and find out if configured bitrate - // is supported - RArray rates; - iAudioRecorder->GetSupportedBitRatesL( rates ); - TInt num = rates.Count(); - if(num > 0) - { - rates.Sort(); - TInt found = rates.Find(configuredAmrBitrate); - if (found == KErrNotFound) - { - amrBitrate = rates[num-1]; - } - } - rates.Reset(); // Clear array - iAudioRecorder->SetDestinationBitRateL( amrBitrate ); - } - - -// added for supporting mp4 format -#ifdef __AAC_ENCODER_PLUGIN - else if (iMemo->Quality() == EQualityHigh) - { - - TInt configuredAacSamplerate( VRUtils::AACSamplerateL() ); - TInt aacSampleRate( KVRDefaultSamplerateAac ); - - TInt configuredAacBitrate( VRUtils::AACBitrateL() ); - TInt aacBitrate( KVRDefaultBitrateAac ); - - TInt configuredAudioMode( VRUtils::AACAudioModeL() ); - - // Sample rate - RArray supportedSampleRates; -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-GetSupportedSampleRatesL -before" )); -#endif - iAudioRecorder->GetSupportedSampleRatesL(supportedSampleRates); - -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-GetSupportedSampleRatesL -after" )); -#endif - - TInt num1 = supportedSampleRates.Count(); - if(num1 > 0) - { - supportedSampleRates.Sort(); - TInt found1 = supportedSampleRates.Find(configuredAacSamplerate); - if (found1 == KErrNotFound) - { - aacSampleRate = supportedSampleRates[num1-1]; - } - } - - supportedSampleRates.Reset(); -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-SetDestinationSampleRateL -before, sampleRate is %d"), aacSampleRate); -#endif - iAudioRecorder->SetDestinationSampleRateL(aacSampleRate); - -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-SetDestinationSampleRateL -after" )); -#endif - - - // Bit reate - RArray supportedBitRates; - -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-GetSupportedBitRatesL -before" )); -#endif - iAudioRecorder->GetSupportedBitRatesL(supportedBitRates); - -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-GetSupportedBitRatesL -after" )); -#endif - - TInt num2 = supportedBitRates.Count(); - if(num2 > 0) - { - supportedBitRates.Sort(); - TInt found2 = supportedBitRates.Find(configuredAacBitrate); - if (found2 == KErrNotFound) - { - aacBitrate = supportedBitRates[num2-1]; - } - } - - supportedBitRates.Reset(); - -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-SetDestinationBitRateL -before, bitrate is %d"), aacBitrate); -#endif - iAudioRecorder->SetDestinationBitRateL(aacBitrate); - -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-SetDestinationBitRateL -after" )); -#endif - - // the audio mode flag - -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL-GetSupportedNumberOfChannelsL -before" )); -#endif - RArray supportedNumberOfChannels; - iAudioRecorder->GetSupportedNumberOfChannelsL(supportedNumberOfChannels); - TInt num3 = supportedNumberOfChannels.Count(); - if (num3 > 0) - { - supportedNumberOfChannels.Sort(); - TInt ifFound = supportedNumberOfChannels.Find(configuredAudioMode); - if (ifFound == KErrNotFound) - { - configuredAudioMode = supportedNumberOfChannels [0]; - } - } - supportedNumberOfChannels.Reset(); - iAudioRecorder->SetDestinationNumberOfChannelsL(configuredAudioMode); - - } -#endif - iIsAttachedToMemo = ETrue; - ResetPosition(); -*/ - -#ifdef _DEBUG - RDebug::Print( _L( "CVRMdaRecorder::AttachToMemoL -exit" )); -#endif - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::CreateNewMemoL -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::CreateNewMemoL( CVRMemo* aMemo ) - { - iMemo = aMemo; - iAudioRecorder->OpenFileL( aMemo->File() ); - if ( !iActiveWait.IsStarted() ) - { - iActiveWait.Start(); // CSI: 10 # - } - User::LeaveIfError( iMediaServerError ); - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::DetachMemo -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::DetachMemo() - { - if ( iIsAttachedToMemo ) - { - Stop(); - //Need to delete iAudioInput before close!!! - DeleteAudioInput(); - - iAudioRecorder->Close(); - - iMemo = NULL; - iIsAttachedToMemo = EFalse; - } - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::SetVolume -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::SetVolume( TInt aStep, TInt aMaxSteps ) - { - if ( iIsAttachedToMemo ) - { - // On device, MaxVolume() typically returns 9. - TInt maxVolume( iAudioRecorder->MaxVolume() ); - TInt volume = maxVolume * aStep / aMaxSteps; - - // Just to make sure that volume is between 0 .. MaxVolume - if ( volume < 0) - { - volume = 0; - } - else if ( volume > maxVolume ) - { - volume = maxVolume; - } - -#ifdef _DEBUG - RDebug::Print( _L( "VoiceRecorder: Set volume: %d, max volume: %d" ), - volume, maxVolume ); -#endif - iAudioRecorder->SetVolume( volume ); - } - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::PlayL -// -// --------------------------------------------------------------------------- -// -TInt CVRMdaRecorder::PlayL() - { - __ASSERT_DEBUG( iIsAttachedToMemo, User::Panic( KVRPanic, - EPanicNotAttached ) ); - - if( iPause ) - { - iAudioRecorder->SetPosition( iPosition ); - iPosition = 0; - iPause = EFalse; - } - - // This line was added to prevent MMF crash, remove it when play works - // without this - iAudioRecorder->SetPlaybackBalance( KMMFBalanceCenter ); - - SetIfStopCalled(EFalse); - iAudioRecorder->PlayL(); - - User::LeaveIfError( iPropVRState.Set( KPSUidVoiceRecorder, - KVoiceRecorderMode, EVRPlaying ) ); - - // Do not allow screen saver while playing - // Errors ignored, no actions needed if API is not available - iPropScreenSaver.Set( KPSUidScreenSaver, - KScreenSaverAllowScreenSaver, EVRScreenSaverNotAllowed ); - - if( !iActiveWait.IsStarted() ) - { - iActiveWait.Start(); // CSI: 10 # - } - StartTimerL(); - return iMediaServerError; - } - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::RecordL -// Starts the recording of a sound clip. Checks the memory space situation -// and plays start tone before starting recording. -// --------------------------------------------------------------------------- -// -TInt CVRMdaRecorder::RecordL() - { - // If we receive record command and file is not opened yet. wait for file - // to be opened and then resume. - if ( !iIsAttachedToMemo && iAttachingToMemo && !iActiveWait.IsStarted() ) - { - iActiveWait.Start(); - User::LeaveIfError( iMediaServerError ); - } - - __ASSERT_DEBUG( iIsAttachedToMemo, User::Panic( KVRPanic, - EPanicNotAttached ) ); - TBool wasPaused( iPause ); - iPause = EFalse; - - // Check if available memory is/goes below critical level - // in that case record is not performed - // KVRRecStartMemBuf should be size of 60 sec AMR and 5 sec WAV - // New max time estimation for WAV is calculated after 5 secs - RFs& fs( CEikonEnv::Static()->FsSession() ); - - TBool critical( EFalse ); - -// the current storage system (phone memory and mmc card) -#ifndef RD_MULTIPLE_DRIVE - if ( iMemo->MemoStore() == EMemoStorePhoneMemory ) - { -#ifdef __AAC_ENCODER_PLUGIN - if (((iMemo->Quality() != EQualityHigh) && SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) || - ((iMemo->Quality() == EQualityHigh) && SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel ))) -#else - // now AAC format is not enabled - if (SysUtil::FFSSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) -#endif - { - VRUtils::ShowMemoryFullConfirmationQuery(); - critical = ETrue; - } - } - - // MMC card - else - { -#ifdef __AAC_ENCODER_PLUGIN - if (((iMemo->Quality() != EQualityHigh) && SysUtil::MMCSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) || - ((iMemo->Quality() == EQualityHigh) && SysUtil::MMCSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel ))) -#else - // now AAC format is not enabled - if (SysUtil::MMCSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf )) -#endif - { - VRUtils::ShowMemoryFullConfirmationQuery( ETrue ); - critical = ETrue; - } - - } - -// now for multiple drives -#else -#ifdef __AAC_ENCODER_PLUGIN - if (((iMemo->Quality() != EQualityHigh) && SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf, iMemo->StorageDrive())) || - ((iMemo->Quality() == EQualityHigh) && SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRAACCriticalMemoryLevel, iMemo->StorageDrive()))) -#else - // now AAC format is not enabled - if (SysUtil::DiskSpaceBelowCriticalLevelL( &fs, KVRRecStartMemBuf, iMemo->StorageDrive())) -#endif - { - if ( iMemo->StorageDrive() == VRUtils::GetRemovableMassStorageL()) - { - VRUtils::ShowMemoryFullConfirmationQuery(ETrue); - } - else - { - VRUtils::ShowMemoryFullConfirmationQuery(); - } - critical = ETrue; - } - - -#endif - - if( critical ) - { - User::Leave( KErrDiskFull ); - } - - - if ( !wasPaused ) - { - iTonePlayer->PlayTone( EAvkonSIDVoiceRecordingStartTone ); - iTonePlayer->PrepareToneL( EAvkonSIDVoiceRecordingStopTone ); - } - -// start monitor disk space -#ifdef __AAC_ENCODER_PLUGIN - if (iMemo->Quality() == EQualityHigh) - { - TInt drive (0); -#ifndef RD_MULTIPLE_DRIVE - if ( iMemo->MemoStore() == EMemoStorePhoneMemory ) - { - drive = EDriveC; - } - else - { - drive = EDriveE; - } -// multiple drives -#else - drive = iMemo->StorageDrive(); -#endif - - iDiskSpaceWatcher->RequestNotification(KVRAACCriticalMemoryLevel,drive); - } -#endif - - // Set recording preference - iAudioRecorder->SetPriority( KAudioPriorityRecording, - TMdaPriorityPreference( KAudioPrefVoiceRec ) ); - iAudioRecorder->SetGain( iAudioRecorder->MaxGain() ); - - SetIfStopCalled(EFalse); - - iAudioRecorder->RecordL(); - - // Sets the indication that recording has started -> - // Current file's handle can't be reused for next file - iMemo->SetRecorded( ETrue ); - - - User::LeaveIfError( iPropVRState.Set( KPSUidVoiceRecorder, - KVoiceRecorderMode, EVRRecording ) ); - - // Do not allow screen saver while recording - // Errors ignored, no actions needed if API is not available - iPropScreenSaver.Set( KPSUidScreenSaver, KScreenSaverAllowScreenSaver, - EVRScreenSaverNotAllowed ); - - if( !iActiveWait.IsStarted() ) - { - iActiveWait.Start(); // CSI: 10 # - } - StartTimerL(); - - return iMediaServerError; - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::Stop -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::Stop() - { - if ( iIsAttachedToMemo ) - { - TBool reallyStopping( iPause ); -#ifdef _DEBUG - RDebug::Print( _L( "VoiceRecorder: Stop error: %d" ), - iMediaServerError ); -#endif - iPause = EFalse; - - if( iAudioRecorder->State() == CMdaAudioRecorderUtility::ERecording ) - { - reallyStopping = ETrue; - - // if the dim light is on, turn off it. - if(iDimLight) - { - - iLight->ReleaseLight (CHWRMLight::EPrimaryDisplay); - User::ResetInactivityTime(); - iDimLight = EFalse; - } - - } - // it will tell VRecorder not pause because it has been stopped. - SetIfStopCalled(ETrue); - iAudioRecorder->Stop(); - - // if error does not happen in recording, change the file to visible - iMemo->File().SetAtt( KEntryAttNormal, KEntryAttHidden); - - iTonePlayer->PlayTone( EAvkonSIDVoiceRecordingStopTone ); - iTonePlayer->PrepareTone( EAvkonSIDVoiceRecordingStartTone ); - - if( ( iAudioRecorder->State() == CMdaAudioRecorderUtility::EOpen ) || - reallyStopping ) - { - // Set lower preference to ensure other sounds will - // be played correctly - iAudioRecorder->SetPriority( KAudioPriorityRecording, - TMdaPriorityPreference( KAudioPrefRealOneLocalPlayback ) ); - } - - // Error value ignored if PS key is not available - iPropVRState.Set( KPSUidVoiceRecorder, KVoiceRecorderMode, EVRIdle ); - // Used to check the state of a phone call if any - - if ( iCurrentCallHandler ) - { - delete iCurrentCallHandler; - iCurrentCallHandler = NULL; - } - - TRAP_IGNORE( iCurrentCallHandler = CVRSystemEventHandler::NewL() ); - TInt currentState( 0 ); - TRAP_IGNORE( currentState = iCurrentCallHandler->StateL( KPSUidCtsyCallInformation, KCTsyCallState ) ); - - // Do not allow screen saver if there is an active phone call - if(currentState == EPSCTsyCallStateRinging) - { - // Do not allow screen saver - // Errors ignored, no actions needed if API is not available - iPropScreenSaver.Set( KPSUidScreenSaver, - KScreenSaverAllowScreenSaver, EVRScreenSaverNotAllowed ); - } - else - { - // Allow screen saver - // Errors ignored, no actions needed if API is not available - iPropScreenSaver.Set( KPSUidScreenSaver, - KScreenSaverAllowScreenSaver, EVRScreenSaverAllowed ); - } - - StopTimer(); - ResetPosition(); - iMemo->UpdateModifiedDate(); - } - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::StopAndNotify -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::StopAndNotify() - { - Stop(); - if ( iAutoStopObserver ) - { -#ifdef _DEBUG - RDebug::Print( _L( "VoiceRecorder: StopAndNotify AutoStopObserver: %d" ), - iMediaServerError ); -#endif - iAutoStopObserver->Update(); -#ifdef _DEBUG - RDebug::Print( _L( "VoiceRecorder: StopAndNotify AutoStopObserver: %d" ), - iMediaServerError ); -#endif - } - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::Pause -// -// --------------------------------------------------------------------------- -void CVRMdaRecorder::Pause() - { - __ASSERT_DEBUG( iIsAttachedToMemo, User::Panic( KVRPanic, - EPanicNotAttached ) ); - - iPause = ETrue; - -#ifdef _DEBUG - RDebug::Print( _L("VoiceRecorder: Pause called. Position: %d:%d"), - I64HIGH( iPosition.Int64() ), I64LOW( iPosition.Int64() ) ); -#endif - - iAudioRecorder->Stop(); - - // Error value ignored if PS key is not available - iPropVRState.Set( KPSUidVoiceRecorder, KVoiceRecorderMode, EVRIdle ); - - // Don't allow screen saver - // Errors ignored, no actions needed if API is not available - iPropScreenSaver.Set( KPSUidScreenSaver, - KScreenSaverAllowScreenSaver, EVRScreenSaverAllowed ); - - StopTimer(); - SyncAndNotify(); - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::ForwardL -// -// --------------------------------------------------------------------------- -// -TInt CVRMdaRecorder::ForwardL() - { - if ( !MovePositionL( KVRMdaRecorderDefaultStep ) ) - { - return KErrOverflow; - } - return iMediaServerError; - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::RewindL -// -// --------------------------------------------------------------------------- -// -TInt CVRMdaRecorder::RewindL() - { - MovePositionL( -KVRMdaRecorderDefaultStep ); - return iMediaServerError; - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::CanAcceptCommands -// -// --------------------------------------------------------------------------- -// -TBool CVRMdaRecorder::CanAcceptCommands() const - { - return !iActiveWait.IsStarted(); - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::MovePositionL -// -// --------------------------------------------------------------------------- -// -TBool CVRMdaRecorder::MovePositionL( TInt aSeconds ) - { - __ASSERT_DEBUG( iIsAttachedToMemo, User::Panic( KVRPanic, - EPanicNotAttached ) ); - -#ifdef _DEBUG - RDebug::Print( _L("VoiceRecorder: MovePosition called. Base position: %d:%d"), - I64HIGH( iAudioRecorder->Position().Int64() ), - I64LOW( iAudioRecorder->Position().Int64() ) ); -#endif - - TInt64 interval; - if (iPause) - { - interval = iPosition.Int64() + aSeconds * KVRSecondAsMicroSeconds; - } - // Not sure if iPosition value is valid other than when paused, so do as - // previous for all other states: - else - { - interval = iAudioRecorder->Position().Int64() + - aSeconds * - KVRSecondAsMicroSeconds; - } - - // Truncated to integer values - TInt integerInterval( interval / KVRSecondAsMicroSeconds ); - TInt integerDuration( iAudioRecorder->Duration().Int64() / - KVRSecondAsMicroSeconds ); - if ( interval < 0 ) - { - interval = 0; - } - // if gone past the end or integer values are the same - // in duration and position - else if ( interval > iAudioRecorder->Duration().Int64() || - integerInterval == integerDuration ) - { - interval = iAudioRecorder->Duration().Int64(); - } - -#ifdef _DEBUG - RDebug::Print( _L("VoiceRecorder: MovePosition called. Interval: %d:%d"), - I64HIGH( interval ), I64LOW( interval ) ); -#endif - - TTimeIntervalMicroSeconds newPosition( interval ); - - if (iPause) - { - iPosition = newPosition; - } - else if ( iAudioRecorder->State() == CMdaAudioClipUtility::EOpen ) - { - // not playing, recording or paused. -#ifdef _DEBUG - RDebug::Print( _L("VoiceRecorder. Idle.: MovePosition called. New Position: %d:%d"), - I64HIGH( newPosition.Int64() ), I64LOW( newPosition.Int64() ) ); -#endif - iAudioRecorder->SetPosition( newPosition ); - } - else - { - -#ifdef _DEBUG - RDebug::Print( _L("VoiceRecorder. Playing.: MovePosition called. New Position: %d:%d"), - I64HIGH( newPosition.Int64() ), I64LOW( newPosition.Int64() ) ); -#endif - - iAudioRecorder->Stop(); - iAudioRecorder->SetPosition( newPosition ); - iAudioRecorder->PlayL(); - if( !iActiveWait.IsStarted() ) - { - iActiveWait.Start(); // CSI: 10 # - } - } - SyncAndNotify(); - return ETrue; - } - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::ConfigureMemoL() -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::ConfigureMemoL() - { - DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Enter" )); - - // Configure bitrate if recording an AMR clip. - // Default bitrate is 12200 and it's used if codec doesn't support - // the bitrate that is retrieved from Central Repository. - if (iMemo->Quality() == EQualityMMSOptimized ) - { - TUint configuredAmrBitrate( VRUtils::AMRBitrateL() ); - TUint amrBitrate( KVRDefaultAmrBitrate ); - - // Fetch supported bitrates and find out if configured bitrate - // is supported - RArray rates; - iAudioRecorder->GetSupportedBitRatesL( rates ); - TInt num = rates.Count(); - if(num > 0) - { - rates.Sort(); - TInt found = rates.Find(configuredAmrBitrate); - if (found == KErrNotFound) - { - amrBitrate = rates[num-1]; - } - } - rates.Reset(); // Clear array - iAudioRecorder->SetDestinationBitRateL( amrBitrate ); - - DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Configured MMSOpt bitrate" )); - } - - - // added for supporting mp4 format -#ifdef __AAC_ENCODER_PLUGIN - else if (iMemo->Quality() == EQualityHigh) - { - TInt configuredAacSamplerate( VRUtils::AACSamplerateL() ); - TInt aacSampleRate( KVRDefaultSamplerateAac ); - - TInt configuredAacBitrate( VRUtils::AACBitrateL() ); - TInt aacBitrate( KVRDefaultBitrateAac ); - - TInt configuredAudioMode( VRUtils::AACAudioModeL() ); - - // Sample rate - RArray supportedSampleRates; - iAudioRecorder->GetSupportedSampleRatesL(supportedSampleRates); - - TInt num1 = supportedSampleRates.Count(); - if(num1 > 0) - { - supportedSampleRates.Sort(); - TInt found1 = supportedSampleRates.Find(configuredAacSamplerate); - if (found1 == KErrNotFound) - { - aacSampleRate = supportedSampleRates[num1-1]; - } - } - supportedSampleRates.Reset(); - iAudioRecorder->SetDestinationSampleRateL(aacSampleRate); - - DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Configured HiQ sampling rate" )); - - // Bit reate - RArray supportedBitRates; - iAudioRecorder->GetSupportedBitRatesL(supportedBitRates); - TInt num2 = supportedBitRates.Count(); - if(num2 > 0) - { - supportedBitRates.Sort(); - TInt found2 = supportedBitRates.Find(configuredAacBitrate); - if (found2 == KErrNotFound) - { - aacBitrate = supportedBitRates[num2-1]; - } - } - supportedBitRates.Reset(); - iAudioRecorder->SetDestinationBitRateL(aacBitrate); - DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Configured HiQ bit rate" )); - - // the audio mode flag - RArray supportedNumberOfChannels; - iAudioRecorder->GetSupportedNumberOfChannelsL(supportedNumberOfChannels); - TInt num3 = supportedNumberOfChannels.Count(); - if (num3 > 0) - { - supportedNumberOfChannels.Sort(); - TInt ifFound = supportedNumberOfChannels.Find(configuredAudioMode); - if (ifFound == KErrNotFound) - { - configuredAudioMode = supportedNumberOfChannels [0]; - } - } - supportedNumberOfChannels.Reset(); - iAudioRecorder->SetDestinationNumberOfChannelsL(configuredAudioMode); - - DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Configured HiQ channel" )); - } -#endif // __AAC_ENCODER_PLUGIN - iIsAttachedToMemo = ETrue; - ResetPosition(); - DEB_PRN_0( _L( "CVRMdaRecorder::ConfigureMemoL-Exit" )); - } - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::ResetPosition -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::ResetPosition() - { - if ( iIsAttachedToMemo ) - { - iAudioRecorder->SetPosition( TTimeIntervalMicroSeconds( 0 ) ); - SyncAndNotify(); - } - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::StartTimerL -// Create and start a timer with initial delay of 0 -// and a frequency of one second -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::StartTimerL() - { - StopTimer(); // stop if already running - - TCallBack cb( TimerCallBack, this ); - iTimer = CPeriodic::NewL( 1 ); // priority = EPriorityNormal + 1 = 1 - iTimer->Start( 0, KVRDisplayUpdateDelay, cb ); - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::StopTimer -// Stop the timer by deleting the CPeriodic object -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::StopTimer() - { - delete iTimer; - iTimer = NULL; - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::SyncAndNotify -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::SyncAndNotify() - { - if(!iPause) - { - iPosition = iAudioRecorder->Position(); - } - iMemo->SetPosition( iPosition ); - - iMemo->SetDuration( iAudioRecorder->Duration() ); - - for ( int i = 0; i < iObservers.Count(); i++ ) - { - TVRUpdateCommand command( EVRUpdate ); - if ( ( iMemo->Position().Int64() / KVRSecondAsMicroSeconds ) == 1 ) - { - command = EVRUpdate1Second; - } - iObservers[ i ]->Update( command ); - } - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::TimerCallBack -// -// --------------------------------------------------------------------------- -// -TInt CVRMdaRecorder::TimerCallBack( TAny* aMdaRecorder ) - { - CVRMdaRecorder* recorder = reinterpret_cast< CVRMdaRecorder* >( - aMdaRecorder ); - recorder->HandleTick(); - return ETrue; - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::HandleTick -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::HandleTick() - { - SyncAndNotify(); - - if ( iAudioRecorder->State() == CMdaAudioClipUtility::ERecording ) - { - - TTimeIntervalMicroSeconds position( 0 ); - TTimeIntervalMicroSeconds duration( 0 ); - TTimeIntervalMicroSeconds maxDuration( 0 ); - - position = iMemo->Position(); - duration = iMemo->Duration(); - maxDuration = iMemo->MaxDuration(); - - // Position value is used for comparison because it gives more accurate - // value than Duration value - if ( position >= maxDuration ) - { -#ifdef _DEBUG - RDebug::Print( _L("VoiceRecorder: Max duration passed. Position: %d:%d"), - I64HIGH( position.Int64() ), I64LOW( position.Int64() ) ); -#endif - -#ifdef _DEBUG - RDebug::Print( _L("VoiceRecorder: Max duration passed. Duration: %d:%d"), - I64HIGH( duration.Int64() ), I64LOW( duration.Int64() ) ); -#endif - -#ifdef _DEBUG - RDebug::Print( _L("VoiceRecorder: Max duration passed. MaxDuration: %d:%d"), - I64HIGH( maxDuration.Int64() ), I64LOW( maxDuration.Int64() ) ); -#endif - // Note that some data cropping is possible after stopping - // ->Duration decreases - StopAndNotify(); - } - } - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::SetIhf -// -// --------------------------------------------------------------------------- -// -TInt CVRMdaRecorder::SetIhf( TBool /*aEnabled*/ ) - { - return KErrNotSupported; - } - - -// --------------------------------------------------------------------------- -// CVRMdaRecorder::SetPositionL -// -// --------------------------------------------------------------------------- -// -void CVRMdaRecorder::SetPositionL( TInt aSeconds ) - { - __ASSERT_DEBUG( iIsAttachedToMemo, User::Panic( KVRPanic, - EPanicNotAttached ) ); - - if( iAudioRecorder->State() == CMdaAudioClipUtility::ERecording || - iAudioRecorder->State() == CMdaAudioClipUtility::ENotReady ) - { - return; - } - - TInt64 interval ( TInt64( aSeconds ) * KVRSecondAsMicroSeconds ); - - // Truncated to integer values - TInt integerInterval( interval / KVRSecondAsMicroSeconds ); - TInt integerDuration( iAudioRecorder->Duration().Int64() / - KVRSecondAsMicroSeconds ); - - if ( interval < 0 || integerDuration == 0 ) - { - interval = 0; - } - // if gone past the end or integer values are the same in - // duration and position - else if ( interval > iAudioRecorder->Duration().Int64() || - integerInterval == integerDuration ) - { - interval = iAudioRecorder->Duration().Int64(); - } - - TTimeIntervalMicroSeconds newPosition( interval ); - - if ( iPause ) - { - iPosition = newPosition; - } - else if ( iAudioRecorder->State() == CMdaAudioClipUtility::EOpen ) - { - iAudioRecorder->SetPosition( newPosition ); - } - else - { - iAudioRecorder->Stop(); - iAudioRecorder->SetPosition( newPosition ); - iAudioRecorder->PlayL(); - if( !iActiveWait.IsStarted() ) - { - iActiveWait.Start(); // CSI: 10 # - } - } - SyncAndNotify(); - } - -// --------------------------------------------------------- -// From class MBacklightControlObserver. -// CNTExternalEventObserver::LightStatusChanged -// --------------------------------------------------------- -// -void CVRMdaRecorder::LightStatusChanged(TInt aTarget, CHWRMLight::TLightStatus aStatus) - { - - if(aTarget == CHWRMLight::EPrimaryDisplayAndKeyboard || aTarget == CHWRMLight::EPrimaryDisplay) - { - if(aStatus == CHWRMLight::ELightOff) - { - if (iAudioRecorder) - { - if (iAudioRecorder->State() == CMdaAudioClipUtility::ERecording ) // set light to dimmed - { - - TRAPD(err, iLight->LightOnL(CHWRMLight::EPrimaryDisplay, KHWRMInfiniteDuration, 10, ETrue)); - if ( err == KErrNone ) - { - iDimLight = ETrue; - } - - } - } - - return; - } - - if((aStatus == CHWRMLight::ELightOn) && (aTarget == CHWRMLight::EPrimaryKeyboard)) - { - - if (iLight) - { - - CHWRMLight::TLightStatus status = iLight->LightStatus(CHWRMLight::EPrimaryDisplay); - - if( (status == CHWRMLight::ELightOn) && iDimLight ) - { - User::ResetInactivityTime(); - iDimLight = EFalse; - } - } - return; - } - - } - } - - -// --------------------------------------------------------- -// GetInRecordingFlag -// -// --------------------------------------------------------- -// -TBool CVRMdaRecorder::GetInRecordingFlag() - { - return ifInRecording; - } - - -// --------------------------------------------------------- -// SetInRecordingFlag -// --------------------------------------------------------- -// -void CVRMdaRecorder::SetInRecordingFlag(TBool aFlag) - { - ifInRecording = aFlag; - } - - -// --------------------------------------------------------- -// GetInRecordingFlag -// -// --------------------------------------------------------- -// -TBool CVRMdaRecorder::GetIfStopCalled() - { - return ifStopCalled; - } - - -// --------------------------------------------------------- -// SetInRecordingFlag -// --------------------------------------------------------- -// -void CVRMdaRecorder::SetIfStopCalled(TBool aFlag) - { - ifStopCalled = aFlag; - } - -// --------------------------------------------------------- -// IsAttachedToMemo -// --------------------------------------------------------- -// -TBool CVRMdaRecorder::IsAttachedToMemo() - { - return iIsAttachedToMemo; - } - - -// --------------------------------------------------------- -// CreateAudioInput -// --------------------------------------------------------- -// -void CVRMdaRecorder::CreateAudioInputL() - { - CAudioInput::TAudioInputPreference audioInput = CAudioInput::EDefaultMic; - - if ((iAudioRecorder->State() == CMdaAudioClipUtility::EOpen)&& - (!iAudioInput)) - { - iAudioInput = CAudioInput::NewL(*iAudioRecorder); - SetAudioInputL(audioInput); - iCurrentAudioInput = audioInput; - } - - } -// --------------------------------------------------------- -// SetAudioInputL -// --------------------------------------------------------- -// -void CVRMdaRecorder::SetAudioInputL(CAudioInput::TAudioInputPreference aAudioInput) - { - if((iAudioInput)&&(iCurrentAudioInput!=aAudioInput)) - { - RArray inputArray(4); - CleanupClosePushL( inputArray ); - inputArray.Append( aAudioInput ); - iAudioInput->SetAudioInputL( inputArray.Array() ); - CleanupStack::PopAndDestroy( &inputArray ); - iCurrentAudioInput = aAudioInput; - } - - } - -// --------------------------------------------------------- -// DeleteAudioInput -// --------------------------------------------------------- -// -void CVRMdaRecorder::DeleteAudioInput() - { - delete iAudioInput; - iAudioInput = NULL; - } - -// --------------------------------------------------------- -// ConfigSampleRateOfVoiceCallL -// --------------------------------------------------------- -// -void CVRMdaRecorder::ConfigSampleRateOfVoiceCallL() - { - // Sample rate - TUint sampleRates = iAudioRecorder->DestinationSampleRateL(); - TInt configuredAacSamplerate( VRUtils::AACSamplerateL() ); - if(sampleRates == configuredAacSamplerate) - { - return; - } - - if (iMemo->Quality() == EQualityHigh) - { - TInt aacSampleRate( KVRDefaultSamplerateAac ); - // Sample rate - RArray supportedSampleRates; - iAudioRecorder->GetSupportedSampleRatesL(supportedSampleRates); - TInt num1 = supportedSampleRates.Count(); - if(num1 > 0) - { - supportedSampleRates.Sort(); - TInt found1 = supportedSampleRates.Find(configuredAacSamplerate); - if (found1 == KErrNotFound) - { - aacSampleRate = supportedSampleRates[num1-1]; - } - } - supportedSampleRates.Reset(); - iAudioRecorder->SetDestinationSampleRateL(aacSampleRate); - } - } - -// End of file