diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/src/cameracontroller/camconstantsettingprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/src/cameracontroller/camconstantsettingprovider.cpp Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,523 @@ +/* +* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: CCamCameraControllerActive class implementation. +* +* +*/ + +#include "camcameracontrollerflags.hrh" + +#include +#ifdef CAMERAAPP_CAPI_V2 + #include // KECamFineResolutionFactor +#endif + +#include "camlogging.h" +#include "camcameracontroller.pan" +#include "camcameracontrollertypes.h" +#include "camconstantsettingprovider.h" +#include "camsettingconversion.h" +#include "CamAppController.h" +#include "campointerutility.inl" + +using namespace NCamCameraController; + +// =========================================================================== +// Local data + +static const CCamera::TFormat KImageFormat = CCamera::EFormatExif; +static const TSize KImageSize = TSize(1600,1200); // 2MPix, supported in most products +static const TInt KImageFactor = 100; + +static const CCamera::TFormat KImageFormatSecondary = CCamera::EFormatFbsBitmapColor16M; +static const TSize KImageSizeSecondary = TSize( 320,240 ); +static const TInt KImageFactorSecondary = 100; + +static const TSize KViewfinderSize = TSize(320, 240); +static const TCamViewfinderMode KViewFinderMode = ECamViewfinderBitmap; + +static const TSize KViewfinderSizeSecondary = TSize( 240, 180 ); + +static const CCamera::TFormat KSnapshotFormat = CCamera::EFormatFbsBitmapColor16M; +static const TSize KSnapshotSize = TSize(320, 240); +static const TBool KSnapshotMaintainAspect = EFalse; + +static const CCamera::TFlash KFlashSetting = CCamera::EFlashAuto; + +static const CCamera::TExposure KEvModeSetting = CCamera::EExposureAuto; +#ifdef CAMERAAPP_CAPI_V2 + static const TInt KEvValueSetting = 2; +#endif + +static const TInt KISOValue = 100; +static const CCamera::TWhiteBalance KWbModeSetting = CCamera::EWBAuto; +static const CCamera::TBrightness KBrightnessValue = CCamera::EBrightnessAuto; +static const CCamera::TContrast KContrastValue = CCamera::EContrastAuto; +static const TInt KDigitalZoomValue = 1; +static const TInt KOpticalZoomValue = 1; + +#ifdef CAMERAAPP_CAPI_V2 + static const CCamera::CCameraAdvancedSettings::TFocusRange KFocusRange = + CCamera::CCameraAdvancedSettings::EFocusRangeAuto; +#endif // CAMERAAPP_CAPI_V2 + +// ------------------------------------- +// Video by CAE settings: +// - MMS video setting, as it's the same in all products in use. +#ifdef CAMERAAPP_CAE_FOR_VIDEO + +static const TSize KVideoFrameSize = TSize(176, 144); +static const TReal KVideoFrameRate = 15.0f; +static const TInt KVideoVideoBitRate = 64000; +static const TInt KVideoAudioBitRate = 12200; +static const TBool KVideoAudioOn = ETrue; + +_LIT8( KVideoMimeType, "video/3gpp" ); +_LIT ( KVideoSupplier, "Nokia" ); +_LIT8( KVideoVideoType, "video/H263-2000" ); +_LIT8( KVideoAudioType, " AMR" ); + +#endif // CAMERAAPP_CAE_FOR_VIDEO +// ------------------------------------- + + +// =========================================================================== +// Local methods + + +// =========================================================================== +// Methods + +// static +CCamConstantSettingProvider* +CCamConstantSettingProvider::NewL( CCamAppController& aController ) + { + CCamConstantSettingProvider* self = + CCamConstantSettingProvider::NewLC( aController ); + CleanupStack::Pop( self ); + return self; + } + +// static +CCamConstantSettingProvider* +CCamConstantSettingProvider::NewLC( CCamAppController& aController ) + { + CCamConstantSettingProvider* self = + new (ELeave) CCamConstantSettingProvider( aController ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// virtual +CCamConstantSettingProvider::~CCamConstantSettingProvider() + { + iPendingSettingChanges.Close(); + } + +// =========================================================================== +// From MCamSettingProvider + +// --------------------------------------------------------------------------- +// virtual +// --------------------------------------------------------------------------- +// +void +CCamConstantSettingProvider::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)() ); + + if( ECamActiveCameraPrimary == iController.ActiveCamera() ) + { + // Primary camera parameters + params.iFormat = KImageFormat; + params.iSize = KImageSize; + params.iQualityFactor = KImageFactor; + } + else + { + // Secondary camera parameters + params.iFormat = KImageFormatSecondary; + params.iSize = KImageSizeSecondary; + params.iQualityFactor = KImageFactorSecondary; + } + + break; + } + // ----------------------------------------------------------------------- +#ifdef CAMERAAPP_CAE_FOR_VIDEO + case ECameraParamVideoCae: + { + TPckgBuf* ptr = + static_cast*>( aParamData ); + CheckNonNullL( ptr, KErrNotFound ); + + TCamParamsVideoCae& params( (*ptr)() ); + + params.iFrameSize = KVideoFrameSize; + params.iFrameRate = KVideoFrameRate; + params.iVideoBitRate = KVideoVideoBitRate; + params.iAudioBitRate = KVideoAudioBitRate; + params.iAudioOn = KVideoAudioOn; + params.iMimeType.Set ( KVideoMimeType ); + params.iSupplier.Set ( KVideoSupplier ); + params.iVideoType.Set( KVideoVideoType ); + params.iAudioType.Set( KVideoAudioType ); + + break; + } +#endif // CAMERAAPP_CAE_FOR_VIDEO + // ----------------------------------------------------------------------- + case ECameraParamVfMode: + { + TPckgBuf* ptr = + static_cast*>( aParamData ); + CheckNonNullL( ptr, KErrNotFound ); + TCamViewfinderMode& params( (*ptr)() ); + params = KViewFinderMode; + break; + } + // ----------------------------------------------------------------------- + case ECameraParamSnapshot: + { + TPckgBuf* ptr = + static_cast*>( aParamData ); + CheckNonNullL( ptr, KErrNotFound ); + TCamParamsSnapshot& params( (*ptr)() ); + + params.iSize = KSnapshotSize; + params.iFormat = KSnapshotFormat; + params.iMaintainAspect = KSnapshotMaintainAspect; + break; + } + // ----------------------------------------------------------------------- + default: + { + User::Leave( KErrNotSupported ); + break; + } + // ----------------------------------------------------------------------- + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +CCamConstantSettingProvider::ProvideCameraSettingL( + const NCamCameraController::TCamCameraSettingId& aSettingId, + TAny* aSettingData ) + { + switch( aSettingId ) + { + case ECameraSettingQualityFactor: + { + TInt* ptr = static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = KImageFactor; + break; + } + case ECameraSettingFlash: + { + CCamera::TFlash* ptr = + static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = KFlashSetting; + break; + } + case ECameraSettingExposure: + { + TPckgBuf* ptr = + static_cast*>( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + + TCamSettingDataExposure& evData( (*ptr)() ); + evData.iExposureMode = KEvModeSetting; +#ifdef CAMERAAPP_CAPI_V2 + evData.iExposureStep = KEvValueSetting * KECamFineResolutionFactor; +#else + evData.iExposureStep = 0; +#endif + break; + } + case ECameraSettingLightSensitivity: + { + TInt* ptr = static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = KISOValue; + break; + } + case ECameraSettingWhiteBalance: + { + TPckgBuf* ptr = + static_cast*>( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + + TCamSettingDataWhiteBalance& wbData( (*ptr)() ); + wbData.iWhiteBalanceMode = KWbModeSetting; + break; + } + case ECameraSettingBrightness: + { + CCamera::TBrightness* ptr = + static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = KBrightnessValue; + break; + } + case ECameraSettingContrast: + { + CCamera::TContrast* ptr = + static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = KContrastValue; + break; + } + case ECameraSettingDigitalZoom: + { + TInt* ptr = static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = KDigitalZoomValue; + break; + } + case ECameraSettingOpticalZoom: + { + TInt* ptr = static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = KOpticalZoomValue; + break; + } + +#ifdef CAMERAAPP_CAPI_V2 + case ECameraSettingFocusRange: + { + CCamera::CCameraAdvancedSettings::TFocusRange* ptr = + static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = KFocusRange; + break; + } +#endif // CAMERAAPP_CAPI_V2 + case ECameraSettingAudioMute: + { + TBool* ptr = static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = EFalse; + break; + } + case ECameraSettingContAF: + { + TBool* ptr = static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = ETrue; + break; + } + case ECameraSettingFileMaxSize: + { + TInt* ptr = static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = 0; // not limited + break; + } + case ECameraSettingFileName: + { + TPtr* ptr = static_cast( aSettingData ); + CheckNonNullL( ptr, KErrNotFound ); + *ptr = iController.CurrentFullFileName(); + break; + } + default: + { + User::Leave( KErrNotSupported ); + break; + } + } + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +CCamConstantSettingProvider::ProvidePendingSettingChangesL( + RArray& aSettingIds ) + { + PRINT( _L("Camera => CCamConstantSettingProvider::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() ); + + + // Update: Reset only when asked. Enables retries. + // iPendingSettingChanges.Reset(); + PRINT( _L("Camera <= CCamConstantSettingProvider::ProvidePendingSettingChangesL") ); + } + + +// --------------------------------------------------------------------------- +// PendingSettingChangeCount +// --------------------------------------------------------------------------- +// +TInt +CCamConstantSettingProvider::PendingSettingChangeCount() const + { + return iPendingSettingChanges.Count(); + } + + +// =========================================================================== +// From MCamSettingsModelObserver +/* +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +CCamConstantSettingProvider::IntegerSettingChangedL( + TCamSettingItemIds aSettingItem, + TInt// aSettingValue + ) + { + TCamCameraIntSettingId cameraId = + Map2CameraControllerSettingId( aSettingItem ); + + if( ECameraSettingNone != cameraId + && KErrNotFound == iPendingSettingChanges.Find( cameraId ) ) + { + iPendingSettingChanges.AppendL( cameraId ) + } + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +CCamConstantSettingProvider::TextSettingChangedL( + TCamSettingItemIds aSettingItem, + const TDesC&// aSettingValue + ) + { + TCamCameraIntSettingId cameraId = + Map2CameraControllerSettingId( aSettingIds[i] ); + + if( ECameraSettingNone != cameraId ) + { + iPendingSettingChanges.Append( cameraId ) + } + } +*/ +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +CCamConstantSettingProvider::Reset() + { + iPendingSettingChanges.Reset(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +CCamConstantSettingProvider +::AddPendingSettingChangesL( const RArray& aUiSettingIds ) + { + iPendingSettingChanges.ReserveL( aUiSettingIds.Count() + + iPendingSettingChanges.Count() ); + + for( TInt i = 0; i < aUiSettingIds.Count(); i++ ) + { + AddPendingSettingChangeL( aUiSettingIds[i] ); + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +CCamConstantSettingProvider +::AddPendingSettingChangeL( TCamSettingItemIds aUiSettingId ) + { + TCamCameraSettingId cameraId = + CCamSettingConversion::Map2CameraControllerSettingId( aUiSettingId ); + + // Add each setting only once + if( ECameraSettingNone != cameraId + && KErrNotFound == iPendingSettingChanges.Find( cameraId ) ) + { + iPendingSettingChanges.AppendL( cameraId ); + } + } + +// --------------------------------------------------------------------------- +// SetSupportedISORatesL +// +// --------------------------------------------------------------------------- +// +void +CCamConstantSettingProvider::SetSupportedISORatesL( const RArray& aSupportedIsoRates ) + { + iSupportedISORates = aSupportedIsoRates; + if ( iSupportedISORates.Count() != 0 ) + { + iValidISORates = ETrue; + } + } + +// =========================================================================== +// private + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void +CCamConstantSettingProvider::ConstructL() + { + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CCamConstantSettingProvider +::CCamConstantSettingProvider( CCamAppController& aController ) + : iController( aController ), + iPendingSettingChanges() + { + } +