camerauis/cameraapp/generic/inc/CamAppController.h
branchRCL_3
changeset 24 bac7acad7cb3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/inc/CamAppController.h	Wed Sep 01 12:30:54 2010 +0100
@@ -0,0 +1,2695 @@
+/*
+* Copyright (c) 2007-2009 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:  Class for managing intercommunication between Camcera UI*
+*/
+
+
+#ifndef CAMAPPCONTROLLER_H
+#define CAMAPPCONTROLLER_H
+
+
+// ===========================================================================
+//  INCLUDES
+#include <e32base.h>
+
+#include <cflistener.h> // publish zoom state related
+#include <cfclient.h>
+
+#include <sensrvdatalistener.h>
+#include <sensrvchannel.h>
+#include <sensrvorientationsensor.h>
+
+#include "MCamAppController.h"
+#include "CamControllerObservers.h"
+#include "mcamsettingsmodelobserver.h"
+#include "CamSettings.hrh"
+#include "Cam.hrh"          // TCamSoundId
+#include "CamSettingsInternal.hrh"
+
+#include "mcamplayerobserver.h"
+
+#include "CamImageSaveActive.h"
+#include "CamCallStateAo.h"
+#include "CamObserver.h"
+#include "CamBurstModeObserver.h"
+#include "CamPerformance.h"
+
+#ifndef __WINSCW__
+#include <rlocationtrail.h>
+#endif
+
+#include "CamPropertyObserver.h"
+
+// <CAMERAAPP_CAPI_V2_MIGRATION>
+#include "mcamcameraobserver.h" 
+#include "camcamerarequests.h"
+#include "camfolderutility.h"
+#include "camcameracontroller.h"
+#include "CamDriveChangeNotifier.h"
+#include "CamSyncRotatorAo.h"
+#include "camtvaccessorymonitor.h"
+
+// ===========================================================================
+// CONSTANTS
+
+// !Do not change the order of these without careful consideration!
+// 
+enum TCamCameraState
+  {
+  ECamCameraIdle          = 0,
+  ECamCameraReserved      = 1 << 0,
+  ECamCameraPowerOn       = 1 << 1,
+  ECamCameraPreparedImage = 1 << 2,
+  ECamCameraPreparedVideo = 1 << 3,
+  ECamCameraStateLast // Not valid state, only marker
+  };
+
+/**
+* Flags for ongoing operations
+*/
+enum TCamBusyFlags
+  {
+  EBusyNone     = 0,
+  EBusyRequest  = 1<<0,
+  EBusySequence = 1<<1,
+  EBusySetting  = 1<<2,
+  EBusyLast // Marker
+  };
+
+enum TCamHdmiEvent
+    {
+    ECamHdmiNoEvent,
+    ECamHdmiCableConnectedBeforeRecording,
+    ECamHdmiCableConnectedDuringRecording
+    };
+
+// ===========================================================================
+// FORWARD DECLARATIONS
+class CRepository;
+//class CCamSettingsModelBase;
+class MCamAppController;
+class MCamSettingsModel;
+class MCamSettingPreviewHandler;   // <CAMERAAPP_CAPI_V2_MIGRATION/>
+//class CCamConstantSettingProvider; // <CAMERAAPP_CAPI_V2_MIGRATION/>
+class CCamSettingProvider; // <CAMERAAPP_CAPI_V2_MIGRATION/>
+class CCamTimer;
+class CCamObserverHandler;
+class CCamBurstCaptureArray;
+class CCamAudioPlayerController;
+class MCamStaticSettings;
+class CCamGSInterface;
+class CCameraUiConfigManager;
+class CCamPropertyWatcher;
+class CCamSnapShotRotator;
+
+
+class CCamFlashStatus;
+class CCamConfiguration;
+class CCFClient;
+
+// ===========================================================================
+// CLASS DECLARATION
+
+class TCamAppControllerInfo
+  {
+  public:
+    TCamAppControllerInfo();
+
+  public:
+    TCamActiveCamera      iActiveCamera;
+
+    TCamCameraMode        iMode;
+    TCamCameraMode        iTargetMode;
+
+    TCamImageCaptureMode  iImageMode; // ECamImageCaptureNone in video controller mode
+    TCamImageCaptureMode  iTargetImageMode; 
+
+    TCamCaptureOperation iOperation; // Current operation 
+
+    // Target viewfinder state and mode
+    TCamCameraTriState iTargetVfState;
+    TBool              iViewfinderMirror; // set when viewfinder initialized
+
+    // Target image parameters        
+    TInt               iTargetImageResolution;
+    TInt               iTargetImageQuality;
+    
+    // Target video parameters
+    /** not supported yet */
+
+    // Request being handled        
+    TCamCameraRequestId iBusyRequestId;
+  };
+
+
+/**
+* Handle intercommunication between camcorder UI and engine.
+*
+*  @since 2.8
+*/
+class CCamAppController : public CBase, 
+                          public MCamAppController,
+                          public MCamSettingsModelObserver,
+                          public MCamCameraObserver,
+                          public MCamImageSaveObserver,
+                          public MCamCallStateObserver,
+                          public MPropertyObserver,
+                          public MSensrvDataListener,
+                          public MCamPlayerObserver,
+                          public MCamObserver,
+                          public MCamBurstModeObserver,
+                          public MCFListener
+                          ,public MCamDriveChangeNotifierObserver
+                          ,public MBitmapRotationObserver,
+                          public MCamTvAccessoryObserver
+                          
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * @since 2.8
+        * @return pointer to the created CCamAppController object
+        */
+        static CCamAppController* NewL();
+        
+               
+        /**
+        * Complete construction of the engine and issue notification requests.
+        * The camera engine cannot be instantiated until the application
+        * orientation has been set by the CCamAppUi. This does not
+        * exist when the CCamAppController is constructed. CompleteConstructionL
+        * must be called in the CCamAppUi::ConstructL()
+        * @since 3.0
+        */ 
+        void CompleteConstructionL();
+
+        
+        /**
+        * Destructor.
+        * @since 2.8
+        */
+        virtual ~CCamAppController();
+
+   public:		
+     /** 
+      * Calls CamSettingModel to save user defined FT setting
+      * @since S60 5.0
+      * @param None
+      * @return None
+      */
+      void StoreFaceTrackingValue();		
+
+  // -------------------------------------------------------
+  // From MCamCameraObserver
+  public:
+
+    virtual void HandleCameraEventL( TInt              aStatus, 
+                                     TCamCameraEventId aEventId, 
+                                     TAny*             aEventData /*= NULL*/ );
+
+
+
+  // -------------------------------------------------------
+  // from MCamSettingsModelObserver 
+  public:
+
+    virtual void IntSettingChangedL( TCamSettingItemIds aSettingItem, 
+                                     TInt               aSettingValue );
+    virtual void TextSettingChangedL( TCamSettingItemIds aSettingItem, 
+                                      const TDesC&       aSettingValue );
+
+
+  // -------------------------------------------------------
+  // from MCamBurstModeObserver
+  
+    /**
+    * Burst mode activation has changed
+    * @since 2.8
+    * @param aActive whether or not burst mode is active
+    * @param aStillModeActive whether or not still capture is active
+    */
+    virtual void BurstModeActiveL( TBool aActive, TBool aStillModeActive );
+
+  // -------------------------------------------------------
+  // from MCamAudioPlayerObserver
+    virtual void PlayComplete( TInt aStatus, TInt aSoundId );
+
+
+  // -------------------------------------------------------
+  public:
+    // From MCFListener ( Context framework for publishing zoom state.
+    /**
+    * Indicates a change in context for subscribed clients.
+    * If client has subscribed to partial context class path,
+    * only the changed context will be indicated.
+    * 
+    * @since S60 4.0
+    * @param aIndication: Context indication.
+    * @return None
+    */
+    inline void ContextIndicationL(
+            const CCFContextIndication& /*aChangedContext*/ ) {};
+    
+    /**
+    * Indicates that specified action is needed to be executed.
+    * When action indication is received certain rule has been triggered
+    * and action is needed to be performed.
+    *
+    * @since S60 4.0
+    * @param aActionToExecute Action indication.
+    * @return None
+    */
+    inline void ActionIndicationL(
+        const CCFActionIndication& /*aActionToExecute*/ ) {};
+            
+    /**
+    * Indicates that error has occured.
+    * @since S60 4.0
+    * @param aError Error code.
+    * @return None
+    */
+    inline void HandleContextFrameworkError( TCFError /*aError*/,
+            const TDesC& /*aSource*/,
+            const TDesC& /*aType*/ ){};
+    
+    /**
+    * Returns an extension interface.
+    * The extension interface is mapped with the extension UID.
+    *
+    * If the client does not support the requested interface,
+    * client must return NULL. Otherwise client needs to return
+    * the correct interface combined with the UID.
+    *
+    * @since S60 5.0
+    * @param aExtensionUid: The identifier of the extension.
+    * @return Pointer to the extension.
+    */
+   inline TAny* Extension( const TUid& /*aExtensionUid*/ ) const { return NULL; };
+    
+    // New Function
+
+    /*
+    * Method to publish the zoom key and setting the
+    * value or the state to enabled or disabled.
+    * @Paran aEnabled used to set the the state of zoom key
+    * to be enabled or disabled.
+    */
+    void PublishZoomStateL( const TBool aEnabled );
+
+  public: 
+    
+      /**
+      * Returns whether or not the current profile is silent
+      * @since 3.0
+      * @return ETrue if current profile is silent
+      */
+      TBool IsProfileSilent();    
+    
+      /**
+      * Returns whether or not we have touch screen support in the device
+      * @return ETrue if device supports touch screen
+      */
+      TBool IsTouchScreenSupported();
+    
+      /**
+      * Returns whether or not we have direct screen viewfinder support in the device
+      * @return ETrue if device supports direct screen viewfinder
+      */
+      TBool IsDirectScreenVFSupported( TBool aPrimaryCamera = ETrue );
+    
+	// ---------------------------------------------------------------------------
+	//Helper function for making notification about deleted files
+	//Added this method to do notification if files have been
+	//deleted outside camera application and then camera is
+	//put back to foreground in postcapture view.
+	//Security note. Contents of the files might have been
+	//changed when camera was in background.
+	// ---------------------------------------------------------------------------
+	//
+	void  MediaFileChangedNotification();
+    
+	TBool EngineRequestsPending() const; 	
+    /**
+    * Set settings restore to be done at earliest
+    * convenient time.
+    */
+    void  SetSettingsRestoreNeeded();
+
+    /**
+    * Set the flag to indicate that the original values 
+    * of remaining images is stored
+    */
+     void SetRemainingImageStored();
+    
+    /** 
+    * Returns the flag that indicates if the original value 
+    * of remaing images is stored or not.
+    */    
+     TBool IsRemainingImageStored() const;
+    
+    /** 
+    * Return whether saving is still in progress.
+    */    
+    TBool IsSavingInProgress() const;
+     
+    /**
+    * Return if settings restore is set pending.
+    */
+    TBool IsSettingsRestoreNeeded() const;
+  
+	
+    void RestartTimeLapseTimerL();
+	
+  
+    static TInt CamerasAvailable();
+
+    /**
+    * Is time lapse supported.
+    * Value read from Central Repository.
+    */
+    TBool TimeLapseSupported();
+    
+    /**
+    * Is time lapse supported.
+    * Value read from Central Repository.
+    */
+    TBool AlwaysOnSupported();
+
+    /**
+    * Release version number.
+    * Value read from Central Repository.
+    */
+    const TVersion& Version();
+
+    /***
+    * Can a new request be made to controller or not.
+    * Shutdown may be requested at any moment.
+    */
+    TBool Busy() const;
+
+    /**
+    * Returns true if the last captured image was saved
+    * @since 2.8
+    * @return ETrue if the last captured image has been saved.
+    */
+    TBool SavedCurrentImage() const;
+
+    /**
+    * Rename image/video.
+    * @since 2.8
+    * @param aNewName the new name for the current capture array file.
+    * @param aMode the current capture mode.
+    * @return ETrue if the file has been renamed successfully. 
+    */
+    TBool RenameCurrentFileL( const TDesC&          aNewName, 
+                              const TCamCameraMode& aMode    );
+
+    /**
+    * Add a controller observer.
+    * @since 2.8
+    * @param aObserver Pointer to an object implementing 
+    *                   MCamControllerObserver
+    * @return ?description
+    */
+    void AddControllerObserverL( const MCamControllerObserver* aObserver );
+
+    /**
+    * Remove a controller observer
+    * @since 2.8
+    * @param aObserver Pointer to the observer to remove. The object
+    *                  does not have to be added as an observer.
+    */
+    void RemoveControllerObserver
+        ( const MCamControllerObserver* aObserver );
+
+    /**
+    * Add camera observer.
+    * Forwards call to CCamCameraController.
+    * @see CCamCameraController for more details.
+    */
+    void AddCameraObserverL( const MCamCameraObserver* aObserver, 
+                             const TUint&              aEventInterest );
+    
+    /**
+    * Removes camera observer.
+    * Forwards call to CCamCameraController.
+    * @see CCamCameraController for more details.
+    */
+    void RemoveCameraObserver( const MCamCameraObserver* aObserver );
+
+    void AddSettingsObserverL( const MCamSettingsModelObserver* aObserver );
+    void RemoveSettingsObserver( const MCamSettingsModelObserver* aObserver );
+
+    TBool CameraControllerBusy() const;
+    TUint CameraControllerState() const;
+
+    TCamCameraState       CameraState() const;
+    TCamCameraMode        CurrentMode() const;
+    TCamCameraMode        TargetMode() const;
+    TCamImageCaptureMode  CurrentImageModeSetup() const;
+    TCamCaptureOperation  CurrentOperation() const;
+    TCamCaptureOperation  CurrentImageOperation() const;
+    TCamCaptureOperation  CurrentVideoOperation() const;
+    TCamImageCaptureMode  CurrentImageMode() const;
+    
+
+    TInt CaptureLimit() const;
+    TInt CaptureLimitSetting() const;
+    void SetCaptureLimitL( TInt aLimit );
+    
+    /**
+    * From MBitmapRotationObserver
+    * Notification of bitmap rotation complete events
+    * @param aErr KErrNone if successful
+    */
+    void RotationCompleteL( TInt aErr );
+    
+    /**
+    * From MCamTvaccessoryObserver
+    * Handles TV Out/HDMI Cable connect Events
+    */
+    void HandleTvAccessoryConnectedL();
+    
+    /**
+    * From MCamTvaccessoryObserver
+    * Handles TV Out/HDMI Cable disconnect Events
+    */
+    void HandleTvAccessoryDisconnectedL();
+    
+    
+    /**
+     * Returns Etrue if HDMI Cable is connected
+     */
+    TBool IsHdmiCableConnected();
+    
+
+    /**
+    * Called when exiting in secondary camera mode
+    */
+    void HandleSecondaryCameraExitL();
+	
+private:
+    void ReadVariantFlagsL();
+
+
+    void SetMode( const TCamCameraMode& aNewMode );
+    void SetTargetMode( const TCamCameraMode& aNewMode );
+
+    void SetImageMode( const TCamImageCaptureMode& aNewMode );
+    void SetTargetImageMode( const TCamImageCaptureMode& aNewMode );
+    
+    void SetOperation( TCamCaptureOperation aNewOperation, 
+                       TInt                 aError = KErrNone );
+                                     
+    TCamCameraTriState ViewfinderTargetState() const;
+
+
+public:
+    /*
+     *  Handle to Camera Ui Config Manager
+     */
+    CCameraUiConfigManager* UiConfigManagerPtr();
+    
+    /*
+    * De-register harvester client events.
+    */
+    void DeRegisterHarverterClientEvents();
+        
+    /**
+    * Return resource id for video viewfinder layout
+    * @since 3.0
+    * @param aResolution for current resolution
+    * @return Resource id for video viewfinder layout
+    */
+    TInt VideoViewFinderResourceId( TCamVideoResolution aResolution );
+
+    /**
+    * Start the viewfinder for the specified mode
+    * as soon as the engine is intialised
+    * @since 2.8
+    * @param aMode The viewfinder mode being entered
+    */
+    void EnterViewfinderMode( const TCamCameraMode& aMode );
+
+    /**
+    * ExitViewinderMode    
+    * @since 2.8
+    * @param aMode The viewfinder mode being exited
+    */
+    void ExitViewfinderMode( const TCamCameraMode& aMode );
+
+    /**
+    * FreezeViewFinder    
+    * @since 2.8
+    * @param aFreeze Whether or not the viewfinder is
+    * being frozen after this frame
+    */
+    void FreezeViewFinder( TBool aFreeze );
+
+    /**
+    * Return number of images that can still be captured
+    * @since 2.8
+    * @param aStorage storage location - defaults to current loation
+    * @param aBurstActive - set to ETrue if burst mode is active
+    * @return the number of images
+    */
+    TInt ImagesRemaining( TCamMediaStorage aStorage,
+                          TBool            aBurstActive );
+
+    /**
+    * Return number of images that can still be captured for a particular
+    * image quality
+    * @since 2.8
+    * @param aStorage storage location - defaults to current loation
+    * @param aBurstActive - set to ETrue if burst mode is active
+    * @param aQualityIndex - index of the image quality
+    * @return the number of images
+    */
+    TInt ImagesRemaining( TCamMediaStorage aStorage,
+                          TBool            aBurstActive, 
+                          TInt             aQualityIndex );
+
+    /**
+    * Return amount of video that has been captured
+    * @since 2.8
+    * @return the amount of video in micro secs
+    */
+    TTimeIntervalMicroSeconds RecordTimeElapsed() const;
+
+
+    /**
+    * Set amount of video that has been captured
+	* @param aElapsed - recorded video time.
+    */
+    void RecordTimeElapsed(TTimeIntervalMicroSeconds aElapsed );
+
+
+    /*
+    * Return amount of video that can still be captured
+    * @since 2.8
+    * @return the amount of video in secs
+    */
+    TTimeIntervalMicroSeconds RecordTimeRemaining();
+
+    /**
+    * Updates the interval used in next TimeLapse capture
+    * @since 3.0
+    * @param aInterval The new interval to use
+    */        
+    void SetTimeLapseInterval( TTimeIntervalMicroSeconds aInterval );   
+
+    /**
+    * Returns the interval used in next TimeLapse capture
+    * @since 3.0
+    * @return The current time lapse interval in microseconds
+    */
+    TTimeIntervalMicroSeconds TimeLapseInterval();
+    
+    /**
+    * Returns the remaining time lapse interval until the next capture
+    * @since 3.0
+    * @return The remaining time to the next timelapse capture
+    */
+    TTimeIntervalMicroSeconds TimeLapseCountdown();
+
+    /** 
+    * Start the autofocus procedure
+    * @since 2.8
+    */
+    void StartAutoFocus();
+
+    /**
+    * Begin the capture procedure
+    * @since 2.8
+    */
+    void Capture();               
+
+    /**
+    * Stop the burst capture operation
+    * @since 2.8
+    */
+    void StopSequenceCaptureL();
+
+    /**
+    * Whether or not a still capture operation is pending
+    * i.e. a request to start still capture has been made and is 
+    * waiting for the focus operation to complete.
+    * @since 2.8
+    * @return ETrue if a still capture operation is pending
+    */
+    TBool CapturePending() const;
+
+	/**
+    * Whether or not a capture key pressed during image saving
+    * @since 2.8
+    * @return ETrue if capture key is pressed during image saving
+    */
+    TBool CaptureKeyPressedWhileImageSaving() const;
+
+	/**
+    * Stores shutter key press during saving image
+    * @since 2.8
+    */
+    void SetCaptureKeyPressedWhileImageSaving(TBool aCaptureKeyPressed);
+    
+    /**
+    * Whether or not a video recording operation is pending
+    * i.e. a request to start video recording has been made and is
+    * waiting for the engine to complete a video name update operation.
+    * @since 2.8
+    * @return ETrue if a record operation is pending
+    */
+    TBool VideoRecordPending() const;
+
+    /**
+    * Whether or not a sequence capture is in progress
+    * @since 2.8
+    * @return ETrue if a sequence capture is in progress
+    */
+    TBool SequenceCaptureInProgress() const;
+
+    /**
+    * Begin the recording procedure
+    * @since 2.8
+    */
+    void StartVideoRecordingL();
+
+    /**
+    * End the recording procedure
+    * @since 2.8
+    */
+    void StopVideoRecording();
+
+    /**
+    * End the recording procedure
+    * @since 5.0
+    */
+    void StopVideoRecordingAsync();
+    
+    /**
+    * Store the cause of the video stop
+    * @since 3.0
+    */
+    void SetVideoStoppedForPhoneApp( TBool aIsPhoneApp );
+
+    /**
+    * Pause the recording procedure
+    * @since 2.8
+    */
+    void PauseVideoRecording();
+
+    /**
+    * Continue the recording procedure
+    * @since 2.8
+    */
+    void ContinueVideoRecording();
+
+    /**
+    * Issue AF request.
+    */
+    TBool TryAFRequest( TInt aAFRequest );
+    
+    /**
+    * Cancel ongoing AutoFocus.
+    */
+    void CancelAFNow();
+	
+    /**
+    * Cancel a requested capture
+    * @since 2.8
+    */
+    void CancelFocusAndCapture();
+
+    /**
+    * Return the current snapshot image
+    * @since 2.8
+    * @return the current snapshot image
+    */
+    const CFbsBitmap* SnapshotImage();
+
+    /**
+    * Sets the specified burst mode item as the current image, in 
+    * preparation for a Post-capture view of the image.
+    * @since 2.8        
+    * @param aIndex The index of the burst item in "CCamBurstCaptureArray"
+    */
+    void SetAsCurrentImage( TInt aIndex );
+
+    /**
+    * Get the user-visible name for next image.
+    * @since 2.8
+    * @return file name for the current image or video without path or
+    *         extension
+    */
+    const TDesC& CurrentImageName() const;
+
+    /**
+    * Delete the current image/video file
+    * @since 2.8
+        * @param aNofity Should notification be sent to observers about
+        *                change in media files. When this call is made
+        *                several times in a row, it's worth to do the
+        *                notification only once.
+    * @return KErrNone if delete successful, otherwise system-wide 
+    * error code
+    */
+    TInt DeleteCurrentFile( TBool aNotify = ETrue );
+    
+    /**
+    * Delete the timelapse sequence files
+    * @since 3.0
+    */
+    void DeleteTimeLapseFiles();
+    
+    /**
+    * Indicate whether or not the controller is actively engaged in still
+    * or video capture - this includes paused video, saving photos/videos,
+    * periods in between timelapse captures and pending captures 
+    * (captures that have been requested but not yet started)
+    * @since 3.0
+    * @return EFalse if not currently capturing, otherwise ETrue
+    */
+    TBool IsProcessingCapture();
+    
+    /**
+    * Complete current capture asap, then report completion to the observer
+    * @since 3.0
+    * @param aObserver To be notified when the current capture process completes
+    * @param aSafeCompletion ETrue if all captures should be saved. EFalse to complete 
+    * sooner and lose any images that have not yet begun to save
+    */
+    void CompleteCaptureAndNotifyL( MCamObserver* aObserver, TBool aSafeCompletion );
+
+    /**
+    * The application is closing. Complete any active operations then
+    * exit the application.
+    * @param aImmediateShutdown ETrue: shutdown immediately or 
+    * EFalse: wait for pending operations to complete.
+    * @since 2.8
+    */
+    void EnterShutdownMode( TBool aImmediateShutdown );
+
+    /**
+    * Whether or not the controller is in shutdown mode
+    * @since 2.8
+    * @return ETrue if the controller is in shutdown mode else EFalse
+    */
+    TBool IsInShutdownMode() const;
+      
+    /**
+    * Returns true if AppUi has been constructed, and not yet
+    * destructed.               
+    */
+    TBool IsAppUiAvailable() const;
+    
+    /**
+    * Sets AppUi availablility (see IsAppUiAvailable())
+    */
+    void SetAppUiAvailable( TBool aAvailable );        
+
+
+    /**
+    * Called to return the range of supported zoom values
+    * @since 2.8
+    * @param aMinZoom on return contains the minimum zoom value
+    * @param aMaxZoom on return contains the maximum zoom value
+    */
+    void GetZoomRange( TInt& aMinZoom, TInt& aMaxZoom ) const;
+
+    /**
+    * Called to return current zoom value
+    * @since 2.8
+    * @return the current zoom value
+    */
+    TInt ZoomValue() const;
+
+    /**
+    * Sets the current zoom value
+    * @since 2.8
+    * @param aValue the new zoom value to be used
+    */
+    void SetZoomValue( TInt aValue );
+
+    /**
+    * Resets all user scene settings to their defaults.
+    * @since 2.8
+    */
+        void ResetUserSceneL();
+ 
+        /**
+    * Previews a new value for the specified integer setting
+    * @param aSettingItem specifies which setting item that want 
+    * to preview.
+    * @param aSettingValue the new integer value for the specified 
+    * setting item to be previewed.
+    * @since 2.8
+    */
+    void PreviewSettingChangeL( TInt aSettingItem, TInt aSettingValue );
+
+    /**
+    * Cancels all preview changes, since last commit/cancel.
+    * @since 2.8
+    */
+    void CancelPreviewChangesL();
+
+    /**
+    * Commits last preview change.
+    * @since 2.8
+    */
+    void CommitPreviewChanges();
+
+    /**
+    * Re-prepare video after e.g. a setting change requires this.
+    */
+    void RePrepareVideoL();
+
+    /**
+    * Returns the current integer value for the specified setting
+    * @return the current integer setting value
+    * @param aSettingItem specifies which setting item that want 
+    * the value of.
+    * @since 2.8
+    */
+    TInt IntegerSettingValue( TInt aSettingItem ) const;
+
+    /**
+    * Returns the current integer value for the specified setting
+    * without the filtering usually performed on storage location.
+    * This is neccesary to allow the video/photo settings list to show
+    * the selected storage location rather than the forced storage location.
+    * @return the current integer setting value
+    * @param aSettingItem specifies which setting item that want the value of.
+    * @since 2.8
+    */
+    TInt IntegerSettingValueUnfiltered( TInt aSettingItem ) const;
+
+    /**
+    * Sets a new value for the specified integer setting
+    * @param aSettingItem specifies which setting item that want 
+    * to set the value of.
+    * @param aSettingValue the new integer value for the specified 
+    * setting item.
+    * @since 2.8
+    */
+    void SetIntegerSettingValueL( TInt aSettingItem, TInt aSettingValue );
+
+    /**
+    * Sets pathnames for video and image files to point to the specified storage
+    * @param aMediaStorage specifies phone memory or MMC
+    * @since 2.8
+    */
+    void SetPathnamesToNewStorageL( TCamMediaStorage aMediaStorage );
+
+   /**
+    * Sets a new text value for the specified setting
+    * @param aSettingItem specifies which setting item that want to set
+    * the text value of.
+    * @param aSettingValue the new text value for the specified setting 
+    * item.
+    * @since 2.8
+    */
+    void SetTextSettingValueL( TInt aSettingItem, 
+        const TDesC& aSettingValue );
+
+
+    /**
+    * Returns the current text value for the specified setting
+    * @return the current text setting value
+    * @param aSettingItem specifies which setting item that want 
+    * the text value of.
+    * @since 2.8
+    */
+    TPtrC TextSettingValue( TInt aSettingItem ) const;
+
+    /**
+    * Returns whether a particular setting value can be set or not.
+    * @return ETrue if can be set. Otherwise, EFalse.
+    * @param aSettingItem the setting item in question. 
+    * @param aSettingValue the value in question. 
+    * @since 2.8
+    */
+    TBool SettingValueEnabled( TInt aSettingItem, TInt aSettingValue ) const;
+
+    /**
+    * Loads the settings from shared data, or if unable to from the 
+    * resource file. 
+    * @param aIsEmbedded whether or not the application is running in
+    * embedded mode.
+    * @since 2.8
+    */       
+    void LoadStaticSettingsL( TBool aIsEmbedded );   
+
+    /**
+    * Get the default value for a setting item.
+    * @param  aSettingId The id of the setting.
+    * @return The default value for setting item or KErrNotFound if not found.
+    */
+    TInt DynamicSettingDefaultValue( TInt aSettingId ) const;
+
+    /**
+    * Sets all dynamic settings to their defaults.
+    * @since 2.8
+    */       
+    void SetDynamicSettingsToDefaults();
+
+    /**
+    * Sets a single dynamic setting to its default.
+    * @since 2.8
+    */       
+    void SetDynamicSettingToDefault(TInt aSettingItem);
+    
+    /**
+    * Set scene default value to a dynamic setting.
+    * @param aSceneId    Id of the scene to use.
+    * @param aSceneField Id of scene field.
+    * @param aSettingId  If of the dynamic setting to set.
+    * @param aVideoScene Does aSceneId refer to a video scene.
+    * @return KErrNotFound, if setting could not be set.
+    */
+    TInt SetDynamicSettingToSceneDefaultL( TInt  aSceneId,
+                                           TInt  aSceneField,
+                                           TInt  aSettingId,
+                                           TBool aVideoScene );
+    
+
+#ifdef PRODUCT_USES_GENERIC_SETUP_INDICATOR
+    /**
+    * Returns whether or not the video setup settings are set to the
+    * defaults for its current scene.
+    * @since 2.8
+    * @return ETrue if set to defaults. Otherwise, EFalse
+    */       
+    TBool VideoSceneDefaultsAreSet();
+
+    /**
+    * Returns whether or not the photo setup settings are set to the
+    * defaults for its current scene.
+    * @since 2.8
+    * @return ETrue if set to defaults. Otherwise, EFalse
+    */       
+    TBool PhotoSceneDefaultsAreSet();
+#endif // PRODUCT_USES_GENERIC_SETUP_INDICATOR
+
+    /**
+    * Returns the file name of the most recent saved image/video clip
+    * @return Filename of most recent captured image/video 
+    * @since 2.8
+    */
+    const TDesC& CurrentFullFileName() const;
+
+    /**
+    * Get the current video filename.
+    */
+    const TDesC& CurrentVideoFileName() const;
+
+    /**
+    * Returns a pointer to an array representing the images in a burst
+    * capture
+    * @return reference to the burst capture array
+    * @since 2.8
+    */
+    CCamBurstCaptureArray* BurstCaptureArray() const;
+
+    /**
+    * Returns the number of non-deleted items in the array
+    * @return count of non-deleted items
+    * @since 2.8
+    */
+    TInt CurrentItemCount();
+    
+    /**
+    * Returns the number of burst capture moments that have taken
+    * place in a current burst. If no burst is active this returns
+    * 0
+    * @return count of burst capture moments
+    * @since 3.0
+    */
+    TInt CurrentCapturedCount();
+    
+    /**
+    * Returns the number of items in a timelapse sequence
+    * @return count of timelapse sequence items
+    * @since 3.0
+    */
+    TInt TimeLapseImageCount();
+ 
+    /**
+    * Resets the array of filenames used in timelapse capture
+    * @since 3.0
+    */   
+    void ResetTimelapseArray();
+
+    /**
+    * Initiates the playing of the specified sound.
+    * @since 2.8
+    * @param aSoundId The enum value of the sound to play
+    * @param aEnableCallback Whether we want a callback when play complete
+    */
+    void PlaySound( TCamSoundId aSoundId, TBool aEnableCallback );
+
+
+    /** 
+    * Releases the camera hardware for other apps to use
+    * @since 2.8
+    */
+    void ReleaseCamera();
+
+    /**
+    * Increments the engine usage count
+    * @since 2.8
+    */
+    void IncCameraUsers();
+
+    /**
+    * Decrements the engine usage count If the engine is no longer required
+    * then it is released. If it is still processing, the engine count will 
+    * be checked when the current process completes and the engine will be 
+    * released if it is no longer needed.
+    * @since 2.8
+    */
+    void DecCameraUsers();
+    
+    /*
+    * Gets the handle to the static settings model, which is used inturn by the
+    * plugin to call the interfaces for performing needed actions.
+    */
+    MCamStaticSettings& StaticSettingsModel();
+    
+    /*
+    * Check if image/video scene mode is supported
+    */
+    TBool IsSceneSupported( const TInt aSceneId, TBool aPhotoScene = ETrue  ) const;
+
+    /** 
+    * Whether a call is active, including the ringing state
+    * @since 2.8
+    * @return ETrue if in call or ringing, else EFalse
+    */
+    TBool InCallOrRinging() const;
+
+    /** 
+    * Whether a video call is active, including the ringing state
+    * @return ETrue if in videocall or ringing, else EFalse
+    */
+    TBool InVideocallOrRinging();
+    
+    /** 
+    * Whether or not a video clip is currently being saved
+    * @since 2.8
+    * @return ETrue if saving, else EFalse
+    */
+    TBool CurrentlySavingVideo() const;
+
+    /**
+    * Returns whether all the settings list options for a particular setting
+    * item are visible or not
+    * @since 2.8
+    * @param aSettingItem The setting item to be checked.
+    * @param aRevisedResourceId Receives the id of a resource if the return
+    * value is EFalse. The resource contains the list of  visible
+    * options.
+    * @return ETrue if all options are visible. Otherwise, EFalse.
+    */
+    TBool AllOptionsVisibleForSettingItem( TInt aSettingItem, 
+                                                   TInt& aRevisedResourceId );
+
+    /**
+    * Switches the camera being used
+    * @since 2.8
+    */
+    void SwitchCameraL();
+
+    /**
+    * Returns the active camera
+    * @since 2.8
+    * @return @return either primary, secondary or none ( if in process of switching )
+    */
+    TCamActiveCamera ActiveCamera() const;
+    
+    /**
+    * Whether we currently have a camera switch required
+    * @since 2.8
+    * @return TCameraSwitchRequired a camera switch is required or not
+    */
+    TCameraSwitchRequired CameraSwitchQueued() const;
+
+    /**
+    * Check if exit is required
+    * @since 2.8
+    * @return TBool True if exit is required
+    */
+    TBool CheckExitStatus();
+        
+    /**
+    * Informs the controller that an end key event is waiting
+    * to close the app, or has been acted upon
+    * This is used when the end key is pressed during sequence capture
+    * @since 2.8
+    */
+    void SetEndKeyExitWaiting( TBool aEndKeyWaiting );
+
+    /**
+    * Returns the status of the camera slide
+    * @since 2.8
+    * @return the status of the camera slide
+    */
+    TInt CameraSlideState() const;
+
+    /**
+    * Informs the controller that a slider close event has
+    * been reacted to by 'pretending' to exit
+    * @since 2.8
+    */
+    void SliderCloseEventActioned();
+    
+    /**
+    * Set camera switch to queue
+    */
+    void SetCameraSwitchRequired( TCameraSwitchRequired aSwitchRequired ); 
+
+    /**
+    * Check slide state and schedule camera switch if required
+    * @since 2.8
+    */
+    void CheckSlideStatus();    
+            
+
+    /**
+     * Return range of EV value supported for current product
+     * @since 3.0
+     * @return TEvRange struct
+     */
+    TCamEvCompRange EvRange() const;
+
+    /**
+     * Switches camera to standby
+     * @since 5.1
+     * @param aSratus Error code for Standby mode
+     * @return
+     */
+    void SwitchToStandbyL( TInt aStatus = KErrNone );
+    
+  public: // Derived from MCamCallStateObserver base class     
+    /**
+    * Callback for when the current phone call state changes
+    * @since 3.0
+    * @param aState The new call state
+    * @param aError An error code associated with the event
+    */
+    void CallStateChanged( TPSCTsyCallState aState, TInt aError );
+
+    /**
+    * Returns the file size of the specified file
+    * @since 3.0
+    * @param aFilename The file to retrieve the size of.
+    * @return The size of the file or KErrNotFound
+    */        
+    TInt FileSize( TDesC& aFilename ) const;
+
+    /**
+    * Returns whether the current scene uses forced
+    * autofocus (so no AF required at capture time)
+    * @since 3.0       
+    * @return ETrue if forced, EFalse if not
+    */ 
+    TBool CurrentSceneHasForcedFocus() const;        
+
+public:
+
+    /**
+    * Get the actual resolution (WxH) of current image quality.
+    */
+    TSize GetCurrentImageDimensions() const;
+
+    /**
+    * Retrieves the current image resolution, taking into account
+    * the user settings and and modifications due to zoom state.
+    * @since 2.8
+    * @returns The current image resolution.
+    */
+    TCamPhotoSizeId GetCurrentImageResolution() const;
+    
+    /**
+    * Retrieves the current image compression
+    * @since 2.8
+    * @returns The current image compression.
+    */
+    TInt GetCurrentImageCompression() const;
+
+    /**
+    * Retrieves the current video resolution.
+    * @since 2.8
+    * @returns The current video resolution.
+    */
+    TCamVideoResolution GetCurrentVideoResolution() const;
+    
+    /**
+    * Force use of phone memory storage
+    * @since 2.8
+    */
+    void UsePhoneMemoryL() const; 
+
+    /**
+    * Sets the correct memory to be used based on settings 
+    * and availability of MMC.
+    * @since 4.0
+    * @return ETrue if memory location changed
+    */
+    TBool CheckMemoryToUseL();
+    
+    /**
+    * Indicate whether the phone memory is being force-used 
+    * because of un-availability or errors in MMC.
+    * @since 4.0
+    */        		
+	TBool IsPhoneMemoryForced();        
+
+    /**
+    * Retrieves the current image resolution from Settings.
+    * @since 2.8
+    * @returns The current image from Settings
+    */
+    TCamPhotoSizeId SettingsPhotoResolution() const;
+
+
+    /**
+    * Indication that a view has finished using the capture array
+    * @since 2.8
+        * @param aForcedRelease Should the array be released even if 
+        *                       the apparent usage count is not null.
+    */
+        void ReleaseArray( TBool aForcedRelease = EFalse );
+    
+    /**
+    * Restore Camera settings to default
+    * @since 3.0
+    * @param aIsEmbedded if app is embedded
+    */
+    void RestoreFactorySettingsL( TBool aIsEmbedded );
+
+private:
+    /**
+    * Called when playback of a sound has completed
+    * @since 2.8
+    */
+    void PlaySoundComplete();
+public:
+
+    /**
+    * Non-leaving version of StartViewFinderL()
+    * @since 2.8
+    */
+    void StartViewFinder();
+
+    /**
+    * Stop viewfinder     
+    * @since 2.8
+    */
+    void StopViewFinder(); 
+
+    /**
+    * Stop viewfinder Ecam only
+    * Needed with async video recording stopping     
+    * @since 5.0
+    */
+    void StopViewFinderEcam(); 
+
+    /**
+    * Sets the zoom mode of the engine
+    * @param aZoomMode The zoom mode to set
+    * @since 3.0
+    */
+    // Only digital mode supported currently - no need for this
+    //void SetZoomMode( const TCamZoomMode& aZoomMode );
+
+    /**
+    * Report whether a capture mode transition is currently in progress
+    * @since 2.8
+    * @return TBool ETrue if transition (i.e. still/video capture prepare) is 
+    *  currently in progress, EFalse otherwise;
+    */
+    TBool CaptureModeTransitionInProgress();
+
+    /**
+    * Check if viewfinder is active
+    * @since 2.8
+    * @returns ETrue if viewfinding
+    */
+    TBool IsViewFinding() const;
+
+    /**
+    * Check if capture key needs to be released before starting 
+    * new capture process. Used in post capture state to prevent
+    * image capture before viewfinder is completely shown.
+    * @since S60 v5.0
+    * @return ETrue if waiting key release before next capture
+    */
+    TBool IsDemandKeyRelease();
+
+    /**
+    * Set iDemandKeyRelease value
+    * @param aDemand Demand to release capture key
+    * @since S60 v5.0
+    */
+    void SetDemandKeyRelease( TBool aDemand );
+
+    /**
+    * Stop the idle timer
+    * @since 2.8
+    */
+    void StopIdleTimer();
+
+    /**
+    * Restart the idle timer
+    * @since 2.8
+    */
+    void StartIdleTimer();
+
+
+    /**
+    * Flash modes supported by engine
+    * @since 3.0
+    * @return supported flash modes   
+    */
+    TUint32 SupportedFlashModes();
+    
+    
+    /**
+    * White balance modes supported by engine
+    * @since 3.0
+    * @return supported white balance modes   
+    */
+    TUint32 SupportedWBModes();
+    
+    /**
+    * EV modes supported by engine
+    * @since 3.0
+    * @return supported EV modes    
+    */
+    TUint32 SupportedEVModes();
+
+    /**
+    * Capture state
+    * @return TInt capture state    
+    */
+    TInt CaptureState(); 
+
+    /**
+    * Returns the current capture-tone id
+    * @since 3.0
+    * @return the current capture-tone id
+    */
+    TCamSoundId CaptureToneId( );
+
+#ifdef CAMERAAPP_PERFORMANCE_MEASUREMENT 
+  public:
+    void SetPerformanceState( TCamPerformanceState aState );
+#endif        
+
+  /**
+   * Set pointer to settings plug-in. Takes ownership!
+   * @param aPlugin Pointer to settings plug-in. This object
+   *                takes ownership.
+   * @since S60 v5.0
+   */
+void SetSettingsPlugin( CCamGSInterface* aPlugin );
+
+  /**
+  * Set viewfinder window for direct screen viewfinder. The handle must remain
+  * valid as long as viewfinder is running. 
+  * @since S60 v5.0
+  * @param aWindow Handle to viewfinder window. Must remain valid while
+  *                viewfinder is running. Ownership not transferred.
+  */
+  void SetViewfinderWindowHandle( RWindowBase* aWindow );
+    
+  /**
+  * Notify that the viewfinder window is about to be deleted. Viewfinder
+  * will be stopped if this window handle is currently used for the
+  * viewfinder.
+  * @since S60 v5.0
+  * @param aWindow Handle to viewfinder window. Ownership not transferred.
+  */
+  void ViewfinderWindowDeleted( RWindowBase* aWindow );
+
+protected:  // New functions
+
+    /**
+    * C++ default constructor.
+    * @since 2.8
+    */
+    CCamAppController();
+
+    /**
+    * Symbian OS 2nd phase constructor.
+    * @since 2.8
+    */
+    void ConstructL();
+
+// -----------------------------------------------------
+// Burst related
+public:   
+
+    /**
+        * Stop burst in a soft way:
+        * - if have not moved yet to long burst mode,
+        *   wait until the short burst ends and do not 
+        *   enter long burst mode (if aFastStop is true,
+        *   stop asap when atleast 2 images captured).
+        * - if long burst already entered, stop capturing
+        *   after the next capture.
+        * @param aFastStop Stop also short burst asap, but so that
+        *                  atleast 2 images are captured.
+    */
+        void SoftStopBurstL( TBool aFastStop = EFalse );
+
+    /**
+     * Set iNoBurstCancel flag which is used to prevent stopping burst
+     * when actual burst capture has started after focusing.
+     */
+     void SetNoBurstCancel( TBool aValue );
+        
+        /**
+        * Set iKeyUPl flag which is used to prevent late 
+        * activated burst timer when capturekey is up already
+        * before burstcapture has started.
+        */
+        void SetKeyUp( TBool aValue = EFalse );
+        
+        /**
+        * Returns amount of images captured in burst mode
+        * @return Amount of captured images
+        * 
+        */
+        TInt CapturedImages() const;
+
+private:   
+
+    /**
+    * Start the burst timer for changing to long burst mode.
+    */
+    void StartBurstTimerL();
+
+    /*
+    * Stop the burst timer.
+    */
+    void StopBurstTimer();
+
+    /**
+    * Callback for short burst timer.
+    * @param aController Pointer to app controller instance.
+    * @return Always zero, implies no repeated callbacks wanted.
+    */
+    static TInt ShortBurstTimeout( TAny* aController );
+
+    /**
+    * Helper method for short burst timer callback.
+    */
+    void DoShortBurstTimeoutL();
+
+
+    // -----------------------------------------------------
+    private:   
+
+    /**
+    * Return number of images that can still be captured for a particular
+    * image photo resolution
+    * @since 2.8
+    * @param aStorage storage location - defaults to current loation
+    * @param aBurstActive - set to ETrue if burst mode is active
+    * @param aSize - the id of the photo resolution
+    * @return the number of images
+    */
+    TInt ImagesRemaining( TCamMediaStorage aStorage,
+                          TBool            aBurstActive, 
+                          TCamPhotoSizeId  aSize );
+
+    /**
+    * Change the controller's current state
+    * Notifies controller observers of change
+    * @since 2.8
+    * @param aNewState new state code
+    */
+    void ChangeState( const TCamCameraState& aNewState );
+
+    /**
+    * Change the controller's target state. The state will not be
+    * altered if the controller is already in shutdown mode.
+    * @since 2.8
+    * @param aNewState new state code
+    */
+    void ChangeTargetState( const TCamCameraState& aNewState );
+
+    /**
+    * Change the controller's current operation
+    * Notifies controller observers of change
+    * @since 2.8
+    * @param aNewOperation new operation code
+    * @param aError error code associated with new state (if any)
+    */
+    void ChangeOperation( TCamCaptureOperation aNewOperation, 
+                          TInt          aError = KErrNone );
+
+  public:
+    /**
+    * Notify controller observers of an event.
+    * @since 2.8
+    * @param aEvent event code
+    * @param aError error code
+    */
+    void NotifyControllerObservers( TCamControllerEvent aEvent,
+                                    TInt                aError = KErrNone ) const;
+  private:
+
+    /**
+    * Starts the viewfinder if the engine has been prepared for the 
+    * current mode.  
+    * @since 2.8
+    */
+    void StartViewFinderL();
+
+    /**        
+    * Initiate image capture
+    * @since 2.8
+    * @return ETrue if the capture was initiated otherwise EFalse
+    */
+    TBool DoCaptureL();
+
+    /**
+    * Initiate video recording
+    * @since 2.8
+    */
+    void DoRecord();
+
+    /**
+    * Make a local copy of the viewfinder frame to use when
+    * the viewfinder is frozen
+    * @since 2.8
+    */
+    void CopyFrameL( const CFbsBitmap& aBitmap );
+
+    /**
+    * Reserve a set of file names for the current capture
+    * Store the reserved name(s) in iCaptureArray
+    * @since 2.8
+    * @param aCaptureMode still, burst or video mode
+    * @param aForcePhoneMem force path to use Phone memory (C:)
+    */
+    void ReserveFileNamesL( 
+           const TCamCameraMode&       aCaptureMode,
+           const TCamImageCaptureMode& aImageMode,
+           TBool                       aForcePhoneMem = EFalse );
+
+    /**
+    * Create a file ready for saving captured image into
+    * @since 2.8
+    * @param aFs: Handle to RFs
+    * @param aFullPath: Full path including drive and extension
+    * @return error code from file creation
+    */
+    TInt CreateDummyFileL( RFs& aFs, const TDesC& aFullPath );
+
+
+    /**
+    * Store file name and full file name (incl. path)
+    * to burst capture array
+    * @since 2.8
+    * @param aFullPath: Full path including drive and extension
+    */
+    void StoreNextFileNameL( const TDesC& aFullPath );
+
+    /**
+    * Generate a new file name and full path for saving the next video
+    * according to the specified mode (unless specified otherwise)
+    * @since 2.8
+    * @param aForcePhoneMem force path to use Phone memory (C:)
+    */
+    void GenerateNextVideoFilePathL( TBool aForcePhoneMem = EFalse );
+    
+    /**
+    * Generate a new path for saving the next image
+    * @since 3.0
+    */
+    void GenerateNextValidImagesPathL();
+
+    /**
+    * Generate a new file name and full path for saving the next video
+    * according to the specified mode.  File will always be 
+    * available.
+    * @since 2.8      
+    */
+    void GenerateNextValidVideoPathL();
+
+    /**
+    * Handle a notification from the autofocus custom extension
+    * @since 2.8
+    */
+    void HandleAutoFocusNotification( TCamExtAutoFocus aNotification );
+
+    /**
+    * Static callback function for idle timer expiry
+    * @since 2.8
+    * @param aPtr Pointer to an instance of the CCamAppController
+    * @return TInt to indicate if function should be called again
+    */
+        static TInt IdleTimeoutL( TAny* aPtr );
+   
+        /**
+    * Static callback function for time lapse timer expiry
+    * @since 3.0
+    * @param aPtr Pointer to an instance of the CCamAppController
+    * @return TInt to indicate if function should be called again
+    */     
+    static TInt TimeLapseTimeoutL( TAny* aPtr );
+
+private: // Deep sleep timer
+    /**
+    * Static callback function for camera deep sleep
+    * @since S60 5.0
+    * @param aPtr Pointer to an instance of the CCamAppController
+    * @return TInt dummy
+    */
+    static TInt DeepSleepTimeout( TAny* aPtr );
+
+    /**
+    * Deep sleep timeout handler
+    */
+    void DoDeepSleepTimeout();
+
+public: // Deep sleep timer
+    /**
+    * Start deep sleep timer
+    */
+    void DeepSleepTimerStart();
+    
+    /**
+    * Cancel deep sleep timer
+    */
+    void DeepSleepTimerCancel();
+
+private:
+    /**
+    * Set video length (max or short)
+    * @param aLength Length of video
+    * @since 2.8
+    */
+    void SetVideoLengthL( TInt aLength );
+
+    /**
+    * Returns the current photo storage location.
+    * @return the photo storage location
+    * @since 2.8
+    */
+    TInt CurrentPhotoStorageLocation() const;
+
+    /**
+    * Returns the current video storage location.
+    * @return the video storage location
+    * @since 2.8
+    */
+    TInt CurrentVideoStorageLocation() const;    
+    
+        /**
+        * Returns ETrue if the supplied toneId should be silent if the profile is 
+        * set to silent. Does *not* take into account network variant forcing 
+        * sounds on.
+        * @since 3.0
+        * @param aSoundId The tone to check
+        * @return ETrue if sound should always be played, else EFalse           
+        */
+    TBool ToneShouldBeSilent( TCamSoundId aSoundId );
+
+        /**
+        * Report to any observers that capture processing has completed
+        * @since 3.0      
+        */    
+    void HandleCaptureCompletion();
+
+    /**
+    * Tries to autofocus, will do nothing if camera in use is not
+    * primary camera, or focus range has not been set first
+    * @since 3.0
+    * @return Whether or not auto focus has been initiated
+    */
+    TBool TryAutoFocus();
+
+    /**
+    * Checks the current scene, and where required, updates the autofocus
+    * mode in use.  Called when the photo scene or based-on-scene change
+    * @since 3.0      
+    * @param aForceAFReset Whether to force a ResetToIdle independant of scene mode
+    */    
+    void CheckAfModeForScene( TBool aForceAFReset = EFalse );
+
+    /**
+    * Initalises the AutoFocus interface, if needed
+    * @since 3.0
+    */
+    void InitAutoFocusL();
+    
+    /**
+    * Timeout to play capture tone after delay (to match
+    * capture tone to actual capture event)
+    * @since 3.0
+    * @param aPtr TAny* ptr (cast to CCamAppController)
+    * @return Error code retruned by function
+    */
+    static TInt CaptureToneDelayTimeout( TAny* aPtr );
+    
+    /**
+    * Play the capture tone (called from capture delay timeout)
+    * @since 3.0
+    */
+    void PlayDelayedCaptureTone();
+
+    /**
+    * Copy Snapshot if needed. Helper function for McaeoSnapImageReady
+    * @since 3.0
+    * @param aSnapshot the snapshot to copy
+    * @param aError Error code KErrNone to indicate success or a
+    *               standard Symbian OS error code.        
+    */
+    void CopySnapshotIfNeeded(const CFbsBitmap& aSnapshot, TInt aError);
+    
+   
+    /**
+    * Checks whether flash is required for taking a picture.
+    * @return true if flash is required current mode
+    */
+    TBool FlashRequired() const;              
+
+
+private:  // Functions from base classes
+
+    /**
+    * From MCamImageSaveObserver, image save has completed
+    * @since 2.8
+    */
+    void HandleSaveEvent( TCamSaveEvent aEvent );
+    
+    /**
+    * From MCamImageSaveObserver, image save has completed
+    * @since 2.8
+    */
+    void HandleFileHarvestingComplete();
+
+    /**
+    * Idle timeout expiry - invoke switch to standby mode
+    * @since 2.8
+    * @return TInt to indicate if function should be called again
+    */
+    TInt DoIdleTimeoutL();
+
+    /**
+    * Time lapse timeout expiry - update the remaining time countdown
+    * or initiate the next capture if the full period has expired
+    * @return TInt to indicate if function should be called again
+    */
+    TInt DoTimeLapseTimeoutL();
+
+    /**
+    * Force the application to use phone memory for Video and Image saving.
+    * Typically called when attempting to access MMC fails.
+    * @since 2.8
+    */        
+    void ForceUsePhoneMemoryL( TBool aEnable = ETrue );
+
+    /**
+    * Complete the burst operation
+    * @since 2.8
+    */      
+    void CompleteBurstOperation();
+    
+    /**
+    * Complete the time lapse operation
+    * @since 3.0
+    */  
+    void CompleteTimeLapseOperation();
+
+
+    /**
+    * Whether or not the engine is currently processing a capture
+    * still, video or sequence.
+    * @since 2.8
+    * @return ETrue if the engine is performing a capture operation
+    */
+    TBool EngineProcessingCapture() const;
+
+    /**
+    * Handle an arriving call. Stops video and cancels sequence capture
+    * in early stages.
+    * @since 2.8
+    */
+    void HandleIncomingCall();
+
+    /**
+* Cleans up the controller active camera state
+    * @param aAny Pointer to the object which is the target 
+    * of the cleanup operation
+    * @since 2.8
+    */
+    static void Cleanup( TAny* aAny );
+    
+    /**
+    * Immediately cancels a still capture at any stage.
+    * @since 2.8
+    */
+    void CancelStillCaptureNow();
+    
+    /**
+    * Attempt to cleanup capture array if burst capture fails
+    * @since 2.8
+    * @param aImageCountDelivered number of images delivered
+    * @param aError error returned from burst capture operation
+    */
+    void TidyCaptureArray( TInt aImageCountDelivered, 
+                                    TInt aError );
+   
+    /**
+    * Load 2ndary caera specifc settings (on construction or camera switch)
+    * @since 3.0
+    */
+    void LoadSecondaryCameraSettingsL();
+
+  // -------------------------------------------------------
+  // Orientation sensor / rotation related
+public:
+
+    /**
+    * Get current orientation to be used on image rotation.
+    * Always ECamOrientation0 if rotation setting is OFF.
+    * @return Current image orientation value.
+    */
+    TCamImageOrientation ImageOrientation() const;
+    
+    /**
+      *  Checks if mass storage exist in current phone.
+      *  @ return True if Mass storage exist
+      */
+     TBool ExistMassStorage() const;
+
+    /**
+      *  Checks if a memory type is available on the phone.
+      *  @param aStorage TCamMediaStorage enum specifiying the type of storage;
+      *  	default=ECamMediaStorageCurrent
+      *  @return ETrue if the Memory type is available
+      */
+     TBool IsMemoryAvailable( const TCamMediaStorage aStorage = 
+        ECamMediaStorageCurrent, TBool aIgnoreUsbPersonality = EFalse ) const;
+    
+  public:
+
+    /**
+    * Update the sensor api object
+    * @since 3.0
+    * @param aStartupApi eTrue if we need to recreate the Api
+    */
+    void UpdateSensorApiL( TBool aStartupApi );
+    
+    /**
+    * Forces a refresh of the local copy of the back slide status
+    * @since 2.8
+    */
+    void RefreshSlideStatus();
+
+  private:
+
+    /**
+    * From MSensrvDataListener receive Sensor Data
+    *
+    * Indicates data is available in the receiving buffer. A client can read 
+    * the data through GetData()-function in the related channel object. Data 
+    * is valid until the data received notification occurs again.
+    *
+    * @since 5.0
+    * @param[in] aChannel Reference to the related channel object
+    * @param[in] aCount Data object count in receiving buffer.
+    * @param[in] aDataLost Number of lost data items. Data loss can occur if
+    *     the client does not request new data from server fast enough. This 
+    *     can happen
+    *     when system is under heavy load and the client process has lower
+    *     priority than sensor server process. If data loss is a problem, 
+    *     consider using higher object count in data listening, which will reduce 
+    *     number of expensive IPC calls used in data transmission.
+    */
+    void DataReceived( CSensrvChannel& aChannel, 
+                       TInt aCount, 
+                       TInt aDataLost );
+    /**
+    * From MSensrvDataListener receive data error notice
+    *
+    * Data listening failed. 
+    * If error was fatal, channel has also been closed and sensor server session 
+    * terminated. If error was minor, some data has potentially been lost.
+    *
+    * @since 5.0
+    * @param[in] aChannel Reference to the related channel object
+    * @param[in] aError Error code.
+    */
+    void DataError( CSensrvChannel& aChannel, 
+                    TSensrvErrorSeverity aError );
+
+    /** 
+    * From MSensrvDataListener
+    *
+    * Returns a pointer to a specified interface - to allow future extension
+    * of this class without breaking binary compatibility
+    *
+    * @since S60 5.0
+    * @param aInterfaceUid Identifier of the interface to be retrieved
+    * @param aInterface A reference to a pointer that retrieves the specified interface.
+    */
+    void GetDataListenerInterfaceL( TUid aInterfaceUid, 
+                                    TAny*& aInterface );
+                                                    
+    /**
+    * Set image rotation parameters
+    * @since 3.0
+    */
+    void SetImageOrientationL();
+
+    /**
+    * Mapping from Sensor orientation data type to our own
+    * image orientation type.
+    * @param aSensorOrientation Orientation Sensor device orientation value.
+    * @return Camera orientation value.
+    */
+    static TCamImageOrientation MapSensorOrientatio2CamOrientation( 
+        const TSensrvOrientationData::TSensrvDeviceOrientation& aSensorOrientation, 
+        TCamImageOrientation aLastImageOrientation, 
+        TCamActiveCamera aActiveCamera );
+        
+    /**
+    * Mapping from camera orientation data type to bitmap orientation type.
+    * @param camera orientation value.
+    * @return CBitmapRotator::TRotationAngle.
+    */
+    static CBitmapRotator::TRotationAngle MapCamOrientation2RotationAngle( 
+        const TCamImageOrientation aOrientation );        
+    
+  // -------------------------------------------------------
+
+  private:        
+   
+        /**
+        * From MPropertyObserver Handle change in a watched property
+        * @since 2.8
+        * @param aCategory The type of property
+        * @param aKey The property that has changed
+        */
+        void HandlePropertyChangedL( const TUid& aCategory, const TUint aKey );
+          
+  private:        
+
+        /**
+         * Callback function that is called when lens cover state changes.
+         * Used to implement delayed handling of lens cover events.
+         * @param aPtr Pointer to CCamAppController
+         * @return 
+         */
+        static TInt LensCoverUpdateL( TAny* aPtr );
+  
+        /**
+        * Handles the slide closed event
+        * @since 2.8
+        */
+        void HandleSlideClosedL();
+        
+        /**
+        * Handles the slide open event
+        * @since 2.8
+        */
+        void HandleSlideOpenedL();        
+
+ 
+    private: // Functions from base classes
+
+        /**
+        * From MCamObserver
+        * Receives event codes from observables
+        * @since 3.0
+        * @param aEvent The event code
+        */
+        void HandleObservedEvent( TCamObserverEvent aEvent );
+
+        /**
+        * Returns whether or not the current profile is silent
+        * @since 3.0
+        * @return ETrue if current profile is silent
+        */
+        TBool IsProfileSilentL();      
+
+         /**
+        * Static callback function for backlight timer reset
+        * since 3.0
+        * @param aPtr Pointer to an instance of the CCamAppController
+        * @return TInt to indicate if function should be called again
+        */
+        static TInt ResetInactivityTimer( TAny* aPtr );
+        
+        /**
+    * Enable or disable the system screensaver
+    * @since 3.0
+    * @param aEnable ETrue if the screensaver is enabled
+    *           else EFalse
+    */  
+    void EnableScreenSaver( TBool aEnable );
+
+    /**
+     * Static callback function for timer callback for closing 
+     * location trail.
+     * @since S60 v5.0
+     * @param aPtr Pointer to an instance of the CCamAppController
+     * @return TInt to indicate if function should be called again
+     */             
+     static TInt RetryStopLocationTrail( TAny* aPtr );   
+     
+    public:
+        void StartLocationTrailL();
+        void StopLocationTrail( TBool aCloseSession = EFalse );
+
+    public:
+        /**
+        * Returns a pointer to flash status object. Never NULL if
+        * ConstructL has been executed successfully.
+        * @return flashStatusPointer
+        */
+        CCamFlashStatus* FlashStatus() const;        
+        
+        /**
+        * Returns false, if a picture cannot be taken, due to flash being
+        * required and recharged, true otherwise.
+        * @return flashstatus
+        */
+        TBool CheckFlash() const;
+        
+        /**
+        * Called when about to switch to burst or timelapse mode. Stores
+        * the current flash mode and scene.
+        */
+        void SaveFlashMode();
+        
+        /**
+        * Called when switching to single image capture mode. Restores
+        * flash mode, if using same scene mode as was used when the
+        * flash mode was stored. Otherwise clears the stored info.
+        */
+        void RestoreFlashMode();
+        
+     public:
+        /**
+        * Returns a pointer to dynamic Configuration Manager.
+        *
+        * Never NULL if ConstructL has been executed successfully.
+        * @return Pointer to Configuration Manager
+        */
+        CCamConfiguration* Configuration() const;
+
+
+        /**
+        * Returns whether or not the keylock is on
+        * @since 5.0
+        * @return ETrue if keylock is on, otherwise EFalse
+        */
+        TBool IsKeyLockOn();
+        
+        /**
+        * Used to get whether user is sliding in the self timer preview.
+        * @return ETrue if user is sliding in the self timer preview.
+        */
+        inline TBool IsSlideInSelfTimerPreview() const { return iSlideInSelfTimerPreview; };
+
+        /**
+        * Used to set whether user is sliding in the self timer preview.
+        * @param aValue the value to indicate whether user is sliding in the self timer preview.
+        */
+        inline void SetSlideInSelfTimerPreview( TBool aValue ) { iSlideInSelfTimerPreview = aValue; };
+
+        /**
+        * Used to get the current storage.
+        * @return the current storage.
+        */
+        TCamMediaStorage CurrentStorage();
+        
+        /**
+        * Returns whether autofocus is still needed before capturing.
+        * @return ETrue if it's necessary to try autofocus one more time before the capture.
+        */
+        TBool IsAfNeeded();
+        
+        /**
+        * Sets an autofocus needed flag, so that autofocus is done after cancel and range set are finished. 
+        */
+        void SetAfNeeded( TBool aAfNeeded );
+        
+        /**
+        * Returns whether recording was stopped because USB was connected.
+        * @return ETrue if video recording was stopped because USB was connected.
+        */
+        TBool IsCaptureStoppedForUsb();
+
+        /**
+        * set the flag of iSetCaptureStoppedForUsb.
+        */
+        void SetCaptureStoppedForUsb( TBool aCaptureStoppedForUsb );
+		
+        /**
+        * Cancels the memory card dismount monitoring
+        */
+        void CancelDismountMonitoring();
+        
+        /**
+        * Start the memory card dismount monitoring
+        */
+        void StartDismountMonitoring();
+        
+        /**
+        * Returns whether all snapshots have been received in burst mode
+        * @return ETrue if all snapshots have been received in burst mode.
+        */
+        TBool AllSnapshotsReceived();
+        
+        /**
+        * Returns the last made autofocusrequest type or 0, if there are
+        * no pending autofocus requests.  
+        */
+        TInt PendingAFRequest();
+        
+        /**
+		* Calculates the remaining video recording time based on video
+		* quality settings (instead of getting the value from camera
+		* controller)
+		* @param aStorage TCamMediaStorage enum specifying the type of storage;
+		*	 default=ECamMediaStorageCurrent
+		* @return remaining time
+		*/       
+		TTimeIntervalMicroSeconds 
+			CalculateVideoTimeRemainingL( TCamMediaStorage 
+										aStorage = ECamMediaStorageCurrent);
+        /**
+        * Sets orientation of the application to CCamera
+        * 
+        */
+        void SetCameraOrientationModeL( TInt aOrientation );
+        
+        /**
+        * Final part in constructing cameracontroller
+        * 
+        */
+        void CompleteCameraConstructionL();
+        
+        /**
+         * Returns index of current image.
+         */
+        TInt CurrentImageIndex();
+        
+        /**
+         * Sets the value defining the need for CAE video init and prepare
+         */
+        void SetVideoInitNeeded( TBool aVideoInitNeeded );
+
+        /**
+         * Returns the value defining the need for CAE video init and prepare
+         */
+        TBool VideoInitNeeded();
+        
+        /**
+         * Stores the UserScene settings
+         */
+        void StoreUserSceneSettingsL();
+ 
+        /**
+         * Toggles between highest 16:9 and 4:3 quality levels.
+         */
+        TBool ToggleWideScreenQuality( TBool aWide );             
+
+        /**
+         * Returns the value of iSaveStarted
+         */
+        TBool IsSaveStarted();
+        
+        /**
+         * Getter for iIssueModeChangeSequenceSucceeded
+         */
+        TBool IssueModeChangeSequenceSucceeded();
+		
+        /**
+         * Initiates startup sequence in embedded mode 
+         */
+        void EmbeddedStartupSequence();
+        
+        /**
+         * Called by the snapshotrotator to indicate when snapshot
+         * is rotated and ready for drawing
+         */
+        void SnapshotRotationComplete();
+        
+        /**
+         * Method to retrieve Remaining Recording time from CCaeEngine
+         */
+        TTimeIntervalMicroSeconds RemainingVideoRecordingTime();
+        
+        
+        /**
+         * Handles hdmi connect event during recording after video stop
+         */
+        void HandlePostHdmiConnectDuringRecordingEventL();
+        
+		/**
+		* Sets a Pending Hdmi Event
+		*/
+        void SetPendingHdmiEvent( TCamHdmiEvent aPendingHdmiEvent );
+        
+		/**
+		* Handles the current pending Hdmi EVent
+		*/
+        void HandlePendingHdmiEvent();
+		
+        /**
+        * Returns ETrue when scene mode is forced to 
+        * "Automatic" by secondary camera
+        */
+        TBool SceneModeForcedBySecondaryCamera();
+
+        /**
+        * Set value defining if capturing with touch capture button 
+        */
+        void SetTouchCapture( TBool aTouchCapture );
+
+  private:
+
+    // -----------------------------------------------------
+    // Construction parts
+
+    void ConstructCameraControllerL( TInt aCameraIndex );
+
+    // -----------------------------------------------------
+    // Helper utility methods  
+    TInt GetCriticalMemoryLevelL( const TCamMediaStorage& aStorage );
+
+    // -----------------------------------------------------
+    // Events and requests handling  
+    void EventHandlingErrorRecovery( TInt aError );
+
+    void HandleSequenceEventL( TInt              aStatus, 
+                               TCamCameraEventId aEventId, 
+                               TAny*             aEventData );
+
+    void HandleRequestEventL( TInt              aStatus, 
+                              TCamCameraEventId aEventId, 
+                              TAny*             aEventData );
+
+    void HandleSettingEventL( TInt              aStatus, 
+                              TCamCameraEventId aEventId, 
+                              TAny*             aEventData );
+
+    void HandleImageCaptureEventL( TInt             aStatus, 
+                                   CCamBufferShare* aShare  );
+    void HandleImageStopEventL( TInt aStatus, 
+                                TInt aFullCaptureCount  );
+
+    void HandleViewfinderFrame( TInt aStatus, CFbsBitmap* aFrame );
+    void HandleSnapshotEvent( TInt aStatus, CFbsBitmap* aBitmap );
+    void HandleVideoAsyncStopEvent( TInt aStatus );
+    void HandleVideoStopEvent( TInt aStatus );
+
+    void IssueModeChangeSequenceL( TBool aStartup = EFalse );
+    void GenerateModeChangeSequenceL( RCamRequestArray& aSequence );
+    void GenerateStartupSequenceL( RCamRequestArray& aSequence );
+    
+    void IssueRequestL( const TCamCameraRequestId& aId );
+    void IssueDirectRequestL( const TCamCameraRequestId& aId );
+    void IssueSettingsChangeRequestL();
+
+    void ProceedPendingOrNotifyReadyL();
+
+    void DoVideoNameRetryL( TInt aStatus );
+    
+    /**
+    * Sets the current image/video settings from UI to camera, by calling
+    * RestoreSettingIfNecessaryL for each supported setting, and starting
+    * the setting process if any of them needs setting.
+    * This function needs to be called after camera release and switches
+    * between image/video mode.
+    */    
+    void RestoreSettingsToCameraL();
+    
+    /**
+    * Checks if the setting needs restoring (UI setting value doesn't match
+    * the actual setting value in camera).  In that case, function adds
+    * this setting to the list of pending settings.
+    * @param aSettingItem Setting item id
+    */    
+    void RestoreSettingIfNecessaryL( TCamSettingItemIds aSettingItem );
+
+    /**
+    * Checks if the setting needs restoring (UI setting value doesn't match
+    * the actual setting value in camera).  In that case, function 
+    * directly set settting to camera
+    * @param aSettingItem Setting item id
+    */ 
+    void DirectRestoreSettingIfNecessaryL( TCamSettingItemIds aSettingItem );
+
+    /**
+    * Set internal state based on camera event.
+    */
+    void SetStateFromEvent( TCamCameraEventId aEventId );
+
+    void InitCaptureLimitL();
+    
+    static TCamCameraRequestId 
+           NextRequestL( const TCamCameraState& aFrom, 
+                         const TCamCameraState& aTo   );
+    
+    static TCamCameraEventId 
+           ResponseForRequest( const TCamCameraRequestId& aRequestId );
+           
+    
+        /**
+    * Called when mmc is about to be dismounted
+    */       
+    TInt DriveChangeL( TCamDriveChangeType aType );
+    
+    /**
+    * Rotate the snapshot copy before thumbnail creation
+    */
+    void RotateSnapshotL();
+    
+    /**
+    * Handle change in image quality setting.
+    * Handle stopping viewfinder, re-preparing quality and
+    * restarting viewfinder if viewfinder is running.
+    * Notify observers about quality change.
+    */
+    void HandleImageQualitySettingChangeL();
+    
+    /**
+    * Handle change in video quality setting.
+    * Handle stopping viewfinder, re-preparing quality and
+    * restarting viewfinder if viewfinder is running.
+    * Notify observers about quality change.
+     */
+    void HandleVideoQualitySettingChangeL();
+
+  // =======================================================
+  private:    // Data
+    TBool  iValueIsStored;
+    CCamCameraController*        iCameraController;
+    CCamSettingProvider* iSettingProvider;
+
+    TUint                        iBusyFlags; // TCamBusyFlags values    
+    TCamAppControllerInfo        iInfo;
+
+    // Temporarily stop notifications to observers
+    TBool                        iMuteNotifications; 
+
+    // Observers of controller events
+    RPointerArray<MCamControllerObserver> iControllerObservers;
+    TInt iCameraReferences;
+
+    // The settings model for dynamic and static data.
+    // CCamSettingsModelBase* iSettingsModel;
+    MCamSettingsModel*         iSettingsModel;
+    MCamSettingPreviewHandler* iSettingsPreviewHandler; // Currently same object as iSettingsModel.
+    RArray<TCamSettingItemIds> iPreviewRollbacks;       // Used when cancelling previews.
+
+    // Used to indicate whether user is sliding in the self timer preview.
+    TBool iSlideInSelfTimerPreview;
+
+    TBool iVideoPrepareNeeded;       // Video re-prepare needed due to setting change
+
+    // Boolean to record if view finder should be frozen at next frame
+    TBool iFreezeViewFinder;
+    // Boolean to indicate that the frozen frame should be updated
+    TBool iUpdateFrozenFrame;
+
+    // name for next file, including path and extension
+    TFileName iSuggestedVideoPath;
+    // Used to indicate that the media storage has been changed tbe
+    // pathnames need to be checked
+    TCamMediaStorage iSetNewPathnamesPending;
+    // Counters used for creating multiple month folders 
+    TInt iMonthFolderCounters[CCamFolderUtility::ECamFolderTypeLast];
+    // Counter for image number. 
+    // Stored locally to avoid performance problems during burst.
+    TInt iImageNumberCache;
+
+    // Whether or not the engine is initialized for video recording
+    TBool iVideoRecorderInitialized;
+
+    // estimate of record time elapsed
+    TTimeIntervalMicroSeconds iVideoTimeElapsed;
+    // estimate of record time remaining
+    TTimeIntervalMicroSeconds iVideoTimeRemaining;
+
+    // Whether or not a capture mode transition is in progress
+    TBool iCaptureModeTransitionInProgress;
+
+    // Active object for saving images to file asynchronously
+    CCamImageSaveActive* iImageSaveActive;
+    // Array containing data that represents the images in a burst capture
+    CCamBurstCaptureArray* iCaptureArray;
+    // Index into burst capture array used to determine current image for
+    // SnapshotImage(), CurrentImageName(), CurrentFullFileName() and
+    // DeleteCurrentFile(). Set by call to SetAsCurrentImage().
+    // Single capture and video always use index 0.
+    TInt iCurrentImageIndex;                  
+    // Filenames for a timelapse sequence used for the delete sequence option
+    CDesCArray* iSequenceFilenameArray; 
+    // Tracks usage of the capture array, for timely release of memory
+    TInt iArrayUsageCount;
+    // Capture count requested.
+    // Used in burst and self-timer+timelapse modes.
+    TInt iRequestedCaptureCount;
+    // Indicates wheter autofocuscancel requests should be handled or not..
+    // Used in CancelFocusAndCapture.
+    TBool iNoBurstCancel;
+        
+        // Indicates if capturekey has been raised or not. This is used to
+        // determine if bursttimer should be activated or not.
+        TBool iKeyUP;
+
+    // Timer to control when short burst is changed to  press and hold burst.
+    CCamTimer* iBurstTimer;   
+    // Timer for switch to standby mode
+    CCamTimer* iIdleTimer;
+    // Timer for initiating Time Lapse captures
+    CCamTimer* iTimeLapseTimer;
+        
+    // Status variable for location trail
+    TBool iLocationTrailStarted;
+        
+    // Timer for stopping location trail 
+    CCamTimer* iLocationTrailTimer;
+        
+	// Whether or not a capture key pressed during image saving
+    TBool iCaptureKeyPressedWhileImageSaving;
+    // flag to indicate current VF status
+    TBool iViewFinding;
+    // timer to keep backlight active while VF is running
+	CPeriodic* iBacklightTimer;
+    // Class for playing sounds
+    CCamAudioPlayerController* iSoundPlayer;
+    CRepository* iRepository;
+    TInt iDiskCriticalLevel;        // critical threshold for card storage
+    TInt iRamDiskCriticalLevel;     // critical threshold for phone memory storage
+    // Whether we are currently in a call or ringing
+    TBool iInCallOrRinging;
+    // Keep track of whether we are currently saving a video clip or image
+    TBool iSaving;
+    TBool iSaveStarted;
+    // Keep track of whether a ReleaseEngine call has been made while an Init call has been made
+    TBool iPendingRelease;
+    TBool iEndKeyWaiting;
+    TBool iCompleteTimeLapsePending;
+    TBool iAutoFocusRequested;
+    TBool iCaptureRequested;
+    TBool iVideoRequested;
+    TBool iAfNeeded;
+
+    TBool iDemandKeyRelease; // Demand to release capture key
+
+    // Keep track of the camera that the next switch will activate
+    TInt iNextSwitchIsToPrimaryCamera;
+
+    // Flag for queued Camera switch operation
+    TCameraSwitchRequired iCameraSwitchRequired;  
+    
+    TBool iForceUseOfPhoneMemory;
+    
+    // Keeps track of the number of times we have attempted to set the video name
+    TInt iVideoNameRetries;
+
+    // Specified whether an image save request is pending. That is,
+    // we are waiting for the engine to return with an image that can be saved.
+    // Required to let post-capture know whether an image has been saved yet.
+    TBool iImageSaveRequestPending;
+
+    // Keeps track of the camera slider state so that
+    // we don't have to keep accessing the shared data file
+    TInt iSlideState;
+    TInt iNewSlideState;
+    
+    // callback used for delayed slider update
+    CPeriodic* iSliderCallBack;
+    
+    // Slider event flag
+    TBool iSliderCloseEvent;        
+
+    // The period between each timelapse capture 
+    TTimeIntervalMicroSeconds iTimeLapseInterval;
+    // The time at which the previous timelapse capture was initiated
+    TTime iTimeLapseStartTime;
+
+
+
+  	CSensrvChannel*       iAccSensorChannel;
+  	TBool                 iAccSensorListening;
+  	TBool                 iAccSensorInfoInitialized;
+    // Flag to allow delayed re-preparation of engine
+    TBool                 iOrientationChangeOccured;
+
+    // Outside flags, as available for Camera Controller at all times.
+    TCamImageOrientation  iImageOrientation;
+    TCamImageOrientation  iLastImageOrientation;
+    
+    // Property watcher to report changes in the slide state
+    CCamPropertyWatcher* iSlideStateWatcher;
+    // Property watcher to report changes in the keylock state
+    CCamPropertyWatcher* iKeyLockStatusWatcher;
+    // Property watcher to report changes in the profile state
+    CCamPropertyWatcher* iProfileStatusWatcher;
+    // Set to ETrue if shutter sound always played
+    // otherwise playing shutter sound depends on
+    // current profile
+    TBool iShutterSndAlwaysOn;
+    // Active object to listen to the call state.
+    CCamCallStateAo* iCallStateAo;   
+    // Organises notifications to observers of capture completion    
+    CCamObserverHandler* iCaptureCompletionObserverHandler;
+    TInt iActualBurst;
+    CCamTimer* iCaptureToneDelayTimer;
+    // Whether or not the video was stopped due to the phone app
+    // having the foreground
+    TBool iVideoStoppedForPhoneApp;        
+    // used to simulate the receipt of a viewfinder frame when 
+    // timelapse capturing.
+    CFbsBitmap* iSnapShotCopy;
+    // estimated snapshot size in bytes - used when monitoring free
+    // RAM during burst capture
+    TInt iSnapshotDataSize;
+    // array of estimated jpeg sizes in bytes for different image
+    // resolutions - used when monitoring free RAM during burst capture
+    RArray<TInt> iJpegDataSizes;
+    // array of estimated post capture sizes required in bytes for
+    // different image resolutions - used when monitoring free RAM
+    // during burst capture
+    RArray<TInt> iSequencePostProcessDataSizes;        
+    // Array of CameraEventInterested observers which wanted to be camera
+    // observers when camera wasn't yet created. When camera is created
+    // Observers from this array should be attached first and array should
+    // be cleared.
+    RArray<const MCamCameraObserver*> iPendingObserversArray;
+    RArray<TUint> iCameraEventInterested;
+
+     // Used to wake the camera hardware approximately 2-3 seconds before 
+    // a timelapse capture
+    TBool iCameraWoken;
+    TBool iZoomWaitingForCamera;
+    TBool iNewZoomPending;
+    TInt iDesiredZoomVal;
+    
+    TBool iSequenceCaptureInProgress;
+    TInt  iLongSequenceLimit;
+    
+    // Boolean to determine whether filename has already been
+    // reserved for the image being currently captured. Reserving 
+    // is done when either the image's snapshot snapshot or
+    // image data arrives. (But not again when the other one comes)
+    TBool iFilenameReserved;
+    TCamEvCompRange iEvRange;
+        
+#if defined(RD_MDS_2_5) && !defined(__WINSCW__)
+    RLocationTrail iLocationUtility;
+    TBool iLocationUtilityConnected;
+#endif // __WINSCW__
+
+#ifdef CAMERAAPP_PERFORMANCE_MEASUREMENT 
+    TCamPerformanceState iPerformanceState; 
+#endif        
+
+    TBool iAppUiAvailable;
+    // If this boolean is set to true, the next focus successful
+    // or focus failed event should be ignored as it's resulted by
+    // moving lens to hyperfocal position when cancelling AF.
+    TBool iAFCancelInProgress;
+    // Holds last made autofocusrequest type or 0, if there are no
+    // pending autofocus requests.
+    TInt iPendingAFRequest;
+    // AFrequest currently in processing.    
+    TInt iCurrentAFRequest;
+    CCamFlashStatus* iFlashStatus;
+    TBool iFlashModeSaved;
+    TCamSceneId iSavedFlashScene;
+    TCamFlashId iSavedFlashMode;
+    TBool iSettingsRestoreNeeded;
+    CCamConfiguration*  iConfiguration; //< Configuration Manager. *owned*    
+    CCFClient* iContextFwClient;
+    TBool iDefineContextSuccessful;
+    TBool iStorageChangeProcessOngoing;
+    // own.
+    CCamGSInterface* iPlugin;
+    TBool iSilentProfile;
+    TInt iTimeLapseCaptureCount;
+    RFs iFs;
+    CCamDriveChangeNotifier* iDriveChangeNotifier;
+    TCamMediaStorage iCurrentStorage;
+    TCamMediaStorage iPreferredStorageLocation;
+    TCamMediaStorage iForcedStorageLocation;
+    TCamMediaStorage iInitialVideoStorageLocation;
+    TBool iCaptureStoppedForUsb;
+    TBool iDismountPending;
+    TBool iAllSnapshotsReceived;
+    CCamTimer* iDeepSleepTimer; // own
+    TBool iDeepSleepTimerExpired;
+    // not owned by camappcontroller
+    CCameraUiConfigManager* iConfigManager;
+    TBool iVideoInitNeeded; // Used to decide if the need to call CAE video init
+    CCamSyncRotatorAo* iRotatorAo;
+    CFbsBitmap* iRotatedSnapshot;
+    CCamBurstCaptureArray* iRotationArray;
+    CCamSnapShotRotator* iSnapShotRotator;
+    // orientation at capture time
+    TCamImageOrientation  iCaptureOrientation;
+    
+    TBool iIssueModeChangeSequenceSucceeded;
+    
+    CCamTvAccessoryMonitor* iTvAccessoryMonitor;
+    
+    TBool iHdmiCableConnectedDuringRecording;
+    
+    TBool iSnapshotRedrawNeeded;
+    
+    TCamHdmiEvent iPendingHdmiEvent;
+	
+    TBool iSceneModeForcedBySecondaryCamera;
+
+    TBool iTouchCapture;
+	
+    };
+
+#endif      // CAMAPPCONTROLLER_H
+            
+// End of File