--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/common/inc/camconfiguration.h Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,370 @@
+/*
+* 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: Implementation for camera dynamic configuration.
+*
+*
+*/
+
+
+#ifndef CAMCONFIGURATION_H
+#define CAMCONFIGURATION_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include "CamSettingsInternal.hrh"
+#include "CamPSI.h"
+#include "camconfigurationtypes.h"
+#include "imagingconfigmanager.h"
+#include "CamSettings.hrh"
+
+// FORWARD DECLARATIONS
+
+class CImagingConfigManager;
+struct TVideoQualitySet;
+struct TImageQualitySet;
+
+// CLASS DECLARATION
+
+/**
+* Class CCamConfiguration
+* Queries supported image and video qualities for ICM and creates the related
+* data and does the mappings needed by cameraapp application. These include
+* quality descriptions and icons.
+*
+* In the initial phase, emulates the product specific configuration code,
+* so only minimal changes are needed in cameraapp UI code.
+*/
+class CCamConfiguration: public CBase
+{
+ public: // Constructors and destructors
+
+ /**
+ * Destructor.
+ */
+ ~CCamConfiguration();
+
+ /**
+ * Two-phased constructor.
+ * @return pointer to the created CCamConfiguration object
+ */
+ static CCamConfiguration* NewL();
+
+ public: // New functions
+
+ /**
+ * Returns number of image qualities configured using ICM. Setting data
+ * for these qualities is accessible via ImageQuality() function.
+ * @return Number of qualities
+ */
+ TInt NumImageQualities() const;
+
+ /**
+ * Returns index for primary camera MMS quality
+ * @return MMS quality index or KErrNotFound
+ */
+ TInt MmsImageQuality() const;
+
+ /**
+ * Returns index for secondary camera imagequality.
+ * @return Secondary image quality index or KErrNotFound
+ */
+ TInt SecondaryCameraImageQuality() const;
+
+ /**
+ * Returns settings of the requested quality
+ * @param aIndex Index of the quality (Must be <NumImageQualities())
+ * @return Quality settings
+ */
+ const TCamPhotoQualitySetting& ImageQuality( TInt aIndex ) const;
+
+ /**
+ * Returns number of video qualities configured using ICM. Setting data
+ * for these qualities is accessible via VideoQuality() function.
+ * @return Number of video qualities
+ */
+ TInt NumVideoQualities() const;
+
+ /**
+ * Returns number of primary camera image qualities configured using ICM.
+ * Setting data for these qualities is accessible via ImageQuality( TInt aIndex ) function.
+ * @return Number of primary camera image qualities
+ */
+ TInt NumPrimaryImageQualities() const;
+
+ /**
+ * Returns index for secondary camera video quality. Currently this is
+ * always same as last quality for primary camera.
+ * @return Secondary video quality index
+ */
+ TInt SecondaryCameraVideoQuality() const;
+
+ /**
+ * Returns the quality setting for a required index from iVideoQualities array
+ * in camera video quality.
+ * @return iVideoQualities array index
+ */
+ TInt VideoQualitySetting( TInt aIndex ) const;
+
+ /**
+ * Returns settings data of the requested video quality
+ * @param aIndex Index of the quality (Must be <NumImageQualities())
+ * @return Quality settings
+ */
+ const TVideoQualitySettings& VideoQuality( TInt aIndex ) const;
+
+ /**
+ * Gives description id for given image/video quality
+ * Image: TCamImageQualitySetting => TCamPhotoQualityDescription
+ * Video: TCamVideoQualitySettings => TCamVideoQualityDescription
+ * @param aVideoMode EFalse if image mode
+ * @param aQualityVal Quality value
+ * @return Description id
+ *
+ */
+ TInt MapSupportedQualityToQualityDescriptor( TBool aVideoMode,
+ TInt aQualityVal ) const;
+
+ /**
+ * Returns the the following image quality related integer arrays:
+ * - ECamPsiSupportedStillResolutions
+ * - ECamPsiJpegDataSizes
+ * - ECamPsiSequencePostProcessDataSizes
+ * - ECamPsiSupportedStillQualities
+ * - ECamPsiStillQualityIconIds
+ * - ECamPsiPrecapStillQualityIconIds
+ * And following video quality related arrays:
+ * - ECamPsiSupportedVideoQualities
+ * - ECamPsiPrecapVideoQualityIconIds
+ * - ECamPsiVideoQualityIconIds
+ * - ECamPsiVideoQualityFileTypeId
+ *
+ * @param aKey Key
+ * @param aArray Destination array
+ */
+ void GetPsiIntArrayL( TCamPsiKey aKey, RArray<TInt>& aArray ) const;
+
+ /**
+ * Provides mapping between TCamImageResolution and TCamPhotoSizeId types
+ * @param aResolution
+ * @return Photo Size
+ */
+ static TCamPhotoSizeId MapResolutionToPhotoSize( TCamImageResolution aResolution );
+
+ /**
+ * Provides mapping between TCamPhotoSizeId and TCamImageResolution types
+ * @param aSizeId
+ * @return Resolution
+ */
+ static TCamImageResolution MapPhotoSizeToResolution( TCamPhotoSizeId aSizeId );
+
+ /**
+ * Calculate number of images than can still be taken with the current
+ * image size
+ * @param aStorage Storage media
+ * @param aSizeId The current photo resolution setting
+ * @param aCriticalLevel Critical threshold on the specified drive
+ * @param aBurstActive Whether or not burst mode is active
+ * @return Number of images
+ */
+ TInt ImagesRemaining( TCamMediaStorage aStorage,
+ TCamPhotoSizeId aSizeId,
+ TInt aCriticalLevel,
+ TBool aBurstActive ) const;
+
+ /**
+ * Returns the CMR average video bitrate scaler (obtained from ICM)
+ * This is used to scale bitrates for remaining video time calculation
+ * @return scaler
+ */
+ TReal CMRAvgVideoBitRateScaler() const;
+
+ /**
+ * Returns the default VideoQuality setting which has the highest
+ * iVideoQualitySetLevel value (obtained from ICM)
+ * This is used to get the default video quality setting when restore
+ * settings or frist start camera
+ * @return video quality
+ */
+ TCamVideoQualitySettings GetDefaultVideoQualityFromIcmL();
+
+ /**
+ * Returns the index to the image quality required by embedding application
+ * @return index to icm image configuration array
+ */
+ TInt GetRequiredImageQualityIndex( const TSize& aResolution ) const;
+
+ /**
+ * Returns the resolution that matches closest to the required resolution by embedding application
+ * @return TSize of the resolution
+ */
+ TSize MapRequiredResolutionToActualResolutionPhoto( const TSize& aRequiredResolution ) const;
+
+ /**
+ * Returns the index to the video quality required by embedding application
+ * @return index to icm video configuration array
+ */
+ TInt GetRequiredVideoQualityIndex( const TSize& aResolution ) const;
+
+ /**
+ * Returns the resolution that matches closest to the required resolution by embedding application
+ * @return TSize of the resolution
+ */
+ TSize MapRequiredResolutionToActualResolutionVideo( const TSize& aRequiredResolution ) const;
+
+
+ private:
+ /**
+ * C++ default constructor.
+ * @since 2.8
+ */
+ CCamConfiguration();
+
+ /**
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Queries image qualities from ICM, converts enabled qualities to internal
+ * data formats and adds them to ordered arrays.
+ */
+ void InitializeImageQualitiesL();
+
+ /**
+ * Initializes TCamImageQualityData contents based on TImageQualitySet, which
+ * we have received from the ICM.
+ * @param aSet Image quality set from ICM
+ * @param aData CamConfiguration image quality data structure
+ */
+ void InitializeImageQualityL( const TImageQualitySet& aSet, TCamImageQualityData& aData );
+
+ /**
+ * Returns all data of the requested quality
+ * @param aIndex Index of the quality (Must be <NumImageQualities())
+ * @return Quality data
+ */
+ const TCamImageQualityData& ImageQualityData( TInt aIndex ) const;
+
+ /**
+ * Queries video qualities from ICM, converts enabled qualities to internal
+ * data formats and adds them to ordered arrays.
+ */
+ void InitializeVideoQualitiesL();
+
+ /**
+ * Creates TCamVideoQualityData contents based on TVideoQualitySet, which we
+ * have received from ICM. Not const, because memory allocations are needed
+ * for string data.
+ * @param aSet ICM video quality data
+ * @return Video quality data in CamConfiguration data structure
+ */
+ TCamVideoQualityData CreateVideoQualityDataL( const TVideoQualitySet& aSet );
+
+ /**
+ * Adds the given image quality data to correct place in ordered image
+ * qualities data array. Ordering is done based on number of pixels in the
+ * image quality.
+ * @param aQuality Image quality data
+ * @param aArray Ordered image quality data array
+ */
+ static void AddToOrderedImageQualitiesArrayL( TCamImageQualityData& aQuality,
+ RArray<TCamImageQualityData>& aArray );
+
+ /**
+ * Adds the given video quality data to correct place in ordered video
+ * qualities data array. Ordering is done based on the image quality
+ * description enumeration. (Highest quality first)
+ * @param aQuality Image quality data
+ * @param aArray Ordered image quality data array
+ */
+ static void AddToOrderedVideoQualitiesArrayL( TCamVideoQualityData& aQuality,
+ RArray<TCamVideoQualityData>& aArray );
+
+ /**
+ * Checks if the value for aValue is used for type aCheckType if the
+ * supported image qualities. If so, Appends the aAppendType value
+ * (or aValue, if aAppendType is ECamItemSame) of that quality to
+ * the array.
+ *
+ * @param aCheckType Type for checking existence of value
+ * @param aValue Item value (of checking type)
+ * @param aArray Integer array
+ * @param aAppendType Type of correspondin value to be appended
+ */
+ void AppendIfSupportedL( TCamItemType aCheckType, TInt aValue,
+ RArray<TInt>&aArray, TCamItemType aAppendType=ECamItemSame ) const;
+
+ /**
+ * Appends value of item of type aType from image quality data to aArray.
+ * @param aType Item type
+ * @param aArray Destination array
+ * @param aData Image quality data
+ */
+ static void AppendTypeL( TCamItemType aType, RArray<TInt>&aArray, const TCamImageQualityData& aData );
+
+ /**
+ * @param aValue Video resolution value
+ * @param aArray Destination array
+ */
+ void AppendVideoResIfSupportedL( TInt aValue, RArray<TInt>&aArray ) const;
+
+ /**
+ * Allocates memory for asciiz string given in aData. Returns pointer to the
+ * string in the allocated memory.
+ * @param aData
+ * @return String
+ */
+ const TUint8* AllocString8L( const TUint8* aData );
+
+ /**
+ * Allocates memory for asciiz string given in aData, converts it to 16-bit
+ * and returns pointer to the 16-bit string in the allocated memory.
+ * @param aData
+ * @return String
+ */
+ const TUint16* AllocString16L( const TUint8* aData );
+
+ private: // Data
+
+ // Imaging configuration manager
+ CImagingConfigManager* iIcm;
+
+ // Camera display ids. Used when querying ICM for supported image and
+ // video qualities.
+ TInt iPrimaryCameraDisplayId;
+ TInt iSecondaryCameraDisplayId;
+
+ // Image qualities data for primary and secondary camera
+ RArray<TCamImageQualityData> iPrimaryCameraPhotoQualities;
+ RArray<TCamImageQualityData> iSecondaryCameraPhotoQualities;
+
+ // Video quality data. Last item is shared between primary camera MMS
+ // quality and secondary camera.
+ RArray<TCamVideoQualityData> iVideoQualities;
+ TInt iSecondaryVideoQualityIndex;
+
+ // Arrays for storing (video qualities) string data from ICM
+ // All the content is owned by CCamConfiguration
+ RPointerArray<HBufC8> iStrings8;
+ RPointerArray<HBufC16> iStrings16;
+
+ // Average video bitrate scaler - needed for remaining time calculation
+ TReal iCMRAvgVideoBitRateScaler;
+};
+
+#endif // CAMCONFIGURATION_H
+
+// End of file
+