diff -r 8b2d6d0384b0 -r d9aefe59d544 camerauis/cameraapp/generic/src/audioplayer/camaudioplayercontroller.cpp --- a/camerauis/cameraapp/generic/src/audioplayer/camaudioplayercontroller.cpp Tue Feb 02 00:01:39 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,631 +0,0 @@ -/* -* Copyright (c) 2007 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: Implementation of Controller for Sound / Tone Wrappers -* -*/ - - - -// =========================================================================== -// includes -#include -#include // CAknAppUi -#include // CAknKeySoundSystem - -#include -#include - -#include "camlogging.h" - -#include "CamSettingsInternal.hrh" // TCamCameraMode, TCamSettingItemIds -#include "CamAppController.h" -#include "mcamplayerobserver.h" -#include "mcamplayerwrapper.h" -#include "camaudioplayerwrapper.h" -#include "camtoneplayerwrapper.h" -#include "camaudioplayercontroller.h" -#include "OstTraceDefinitions.h" -#ifdef OST_TRACE_COMPILER_IN_USE -#include "camaudioplayercontrollerTraces.h" -#endif - - - -// =========================================================================== -// Constants -namespace NCamAudioPlayerController - { - static const TInt KImageCaptureSoundId = KMinTInt; - - - // Cached sounds which are loaded once entering image mode. - // No need to include capture sound, it is selected based - // on the setting. - static const TInt KImageCachedSounds[] = - { - // Our own id for image capture sound, - // which can change. - // Also avoid compilation error, if AF beep not supported. - KImageCaptureSoundId, - ECamAutoFocusComplete - }; - - // Cached sounds which are loaded once entering video mode. - static const TInt KVideoCachedSounds[] = - { - ECamVideoStartSoundId, - ECamVideoStopSoundId, - ECamVideoPauseSoundId, - ECamVideoResumeSoundId - }; - } - -using namespace NCamAudioPlayerController; - -// =========================================================================== -// public constructors and destructor - -// --------------------------------------------------------------------------- -// NewL <> -// --------------------------------------------------------------------------- -// -CCamAudioPlayerController* -CCamAudioPlayerController::NewL( CCamAppController& aController, - MCamPlayerObserver& aObserver ) - { - CCamAudioPlayerController* self = - new (ELeave) CCamAudioPlayerController( aController, aObserver ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// --------------------------------------------------------------------------- -// destructor <> -// --------------------------------------------------------------------------- -// -CCamAudioPlayerController::~CCamAudioPlayerController() - { - iController.RemoveControllerObserver( this ); - iController.RemoveSettingsObserver( this ); - - Reset(); - iPlayers.Close(); - - iKeySoundSystem = NULL; // not own - } - - - - -// =========================================================================== -// From MCamControllerObserver - -// --------------------------------------------------------------------------- -// HandleControllerEventL <> -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController -::HandleControllerEventL( TCamControllerEvent aEvent, - TInt aError ) - { - PRINT( _L("Camera => CCamAudioPlayerController::HandleControllerEventL") ); - switch( aEvent ) - { - case ECamEventEngineStateChanged: - { - PRINT( _L("Camera <> CCamAudioPlayerController: case ECamEventEngineStateChanged") ); - if( KErrNone == aError ) - { - TCamCameraMode mode = iController.CurrentMode(); - PRINT2( _L("Camera <> CCamAudioPlayerController: KErrNone, old mode[%s] new mode[%s]"), KCamModeNames[iCameraMode], KCamModeNames[mode] ); - if( mode != iCameraMode ) - { - // Changing to video or image mode. - // Cache the players needed. - // If this fails we just retry once a sound is really needed. - if ( ECamControllerImage == mode - || ECamControllerVideo == mode ) { Setup( mode ); } - // Changing to shutdown mode - // Release all players. - else if( ECamControllerShutdown == mode || ECamControllerIdle == mode ) - { - Setup( mode ); - } - // Other mode entered, no action - else { /* no action */ } - } - } - else - { - PRINT1( _L("Camera <> CCamAudioPlayerController: error in (%d), call Reset.."), aError ); - Reset(); - } - break; - } - - default: - { - break; - } - } - PRINT( _L("Camera <= CCamAudioPlayerController::HandleControllerEventL") ); - } - - - -// =========================================================================== -// From MCamSettingsModelObserver - -// --------------------------------------------------------------------------- -// IntSettingChangedL <> -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController -::IntSettingChangedL( TCamSettingItemIds aSettingItem, - TInt /*aSettingValue*/ ) - { - PRINT( _L("Camera => CCamAudioPlayerController::IntSettingChangedL") ); - switch( aSettingItem ) - { - case ECamSettingItemPhotoCaptureTone: - { - PRINT( _L("Camera <> CCamAudioPlayerController: case ECamSettingItemPhotoCaptureTone") ); - - // The setting value is *not* of TCamSoundId type. - // See CCamAppController::CaptureToneId(). - const TCamSoundId newSoundId = iController.CaptureToneId(); - SetupCaptureSoundPlayerL( newSoundId ); - - break; - } - default: - { - break; - } - } - - PRINT( _L("Camera <= CCamAudioPlayerController::IntSettingChangedL") ); - } - - -// --------------------------------------------------------------------------- -// TextSettingChangedL <> -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController -::TextSettingChangedL( TCamSettingItemIds /*aSettingItem*/, - const TDesC& /*aSettingValue*/ ) - { - // these events are ignored - } - - - -// =========================================================================== -// new public - -// --------------------------------------------------------------------------- -// PlaySound -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::PlaySound( TInt aSoundId, - TBool aCallback ) - { - TRAPD( status, - { - // Get cached player, if available. - // Otherwise create new one. - CCamPlayerWrapperBase* player = GetPlayerL( aSoundId ); - player->Play( aCallback ); - }); - - if( KErrNone != status ) - { - if( KErrNoMemory == status ) - { - // If OOM, release all players. - // Create new ones again when needed. - Reset(); - } - if( aCallback ) - { - // If could not instantiate a player, notify observer right away. - iObserver.PlayComplete( status, aSoundId ); - } - } - } - - -// --------------------------------------------------------------------------- -// PlayTone -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::PlayTone( TInt aToneInHz, - TInt aLengthInUs, - TReal32 aVolumeInPercent, - TBool aCallback ) - { - TInt status( KErrNone ); - - if( !iTonePlayer ) - { - TRAP( status, iTonePlayer = CCamTonePlayerWrapper::NewL( iObserver ) ); - } - - if( KErrNone == status ) - { - iTonePlayer->PlayTone( aToneInHz, aLengthInUs, aVolumeInPercent, aCallback ); - } - else - { - if( aCallback ) - iObserver.PlayComplete( status, -1 ); - } - } - - -// --------------------------------------------------------------------------- -// CancelAllPlaying -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::CancelAllPlaying() - { - PRINT( _L("Camera => CCamAudioPlayerController::CancelAllPlaying") ); - - if( iTonePlayer ) - { - iTonePlayer->CancelPlay(); - } - for( TInt i = 0; i < iPlayers.Count(); i++ ) - { - iPlayers[i]->CancelPlay(); - } - - PRINT( _L("Camera <= CCamAudioPlayerController::CancelAllPlaying") ); - } - -// --------------------------------------------------------------------------- -// CancelPlaying -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::CancelPlaying( TInt aSoundId ) - { - TInt index = FindPlayerIndex( aSoundId ); - if( KErrNotFound != index ) - { - CCamPlayerWrapperBase* player = iPlayers[index]; - player->CancelPlay(); - } - } - - -// --------------------------------------------------------------------------- -// InitKeySoundSystem -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::InitKeySoundSystem() - { - PRINT( _L("Camera => CCamAudioPlayerController::InitKeySoundSystem") ); - iKeySoundSystem = static_cast( CEikonEnv::Static()->AppUi() )->KeySounds(); - /* No sounds played via iKeySoundSystem. No need to add sound list. - if( !iKeySoundSystem ) - { - iKeySoundSystem = static_cast( CEikonEnv::Static()->AppUi() )->KeySounds(); - if ( iKeySoundSystem ) - { - TRAPD( status, iKeySoundSystem->AddAppSoundInfoListL( R_CAM_SOUND_LIST ) ); - PRINT1( _L("Camera <> CCamAudioPlayerController: status:%d"), status ); - if( KErrNone != status - && KErrAlreadyExists != status - ) - { - // Set unusable - iKeySoundSystem = NULL; - } - } - } - */ - PRINT( _L("Camera <= CCamAudioPlayerController::InitKeySoundSystem") ); - } - -// --------------------------------------------------------------------------- -// EnableAllKeySounds -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::EnableAllKeySounds() - { - if ( iKeySoundSystem && iKeySoundsDisabled ) - { - iKeySoundSystem->ReleaseContext(); - iKeySoundSystem->PopContext(); - iKeySoundsDisabled = EFalse; - } - } - - -// --------------------------------------------------------------------------- -// DisableAllKeySoundsL -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::DisableAllKeySoundsL() - { - if ( iKeySoundSystem && !iKeySoundsDisabled ) - { - iKeySoundSystem->PushContextL( R_AVKON_SILENT_SKEY_LIST ); - iKeySoundSystem->BringToForeground(); - iKeySoundSystem->LockContext(); - iKeySoundsDisabled = ETrue; - } - } - - - - -// =========================================================================== -// new private - -// --------------------------------------------------------------------------- -// FindPlayerIndex -// --------------------------------------------------------------------------- -// -TInt -CCamAudioPlayerController::FindPlayerIndex( TInt aSoundId ) const - { - TInt found = KErrNotFound; - - // Check that id is valid. - if( aSoundId > 0 ) - { - TInt current = iPlayers.Count(); - while( --current >= 0 ) - { - // Reuse player, if the sound is the same despite - // sound id being different. - // if( aSoundId == iPlayers[current]->Id() ) - if( iPlayers[current]->IsEqualSound( aSoundId ) ) - { - found = current; - current = -1; - } - } - } - return found; - } - -// --------------------------------------------------------------------------- -// GetPlayerL -// --------------------------------------------------------------------------- -// -CCamPlayerWrapperBase* -CCamAudioPlayerController::GetPlayerL( TInt aSoundId ) - { - PRINT1( _L("Camera => CCamAudioPlayerController::GetPlayerL, sound id:%d"), aSoundId ); - CCamPlayerWrapperBase* player( NULL ); - - if( KImageCaptureSoundId == aSoundId ) - { - player = GetPlayerL( iController.CaptureToneId() ); - } - else - { - TInt index = FindPlayerIndex( aSoundId ); - - if( KErrNotFound != index ) - { - player = iPlayers[index]; - } - else - { - OstTrace0( CAMERAAPP_PERFORMANCE, CCAMAUDIOPLAYERCONTROLLER_GETPLAYERL, "e_CAM_APP_CAPTURE_SOUND_LOAD 1" ); //CCORAPP_CAPTURE_SOUND_LOAD_START - - player = CCamAudioPlayerWrapper::NewL( iObserver, aSoundId ); - - CleanupStack::PushL( player ); - iPlayers.AppendL( player ); - CleanupStack::Pop( player ); - OstTrace0( CAMERAAPP_PERFORMANCE, DUP1_CCAMAUDIOPLAYERCONTROLLER_GETPLAYERL, "e_CAM_APP_CAPTURE_SOUND_LOAD 0" ); //CCORAPP_CAPTURE_SOUND_LOAD_END - } - } - - PRINT( _L("Camera <= CCamAudioPlayerController::GetPlayerL") ); - return player; - } - - - -// --------------------------------------------------------------------------- -// RemovePlayer -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::RemovePlayer( TInt aSoundId ) - { - TInt index = FindPlayerIndex( aSoundId ); - if( KErrNotFound != index ) - { - CCamPlayerWrapperBase* player = iPlayers[index]; - iPlayers.Remove( index ); - delete player; - player = NULL; - } - } - -// --------------------------------------------------------------------------- -// Setup -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::Setup( TCamCameraMode aCameraMode ) - { - PRINT( _L("Camera => CCamAudioPlayerController::Setup") ); - Reset(); - - TInt status( KErrNone ); - switch( aCameraMode ) - { - case ECamControllerImage: - { - TRAP( status, SetupForImageL() ); - break; - } - - case ECamControllerVideo: - { - TRAP( status, SetupForVideoL() ); - break; - } - - case ECamControllerIdle: - case ECamControllerShutdown: - default: - { - // Already reset, no sounds needed now. - break; - } - } - - // If any problems, try reload sounds once really needed, so reset now. - if( KErrNone != status ) - Reset(); - else - iCameraMode = aCameraMode; - - PRINT( _L("Camera <= CCamAudioPlayerController::Setup") ); - } - -// --------------------------------------------------------------------------- -// SetupForVideoL -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::SetupForVideoL() - { - PRINT( _L("Camera => CCamAudioPlayerController::SetupForVideoL") ); - InitKeySoundSystem(); - - TInt count( sizeof( KVideoCachedSounds ) / sizeof( TInt ) ); - PRINT1( _L("Camera <> CCamAudioPlayerController: count of players to load: %d"), count ); - for( TInt i = 0; i < count; i++ ) - { - GetPlayerL( KVideoCachedSounds[i] ); - } - PRINT( _L("Camera <= CCamAudioPlayerController::SetupForVideoL") ); - } - -// --------------------------------------------------------------------------- -// SetupForImageL -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::SetupForImageL() - { - PRINT( _L("Camera => CCamAudioPlayerController::SetupForImageL") ); - TInt count( sizeof( KImageCachedSounds ) / sizeof( TInt ) ); - - PRINT1( _L("Camera <> CCamAudioPlayerController: count of players to load: %d"), count ); - for( TInt i = 0; i < count; i++ ) - { - GetPlayerL( KImageCachedSounds[i] ); - } - PRINT( _L("Camera => CCamAudioPlayerController::SetupForImageL") ); - } - -// --------------------------------------------------------------------------- -// SetupCaptureSoundPlayerL -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::SetupCaptureSoundPlayerL( TInt aNewSoundId ) - { - PRINT2( _L("Camera => CCamAudioPlayerController::SetupCaptureSoundPlayerL, old sound:%d new sound:%d"), iCaptureSoundId, aNewSoundId ); - - if( aNewSoundId != iCaptureSoundId ) - { - // Free old player, if exists. - RemovePlayer( iCaptureSoundId ); - - // If loading new fails, retry when sound is needed. - iCaptureSoundId = -1; - GetPlayerL( aNewSoundId ); - iCaptureSoundId = aNewSoundId; - } - PRINT ( _L("Camera <= CCamAudioPlayerController::SetupCaptureSoundPlayerL") ); - } - -// --------------------------------------------------------------------------- -// Reset -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::Reset() - { - PRINT ( _L("Camera => CCamAudioPlayerController::Reset") ); - iPlayers.ResetAndDestroy(); - - delete iTonePlayer; - iTonePlayer = NULL; - - iCameraMode = ECamControllerIdle; - iCaptureSoundId = -1; - PRINT ( _L("Camera <= CCamAudioPlayerController::Reset") ); - } - - - -// =========================================================================== -// private constructors - -// --------------------------------------------------------------------------- -// ConstructL -// --------------------------------------------------------------------------- -// -void -CCamAudioPlayerController::ConstructL() - { - iController.AddControllerObserverL( this ); - iController.AddSettingsObserverL( this ); - } - -// --------------------------------------------------------------------------- -// constructor -// --------------------------------------------------------------------------- -// -CCamAudioPlayerController -::CCamAudioPlayerController( CCamAppController& aController, - MCamPlayerObserver& aObserver ) - : iController ( aController ), - iObserver ( aObserver ), - iCameraMode ( ECamControllerIdle ), - iCaptureSoundId ( -1 ), - iKeySoundsDisabled( EFalse ) - { - } - -// =========================================================================== -// end of file -