--- /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 <ecam.h>
+#ifdef CAMERAAPP_CAPI_V2
+ #include <ecamadvsettings.h> // 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<TCamParamsImage>* ptr =
+ static_cast<TPckgBuf<TCamParamsImage>*>( 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<TCamParamsVideoCae>* ptr =
+ static_cast<TPckgBuf<TCamParamsVideoCae>*>( 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<TCamViewfinderMode>* ptr =
+ static_cast<TPckgBuf<TCamViewfinderMode>*>( aParamData );
+ CheckNonNullL( ptr, KErrNotFound );
+ TCamViewfinderMode& params( (*ptr)() );
+ params = KViewFinderMode;
+ break;
+ }
+ // -----------------------------------------------------------------------
+ case ECameraParamSnapshot:
+ {
+ TPckgBuf<TCamParamsSnapshot>* ptr =
+ static_cast<TPckgBuf<TCamParamsSnapshot>*>( 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<TInt*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = KImageFactor;
+ break;
+ }
+ case ECameraSettingFlash:
+ {
+ CCamera::TFlash* ptr =
+ static_cast<CCamera::TFlash*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = KFlashSetting;
+ break;
+ }
+ case ECameraSettingExposure:
+ {
+ TPckgBuf<TCamSettingDataExposure>* ptr =
+ static_cast<TPckgBuf<TCamSettingDataExposure>*>( 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<TInt*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = KISOValue;
+ break;
+ }
+ case ECameraSettingWhiteBalance:
+ {
+ TPckgBuf<TCamSettingDataWhiteBalance>* ptr =
+ static_cast<TPckgBuf<TCamSettingDataWhiteBalance>*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+
+ TCamSettingDataWhiteBalance& wbData( (*ptr)() );
+ wbData.iWhiteBalanceMode = KWbModeSetting;
+ break;
+ }
+ case ECameraSettingBrightness:
+ {
+ CCamera::TBrightness* ptr =
+ static_cast<CCamera::TBrightness*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = KBrightnessValue;
+ break;
+ }
+ case ECameraSettingContrast:
+ {
+ CCamera::TContrast* ptr =
+ static_cast<CCamera::TContrast*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = KContrastValue;
+ break;
+ }
+ case ECameraSettingDigitalZoom:
+ {
+ TInt* ptr = static_cast<TInt*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = KDigitalZoomValue;
+ break;
+ }
+ case ECameraSettingOpticalZoom:
+ {
+ TInt* ptr = static_cast<TInt*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = KOpticalZoomValue;
+ break;
+ }
+
+#ifdef CAMERAAPP_CAPI_V2
+ case ECameraSettingFocusRange:
+ {
+ CCamera::CCameraAdvancedSettings::TFocusRange* ptr =
+ static_cast<CCamera::CCameraAdvancedSettings::TFocusRange*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = KFocusRange;
+ break;
+ }
+#endif // CAMERAAPP_CAPI_V2
+ case ECameraSettingAudioMute:
+ {
+ TBool* ptr = static_cast<TBool*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = EFalse;
+ break;
+ }
+ case ECameraSettingContAF:
+ {
+ TBool* ptr = static_cast<TBool*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = ETrue;
+ break;
+ }
+ case ECameraSettingFileMaxSize:
+ {
+ TInt* ptr = static_cast<TInt*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = 0; // not limited
+ break;
+ }
+ case ECameraSettingFileName:
+ {
+ TPtr* ptr = static_cast<TPtr*>( aSettingData );
+ CheckNonNullL( ptr, KErrNotFound );
+ *ptr = iController.CurrentFullFileName();
+ break;
+ }
+ default:
+ {
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void
+CCamConstantSettingProvider::ProvidePendingSettingChangesL(
+ RArray<NCamCameraController::TCamCameraSettingId>& 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<TCamSettingItemIds>& 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<TInt>& aSupportedIsoRates )
+ {
+ iSupportedISORates = aSupportedIsoRates;
+ if ( iSupportedISORates.Count() != 0 )
+ {
+ iValidISORates = ETrue;
+ }
+ }
+
+// ===========================================================================
+// private
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void
+CCamConstantSettingProvider::ConstructL()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CCamConstantSettingProvider
+::CCamConstantSettingProvider( CCamAppController& aController )
+ : iController( aController ),
+ iPendingSettingChanges()
+ {
+ }
+