camappengine/Engine/Src/CaeEngineImpStillAndVf.cpp
branchRCL_3
changeset 20 e3cdd00b5ae3
parent 19 18fa9327a158
child 21 27fe719c32e6
--- a/camappengine/Engine/Src/CaeEngineImpStillAndVf.cpp	Thu Aug 19 10:05:54 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3029 +0,0 @@
-/*
-* Copyright (c) 2002-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:  Camera Application Engine implementation still capturing, 
-*                settings, and view finder methods
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include <fbs.h>                            // For CFbsBitmap
-
-#include "CaeEngineImp.h"                   // Engine implementation header.
-#include "CaeStillQualityLevels.h"          // For still capturing quality levels.
-#include "CaeVideoQualityLevels.h"          // Needed just in destructor.
-#include "CaeVideoTimes.h"                  // Needed just in destructor.
-#include "CaeStillStatesActive.h"                
-
-#ifdef CAE_TEST_VERSION
-#include "CaeEngineImpTestErrors.h"         // For TEST_VERSION compilation only
-#endif
-
-#include "OstTraceDefinitions.h"
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include "CaeEngineImpStillAndVfTraces.h"
-#endif
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngine::NewL
-// Two-phased constructor. Calls CCaeEngineImp's NewL().
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CCaeEngine* CCaeEngine::NewL()
-    {
-    return CCaeEngineImp::NewL();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::CCaeEngineImp
-// Default constructor.
-// -----------------------------------------------------------------------------
-//
-CCaeEngineImp::CCaeEngineImp(): 
-    iZoomMode( EZoomModeDigital ), 
-    iExposureMode( CCamera::EExposureAuto ),
-    iWhiteBalanceMode( CCamera::EWBAuto ), 
-    iFlashMode( CCamera::EFlashNone ),
-    iVideoTimesInterval( KVideoTimesIntervalDefault ), 
-    iMaxClipSizeInBytes( KMMFNoMaxClipSize ), 
-    iMaxClipSizeInBytesPrep( KMMFNoMaxClipSize )
-    {
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::~CCaeEngineImp
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CCaeEngineImp::~CCaeEngineImp()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::~CCaeEngineImp() entering" ) );
-
-    // Cancels/closes/stops still capturing, video recording, and view finding.
-    CancelAllActivities();
-
-    // Delete extension implementations
-	iExtension.ResetAndDestroy();
-
-    // Delete the state machine
-    // Note: This must be done after destroying extensions because there is some
-    // validity checking in the iStillStatesActive destructor.
-    delete( iStillStatesActive );
-
-    // Delete interface implementation lists. 
-	// Close for each iImplementations before closing 
-	// iExtInterfaceImplementationLists.
-	for ( TInt i = 0; i < iExtInterfaceImplementationLists.Count(); i++ )
-		{
-		iExtInterfaceImplementationLists[i].iImplementations->Close();
-		delete( iExtInterfaceImplementationLists[i].iImplementations );
-		}
-	iExtInterfaceImplementationLists.Close();
-
-    // Delete custom interface list items
-	iExtCustomInterfaceImplementations.Close();
-
-    delete iVideoType;
-    delete iVideoClipFileName;
-
-    // Turn camera power off first, then release camera.
-    if ( iCamera ) 
-        {
-        if ( iReserved ) 
-            {
-            if ( iPowerOn ) 
-                {
-                iCamera->PowerOff();
-                }
-            iCamera->Release();
-            }
-        }
-
-    delete iVideoFrameSizePrep;
-    delete iVideoFrameSize;
-
-    delete iVideoTimes;
-    delete iVideoTimesCallback;
-    delete iVideoRecorder;
-
-    delete iVideoQualityLevelsCont;
-    delete iStillQualityLevelsCont;
-    
-    delete iCallbackActive;
-
-    delete iInfo;
-
-    delete iCamera;
-
-	REComSession::FinalClose();
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::~CCaeEngineImp() returning" ) );
-
-    // For RTRT code coverage analysis.
-    // #pragma attol insert _ATCPQ_DUMP(0);
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ConstructL
-// Symbian 2nd phase constructor that can leave.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ConstructL( TInt aCameraIndex, TInt aDisplayIndex )
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::ConstructL() entering with camera index %d" ), 
-    	aCameraIndex );
-    
-    OstTrace0( CAMERASRV_PERFORMANCE, CCAEENGINEIMP_CONSTRUCTL, "e_CAM_ENG_INIT 1" );   //CAE_ENGINE_INIT_START
-        
-    if ( ( aCameraIndex < 0 ) || 
-         ( aCameraIndex >= CCamera::CamerasAvailable() ) )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::ConstructL leaving KErrHardwareNotAvailable, aCameraIndex=%d" ), aCameraIndex );
-        User::Leave( KErrHardwareNotAvailable );
-        }
-
-    // Create a new Camera API implementation object, if supported
-    TRAPD( err, iCamera = CCamera::New2L( static_cast<MCameraObserver2&>(*this), aCameraIndex, KCameraPriority ) );
-    if ( err )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::ConstructL() CCamera::New2L return code=%d" ), err ); 
-
-        // Create old Camera API implementation object.
-        iCamera = CCamera::NewL( static_cast<MCameraObserver&>(*this), aCameraIndex );
-        LOGTEXT( _L( "Cae: CCaeEngineImp::ConstructL() using MCameraObserver" )); 
-        }
-    else
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::ConstructL() using MCameraObserver2" )); 
-        }
-
-
-    // Get camera handle.
-    iCameraHandle = iCamera->Handle();
-
-    // Set display index
-    iDisplayIndex = aDisplayIndex;
-
-    // Create and initialize info object.
-    iInfo = new( ELeave ) TCamAppEngineInfo;
-    InitializeInfo( *iCamera );
-
-    // Create active object for calling methods from callbacks.
-    iCallbackActive = CCaeCallbackActive::NewL( *this );
-
-    // Create still quality levels container object.
-    iStillQualityLevelsCont = CCaeStillQualityLevelsCont::NewL();
-
-    // Set default value for video recording stopping 
-    iAsyncVideoStopEnabled = EFalse;
-    
-	// Create interface lists. 
-	// The order of interface lists in iExtInterfaceImplementationLists
-	// should not be changed later as the order must always match to 
-	// TCaeExtensionInterfaceIndexes enum.
-	for ( TInt i = 0; KCaeSupportedExtensionInterfaceUids[i].iUid != NULL; i++ )
-		{
-		TCaeExtensionInterfaceImplListItem listItem;
-
-		RArray<TCaeExtensionInterfaceImplItem>* emptyImplementationArray = 
-			new(ELeave) RArray<TCaeExtensionInterfaceImplItem>(
-			TCaeExtensionInterfaceImplItemGranularity );
-
-		listItem.iInterfaceUid = KCaeSupportedExtensionInterfaceUids[i];
-		listItem.iImplementations = emptyImplementationArray; 
-		
-		// Copy the list item to the end of the list.Give ownership of 
-        // emptyImplementationArray.
-        CleanupStack::PushL( emptyImplementationArray );
-		iExtInterfaceImplementationLists.AppendL( listItem ); 
-        CleanupStack::Pop( emptyImplementationArray );
-		}
-
-    // Create the state machine for still capturing
-    iStillStatesActive = CCaeStillStatesActive::NewL( *iCamera, *iInfo,
-        *( iExtInterfaceImplementationLists[KCaeExtProcessImageInterfaceIndex].iImplementations  ) );
-
-	// Create extensions and populate the extension array 
-	PopulateExtensionArrayL();
-    
-    OstTrace0( CAMERASRV_PERFORMANCE, DUP1_CCAEENGINEIMP_CONSTRUCTL, "e_CAM_ENG_INIT 0" );  //CAE_ENGINE_INIT_END
-    
-    LOGTEXT( _L( "Cae: CCaeEngineImp::ConstructL() returning" ) );
-    }
-
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CCaeEngineImp* CCaeEngineImp::NewL()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::NewL() entering" ) );
-
-    CCaeEngineImp* self = new( ELeave ) CCaeEngineImp();
-
-    CleanupStack::PushL( self );
-    self->ConstructL( 0, 0 ); // Construct with default camera index 0 and display index 0
-    CleanupStack::Pop( self );
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::NewL() returning" ) );
-
-    return self;
-    }
-
-    
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::PopulateExtensionArrayL
-// Get a list of extension implementations via ECom, construct the extensions and 
-// add those the the array.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::PopulateExtensionArrayL()
-	{
-	LOGTEXT( _L( "Cae: CCaeEngineImp::PopulateExtensionArrayL() entering" ) );
-
-	// Get a list of all extensions from ECom
-	TEComResolverParams resolverParams;
-	resolverParams.SetDataType ( KExtensionTypeStringDesc );
-	resolverParams.SetWildcardMatch ( EFalse );
-	RImplInfoPtrArray implInfoArray;
-	REComSession::ListImplementationsL( KExtensionInterfaceUid, resolverParams, 
-		implInfoArray );
-	// This should be called only after ListImplementationsL
-	CleanupResetAndDestroyPushL( implInfoArray ); 
-    
-	LOGTEXT2( _L( "Cae: CCaeEngineImp::PopulateExtensionArrayL: extension count: %d" ),
-		implInfoArray.Count());
-	
-	// Create each extension via ECom and add it to the list 
-	for ( TInt i = 0; i < implInfoArray.Count(); i++ )
-		{		
-		MExtension* extension = NULL;
-		
-		// Trap the construction as if one extension fails to construct it 
-		// should not stop others from constructing
-    	LOGTEXT2( _L( "Cae: CCaeEngineImp::PopulateExtensionArrayL: load extension uid=%x" ),
-	    	implInfoArray[i]->ImplementationUid().iUid);
-		
-		TRAPD( error, extension = MExtension::NewExtensionL( 
-			implInfoArray[i]->ImplementationUid(), 
-			(MExtensionCallbackInterface*) this ));
-
-		if ( error || !extension)
-			{
-			// If one extension is failing we skip that.
-			#ifdef _DEBUG
-			TBuf<256> text;
-			text.Format(_L( "Cae: CCaeEngineImp::PopulateExtensionArrayL: NewExtensionL leaved, uid=%x, error=%d, extension=%x" ),
-				implInfoArray[i]->ImplementationUid().iUid, error, extension );
-			LOGTEXT( text );
-			#endif
-
-			delete( extension );
-			}
-		else
-			{
-			iExtension.AppendL( extension );
-			}
-		}
-
-	CleanupStack::PopAndDestroy( &implInfoArray );
-
-	LOGTEXT( _L( "Cae: CCaeEngineImp::PopulateExtensionArrayL() returning" ) );
-	}
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetCamAppEngineObserver
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetCamAppEngineObserver( MCamAppEngineObserver& aObserver )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetCamAppEngineObserver()" ) );
-
-    iCaeObserver = &aObserver;
-    iStillStatesActive->SetCamAppEngineObserver( aObserver );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::GetInfo
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::GetInfo( TCamAppEngineInfo& aInfo ) const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::GetInfo()" ) );
- 
-    aInfo = *iInfo;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::InitL
-// Initialise the engine for still image capturing using default parameters.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::InitL( TBool aCreateSnapImage )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::InitL() entering" ) );
-
-    iStillStatesActive->SetSnapImageCreation( aCreateSnapImage );
-
-    // To allow re-initialization, release the camera (first cancels possible 
-    // activities and turns camera power off).
-    Release();
-
-    // Init to default quality levels.
-    iInfo->iNumStillQualityLevelsSupported = 
-        iStillQualityLevelsCont->InitDefaultsL();
-
-    // Reserve camera (and after succesfull reserve, camera power will be 
-    // turned on).
-
-    iResetToPreviousSettings = ETrue; // This requests here to set the camera
-                                      // to default settings after power is on.
-    iCamera->Reserve();
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::InitL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::InitL
-// Initialise the engine for still image capturing either using default 
-// parameters or parameters from ini-file.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::InitL( 
-    TUid aSdUidStillQltyLevels, 
-    TBool aCreateSnapImage )
-    {
-    if( aSdUidStillQltyLevels == KNullUid )
-        {
-        InitL( aCreateSnapImage );
-        }
-    else
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::InitL(aSdUidStillQltyLevels): NOT SUPPORTED, leaving" ) );
-        User::Leave( KErrNotSupported );
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::Reserve
-// Calls Camera API Reserve().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::Reserve()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::Reserve() entering" ) );
-
-    if ( !iReserved ) 
-        {
-        iResetToPreviousSettings = ETrue;
-        iCamera->Reserve();
-        }
-    else if ( !iPowerOn ) // in case previous reserve ok, but poweron failed
-        {
-        PowerOn();
-        }
-
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::Reserve() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::Release
-// Calls Camera API Release().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::Release()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::Release() entering" ) );
-
-    if ( iReserved ) 
-        {
-        PowerOff();         // Cancel all activities (if any) and turn power off.
-        iCamera->Release(); // Release Camera HW.
-        iReserved = EFalse;
-        iStillPrepared = EFalse;
-        iVideoPrepared = EFalse;
-        iVideoOpened = EFalse;
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::Release() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::PowerOn
-// Calls Camera API PowerOn().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::PowerOn()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::PowerOn() entering" ) );
-
-    if ( iReserved && !iPowerOn ) 
-        {
-        iCamera->PowerOn();
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::PowerOn() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::PowerOff
-// Calls Camera API PowerOff().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::PowerOff()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::PowerOff() entering" ) );
-
-    if ( iPowerOn ) 
-        {
-        CancelAllActivities();
-        iCamera->PowerOff();
-        iPowerOn = EFalse;
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::PowerOff() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetZoomModeL
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetZoomModeL( 
-    TZoomMode aZoomMode )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetZoomModeL() entering" ) );
-
-    // Currently supporting digital and optical zooms, not EZoomModeOpticalDigital.
-    if ( ( aZoomMode != EZoomModeDigital ) && ( aZoomMode != EZoomModeOptical ) )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::SetZoomModeL leaving KErrNotSupported, aZoomMode=%d" ), aZoomMode );
-        User::Leave( KErrNotSupported );
-        }
-
-    iZoomMode = aZoomMode;
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetZoomModeL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ZoomMode
-// -----------------------------------------------------------------------------
-//
-CCaeEngine::TZoomMode CCaeEngineImp::ZoomMode() const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::ZoomMode()" ) );
-
-    return iZoomMode;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetZoomValueL
-// Calls Camera API SetDigitalZoomFactorL() or SetZoomFactorL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetZoomValueL( 
-    TInt aZoomValue )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetZoomValueL() entering" ) );
-
-    CheckPowerL();
-
-    switch ( iZoomMode )
-        {
-        case EZoomModeDigital:
-            // Leave if zoom factor is out of range.
-            if ( ( aZoomValue < 0 ) || 
-                 ( aZoomValue > iInfo->iMaxDigitalZoom ) )
-                {
-                LOGTEXT2( _L( "Cae: CCaeEngineImp::SetZoomValueL leaving KErrArgument, aZoomValue=%d" ), aZoomValue );
-                User::Leave( KErrArgument );
-                }
-            // Set DIGITAL zoom value.
-            iCamera->SetDigitalZoomFactorL( aZoomValue );
-            iZoomValue = aZoomValue;
-            break;
-        case EZoomModeOptical:
-            // Leave if zoom factor is out of range.
-            if ( ( aZoomValue < iInfo->iMinZoom ) || 
-                 ( aZoomValue > iInfo->iMaxZoom ) )
-                {
-                LOGTEXT2( _L( "Cae: CCaeEngineImp::SetZoomValueL leaving KErrArgument, aZoomValue=%d" ), aZoomValue );
-                User::Leave( KErrArgument );
-                }
-            // Set OPTICAL zoom value.
-            iCamera->SetZoomFactorL( aZoomValue );
-            iZoomValue = aZoomValue;
-            break;
-        default:
-            // EZoomModeOpticalDigital not supported
-            LOGTEXT2( _L( "Cae: CCaeEngineImp::SetZoomValueL leaving KErrNotSupported, iZoomMode=%d" ), iZoomMode );
-            User::Leave( KErrNotSupported );
-            break;
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetZoomValueL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ZoomValue
-// Calls Camera API DigitalZoomFactor() or ZoomFactor().
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::ZoomValue() const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::ZoomValue()" ) );
-
-    TInt zoomValue( 0 );
-    if ( iPowerOn )
-        {
-        switch ( iZoomMode )
-            {
-            case EZoomModeDigital:
-                zoomValue = iCamera->DigitalZoomFactor();
-                break;
-            case EZoomModeOptical:
-                zoomValue = iCamera->ZoomFactor();
-                break;
-            default:
-                // EZoomModeOpticalDigital not supported
-                break;
-            }
-        }
-    return zoomValue;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetBrightnessL
-// Calls Camera API SetBrightnessL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetBrightnessL( 
-    TInt aBrightness )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetBrightnessL() entering" ) );
-
-    // Leave if not supported.
-    if ( !( iInfo->iOptionsSupported & TCameraInfo::EBrightnessSupported ) )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::SetBrightnessL leaving KErrNotSupported, aBrightness=%d" ), aBrightness );
-        User::Leave( KErrNotSupported );
-        }
-
-    CheckPowerL();
-
-    iCamera->SetBrightnessL( aBrightness );
-    iBrightness = aBrightness;
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetBrightnessL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::Brightness
-// Calls Camera API Brightness().
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::Brightness() const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::Brightness()" ) );
-
-    TInt brightness( 0 );
-    if ( iPowerOn && ( iInfo->iOptionsSupported & TCameraInfo::EBrightnessSupported ) )
-        {
-        brightness = iCamera->Brightness();
-        }
-    return brightness;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetContrastL
-// Calls Camera API SetContrastL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetContrastL( 
-    TInt aContrast )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetContrastL() entering" ) );
-
-    // Leave if not supported.
-    if ( !( iInfo->iOptionsSupported & TCameraInfo::EContrastSupported ) )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::SetContrastL leaving KErrNotSupported, aContrast=%d" ), aContrast );
-        User::Leave( KErrNotSupported );
-        }
-
-    CheckPowerL();
-
-    iCamera->SetContrastL( aContrast );
-    iContrast = aContrast;
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetContrastL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::Contrast
-// Calls Camera API Contrast().
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::Contrast() const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::Contrast()" ) );
-
-    TInt contrast( 0 );
-    if ( iPowerOn && ( iInfo->iOptionsSupported & TCameraInfo::EContrastSupported ) )
-        {
-        contrast = iCamera->Contrast();
-        }
-    return contrast;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetExposureModeL
-// Calls Camera API SetExposureModeL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetExposureModeL( 
-    CCamera::TExposure aExposureMode )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetExposureModeL() entering" ) );
-
-    // Leave is requested exposure mode is not supported, 
-    // EExposureAuto should be always supported.
-    if ( ( ( aExposureMode != CCamera::EExposureAuto ) && 
-          !( aExposureMode & iInfo->iExposureModesSupported ) ) ||
-           ( aExposureMode < 0 ) )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::SetExposureModeL leaving KErrNotSupported, aExposureMode=%d" ), aExposureMode );
-        User::Leave( KErrNotSupported );
-        }
-
-    CheckPowerL();
-
-    iCamera->SetExposureL( aExposureMode );
-    iExposureMode = aExposureMode;
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetExposureModeL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ExposureMode
-// Calls Camera API Exposure().
-// -----------------------------------------------------------------------------
-//
-CCamera::TExposure CCaeEngineImp::ExposureMode() const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::ExposureMode()" ) );
-
-    CCamera::TExposure exposureMode( CCamera::EExposureAuto );
-    if ( iPowerOn )
-        {
-        exposureMode = iCamera->Exposure();
-        }
-    return exposureMode;
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetEvCompensationL
-// If the interface exists, calls Camera API SetEvCompensationL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetEvCompensationL( 
-    TInt /*aEvIndex*/ )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetEvCompensationL() (not supported) leaving" ) );
-
-    User::Leave( KErrNotSupported );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::EvCompensation
-// If the interface exists, calls Camera API EvCompensation().
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::EvCompensation() const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::EvCompensation() (not supported!)" ) );
-
-    return( 0 );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetWhiteBalanceModeL
-// Calls Camera API SetWhiteBalanceL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetWhiteBalanceModeL( 
-    CCamera::TWhiteBalance aWhiteBalanceMode )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetWhiteBalanceModeL() entering" ) );
-
-    // Leave is requested WB mode is not supported. 
-    // EWBAuto is always supported.
-    if ( ( ( aWhiteBalanceMode != CCamera::EWBAuto ) && 
-          !( aWhiteBalanceMode & iInfo->iWhiteBalanceModesSupported ) ) ||
-           ( aWhiteBalanceMode < 0 ) )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::SetWhiteBalanceModeL leaving KErrNotSupported, aWhiteBalanceMode=%d" ), aWhiteBalanceMode );
-        User::Leave( KErrNotSupported );
-        }
-    
-    CheckPowerL();
-
-    iCamera->SetWhiteBalanceL( aWhiteBalanceMode );
-    iWhiteBalanceMode = aWhiteBalanceMode;
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetWhiteBalanceModeL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::WhiteBalanceMode
-// Calls Camera API WhiteBalance().
-// -----------------------------------------------------------------------------
-//
-CCamera::TWhiteBalance CCaeEngineImp::WhiteBalanceMode() const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::WhiteBalanceMode()" ) );
-
-    CCamera::TWhiteBalance whiteBalanceMode( CCamera::EWBAuto );
-    if ( iPowerOn )
-        {
-        whiteBalanceMode = iCamera->WhiteBalance();
-        }
-    return whiteBalanceMode;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetFlashModeL
-// Calls Camera API SetFlashL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetFlashModeL( 
-    CCamera::TFlash aFlashMode )
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::SetFlashModeL() entering, mode=%d" ), aFlashMode );
-
-    // Leave is requested flash mode is not supported. 
-    // EFlashNone is always supported.
-    if ( ( ( aFlashMode != CCamera::EFlashNone ) && 
-          !( aFlashMode & iInfo->iFlashModesSupported ) ) || 
-           ( aFlashMode < 0 ) )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::SetFlashModeL leaving KErrNotSupported, aFlashMode=%d" ), aFlashMode );
-        User::Leave( KErrNotSupported );
-        }
-
-    CheckPowerL();
-
-    iCamera->SetFlashL( aFlashMode );
-    iFlashMode = aFlashMode;
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetFlashModeL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::FlashMode
-// Calls Camera API Flash().
-// -----------------------------------------------------------------------------
-//
-CCamera::TFlash CCaeEngineImp::FlashMode() const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::FlashMode()" ) );
-
-    CCamera::TFlash flashMode( CCamera::EFlashNone );
-    if ( iPowerOn )
-        {
-        flashMode = iCamera->Flash();
-        }
-    return flashMode;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ResetToDefaultsL
-// Resets the following settings: exposure mode, white balance mode, 
-// zoom mode, zoom value, flash mode, brightness, and contrast.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ResetToDefaultsL()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::ResetToDefaultsL() entering" ) );
-
-    SetExposureModeL();
-    SetWhiteBalanceModeL();
-    SetZoomModeL();
-    SetZoomValueL();
-    SetFlashModeL();
-
-    // Reset this setting only if it is supported by Camera API.
-    if ( iInfo->iOptionsSupported & TCameraInfo::EBrightnessSupported )
-        {
-        SetBrightnessL();
-        }
-
-    // Reset this setting only if it is supported by Camera API.
-    if ( iInfo->iOptionsSupported & TCameraInfo::EContrastSupported )
-        {
-        SetContrastL();
-        }
-
- 	// Process extensions
-	RArray<TCaeExtensionInterfaceImplItem>* settingsImplementationList = 
-		iExtInterfaceImplementationLists[KCaeExtSettingsInterfaceIndex].iImplementations;
-
-	for ( TInt i = 0; i < settingsImplementationList->Count(); i++ )
-		{
-		TRAPD(err, STATIC_CAST( MCaeExtSettingsInterface*, 
-		(*settingsImplementationList)[i].iImplPtr )->ResetToDefaultsL() );
-
-	    #ifdef _DEBUG
-		if ( err )
-		    {
-			LOGTEXT3(_L("Cae: CCaeEngineImp::ResetToDefaultsL(). Error %d in ResetToDefaultsL() for Extension %x"),
-			    err, (*settingsImplementationList)[i].iImplUid.iUid );
-			}
-		#endif
-		
-		User::LeaveIfError( err ); 
-		}
-
-   LOGTEXT( _L( "Cae: CCaeEngineImp::ResetToDefaultsL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetViewFinderMirrorL
-// Calls Camera API SetViewFinderMirrorL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetViewFinderMirrorL( 
-    TBool aMirror )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetViewFinderMirrorL() entering" ) );
-
-    // Leave if not supported.
-    if ( !( iInfo->iOptionsSupported & TCameraInfo::EViewFinderMirrorSupported ) )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::SetViewFinderMirrorL leaving KErrNotSupported, aMirror=%d" ), aMirror );
-        User::Leave( KErrNotSupported );
-        }
-        
-    CheckPowerL();
-
-    iCamera->SetViewFinderMirrorL( aMirror );    
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetViewFinderMirrorL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ViewFinderMirror
-// Calls Camera API ViewFinderMirror().
-// -----------------------------------------------------------------------------
-//
-TBool CCaeEngineImp::ViewFinderMirror() const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::ViewFinderMirror()" ) );
-
-    // If supported, query the setting from Camera API.
-    TBool viewFinderMirror( EFalse );
-    if ( iPowerOn && ( iInfo->iOptionsSupported & TCameraInfo::EViewFinderMirrorSupported ) )
-        {
-        viewFinderMirror = iCamera->ViewFinderMirror();
-        }
-    return viewFinderMirror;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::StartViewFinderBitmapsL
-// Calls Camera API StartViewFinderBitmapsL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::StartViewFinderBitmapsL( 
-    TSize& aVfFrameSize )
-    {
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::StartViewFinderBitmapsL() entering aVfFrameSize wxh=%dx%d" ),
-            aVfFrameSize.iWidth, aVfFrameSize.iHeight );
-
-    // Leave if not supported.
-    if ( !( iInfo->iOptionsSupported & TCameraInfo::EViewFinderBitmapsSupported ) )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderBitmapsL leaving KErrNotSupported" ));
-        User::Leave( KErrNotSupported );
-        }
-
-    if ( iPowerOn ) 
-        {
-        if ( !iCamera->ViewFinderActive() ) 
-            {
-            iTrueViewFinderSize = aVfFrameSize;
-            iCamera->StartViewFinderBitmapsL( iTrueViewFinderSize );
-            iViewFinderRunning = ETrue;
-            iStillStatesActive->SetViewFinderMode( iViewFinderRunning );
-            }
-        }
-
-    if ( !iViewFinderRunning )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderBitmapsL leaving KErrNotReady (iViewFinderRunning)" ));
-        User::Leave( KErrNotReady );
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderBitmapsL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::StartViewFinderBitmapsL
-// Cropped version.
-// Calls Camera API StartViewFinderBitmapsL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::StartViewFinderBitmapsL( 
-    TSize& aVfFrameSize, 
-    TRect& aCropRect )
-    {
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::StartViewFinderBitmapsL() entering aVfFrameSize wxh=%dx%d" ),
-            aVfFrameSize.iWidth, aVfFrameSize.iHeight );
-
-    // Leave if not supported.
-    if ( !( iInfo->iOptionsSupported & TCameraInfo::EViewFinderBitmapsSupported ) || 
-         !( iInfo->iOptionsSupported & TCameraInfo::EViewFinderClippingSupported )  )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderBitmapsL (cropped) leaving KErrNotSupported" ));
-        User::Leave( KErrNotSupported );
-        }
-
-    if ( iPowerOn ) 
-        {
-        if ( !iCamera->ViewFinderActive() ) 
-            {
-            iTrueViewFinderSize = aVfFrameSize;
-            iCamera->StartViewFinderBitmapsL( iTrueViewFinderSize, aCropRect );
-            iViewFinderRunning = ETrue;
-            iStillStatesActive->SetViewFinderMode( iViewFinderRunning );
-            }
-        }
-
-    if ( !iViewFinderRunning )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderBitmapsL (cropped) leaving KErrNotReady" ));
-        User::Leave( KErrNotReady );
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderBitmapsL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::StartViewFinderDirectL
-// Calls Camera API StartViewFinderDirectL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::StartViewFinderDirectL( 
-    RWsSession& aWs, 
-    CWsScreenDevice& aScreenDevice, 
-    RWindowBase& aWindow, 
-    TRect& aScreenRect )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderDirectL() entering" ) );
-
-    // Leave if not supported.
-    if ( !( iInfo->iOptionsSupported & TCameraInfo::EViewFinderDirectSupported ) )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::StartViewFinderDirectL leaving KErrNotSupported, iOptionsSupported=0x%x" ), iInfo->iOptionsSupported );
-        User::Leave( KErrNotSupported );
-        }
-
-    if ( iPowerOn )
-        {
-        if ( !iCamera->ViewFinderActive() )
-            {
-            iCamera->StartViewFinderDirectL( aWs, aScreenDevice, aWindow, aScreenRect );
-            iViewFinderRunning = ETrue;
-            iStillStatesActive->SetViewFinderMode( iViewFinderRunning );
-            }
-        }
-    
-    if ( !iViewFinderRunning )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderDirectL leaving KErrNotReady" ));
-        User::Leave( KErrNotReady );
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderDirectL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::StartViewFinderDirectL
-// Cropped version.
-// Calls Camera API StartViewFinderDirectL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::StartViewFinderDirectL( 
-    RWsSession& aWs,
-    CWsScreenDevice& aScreenDevice,
-    RWindowBase& aWindow,
-    TRect& aScreenRect,
-    TRect& aCropRect )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderDirectL() entering" ) );
-
-    // Leave if not supported.
-    if ( !( iInfo->iOptionsSupported & TCameraInfo::EViewFinderDirectSupported ) || 
-         !( iInfo->iOptionsSupported & TCameraInfo::EViewFinderClippingSupported ) )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::StartViewFinderDirectL (cropped) leaving KErrNotSupported, iOptionsSupported=0x%x" ), iInfo->iOptionsSupported );
-        User::Leave( KErrNotSupported );
-        }
-
-    if ( iPowerOn )
-        {
-        if ( !iCamera->ViewFinderActive() )
-            {
-            iCamera->StartViewFinderDirectL( aWs, aScreenDevice, aWindow, aScreenRect, aCropRect );
-            iViewFinderRunning = ETrue;
-            iStillStatesActive->SetViewFinderMode( iViewFinderRunning );
-           }
-        }
-
-    if ( !iViewFinderRunning )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderDirectL (cropped) leaving KErrNotReady" ));
-        User::Leave( KErrNotReady );
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::StartViewFinderDirectL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::StopViewFinder
-// Calls Camera API ViewFinderActive() and StopViewFinder().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::StopViewFinder()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::StopViewFinder() entering" ) );
-
-    if ( iPowerOn )
-        {
-        if ( iCamera->ViewFinderActive() )
-            {
-            iCamera->StopViewFinder();
-            iViewFinderRunning = EFalse;
-            iStillStatesActive->SetViewFinderMode( iViewFinderRunning );
-            }
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::StopViewFinder() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::IsViewFinding
-// Calls Camera API ViewFinderActive().
-// -----------------------------------------------------------------------------
-//
-TBool CCaeEngineImp::IsViewFinding() const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::IsViewFinding()" ) );
-
-    TBool isViewFinding( EFalse );
-    if ( iPowerOn ) 
-        {
-        isViewFinding = iCamera->ViewFinderActive();
-        }
-    return isViewFinding;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::GetViewFinderSize
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::GetViewFinderSize( 
-    TSize& aVfFrameSize )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::GetViewFinderSize()" ) );
-
-    aVfFrameSize = iTrueViewFinderSize;
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetCaeStillBurstObserver
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetCaeStillBurstObserver( 
-    MCaeStillBurstObserver& aObserver )
-    {
-    iStillStatesActive->SetCaeStillBurstObserver( aObserver );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetStillCaptureImageCountL
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::SetStillCaptureImageCountL( 
-    TInt aImageCount )
-    {
-    return ( iStillStatesActive->SetStillCaptureImageCountL( aImageCount ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::StillCaptureImageCount
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::StillCaptureImageCount() const
-    {
-    return ( iStillStatesActive->StillCaptureImageCount() );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetStillBurstCaptureIntervalL
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetStillBurstCaptureIntervalL( 
-    TTimeIntervalMicroSeconds aInterval )
-    {
-    iStillStatesActive->SetStillBurstCaptureIntervalL( aInterval );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::StillBurstCaptureInterval
-// -----------------------------------------------------------------------------
-//
-TTimeIntervalMicroSeconds CCaeEngineImp::StillBurstCaptureInterval() const 
-    {
-    return ( iStillStatesActive->StillBurstCaptureInterval() );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::StopStillBurstCapture
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::StopStillBurstCapture()
-    {
-    iStillStatesActive->StopStillBurstCapture();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::StillBurstSupport()
-// Return option flag for still burst support.
-// -----------------------------------------------------------------------------
-//
-TCamAppEngineInfo::TOptions CCaeEngineImp::StillBurstSupport()
-    {
-    return TCamAppEngineInfo::EStillBurstSupported;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::PrepareStillCaptureL
-// Retrieves parameters for the specified quality level and calls 
-// overloading PrepareStillCaptureL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::PrepareStillCaptureL( 
-    TInt aStillQualityIndex )
-    {
-    TSize size = iStillStatesActive->SnapImageSize();
-    PrepareStillCaptureL( aStillQualityIndex, size);
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::PrepareStillCaptureL
-// Retrieves parameters for the specified quality level and calls 
-// overloading PrepareStillCaptureL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::PrepareStillCaptureL( 
-    TInt         aStillQualityIndex, 
-    TSize&       aSnapSize )
-    {
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::PrepareStillCaptureL() entering aSnapSize wxh=%dx%d" ),
-            aSnapSize.iWidth, aSnapSize.iHeight );
-
-    if ( aStillQualityIndex < 0 || 
-         aStillQualityIndex >= iStillQualityLevelsCont->Count() ) 
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::PrepareStillCaptureL leaving KErrArgument, aStillQualityIndex=%d" ), aStillQualityIndex );
-        User::Leave( KErrArgument );
-        }
-
-    TSize frameSize         = iStillQualityLevelsCont->At( aStillQualityIndex ).iFrameSize;
-    CCamera::TFormat format = iStillQualityLevelsCont->At( aStillQualityIndex ).iOutputFormat;
-    TInt compressionQuality = iStillQualityLevelsCont->At( aStillQualityIndex ).iCompressionQuality;
-    TRect fullRect( frameSize );
-    
-    PrepareStillCaptureL( frameSize, format, compressionQuality, fullRect, aSnapSize );
-    
-    iStillQualityIndex = aStillQualityIndex;
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::PrepareStillCaptureL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::PrepareStillCaptureL
-// Cropped version.
-// Not supported.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::PrepareStillCaptureL( 
-    TInt /*aStillQualityIndex*/, 
-    const TRect& /*aCropRect*/ )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::PrepareStillCaptureL() cropped leaving KErrNotSupported" ) );
-
-    User::Leave( KErrNotSupported );
-    }
-
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::PrepareStillCaptureL
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::PrepareStillCaptureL( 
-    const TSize&      aFrameSize,
-    CCamera::TFormat  aFormat,  
-    TInt              aCompressionQuality )
-    {    
-    TRect fullRect( aFrameSize );
-    PrepareStillCaptureL( aFrameSize, aFormat, aCompressionQuality, fullRect );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::PrepareStillCaptureL
-// Cropped version. Using cropping only if supported by Camera API impl.
-// Calls RetrieveStillSizeIndex() that calls Camera API EnumerateCaptureSizes().
-// Calls Camera API PrepareImageCaptureL().
-// Optionally calls Camera API SetJpegQuality().
-// Finally calls McaeoStillPrepareComplete call-back.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::PrepareStillCaptureL( 
-    const TSize&      aFrameSize, 
-    CCamera::TFormat  aFormat, 
-    TInt              aCompressionQuality, 
-    const TRect&      aCropRect )
-    {
-    TSize snapSize = iStillStatesActive->SnapImageSize();
-    PrepareStillCaptureL(aFrameSize, aFormat, aCompressionQuality, aCropRect, snapSize );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::PrepareStillCaptureL
-// Cropped version. Using cropping only if supported by Camera API impl.
-// Calls RetrieveStillSizeIndex() that calls Camera API EnumerateCaptureSizes().
-// Calls Camera API PrepareImageCaptureL().
-// Optionally calls Camera API SetJpegQuality().
-// Finally calls McaeoStillPrepareComplete call-back.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::PrepareStillCaptureL( 
-    const TSize&      aFrameSize, 
-    CCamera::TFormat  aFormat, 
-    TInt              aCompressionQuality, 
-    const TRect&      aCropRect,
-    TSize&            aSnapSize )
-    {
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::PrepareStillCaptureL() entering aFrameSize wxh=%dx%d" ),
-            aFrameSize.iWidth, aFrameSize.iHeight );
-
-    OstTrace0( CAMERASRV_PERFORMANCE, CCAEENGINEIMP_PREPARESTILLCAPTUREL, "e_CAM_ENG_STILL_INIT 1" );   //CAE_ENGINE_STILL_INIT_START
-
-    // Leave if not supported.
-    if ( !( iInfo->iOptionsSupported & TCameraInfo::EImageCaptureSupported ) )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::PrepareStillCaptureL() leaving KErrNotSupported (EImageCaptureSupported)" ) );
-        User::Leave( KErrNotSupported );
-        }
-
-    CheckPowerL();
-
-    // Leave if still capturing or video recording is running.
-    if ( iStillStatesActive->IsRunning() || iVideoRecordingRunning ) 
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::PrepareStillCaptureL() leaving KErrNotReady (IsRunning)" ) );
-        User::Leave( KErrNotReady );
-        }
-
-    if ( ( aFormat == CCamera::EFormatJpeg ) || ( aFormat == CCamera::EFormatExif ) ) 
-        {
-    	SetJpegQuality( aCompressionQuality ); 
-        }
-    
-    iStillStatesActive->PrepareStillCaptureL( aFrameSize, aFormat, aCropRect, aSnapSize );
-
-    // Prepare ready now.
-    iStillPrepared = ETrue;
-
-    OstTrace0( CAMERASRV_PERFORMANCE, DUP1_CCAEENGINEIMP_PREPARESTILLCAPTUREL, "e_CAM_ENG_STILL_INIT 0" );  //CAE_ENGINE_STILL_INIT_END
-
-    // Inform client about the success.
-    iCaeObserver->McaeoStillPrepareComplete( KErrNone );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::StillQualityIndex
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::StillQualityIndex() const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::StillQualityIndex()" ) );    
-
-    TInt qualityIndex( -1 );
-    if ( iStillPrepared )
-        {
-        qualityIndex = iStillQualityIndex;
-        }
-    return qualityIndex;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::GetStillFrameSize
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::GetStillFrameSize( 
-    TInt aStillQualityIndex, 
-    TSize& aFrameSize ) const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::GetStillFrameSize()" ) );
-    
-    if ( aStillQualityIndex >= 0 &&  
-         aStillQualityIndex < iStillQualityLevelsCont->Count() )
-        {
-        aFrameSize = iStillQualityLevelsCont->At( aStillQualityIndex ).iFrameSize;
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::EstimatedStillSizeInBytes
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::EstimatedStillSizeInBytes( 
-    TInt aStillQualityIndex ) const
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::EstimatedStillSizeInBytes()" ) );
-
-    TInt byteSize( 0 );
-    if ( aStillQualityIndex >= 0 &&  
-         aStillQualityIndex < iStillQualityLevelsCont->Count() )
-        {
-        byteSize = iStillQualityLevelsCont->At( aStillQualityIndex ).iByteSize;
-        }
-    return byteSize;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::CaptureStill
-// Starts still capturing.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::CaptureStill()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::CaptureStill() entering" ) );
-
-    OstTrace0( CAMERASRV_PERFORMANCE, CCAEENGINEIMP_CAPTURESTILL, "e_CAM_ENG_SHOT_TO_STILL 1" );    //CAE_ENGINE_SHOT_TO_STILL_START
-
-    if ( !iStillStatesActive->IsRunning() ) 
-        {
-        if ( iStillPrepared && iPowerOn && !iVideoRecordingRunning ) 
-            {
-                // Call CAPI without active object delay (for perf reasons)
-                iStillStatesActive->StartQuickCapture();
-
-            }
-        else
-            {
-            // Handle error
-            iStillStatesActive->ErrorRecovery( KErrNotReady );
-            }    
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::CaptureStill() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::CancelCaptureStill
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::CancelCaptureStill()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::CancelCaptureStill() entering" ) );
-
-    if ( iStillStatesActive ) 
-        {
-        iStillStatesActive->CancelCaptureStill();
-        }
-
-    if ( iCallbackActive ) 
-        {
-        iCallbackActive->Cancel();
-        }
-
-    if ( iCamera ) 
-        {
-        iCamera->CancelCaptureImage();
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::CancelCaptureStill() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetSnapImageCreation
-// Sets snap image creation on/off.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetSnapImageCreation( 
-    TBool aCreateSnapImage )
-    {
-    iStillStatesActive->SetSnapImageCreation( aCreateSnapImage );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetSnapImageSource
-// Sets snap image source.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetSnapImageSourceL( 
-    CCaeEngine::TSnapImageSource aSnapImageSource )
-    {
-    iStillStatesActive->SetSnapImageSourceL( aSnapImageSource );
-    }
-
-
-// -----------------------------------------------------------------------------
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetSnapImageSizeL
-// Sets the size of the snap image.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetSnapImageSizeL( 
-    TSize& aSize )
-    {
-    iStillStatesActive->SetSnapImageSizeL( aSize );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetSnapImageColorMode
-// Sets the color mode of the snap image.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetSnapImageColorMode( 
-    TDisplayMode aMode )
-    {
-    iStillStatesActive->SetSnapImageColorMode( aMode );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngine::NewL
-// Two-phased constructor. Calls CCaeEngineImp's NewL() with camera index and
-// default display index 0.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CCaeEngine* CCaeEngine::NewL( 
-    TInt aCameraIndex )
-    {
-    return CCaeEngineImp::NewL( aCameraIndex, 0 );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngine::NewL
-// Two-phased constructor. Calls CCaeEngineImp's NewL() with camera index.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CCaeEngine* CCaeEngine::NewL( 
-    TInt aCameraIndex, TInt aDisplayIndex )
-    {
-    return CCaeEngineImp::NewL( aCameraIndex, aDisplayIndex );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngine::CamerasAvailable
-// Determines the number of cameras on the device.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CCaeEngine::CamerasAvailable()
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngine::CamerasAvailable(): %d" ), CCamera::CamerasAvailable() );
-    return CCamera::CamerasAvailable();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::NewL
-// Two-phased constructor. Inputs camera index.
-// -----------------------------------------------------------------------------
-//
-CCaeEngineImp* CCaeEngineImp::NewL( 
-    TInt aCameraIndex, TInt aDisplayIndex )
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::NewL() entering with camera index %d" ), aCameraIndex );
-
-    CCaeEngineImp* self = new( ELeave ) CCaeEngineImp();
-
-    CleanupStack::PushL( self );
-    self->ConstructL( aCameraIndex, aDisplayIndex );
-    CleanupStack::Pop( self );
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::NewL() returning" ) );
-
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::EnumerateStillCaptureSizes
-// Enumerates through the available image capture sizes.
-// Calls Camera API EnumerateCaptureSizes().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::EnumerateStillCaptureSizes( 
-    TSize& aSize, 
-    TInt aSizeIndex, 
-    CCamera::TFormat aFormat ) const
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::EnumerateStillCaptureSizes() entering aSizeIndex=%d" ), aSizeIndex );
-    iCamera->EnumerateCaptureSizes( aSize, aSizeIndex, aFormat );
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::EnumerateStillCaptureSizes() returning aSize wxh=%dx%d" ),
-           aSize.iWidth, aSize.iHeight );
-   }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetJpegQuality
-// Sets the compression quality value to use with JPEG and Exif image formats.
-// Calls Camera API SetJpegQuality() and the still state machine SetJpegQuality().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetJpegQuality( 
-    TInt aCompressionQuality )
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::SetJpegQuality() entering with %d" ), aCompressionQuality );
-    // Clamp and memorize the image compression quality.
-    if ( aCompressionQuality < 1 )
-        {
-        aCompressionQuality = 1;
-        }
-    if ( aCompressionQuality > 100 ) 
-        {
-        aCompressionQuality = 100;
-        }
-
-    // Set JPEG quality on Camera API.
-    iCamera->SetJpegQuality( aCompressionQuality );
-
-    // Set JPEG quality on the state machine
-    iStillStatesActive->SetJpegQuality( aCompressionQuality );
-
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::SetJpegQuality() returning, memorized %d" ), aCompressionQuality );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::JpegQuality
-// Gets the current compression quality value setting for 
-// JPEG and Exif image formats.
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::JpegQuality() const
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::JpegQuality(): %d" ), iStillStatesActive->JpegQuality() );
-    // Memorized image compression quality, set in  
-    // SetJpegQuality() or PrepareStillCaptureL().
-    return( iStillStatesActive->JpegQuality() );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetImageCodecsL
-// Sets the specific image codec implementation to be used in decoding and 
-// encoding.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetImageCodecsL( 
-	TUid aDecoderUid, TUid aEncoderUid )
-    {
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::SetImageCodecsL(): %x, %x" ), aDecoderUid, aEncoderUid );
-    iStillStatesActive->SetImageCodecsL( aDecoderUid, aEncoderUid );
-    }
-
-        
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ReserveComplete
-// Camera reservation is complete. 
-// Called asynchronously when CCamera::Reserve() completes.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ReserveComplete(                                 
-    TInt aError )
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::ReserveComplete() entering, aError=%d" ), aError );
-
-    #ifdef CAE_TEST_VERSION
-    // For simulating errors when compiled as special "test version".
-    CaeReserveCompleteError( aError );
-    #endif    
-
-    if ( aError == KErrNone )
-        {
-        iReserved = ETrue;
-        // Call the active object to switch the power on indirectly.
-        iCallbackActive->PowerOn();
-        }
-    else
-        {
-        iCaeObserver->McaeoInitComplete( aError );
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::ReserveComplete() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::PowerOnComplete
-// Indicates camera power on is complete.
-// Called on completion of CCamera:PowerOn().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::PowerOnComplete( 
-    TInt aError )
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::PowerOnComplete() entering, aError=%d" ), aError );
-
-    #ifdef CAE_TEST_VERSION
-    // For simulating errors when compiled as special "test version".
-    CaePowerOnCompleteError( aError );
-    #endif    
-
-    if ( aError == KErrNone ) 
-        {
-        iPowerOn = ETrue;
-        if ( iResetToPreviousSettings )
-            {
-            iResetToPreviousSettings = EFalse;
-            TRAP( aError, ResetToPreviousSettingsL() );
-            }
-        }
-    
-    iCaeObserver->McaeoInitComplete( aError );
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::PowerOnComplete() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ViewFinderFrameReady
-// Transfers the current view finder image from the camera. The frame is 
-// first delivered to the extensions and then to the client.
-// Called periodically in response to the use of 
-// CCamera::StartViewFinderBitmapsL().
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ViewFinderFrameReady( 
-    CFbsBitmap& aFrame )
-    {
-    //LOGTEXT( _L( "Cae: CCaeEngineImp::ViewFinderFrameReady() entering" ) );
-
-	// Process extensions
-	RArray<TCaeExtensionInterfaceImplItem>* processImageImplList = 
-		iExtInterfaceImplementationLists[KCaeExtProcessImageInterfaceIndex].iImplementations;
-
-	TInt extError = KErrNone;
-	for ( TInt i = 0; i < processImageImplList->Count() && !extError; i++ )
-		{
-		if ( (*processImageImplList)[i].iIsActive )
-		    {
-    		STATIC_CAST( MCaeExtProcessImageInterface*, 
-	    	(*processImageImplList)[i].iImplPtr )->ProcessViewFinderFrame( aFrame, extError );
-		    }
-		else
-		    {
-			// LOGTEXT2(_L("Cae: CCaeEngineImp::ViewFinderFrameReady(). Skipped extension %x"), (*processImageImplList)[i].iImplUid.iUid );
-		    }
-		
-	    #ifdef _DEBUG
-		if ( extError )
-		    {
-			LOGTEXT3(_L("Cae: CCaeEngineImp::ViewFinderFrameReady(). Error %d in extension processing for Extension %x"),
-			    extError, (*processImageImplList)[i].iImplUid.iUid );
-			}
-		#endif
-		}
-
-    iCaeObserver->McaeoViewFinderFrameReady( aFrame, extError );
-
-    iStillStatesActive->ViewFinderFrameReady();
-
-    //LOGTEXT( _L( "Cae: CCaeEngineImp::ViewFinderFrameReady() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ImageReady
-// Transfers the current image from the camera. 
-// Called asynchronously when CCamera::CaptureImage() completes.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ImageReady( 
-    CFbsBitmap* aBitmap, 
-    HBufC8*     aImageData, 
-    TInt        aError )
-    {
-    iStillStatesActive->ImageReady( aBitmap, aImageData, aError );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::CheckPowerL
-// Leaves with KErrNotReady if power is off.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::CheckPowerL()
-    {
-    if ( !iPowerOn ) 
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::CheckPowerL() leaving KErrNotReady (iPowerOn)" ) );
-        User::Leave( KErrNotReady );
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::CancelAllActivities()
-// Cancels/closes/stops still capturing, video recording, and view finding.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::CancelAllActivities()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::CancelAllActivities() entering" ) );
-
-    CancelCaptureStill();
- 
-    CloseVideoRecording();
-
-    StopViewFinder();
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::CancelAllActivities() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ResetToPreviousSettingsL
-// Resets the following settings to the previous values: 
-// exposure mode, white balance mode, 
-// zoom mode, zoom value, flash mode, brightness, and contrast.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ResetToPreviousSettingsL()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::ResetToPreviousSettingsL() entering" ) );
-
-    SetExposureModeL( iExposureMode );
-    SetWhiteBalanceModeL( iWhiteBalanceMode );
-    SetZoomModeL( iZoomMode );
-    SetZoomValueL( iZoomValue );
-    SetFlashModeL( iFlashMode );
-
-    // Try to reset this setting only if it is supported by Camera API.
-    // Otherwise this could cause error when re-reserving camera.
-    if ( iInfo->iOptionsSupported & TCameraInfo::EBrightnessSupported )
-        {
-        SetBrightnessL( iBrightness );
-        }
-
-    // Try to reset this setting only if it is supported by Camera API.
-    // Otherwise this could cause error when re-reserving camera.
-    if ( iInfo->iOptionsSupported & TCameraInfo::EContrastSupported )
-        {
-        SetContrastL( iContrast );
-        }
-
- 	// Process extensions
-	RArray<TCaeExtensionInterfaceImplItem>* settingsImplementationList = 
-		iExtInterfaceImplementationLists[KCaeExtSettingsInterfaceIndex].iImplementations;
-
-	for ( TInt i = 0; i < settingsImplementationList->Count(); i++ )
-		{
-		TRAPD( err,STATIC_CAST( MCaeExtSettingsInterface*, 
-		    (*settingsImplementationList)[i].iImplPtr )->ResetToPreviousSettingsL() );
-		    
-	    #ifdef _DEBUG
-		if ( err )
-		    {
-			LOGTEXT3(_L("Cae: CCaeEngineImp::ResetToDefaultsL(). Error %d in ResetToDefaultsL() for Extension %x"),
-			    err, (*settingsImplementationList)[i].iImplUid.iUid );
-			}
-		#endif
-		
-		User::LeaveIfError( err );
-		}
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::ResetToPreviousSettingsL() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::CustomInterface
-// Returns a custom interface  that matches to the given UID.
-// -----------------------------------------------------------------------------
-//
-TAny* CCaeEngineImp::CustomInterface( TUid aInterface )
-    {
-	LOGTEXT2(_L("Cae: CCaeEngineImp::CustomInterface() entering, aIterface=%x"),aInterface.iUid );
-	TAny* interfaceImp = NULL;
-
-	// At first, try to find the interface in CAE extesions
-	TCaeCustomInterfaceImplItem item;
-	item.iInterfaceUid = aInterface;
-	item.iImplPtr = NULL; // This is not used by FindInUnsignedKeyOrder()
-	TInt index = iExtCustomInterfaceImplementations.FindInUnsignedKeyOrder( item ); 
-	if ( index >= 0 )
-		{
-		interfaceImp = iExtCustomInterfaceImplementations[ index ].iImplPtr;
-		}
-
-	if ( !interfaceImp )
-		{
-		// Then, try to find the interface in Camera API
-        interfaceImp = iCamera->CustomInterface( aInterface );
-		}
-
-    // Check if View Finder is stopped during burst sequency to optimize speed of burst
-    // Detection of this feature is based to the fact that the CI UID (KUidBurstModeVFOptimization)
-    // is asked and found from the CAPI.
-    if ( aInterface == KUidBurstModeVFOptimization && interfaceImp )
-        {
-        iStillStatesActive->SetBurstModeVFOptimization( ETrue );
-        }
-        
-	LOGTEXT2(_L("Cae: CCaeEngineImp::CustomInterface() returning, interfaceImp=%x"),interfaceImp );
-    return interfaceImp;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::GetOrder
-// Populate feature array
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::GetOrderL( RCaeOrderedFeatureList& aOrderedFeatureList )
-    {
-    TCaeOrderedFeatureListItem tmpItem;
-    aOrderedFeatureList.Reset();
-    
-	// For all interface implementation lists
-    for ( TInt implListIndex = 0; 
-           implListIndex < iExtInterfaceImplementationLists.Count(); 
-          implListIndex++ )
-        {
-		TCaeExtensionInterfaceImplListItem* implListItem = 
-			&(iExtInterfaceImplementationLists[implListIndex]);
-		RArray<TCaeExtensionInterfaceImplItem>& implementations 
-		    = *(implListItem->iImplementations);
-
-		// For all implementations
-		for ( TInt implIndex = 0; implIndex < implementations.Count(); implIndex++ )
-			{
-
-			// Add to item to the feature array
-			tmpItem.iServiceUid = implListItem->iInterfaceUid;
-			tmpItem.iFeatureUid = implementations[implIndex].iImplUid;
-			aOrderedFeatureList.AppendL( tmpItem );
-			}
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetOrderL
-// The user must first call GetOrder() to get array. After that the user can 
-// change the order of items and call this function. The user shall not remove 
-// items or add new items to the array. 
-//
-// E.g. Typically the user finds two items from the array and switches
-// the positions of these items to get desired effect.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetOrderL( const RCaeOrderedFeatureList& aOrderedFeatureList )
-    {
-	TInt status = KErrNone;
-
-	// Check that aOrderedFeatureList is valid
-	DoSetOrderL( aOrderedFeatureList, EFalse );
-	
-	// Check counts
-	
-	TInt totalImplCount = 0;
-
-	// For all interface implementation lists
-	for ( TInt implListIndex = 0; 
-	      implListIndex < iExtInterfaceImplementationLists.Count(); 
-	      implListIndex++ )
-		{
-		TCaeExtensionInterfaceImplListItem* implListItem = 
-			&(iExtInterfaceImplementationLists[implListIndex]);
-		RArray<TCaeExtensionInterfaceImplItem>& implementations 
-		    = *(implListItem->iImplementations);
-
-		totalImplCount += implementations.Count();
-		}
-
-	if ( totalImplCount != aOrderedFeatureList.Count() )
-		{
-		status = KErrArgument;
-		}
-	else
-		{
-		// Check duplicates
-		status = KErrNone;
-		for ( TInt i =  aOrderedFeatureList.Count() - 1; 
-		      ( i >= 0 ) && ( !status ); 
-		      i-- )
-			{
-			// Find always starts at index 0
-			TInt index = aOrderedFeatureList.Find( 
-				aOrderedFeatureList[i], CCaeEngineImp::Match ); 
-			if (index != i)
-				{
-				status = KErrAlreadyExists;
-				}
-			}
-		
-		// Finally, update internal array
-		if ( !status )
-			{
-			DoSetOrderL( aOrderedFeatureList, ETrue );
-			}
-		}
-
-	User::LeaveIfError( status );
-	}
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::DoSetOrderL
-//
-// For each item the old item is removed and the new appended to the end of 
-// iExtInterfaceImplementationLists[i].iImplementations.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::DoSetOrderL( 
-	const RCaeOrderedFeatureList& aOrderedFeatureList, 
-	TBool iUpdate )
-    {
-	TInt status = KErrNone;
-
-	// For all items in given array
-    for (TInt i = 0; i < aOrderedFeatureList.Count() && !status; i++ )
-        {
-        TUid interfaceUid = aOrderedFeatureList[i].iServiceUid;
-        TUid itemImplUid = aOrderedFeatureList[i].iFeatureUid;
-
-		// Find correct interface list
-
-		TCaeExtensionInterfaceImplListItem listItem;
-		listItem.iInterfaceUid = interfaceUid;
-		listItem.iImplementations =  NULL;
-		TInt index = iExtInterfaceImplementationLists.Find( listItem );
-		if ( index < 0 )
-			{
-			status = index; // Invalid interface uid
-			}
-		else
-			{
-			
-			// Find implementation by uid
-
-			TCaeExtensionInterfaceImplItem item;
-			item.iInitialPriority = 0;
-			item.iImplUid.iUid = itemImplUid.iUid;
-			item.iImplPtr = 0;
-			item.iIsActive = ETrue;
-			RArray<TCaeExtensionInterfaceImplItem>& implementations = 
-				*( iExtInterfaceImplementationLists[index].iImplementations );
-
-			TInt itemIndex = implementations.Find( item, CCaeEngineImp::MatchEqualImplUid );
-			if ( itemIndex < 0 ) 
-				{
-				status = itemIndex; // Invalid feature/implementation uid
-				}
-			else
-				{
-				if ( iUpdate )
-					{
-					// Remove current item and add new implementation item to 
-					// end of the array
-
-					item = implementations[itemIndex];
-
-					implementations.Remove( itemIndex );
-
-					status = implementations.Append( item );
-					}
-				}
-			}
-        }
-
-    User::LeaveIfError( status );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::MatchEqualImplUid 
-// Compares two extension array items
-// -----------------------------------------------------------------------------
-//
-TBool CCaeEngineImp::MatchEqualImplUid( 
-    const TCaeExtensionInterfaceImplItem& aFirst, 
-    const TCaeExtensionInterfaceImplItem& aSecond )
-    {
-	return ( aFirst.iImplUid.iUid == aSecond.iImplUid.iUid ); 
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::MatchEqualImplPtr 
-// Compares two extension array items
-// -----------------------------------------------------------------------------
-//
-TBool CCaeEngineImp::MatchEqualImplPtr( 
-    const TCaeExtensionInterfaceImplItem& aFirst, 
-    const TCaeExtensionInterfaceImplItem& aSecond )
-    {
-	return ( aFirst.iImplPtr == aSecond.iImplPtr ); 
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::MatchSmallerInitialPriorityAndImplUid 
-// Compares two extension array items
-// -----------------------------------------------------------------------------
-//
-TBool CCaeEngineImp::MatchSmallerInitialPriorityAndImplUid( 
-    const TCaeExtensionInterfaceImplItem& aFirst, 
-    const TCaeExtensionInterfaceImplItem& aSecond )
-    {
-	if (  ( aSecond.iInitialPriority == aFirst.iInitialPriority )
-		  && ( aSecond.iImplUid.iUid < aFirst.iImplUid.iUid ) )
-		{
-		return ETrue;
-		}
-
-	else if ( aSecond.iInitialPriority < aFirst.iInitialPriority )
-		{
-		return ETrue;
-		}
-
-	else
-		{
-		return EFalse;
-		}
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::Match 
-// Compares two extension array items
-// -----------------------------------------------------------------------------
-//
-TBool CCaeEngineImp::Match( 
-    const TCaeOrderedFeatureListItem& aFirst, 
-    const TCaeOrderedFeatureListItem& aSecond )
-    {
-	return ( ( aFirst.iServiceUid == aSecond.iServiceUid ) 
-		     && ( aFirst.iFeatureUid == aSecond.iFeatureUid ) ); 
-    }
-
-
-// From MCaeExtEngineInfoCallbackInterface
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::McaeExtStillImageSize
-// Returns current still image size.
-// -----------------------------------------------------------------------------
-//
-TSize CCaeEngineImp::McaeExtStillImageSize()
-	{
-	return( iStillStatesActive->StillImageSize() );
-	}
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::McaeExtSnapImageSize
-// Returns current snap image size.
-// -----------------------------------------------------------------------------
-//
-TSize CCaeEngineImp::McaeExtSnapImageSize()
-	{
-	return( iStillStatesActive->SnapImageSize() );
-	}
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::McaeExtViewFinderSize
-// Returns current view finder size.
-// -----------------------------------------------------------------------------
-//
-TSize CCaeEngineImp::McaeExtViewFinderSize()
-	{
-	return( iTrueViewFinderSize );
-	}
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::McaeExtCheckPowerL
-// Check camera power.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::McaeExtCheckPowerL()
-	{
-	CheckPowerL();
-	}
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::McaeExtDisplayIndex
-// Returns display index.
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::McaeExtDisplayIndex()
-	{
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::McaeExtDisplayIndex() iDisplayIndex=%d" ), iDisplayIndex );
-	return( iDisplayIndex );
-	}
-
-// From MExtensionCallbackInterface
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::IsInterfaceSupported
-// Check that the interface is supported. 
-// -----------------------------------------------------------------------------
-//
-TBool CCaeEngineImp::IsInterfaceSupported( TUid aInterfaceUid )
-	{
-	TBool found = EFalse;
-	TInt i = 0;
-
-	TCaeExtensionInterfaceImplListItem listItem;
-	listItem.iInterfaceUid = aInterfaceUid;
-	listItem.iImplementations =  NULL;
-
-	// Check extension interface uids
-	if ( iExtInterfaceImplementationLists.Find( listItem ) >= 0 )
-		{
-		found = ETrue;
-		}
-
-	// Check callback interface uids
-	for ( i = 0; (KCaeSupportedCallbackInterfaceUids[i].iUid != NULL) && !found; i++ )
-		{
-		if ( KCaeSupportedCallbackInterfaceUids[i] == aInterfaceUid )
-			{
-			found = ETrue;
-			}
-		}
-
-	return found;
-	}
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::AddExtensionInterface
-// Add an extension implemented interface to the list.
-// Note: Returns KErrNotFound if the interface is not supported.
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::AddExtensionInterface( 
-	TUid aInterfaceUid, 
-	TUid aExtensionUid, 
-	TAny* aImplementationPtr, 
-	TInt aInitialPriority )
-	{
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::AddExtensionInterface() entering: ifUid=%x, exUid=%x" ), aInterfaceUid.iUid, aExtensionUid.iUid );
-
-	TInt status = KErrNone;
-
-	// Check for invalid pointer
-	if ( !aImplementationPtr )
-		{
-		status = KErrArgument;
-		}
-	else
-		{
-
-		// Add implementation to the list
-
-		TCaeExtensionInterfaceImplListItem listItem;
-		listItem.iInterfaceUid = aInterfaceUid;
-		listItem.iImplementations =  NULL;
-
-		TInt index = iExtInterfaceImplementationLists.Find( listItem );
-		if ( index < 0 )
-			{
-			status = index; // Error code
-			}
-		else
-			{
-
-			// Add new implementation item to the array
-
-			RArray<TCaeExtensionInterfaceImplItem>& implementations = 
-				*( iExtInterfaceImplementationLists[index].iImplementations );
-
-			TCaeExtensionInterfaceImplItem item;
-			item.iInitialPriority = aInitialPriority;
-			item.iImplUid  = aExtensionUid;
-			item.iImplPtr  = aImplementationPtr;
-			item.iIsActive = ETrue;
-
-			// Check for duplicates
-			TInt itemIndex = implementations.Find( item, CCaeEngineImp::MatchEqualImplUid );
-			if ( itemIndex >= 0 ) 
-				{
-				status = KErrAlreadyExists; // Error code
-				}
-			else
-				{
-				itemIndex = implementations.Find( 
-				    item, CCaeEngineImp::MatchSmallerInitialPriorityAndImplUid );
-				if ( itemIndex < 0 ) 
-					{
-					// All have bigger or equal priority. Add to the end of list.
-					itemIndex = implementations.Count();
-					}
-
-				// Finally, add item to the list
-				status =  implementations.Insert( item, itemIndex ); 
-				}
-			}
-		}
-
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::AddExtensionInterface() returning: status=%d" ), status );
-
-	return( status );
-	}
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::RemoveExtensionInterface
-// Remove an extension implemented interface from the list.
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::RemoveExtensionInterface( 
-	TUid aInterfaceUid, 
-	TAny* aImplementationPtr )
-	{
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::RemoveExtensionInterface() entering: ifUid=%x, ptr=%d" ), aInterfaceUid.iUid, aImplementationPtr );
-	TInt status = KErrNone;
-
-	// Check for invalid pointer
-	if ( !aImplementationPtr )
-		{
-		status = KErrArgument;
-		}
-	else
-		{
-		// Remove implementation to the list
-		TCaeExtensionInterfaceImplListItem listItem;
-		listItem.iInterfaceUid = aInterfaceUid;
-		listItem.iImplementations =  NULL;
-
-		TInt index = iExtInterfaceImplementationLists.Find( listItem );
-
-		if ( index < 0 )
-			{
-			status = index; // Error code
-			}
-		else
-			{
-			TCaeExtensionInterfaceImplItem item;
-			item.iInitialPriority = 0;
-			item.iImplUid.iUid = 0;
-			item.iImplPtr = aImplementationPtr;
-			item.iIsActive = ETrue;
-			
-			RArray<TCaeExtensionInterfaceImplItem>& implementations = 
-				*( iExtInterfaceImplementationLists[index].iImplementations );
-
-			TInt itemIndex = implementations.Find( item, CCaeEngineImp::MatchEqualImplPtr );
-
-			if ( itemIndex < 0 ) 
-				{
-				status = itemIndex; // Return error
-				}
-			else
-				{
-				implementations.Remove( itemIndex );
-				}
-			}
-		}
-
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::RemoveExtensionInterface() returning: status=%d" ), status );
-
-	return( status );
-	}
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::AddCustomInterface
-// Add an extension implemented custom interface to the list.
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::AddCustomInterface( 
-    TUid aInterfaceUid, 
-    TAny* aImplementationPtr )
-	{
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::AddCustomInterface() entering: ifUid=%x, ptr=%d" ), aInterfaceUid.iUid, aImplementationPtr );
-
-	TInt status = KErrNone;
-
-	if ( !aImplementationPtr )
-		{
-		status = KErrArgument;
-		}
-	else
-		{
-		TCaeCustomInterfaceImplItem item;
-		item.iInterfaceUid = aInterfaceUid;
-		item.iImplPtr = aImplementationPtr;
-		
-	    // Do not allow duplicate uid's
-		status = iExtCustomInterfaceImplementations.InsertInUnsignedKeyOrder( item ); 	
-		}
-	
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::AddCustomInterface() returning: status=%d" ), status );
-
-	return ( status );
-	}
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::GetCallbackInterface
-// Return an engine implemented callback interface.
-// -----------------------------------------------------------------------------
-//
-TAny* CCaeEngineImp::GetCallbackInterface( TUid aInterfaceUid )
-	{
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::GetCallbackInterface() entering: ifUid=%x" ), aInterfaceUid.iUid );
-	TAny* callbackInterface =  NULL;
-
-	if ( aInterfaceUid == KCaeExtEngineInfoCallbackInterfaceUid )
-		{
-		callbackInterface = (MCaeExtEngineInfoCallbackInterface*) this;
-		}
-
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::GetCallbackInterface() returning: callbackInterface=%d" ), callbackInterface );
-	return ( callbackInterface );
-	}
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::RegisterFlags
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::RegisterFlags( TUint32 aFlags )
-	{
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::RegisterFlags() aFlags=%x" ), aFlags );
-    iStillStatesActive->RegisterFlags( aFlags );
-	}
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::DeregisterFlags
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::DeregisterFlags( TUint32 aFlags )
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::DeregisterFlags() aFlags=%x" ), aFlags );
-    iStillStatesActive->DeregisterFlags( aFlags );    
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::CCameraHandle
-// Gets handle of camera object owned by the CCaeEngine.
-// -----------------------------------------------------------------------------
-//
-TInt CCaeEngineImp::CCameraHandle() const
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::CCameraHandle(): %d" ), iCameraHandle );
-    return ( iCameraHandle );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetCaeExtensionModeL
-// Sets CAE to Extension mode
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetCaeExtensionModeL( TBool aExtModeActive, TBool aCreateSnapImage )
-    {
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::SetCaeExtensionModeL(): %d, %d" ), aExtModeActive, aCreateSnapImage );
-
-    iStillStatesActive->SetExtModeActiveL( aExtModeActive );
-    iStillStatesActive->SetSnapImageCreation( aCreateSnapImage );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ProcessExtViewFinderFrameReadyL
-// Process extension for view finder
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ProcessExtViewFinderFrameReadyL( CFbsBitmap& aFrame )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtViewFinderFrameReadyL()" ));
-
-    // Leave if not in extension mode.
-    if ( !iStillStatesActive->ExtModeActive() )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtViewFinderFrameReadyL() leaving KErrPermissionDenied" ) );
-        User::Leave( KErrPermissionDenied );
-        }
-
-    ViewFinderFrameReady( aFrame );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ProcessExtSnapImageL
-// Process extension for snap image
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ProcessExtSnapImageL( CFbsBitmap& aSnapImage )
-    {
-    TSize sizeEmpty;
-    CFbsBitmap* bitmapSave = NULL;
-    TSize snapSize = aSnapImage.SizeInPixels();
-    
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::ProcessExtSnapImageL() size wxh=%dx%d" ),
-            snapSize.iWidth, snapSize.iHeight );
-        
-    // Leave if not in extension mode.
-    if ( !iStillStatesActive->ExtModeActive() )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtSnapImageL() leaving KErrPermissionDenied" ) );
-        User::Leave( KErrPermissionDenied );
-        }
-
-    // Create a duplicate bitmap
-    if ( snapSize != sizeEmpty ) 
-        {
-        bitmapSave = new CFbsBitmap;
-        if ( bitmapSave )
-            {
-            TInt err = bitmapSave->Duplicate( aSnapImage.Handle() );
-            if ( err ) 
-                {
-                    LOGTEXT2( _L( "Cae: CCaeEngineImp::ProcessExtSnapImageL(): Duplicate error:%d, leaving" ), err);
-                    delete bitmapSave;
-                    bitmapSave = NULL;
-                    User::Leave( err );
-                 }
-            }
-        else
-            {
-            LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtSnapImageL(): new CFbsBitmap failed, leaving KErrNoMemory" ));
-            User::Leave( KErrNoMemory );
-            }
-        }
-    else
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtSnapImageL(): got empty bitmap, ignore" ));
-        }
-        
-    if ( bitmapSave )
-        {
-        // Send bitmap for extension handling
-        TInt result = iStillStatesActive->ProcessExtSnapImage( bitmapSave );
-        if ( result )
-            {
-            LOGTEXT2( _L( "Cae: CCaeEngineImp::ProcessExtSnapImageL(): ProcessExtSnapImage failed %d, leaving" ), result);
-            delete bitmapSave;
-            bitmapSave = NULL;
-            User::Leave( result );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ProcessExtCapturedImageL
-// Process extension for captured image
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ProcessExtCapturedImageL( CFbsBitmap& aBitmap, TBool aLastImage )
-    {
-    TSize sizeEmpty;
-    CFbsBitmap* bitmapSave = NULL;
-    TSize bitmapSize = aBitmap.SizeInPixels();
-    
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL() CFbsBitmap ExtMode=%d, last=%d" ), iStillStatesActive->ExtModeActive(), aLastImage);
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL() bitmap size WxH=%dx%d" ), bitmapSize.iWidth, bitmapSize.iHeight );
-        
-    // Leave if not in extension mode.
-    if ( !iStillStatesActive->ExtModeActive() )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL leaving KErrPermissionDenied" ));
-        User::Leave( KErrPermissionDenied );
-        }
-
-    // Create a duplicate bitmap
-    if ( bitmapSize != sizeEmpty )
-        {
-        bitmapSave = new CFbsBitmap;
-        if ( bitmapSave )
-            {
-            TInt err = bitmapSave->Duplicate( aBitmap.Handle() );
-            if ( err ) 
-                {
-                    LOGTEXT2( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL(): Duplicate error:%d, leaving" ), err);
-                    delete bitmapSave;
-                    bitmapSave = NULL;
-                    User::Leave( err );
-                 }
-            }
-        else
-            {
-            LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL(): new CFbsBitmap failed, leaving KErrNoMemory" ));
-            User::Leave( KErrNoMemory );
-            }
-
-        }
-    else
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL(): got empty bitmap, ignore" ));
-        }
-        
-    if ( bitmapSave )
-        {
-        // Send bitmap for extension handling
-        TInt result = iStillStatesActive->ProcessExtCapturedImage( bitmapSave, aLastImage );
-        if ( result )
-            {
-            LOGTEXT2( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL(): ProcessExtCapturedImage failed %d, leaving" ), result);
-            delete bitmapSave;
-            bitmapSave = NULL;
-            User::Leave( result );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ProcessExtCapturedImageL
-// Process extension for captured image
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ProcessExtCapturedImageL( HBufC8* aImageData, TBool aLastImage )
-    {
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL() HBufC8 ExtMode=%d, last=%d" ), iStillStatesActive->ExtModeActive(), aLastImage);
-    // Leave if not in extension mode.
-    if ( !iStillStatesActive->ExtModeActive() )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL leaving KErrPermissionDenied" ));
-        User::Leave( KErrPermissionDenied );
-        }
-    if ( aImageData )
-        {
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL() processing HBufC8 size=%d" ), aImageData->Size() );
-        TInt result = iStillStatesActive->ProcessExtCapturedImage( aImageData, aLastImage );
-        if ( result )
-            {
-            LOGTEXT2( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL(): ProcessExtCapturedImage failed %d, leaving" ), result);
-            delete aImageData;
-            aImageData = NULL;
-            User::Leave( result );
-            }
-        }
-    else
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL(): got empty HBufC8, ignore" ));
-        }
-    
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ProcessExtCapturedImageL
-// Process extension for captured image
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ProcessExtCapturedImageL( TDesC8& aImageDataDes, TBool aLastImage )
-    {
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL() TDesC8 ExtMode=%d, last=%d" ), iStillStatesActive->ExtModeActive(), aLastImage);
-    // Leave if not in extension mode.
-    if ( !iStillStatesActive->ExtModeActive() )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL leaving KErrPermissionDenied" ));
-        User::Leave( KErrPermissionDenied );
-        }
-    // TDesC8 is used with C-API V2 features
-    if ( aImageDataDes.Size() )
-        {
-        // Make a new HBufC8 copy from the TDesC8
-        HBufC8* tempImageData = aImageDataDes.AllocL();
-        // Do not delete aImageDataDes, it is part of the class MCameraBuffer
-        LOGTEXT2( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL() New HBufC8 created, size=%d" ), tempImageData->Size() );
-        
-        TInt result = iStillStatesActive->ProcessExtCapturedImage( tempImageData, aLastImage );
-        if ( result )
-            {
-            LOGTEXT2( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL(): ProcessExtCapturedImage failed %d, leaving" ), result);
-            delete tempImageData;
-            tempImageData = NULL;
-            User::Leave( result );
-            }
-        }
-    else
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::ProcessExtCapturedImageL(): got empty TDesC8, ignore" ));
-        }
-    
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ProcessExtCancel
-// Cancels processing
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ProcessExtCancel()
-    {
-    CancelCaptureStill();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SkippedExtensionListL
-// Get list of skipped extensions. Application may define which extensions are
-// skipped during image processing. Only installed and skipped are listed.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SkippedExtensionListL( RCaeOrderedFeatureList& aDisabledExtensions )
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SkippedExtensionListL() entering" ) );
-    TCaeOrderedFeatureListItem tmpItem;
-    aDisabledExtensions.Reset();
-    
-	// For all interface implementation lists
-    for ( TInt implListIndex = 0; 
-           implListIndex < iExtInterfaceImplementationLists.Count(); 
-          implListIndex++ )
-        {
-		TCaeExtensionInterfaceImplListItem* implListItem = 
-			&(iExtInterfaceImplementationLists[implListIndex]);
-		RArray<TCaeExtensionInterfaceImplItem>& implementations 
-		    = *(implListItem->iImplementations);
-
-		// For all implementations
-		for ( TInt implIndex = 0; implIndex < implementations.Count(); implIndex++ )
-			{
-			// Add the item to the skipped array if it is not active
-			if ( !implementations[implIndex].iIsActive )
-			    {
-			    tmpItem.iServiceUid = implListItem->iInterfaceUid;
-			    tmpItem.iFeatureUid = implementations[implIndex].iImplUid;
-			    aDisabledExtensions.AppendL( tmpItem );
-                LOGTEXT3( _L( "Cae: CCaeEngineImp::SkippedExtensionListL(), serviceUid %x, featureUid %x" ),
-                    tmpItem.iServiceUid.iUid, tmpItem.iFeatureUid.iUid  );
-			    }
-			}
-        }
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::SkippedExtensionListL() returning, count %d" ), aDisabledExtensions.Count() );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::SetSkippedExtensionList
-// Set list of skipped extensions. Application may define which extensions are
-// skipped during image processing.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::SetSkippedExtensionList( RCaeOrderedFeatureList& aDisabledExtensions )
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::SetSkippedExtensionList() entering Count %d" ), aDisabledExtensions.Count() );
-
-	// Set all extensions first active
-
-	// For all interfaces
-    for ( TInt implListIndex = 0; 
-           implListIndex < iExtInterfaceImplementationLists.Count(); 
-          implListIndex++ )
-        {
-		TCaeExtensionInterfaceImplListItem* implListItem = 
-			&(iExtInterfaceImplementationLists[implListIndex]);
-		RArray<TCaeExtensionInterfaceImplItem>& implementations 
-		    = *(implListItem->iImplementations);
-
-		// For all implementations
-		for ( TInt implIndex = 0; implIndex < implementations.Count(); implIndex++ )
-			{
-			implementations[implIndex].iIsActive = ETrue;
-			}
-        }
-
-    // Disable wanted extensions
-    
-	// For all items in given array
-    for (TInt i = 0; i < aDisabledExtensions.Count(); i++ )
-        {
-        TUid interfaceUid = aDisabledExtensions[i].iServiceUid;
-        TUid itemImplUid = aDisabledExtensions[i].iFeatureUid;
-
-		// Find correct interface list
-
-		TCaeExtensionInterfaceImplListItem listItem;
-		listItem.iInterfaceUid = interfaceUid;
-		listItem.iImplementations =  NULL;
-		TInt index = iExtInterfaceImplementationLists.Find( listItem );
-		if ( index >= 0 ) // Interface was found
-			{
-			// Find implementation by uid
-
-			TCaeExtensionInterfaceImplItem item;
-			item.iInitialPriority = 0;
-			item.iImplUid.iUid = itemImplUid.iUid;
-			item.iImplPtr = 0;
-			item.iIsActive = ETrue;
-			RArray<TCaeExtensionInterfaceImplItem>& implementations = 
-				*( iExtInterfaceImplementationLists[index].iImplementations );
-
-			TInt itemIndex = implementations.Find( item, CCaeEngineImp::MatchEqualImplUid );
-			if ( itemIndex >= 0 ) 
-				{
-				implementations[itemIndex].iIsActive = EFalse;
-                LOGTEXT3( _L( "Cae: CCaeEngineImp::SetSkippedExtensionList(), serviceUid %x, featureUid %x" ),
-                    interfaceUid.iUid, itemImplUid.iUid  );
-				}
-			}
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::SetSkippedExtensionList() returning" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::EnableVideoRecording
-// Set CAE internal camera status flags.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::EnableVideoRecording()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::EnableVideoRecording() entering" ) );
-
-    // Set the flags to enable the video usage without InitL() call
-    iReserved = ETrue;
-    iPowerOn = ETrue;
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::EnableVideoRecording() returning" ) );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::DisableVideoRecording
-// Set CAE internal camera status flags.
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::DisableVideoRecording()
-    {
-    LOGTEXT( _L( "Cae: CCaeEngineImp::DisableVideoRecording() entering" ) );
-
-    if ( iReserved ) 
-        {
-        if ( iPowerOn ) 
-            {
-            CancelAllActivities();
-            iPowerOn = EFalse;
-            }
-        iReserved = EFalse;
-        iStillPrepared = EFalse;
-        iVideoPrepared = EFalse;
-        iVideoOpened = EFalse;
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::DisableVideoRecording() returning" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::HandleEvent
-// MCameraObserver2 call-back handler
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::HandleEvent( const TECAMEvent& aEvent)
-    {
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::HandleEvent() entering, type=%x, err=%d" ), aEvent.iEventType.iUid, aEvent.iErrorCode );
-
-    if ( iStillStatesActive->ExtModeActive() )
-        {
-        LOGTEXT( _L( "Cae: CCaeEngineImp::HandleEvent() Extension mode active, skipping event handling" ) );
-        }
-    else
-        {
-        // Cae is in use when capturing images
-        if ( aEvent.iEventType == KUidECamEventCameraNoLongerReserved )
-            {
-            LOGTEXT( _L( "Cae: CCaeEngineImp::HandleEvent() KUidECamEventCameraNoLongerReserved" ) );
-            CancelAllActivities();
-            iPowerOn = EFalse;
-            iReserved = EFalse;
-            iStillPrepared = EFalse;
-            iVideoPrepared = EFalse;
-            iVideoOpened = EFalse;
-            iCaeObserver->McaeoInitComplete( KErrInUse ); // Tell the client that other application has taken the camera
-            }
-        else if ( aEvent.iEventType == KUidECamEventPowerOnComplete )
-    	    {
-            LOGTEXT( _L( "Cae: CCaeEngineImp::HandleEvent() KUidECamEventPowerOnComplete" ) );
-            PowerOnComplete( aEvent.iErrorCode );
-	        }
-    	else if ( aEvent.iEventType == KUidECamEventReserveComplete )
-    	    {
-            LOGTEXT( _L( "Cae: CCaeEngineImp::HandleEvent() KUidECamEventReserveComplete" ) );
-            ReserveComplete( aEvent.iErrorCode );
-    	    }
-        }
-
-    LOGTEXT( _L( "Cae: CCaeEngineImp::HandleEvent() returning" ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ViewFinderReady
-// MCameraObserver2 call-back handler
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ViewFinderReady( MCameraBuffer& aCameraBuffer, TInt aError)
-    {
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::ViewFinderReady() entering, err=%d, NumFrames=%d" ), aError, aCameraBuffer.NumFrames() );
-
-    if ( !aError )
-        {
-        if ( aCameraBuffer.NumFrames() > 0 )
-	        {
-            CFbsBitmap* bitmap = NULL;
-	        TRAPD( err, bitmap = &aCameraBuffer.BitmapL( 0 ) );
-	        if ( !err )
-	            {
-	            ViewFinderFrameReady( *bitmap );
-	            }
-	        else
-	            {
-                LOGTEXT2( _L( "Cae: CCaeEngineImp::ViewFinderReady() BitmapL failed err=%d" ), err );
-	            }
-	        }
-	    aCameraBuffer.Release();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::ImageBufferReady
-// MCameraObserver2 call-back handler
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::ImageBufferReady( MCameraBuffer& aCameraBuffer, TInt aError)
-    {
-    LOGTEXT3( _L( "Cae: CCaeEngineImp::ImageBufferReady() entering, err=%d, NumFrames=%d" ), aError, aCameraBuffer.NumFrames() );
-	
-    if ( !aError )
-        {
-        TDesC8* data = NULL;
-        TRAPD( err, data = aCameraBuffer.DataL( 0 ) );
-        if ( err == KErrNotSupported )
-            {
-            // Got the image as a CFbsBitmap
-            CFbsBitmap* bitmap = NULL;
-
-            TRAP( err, bitmap = &aCameraBuffer.BitmapL( 0 ) );
-
-            if ( !err )
-                {
-                // Create a duplicate bitmap
-                CFbsBitmap* bitmapSave = NULL;
-                bitmapSave = new CFbsBitmap;
-                if ( bitmapSave )
-                    {
-                    err = bitmapSave->Duplicate( bitmap->Handle() );
-                    if ( !err ) 
-                        {
-                        // All OK, send duplicated bitmap to old observer interface
-                        ImageReady( bitmapSave, NULL, aError );
-                        }
-                    else
-                        {
-                        LOGTEXT2( _L( "Cae: CCaeEngineImp::ImageBufferReady(): Duplicate error:%d" ), err);
-                        delete bitmapSave;
-                        bitmapSave = NULL;
-                        ImageReady( NULL, NULL, err );
-                        }
-                    }
-                else
-                    {
-                    LOGTEXT( _L( "Cae: CCaeEngineImp::ImageBufferReady(): new CFbsBitmap failed" ));
-                    ImageReady( NULL, NULL, KErrNoMemory );
-                    }
-
-                }
-            else
-                {
-                LOGTEXT( _L( "Cae: CCaeEngineImp::ImageBufferReady(): BitmapL failed" ));
-                ImageReady( NULL, NULL, err );
-                }
-            }
-        else if ( !err )
-            {
-            // Got the image as a descriptor
-            // Make a new HBufC8 copy from the TDesC8
-            HBufC8* tempImageData = NULL;
-            tempImageData = data->Alloc();
-            
-            if ( tempImageData )
-                {
-                // All OK, send buffer to old observer interface
-                LOGTEXT2( _L( "Cae: CCaeEngineImp::ImageBufferReady() New HBufC8 created, size=%d" ), tempImageData->Size() );
-                ImageReady( NULL, tempImageData, aError );
-                }
-            else
-                {
-                LOGTEXT( _L( "Cae: CCaeEngineImp::ImageBufferReady() Alloc of HBufC8 failed" ) );
-                ImageReady( NULL, NULL, KErrNoMemory );
-                }
-            
-            
-            }
-        else
-            {
-            LOGTEXT2( _L( "Cae: CCaeEngineImp::ImageBufferReady() DataL returned error code=%d" ), err );
-            ImageReady( NULL, NULL, err );
-            }
-
-        // Release buffer only when no error
-	    aCameraBuffer.Release();
-        }
-    else
-        {
-        ImageReady( NULL, NULL, aError );
-        }
-    }
-    
-// -----------------------------------------------------------------------------
-// CCaeEngineImp::VideoBufferReady
-// MCameraObserver2 call-back handler
-// -----------------------------------------------------------------------------
-//
-void CCaeEngineImp::VideoBufferReady( MCameraBuffer& aCameraBuffer, TInt aError)
-    {
-    LOGTEXT2( _L( "Cae: CCaeEngineImp::VideoBufferReady() entering, err=%d" ), aError );
-	
-    if ( !aError )
-        {
-	    aCameraBuffer.Release();
-        }
-    }
-
-
-//  End of File