diff -r 000000000000 -r 1ddebce53859 camerauis/cameraapp/generic/src/cameracontroller/camsettingprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/src/cameracontroller/camsettingprovider.cpp Thu Jan 07 16:18:56 2010 +0200 @@ -0,0 +1,838 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Setting Provider class implementation +* +*/ + + +// =========================================================================== +// Includes + +#include "camcameracontrollerflags.hrh" +#include +#ifdef CAMERAAPP_CAPI_V2 + #include // KECamFineResolutionFactor +#endif + +#include + +#include "camlogging.h" +#include "camcameracontroller.pan" +#include "CamSettingsInternal.hrh" +#include "camcameracontrollertypes.h" +#include "camsettingprovider.h" +#include "CamSettingsModel.h" +#include "camsettingconversion.h" +#include "CamAppController.h" +#include "campointerutility.inl" +#include "CameraUiConfigManager.h" + +#include "CamAppUi.h" +#include "CamUtility.h" +#include "CamPSI.h" + +#include "CamVideoQualityLevel.h" + + +// =========================================================================== +// Types + +using namespace NCamCameraController; + +#ifdef CAMERAAPP_CAPI_V2_ADV + typedef CCamera::CCameraAdvancedSettings CAS; +#endif +#ifdef CAMERAAPP_CAPI_V2_IP + typedef CCamera::CCameraImageProcessing CIP; +#endif + +// =========================================================================== +// Local data + +static const TInt KSettingArrayGranularity = 8; + +static const TSize KViewfinderSize = TSize(320, 240); +static const TBool KSnapshotMaintainAspect = EFalse; +static const TInt KEngineMultiplier = 10; + +// =========================================================================== +// Methods + +// static +CCamSettingProvider* +CCamSettingProvider::NewL( CCamAppController& aController, + MCamSettingsModel* aSettingsModel ) + { + CCamSettingProvider* self = + CCamSettingProvider::NewLC( aController, aSettingsModel ); + CleanupStack::Pop( self ); + return self; + } + +// static +CCamSettingProvider* +CCamSettingProvider::NewLC( CCamAppController& aController, + MCamSettingsModel* aSettingsModel ) + { + CCamSettingProvider* self = + new (ELeave) CCamSettingProvider( aController, aSettingsModel ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// virtual +CCamSettingProvider::~CCamSettingProvider() + { + iPendingSettingChanges.Close(); + } + + +// =========================================================================== +// From MCamSettingProvider + +// --------------------------------------------------------------------------- +// virtual ProvideCameraParamL +// +// --------------------------------------------------------------------------- +// +void +CCamSettingProvider::ProvideCameraParamL( + const NCamCameraController::TCamCameraParamId& aParamId, + TAny* aParamData ) + { + __ASSERT_DEBUG( aParamData, Panic( ECamNullPointer ) ); + switch( aParamId ) + { + // ----------------------------------------------------- + case ECameraParamImage: + { + TPckgBuf* ptr = + static_cast*>( aParamData ); + CheckNonNullL( ptr, KErrNotFound ); + TCamParamsImage& params( (*ptr)() ); + CCamAppUiBase* appUi = static_cast( CEikonEnv::Static()->AppUi() ); + if ( appUi->ActiveCamera() == ECamActiveCameraSecondary ) + { + params.iFormat = CCamera::EFormatJpeg; + } + else // primary camera + { + params.iFormat = CCamera::EFormatExif; + } + TCamPhotoSizeId PhotoSizeIndex = iSettingsModel->CurrentPhotoResolution(); + TSize PhotoSize = iSettingsModel->ImageResolutionFromIndex( PhotoSizeIndex ); + params.iSize = PhotoSize; + params.iQualityFactor = iSettingsModel->CurrentPhotoCompression(); + break; + } + // ----------------------------------------------------- +#ifdef CAMERAAPP_CAE_FOR_VIDEO + case ECameraParamVideoCae: + { + TPckgBuf* ptr = + static_cast*>( aParamData ); + CheckNonNullL( ptr, KErrNotFound ); + + TCamParamsVideoCae& params( (*ptr)() ); + + + TInt videoQuality = iSettingsModel->IntegerSettingValue( ECamSettingItemVideoQuality ); + + PRINT1( _L("Camera <> CCamSettingProvider::ProvideCameraParamL - video quality (index): %d"), videoQuality ); + PRINT1( _L("Camera <> CCamSettingProvider::ProvideCameraParamL - quality count: %d"), iSettingsModel->VideoQualityArray().Count() ); + + CCamVideoQualityLevel& level = *( iSettingsModel->VideoQualityArray() )[videoQuality]; + TInt res = level.VideoResolution(); + PRINT1( _L("Camera <> CCamSettingProvider::ProvideCameraParamL - video resolution (index): %d"), res ); + PRINT1( _L("Camera <> CCamSettingProvider::ProvideCameraParamL - resolution count: %d"), iSettingsModel->VideoResolutions().Count() ); + + // Video resolutions array in Setting Model is set up from + // R_CAM_VIDEO_RESOLUTION_ARRAY resource. New resolutions + // need to be added there also, in addition to configuration files. + TSize resolution = ( iSettingsModel->VideoResolutions() )[ res ]; + params.iFrameSize = resolution; + params.iFrameRate = level.FrameRate(); + params.iVideoBitRate = level.VideoBitRate(); + params.iAudioBitRate = level.AudioBitRate(); + params.iAudioOn = iSettingsModel->IntegerSettingValue( ECamSettingItemVideoAudioRec ); + params.iMimeType.Set ( level.VideoMimeType() ); + params.iSupplier.Set ( level.PreferredSupplier() ); + params.iVideoType.Set( level.VideoFileType() ); + params.iAudioType.Set( level.AudioType() ); + + TInt framerate = -1; + TCamSceneId videoscene = static_cast< TCamSceneId > ( + iSettingsModel->IntegerSettingValue(ECamSettingItemDynamicVideoScene) ); + + framerate = iSettingsModel->SceneSettingValue(videoscene, ECamSettingItemSceneFramerate); + + // Change the framerate if scene has defined it to be > 0 + if ( framerate > 0 ) + { + params.iFrameRate = framerate; + } + + PRINT1( _L("Camera <> CCamSettingProvider::ProvideCameraParamL ECameraParamVideoCae framerate: %d"), framerate ) + + break; + } +#endif // CAMERAAPP_CAE_FOR_VIDEO + // ----------------------------------------------------- + case ECameraParamVfMode: + { + CCamAppUi* appUi = static_cast( CEikonEnv::Static()->AppUi() ); + TPckgBuf* ptr = + static_cast*>( aParamData ); + CheckNonNullL( ptr, KErrNotFound ); + TCamViewfinderMode& params( (*ptr)() ); + TBool isPrimaryCamera = appUi->ActiveCamera() == ECamActiveCameraPrimary; + + if ( iController.IsDirectScreenVFSupported( isPrimaryCamera ) ) + {// primary camera or 2nd camera DSVF + PRINT( _L("Setting Provider <> provide ECameraParamVfMode == ECamViewfinderDirect") ); + params = ECamViewfinderDirect; + } + else + {// primary camera or 2nd camera bitmap view finder + PRINT( _L("Setting Provider <> provide ECameraParamVfMode == ECamViewfinderBitmap") ); + params = ECamViewfinderBitmap; + } + break; + } + // ----------------------------------------------------- + case ECameraParamVfBitmap: + { + CCamAppUi* appUi = static_cast( + CEikonEnv::Static()->AppUi() ); + PRINT2( _L("Setting Provider <> provide ECameraParamVfBitmap. CurrentMode: (%d) TargetMode: (%d)"), iController.CurrentMode(), appUi->TargetMode() ); + TPckgBuf* ptr = + static_cast*>( aParamData ); + CheckNonNullL( ptr, KErrNotFound ); + TCamParamsVfBitmap& params( (*ptr)() ); + + TDisplayMode displayMode = + CEikonEnv::Static()->ScreenDevice()->DisplayMode(); + CCamera::TFormat viewfinderFormat = + CCamSettingConversion::Map2CameraFormat( displayMode ); + + const TCamCameraMode cameraMode = iController.CurrentMode(); + const TInt resolution = (cameraMode == ECamControllerVideo) + ? iController.GetCurrentVideoResolution() + : iController.GetCurrentImageResolution(); + params.iRect = CamUtility::ViewfinderLayout( cameraMode, resolution ); + + params.iFormat = viewfinderFormat; + + // Mirror viewfinder for secondary camera + params.iMirrorImage = ECamActiveCameraSecondary == appUi->ActiveCamera(); + + break; + } + // ----------------------------------------------------- + case ECameraParamVfDirect: + { + // Not supported yet. + User::Leave( KErrNotSupported ); + break; + } + // ----------------------------------------------------- + case ECameraParamSnapshot: + { + TPckgBuf* ptr = + static_cast*>( aParamData ); + CheckNonNullL( ptr, KErrNotFound ); + TCamParamsSnapshot& params( (*ptr)() ); + + // Fetch the snapshot size + TDisplayMode displayMode = CEikonEnv::Static()->ScreenDevice()->DisplayMode(); + TCamCameraMode cameraMode = iController.CurrentMode(); + TInt resolution = (cameraMode == ECamControllerVideo) + ? iController.GetCurrentVideoResolution() + : iController.GetCurrentImageResolution(); + params.iSize = CamUtility::ViewfinderLayout( cameraMode, resolution ).Size(); + params.iFormat = CCamSettingConversion::Map2CameraFormat(displayMode); + params.iMaintainAspect = KSnapshotMaintainAspect; + break; + } + // ----------------------------------------------------- + default: + { + User::Leave( KErrNotSupported ); + break; + } + // ----------------------------------------------------- + } + } + + +// --------------------------------------------------------------------------- +// virtual ProvideCameraSettingL +// +// --------------------------------------------------------------------------- +// +void +CCamSettingProvider::ProvideCameraSettingL( + const NCamCameraController::TCamCameraSettingId& aSettingId, + TAny* aSettingData ) + { + CheckNonNullL( aSettingData, KErrArgument ); + + TCamCameraMode mode( iController.CurrentMode() ); + + switch( aSettingId ) + { + // ----------------------------------------------------- + // Flash + case ECameraSettingFlash: + case ECameraUserSceneSettingFlash: + { + TCamFlashId flashId = static_cast (iSettingsModel-> + IntegerSettingValue( ECamSettingItemDynamicPhotoFlash ) ); + if ( mode == ECamControllerVideo ) + { + flashId = static_cast (iSettingsModel-> + IntegerSettingValue( ECamSettingItemDynamicVideoFlash ) ); + } + CCamera::TFlash CamFlashId = CCamSettingConversion::Map2CameraFlash( flashId ); + CCamera::TFlash* ptr = static_cast( aSettingData ); + *ptr = CamFlashId; + break; + } + // ----------------------------------------------------- + // Exposure (EV mode + EV compensation step) + case ECameraSettingExposure: + case ECameraUserSceneSettingExposure: + { + TPckgBuf* ptr = + static_cast*>( aSettingData ); + TCamSettingDataExposure& evData( (*ptr)() ); + + TInt sceneItemId = ( ECamControllerVideo == mode ) + ? ECamSettingItemDynamicVideoScene + : ECamSettingItemDynamicPhotoScene; + + TInt sceneId = iSettingsModel->IntegerSettingValue( sceneItemId ); + + TCamSceneAEMode evMode = + static_cast( + iSettingsModel->SceneSettingValue( sceneId, ECamSettingItemSceneAEMode ) ); + + evData.iExposureMode = CCamSettingConversion::Map2CameraExposureMode( evMode ); + PRINT1( _L("Camera <> provide EV mode: %016b"), evData.iExposureMode ); +#ifdef CAMERAAPP_CAPI_V2 + TInt evKey; + if ( ECameraUserSceneSettingExposure != aSettingId ) + { + evKey = ( ECamControllerVideo == mode ) + ? ECamSettingItemDynamicVideoExposure + : ECamSettingItemDynamicPhotoExposure; + } + else + { + evKey = ECamSettingItemUserSceneExposure; + } + + TInt evValue = iSettingsModel->IntegerSettingValue( evKey ); + if( iEvStepAsUiValue != 0 ) + evData.iExposureStep = (evValue * KECamFineResolutionFactor) / iEvStepAsUiValue; + else + evData.iExposureStep = 0; + PRINT1( _L("Camera <> provide EV compensation: %d"), evData.iExposureStep ); +#else + evData.iExposureStep = 0; +#endif + break; + } + // ----------------------------------------------------- + // Light sensitivity (ISO value) + case ECameraSettingLightSensitivity: + case ECameraUserSceneSettingLightSensitivity: + { + TInt* ptr = static_cast( aSettingData ); + TInt isoKey; + + if ( ECameraUserSceneSettingLightSensitivity != aSettingId ) + { + isoKey = ( ECamControllerVideo == mode ) + ? ECamSettingItemDynamicVideoLightSensitivity + : ECamSettingItemDynamicPhotoLightSensitivity; + } + else + { + isoKey = ECamSettingItemUserSceneLightSensitivity; + } + // TCamLightSensitivityId type value returned + TCamLightSensitivityId isoId = + static_cast( iSettingsModel->IntegerSettingValue( isoKey ) ); + + *ptr = CamUtility::MapLightSensitivity2IsoValueL( isoId, iSupportedISORates ); + PRINT1( _L("Camera <> provide ISO rate: %d"), *ptr ); + break; + } + // ----------------------------------------------------- + // White balance + case ECameraSettingWhiteBalance: + case ECameraUserSceneSettingWhiteBalance: + { + TPckgBuf* ptr = + static_cast*>( aSettingData ); + TInt key; + + if ( ECameraUserSceneSettingWhiteBalance != aSettingId ) + { + key = ( ECamControllerVideo == mode ) + ? ECamSettingItemDynamicVideoWhiteBalance + : ECamSettingItemDynamicPhotoWhiteBalance; + } + else + { + key = ECamSettingItemUserSceneWhitebalance; + } + + TCamSettingDataWhiteBalance& wbData( (*ptr)() ); + + TCamWhiteBalanceId WB = static_cast(iSettingsModel->IntegerSettingValue( key )); + CCamera::TWhiteBalance CamWB = CCamSettingConversion::Map2CameraWb( WB ); + + wbData.iWhiteBalanceMode = CamWB; + break; + } +#ifdef CAMERAAPP_CAPI_V2_IP + // ----------------------------------------------------- + // Colour effect (colour filter: sepia/b&w/vivid/..) + case ECameraSettingColourEffect: + case ECameraUserSceneSettingColourEffect: + { + CIP::TEffect* ptr = static_cast( aSettingData ); + + TInt key; + + if ( ECameraUserSceneSettingColourEffect != aSettingId ) + { + key = ( ECamControllerVideo == mode ) + ? ECamSettingItemDynamicVideoColourFilter + : ECamSettingItemDynamicPhotoColourFilter; + } + else + { + key = ECamSettingItemUserSceneColourFilter; + } + + TCamColourFilterId uiValue = + static_cast( iSettingsModel->IntegerSettingValue( key ) ); + + CIP::TEffect effect = CCamSettingConversion::Map2CameraEffect( uiValue ); + + PRINT1( _L("Camera <> provide colour effect: 0x%08x"), effect ); + *ptr = effect; + break; + } + // ----------------------------------------------------- + // Sharpness + case ECameraSettingSharpness: + case ECameraUserSceneSettingSharpness: + { + TInt* ptr = static_cast( aSettingData ); + + TInt key; + + if ( ECameraUserSceneSettingSharpness != aSettingId ) + { + key = ECamSettingItemDynamicPhotoImageSharpness; + } + else + { + key = ECamSettingItemUserSceneImageSharpness; + } + TCamImageSharpnessId uiValue = + static_cast( + iSettingsModel->IntegerSettingValue( key ) ); + + TInt sharpness = CamUtility::MapSharpnessId2SharpnessValueL( uiValue ); + PRINT1( _L("Camera <> provide sharpness: %d"), sharpness ); + *ptr = sharpness; + + break; + } +#endif // CAMERAAPP_CAPI_V2_IP + // ----------------------------------------------------- + // Brightness + case ECameraSettingBrightness: + case ECameraUserSceneSettingBrightness: + { + CCamera::TBrightness* ptr = + static_cast( aSettingData ); + + TInt key; + + if ( ECameraUserSceneSettingBrightness != aSettingId ) + { + key = ( ECamControllerVideo == mode ) + ? ECamSettingItemDynamicVideoBrightness + : ECamSettingItemDynamicPhotoBrightness; + } + else + { + key = ECamSettingItemUserSceneBrightness; + } + + TInt SettingsBrightness = iSettingsModel->IntegerSettingValue( key ); + CCamera::TBrightness CamBrightness = CCamera::TBrightness( KEngineMultiplier * SettingsBrightness ); + + PRINT1( _L("Camera <> provide brightness: %d"), CamBrightness ); + *ptr = CamBrightness; + break; + } + // ----------------------------------------------------- + // Contrast + case ECameraSettingContrast: + case ECameraUserSceneSettingContrast: + { + CCamera::TContrast* ptr = static_cast( aSettingData ); + TInt key; + + if ( ECameraUserSceneSettingContrast != aSettingId ) + { + key = ( ECamControllerVideo == mode ) + ? ECamSettingItemDynamicVideoContrast + : ECamSettingItemDynamicPhotoContrast; + } + else + { + key = ECamSettingItemUserSceneContrast; + } + + TInt SettingsContrast = iSettingsModel->IntegerSettingValue( key ); + CCamera::TContrast CamContrast = CCamera::TContrast( KEngineMultiplier * SettingsContrast ); + PRINT1( _L("Camera <> provide contrast: %d"), CamContrast ); + *ptr = CamContrast; + break; + } + // ----------------------------------------------------- + // Digital zoom + case ECameraSettingDigitalZoom: + { + TInt* ptr = static_cast( aSettingData ); + CheckNonNullL( ptr, KErrArgument ); + *ptr = iController.ZoomValue(); + break; + } + // ----------------------------------------------------- + // Optical zoom + case ECameraSettingOpticalZoom: + { + User::Leave( KErrNotSupported ); + //iSettingsModel->IntegerSettingValue( ECamSettingItemPhotoOpticalZoom ); + break; + } +#ifdef CAMERAAPP_CAPI_V2_ADV + case ECameraSettingFocusRange: + { + // User::Leave( KErrNotSupported ); + CAS::TFocusRange* ptr = static_cast( aSettingData ); + + // Get current scene, from which the focus range value should be obtained + TInt currentScene = iSettingsModel->IntegerSettingValue( ECamSettingItemDynamicPhotoScene ); + if ( currentScene == ECamSceneUser ) + { + // In case of user scene, use the base scene instead + currentScene = iSettingsModel->IntegerSettingValue( ECamSettingItemUserSceneBasedOnScene ); + } + PRINT1( _L("Camera <> current scene: %d"), currentScene ); + + // Get the autofocus mode in camera internal format + TInt afMode = iSettingsModel->SceneSettingValue( currentScene, ECamSettingItemSceneAFMode ); + + PRINT1( _L("Camera <> Autofocusmode for current scene: %d"), afMode ); + + TCamSettingsOnOff facetrack = + static_cast( + iSettingsModel->IntegerSettingValue( ECamSettingItemFaceTracking ) ); + if ( iController.UiConfigManagerPtr() && iController.UiConfigManagerPtr()->IsFaceTrackingSupported() && + ( ECamSettOn == facetrack ) ) + { + // Use CCamera::CCameraAdvancedSettings::EFocusRangeAuto if in facetracking mode. + *ptr = CCamera::CCameraAdvancedSettings::EFocusRangeAuto; + } + else + { + // Convert it to TFocusRange + *ptr = CCamSettingConversion::Map2CameraAutofocus( static_cast( afMode ) ); + PRINT1( _L("Camera <> Autofocusmode mapped for CCamera: %d"), *ptr ); + } + //CheckNonNullL( ptr, KErrNotFound ); + //*ptr = KFocusRange;//iSettingsModel->IntegerSettingValue( ECamSettingItemDynamicPhotoFocusRange ); + break; + } + // ----------------------------------------------------- + case ECameraSettingCaptureLimit: + { + TInt* ptr = static_cast( aSettingData ); + *ptr = iController.CaptureLimitSetting(); + + PRINT1( _L("Camera <> provide capture limit: %d"), *ptr ); + break; + } + // ----------------------------------------------------- + // Stabilization setting (for video) + case ECameraSettingStabilization: + { + TCamSettingDataStabilization& stabilization = + ( *static_cast*>( aSettingData ) )(); + + TCamSettingsOnOff settingOn = + static_cast( iSettingsModel->IntegerSettingValue( ECamSettingItemVideoStab ) ); + + // These could be made product specific.. + if( ECamSettOn == settingOn ) + { + PRINT( _L("Camera <> Stabilization is set ON") ); + stabilization.iMode = CAS::EStabilizationModeAuto; + stabilization.iEffect = CAS::EStabilizationAuto; + stabilization.iComplexity = CAS::EStabilizationComplexityAuto; + } + else + { + PRINT( _L("Camera <> Stabilization is set OFF") ); + stabilization.iMode = CAS::EStabilizationModeOff; + stabilization.iEffect = CAS::EStabilizationOff; + stabilization.iComplexity = CAS::EStabilizationComplexityAuto; + } + break; + } +#endif // CAMERAAPP_CAPI_V2_ADV + // ----------------------------------------------------- + // Device orientation setting + case ECameraSettingOrientation: + { + MCameraOrientation::TOrientation* ptr = + static_cast( aSettingData ); + + TCamImageOrientation orientationSetting = + static_cast( iController.ImageOrientation() ); + PRINT1( _L("Camera <> Got image orientation from ui: [%s]"), KCamOrientationNames[orientationSetting] ); + + *ptr = CCamSettingConversion::Map2CameraOrientation( orientationSetting ); + PRINT1( _L("Camera <> provide camera orientation: 0x%02X"), *ptr ); + break; + } + // ----------------------------------------------------- + // Video audio mute setting + case ECameraSettingAudioMute: + { + TCamSettingsOnOff mute = + static_cast( + iSettingsModel->IntegerSettingValue( ECamSettingItemVideoAudioRec ) ); + + TBool* ptr = static_cast( aSettingData ); + *ptr = (ECamSettOn == mute); + PRINT1( _L("Camera <> provide mute on: %d"), *ptr ); + break; + } + // ----------------------------------------------------- + // Continuous autofocus setting + case ECameraSettingContAF: + { + TCamSettingsOnOff caf = static_cast( + iSettingsModel->IntegerSettingValue( ECamSettingItemContinuousAutofocus ) ); + + TBool* ptr = static_cast( aSettingData ); + *ptr = (ECamSettOn == caf); + PRINT1( _L("Camera <> provide continuous autofocus on: %d"), *ptr ); + break; + } + // ----------------------------------------------------- + // facetracking setting + case ECameraSettingFacetracking: + { + TCamSettingsOnOff facetrack = + static_cast( + iSettingsModel->IntegerSettingValue( ECamSettingItemFaceTracking ) ); + TBool* ptr = static_cast( aSettingData ); + *ptr = (ECamSettOn == facetrack); + PRINT1( _L("Camera <> provide facetracking on: %d"), *ptr ); + break; + } + // ----------------------------------------------------- + // Video max size in bytes + case ECameraSettingFileMaxSize: + { + TCamVideoClipLength setting = + static_cast( + iSettingsModel->IntegerSettingValue( ECamSettingItemVideoClipLength ) ); + + TInt* ptr = static_cast( aSettingData ); + + *ptr = ( ECamVideoClipShort == setting ) + ? CamUtility::MaxMmsSizeInBytesL() + : 0; // 0 means not limited + + PRINT1( _L("Camera <> provide max file size: %d"), *ptr ); + break; + } + // ----------------------------------------------------- + // Video filename + case ECameraSettingFileName: + { + TPtr* ptr = static_cast( aSettingData ); + //*ptr = iController.CurrentFullFileName(); + *ptr = iController.CurrentVideoFileName(); + break; + } + // ----------------------------------------------------- + default: + { +#ifndef CAMERAAPP_EMULATOR_BUILD + User::Leave( KErrNotSupported ); +#endif // not CAMERAAPP_EMULATOR_BUILD + break; + } + // ----------------------------------------------------- + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +CCamSettingProvider::ProvidePendingSettingChangesL( + RArray& aSettingIds ) + { + PRINT( _L("Camera => CCamSettingProvider::ProvidePendingSettingChangesL") ); + aSettingIds.Reset(); + aSettingIds.ReserveL( iPendingSettingChanges.Count() ); + for( TInt i = 0; i < iPendingSettingChanges.Count(); i++ ) + { + aSettingIds.AppendL( iPendingSettingChanges[i] ); + } + PRINT1( _L("Camera <> %d settings changed"), aSettingIds.Count() ); + + // These have been asked and delivered now. + // Update: Reset only when asked. Enables retries. + // iPendingSettingChanges.Reset(); + PRINT( _L("Camera <= CCamSettingProvider::ProvidePendingSettingChangesL") ); + } + + +// --------------------------------------------------------------------------- +// PendingSettingChangeCount +// --------------------------------------------------------------------------- +// +TInt +CCamSettingProvider::PendingSettingChangeCount() const + { + return iPendingSettingChanges.Count(); + } + + +// =========================================================================== +// New methods + +// --------------------------------------------------------------------------- +// Reset +// --------------------------------------------------------------------------- +// +void +CCamSettingProvider::Reset() + { + PRINT( _L("Camera =><= CCamSettingProvider::Reset") ); + iPendingSettingChanges.Reset(); + } + +// --------------------------------------------------------------------------- +// AddPendingSettingChangesL +// --------------------------------------------------------------------------- +// +void +CCamSettingProvider +::AddPendingSettingChangesL( const RArray& aUiSettingIds ) + { + iPendingSettingChanges.ReserveL( aUiSettingIds.Count() + + iPendingSettingChanges.Count() ); + + for( TInt i = 0; i < aUiSettingIds.Count(); i++ ) + { + AddPendingSettingChangeL( aUiSettingIds[i] ); + } + } + +// --------------------------------------------------------------------------- +// AddPendingSettingChangeL +// --------------------------------------------------------------------------- +// +void +CCamSettingProvider +::AddPendingSettingChangeL( TCamSettingItemIds aUiSettingId ) + { + PRINT1( _L("Camera => CCamSettingProvider::AddPendingSettingChangeL [%s]"), + KCamSettingItemNames[aUiSettingId] ); + + TCamCameraSettingId cameraId = + CCamSettingConversion::Map2CameraControllerSettingId( aUiSettingId ); + + if( ECameraSettingNone != cameraId ) + { + // Add each setting only once + if( KErrNotFound == iPendingSettingChanges.Find( cameraId ) ) + { + PRINT1( _L("Camera <> Add pending setting [%s]"), KCameraSettingNames[cameraId] ); + iPendingSettingChanges.AppendL( cameraId ); + } + } + else + { + User::Leave( KErrNotSupported ); + } + PRINT( _L("Camera <= CCamSettingProvider::AddPendingSettingChangeL") ); + } + +// --------------------------------------------------------------------------- +// SetSupportedISORatesL +// +// --------------------------------------------------------------------------- +// +void +CCamSettingProvider::SetSupportedISORatesL( const RArray& aSupportedIsoRates ) + { + iSupportedISORates = aSupportedIsoRates; + if ( iSupportedISORates.Count() != 0 ) + { + iValidISORates = ETrue; + } + } + +// =========================================================================== +// private + +void +CCamSettingProvider::ConstructL() + { + PRINT( _L("Camera => CCamSettingProvider::ConstructL") ); + // Get EV steps range. + iEvStepAsUiValue = iController.EvRange().iStepsPerUnit; + PRINT( _L("Camera <= CCamSettingProvider::ConstructL") ); + } + + +CCamSettingProvider::CCamSettingProvider( CCamAppController& aController, + MCamSettingsModel* aSettingsModel ) + : iSettingsModel( aSettingsModel ), + iController ( aController ), + iPendingSettingChanges( KSettingArrayGranularity ) + { + } + +