--- a/camerauis/cameraapp/generic/common/src/camconfiguration.cpp Thu Aug 19 09:36:57 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1198 +0,0 @@
-/*
-* 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 of Dynamic Configuration
-*
-*/
-
-
-#include <e32debug.h> // RDebug
-#include "camconfiguration.h"
-#include "camconfigurationutility.h"
-#include "imagingconfigmanager.h"
-#include "CamUtility.h"
-#include "camconfigurationconstants.h"
-
-const TInt KReserveedSpace = 160000;
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::CCamConfiguration
-// ---------------------------------------------------------------------------
-//
-CCamConfiguration::CCamConfiguration():
- iPrimaryCameraDisplayId( KCamPrimaryCameraDisplayId ),
- iSecondaryCameraDisplayId( KCamSecondaryCameraDisplayId )
- {
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::~CCamConfiguration
-// ---------------------------------------------------------------------------
-//
-CCamConfiguration::~CCamConfiguration()
- {
- // Quality data arrays
- iPrimaryCameraPhotoQualities.Close();
- iSecondaryCameraPhotoQualities.Close();
- iVideoQualities.Close();
-
- delete iIcm;
-
- // String data
- for( TInt i=iStrings8.Count()-1; i>=0; i-- )
- {
- HBufC8* str = iStrings8[i];
- iStrings8.Remove( i );
- delete str;
- }
- iStrings8.Close();
- for( TInt i=iStrings16.Count()-1; i>=0; i-- )
- {
- HBufC16* str = iStrings16[i];
- iStrings16.Remove( i );
- delete str;
- }
- iStrings16.Close();
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::NewL
-// ---------------------------------------------------------------------------
-//
-CCamConfiguration*
-CCamConfiguration::NewL()
- {
- CCamConfiguration* self = new (ELeave) CCamConfiguration;
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::ConstructL
-// ---------------------------------------------------------------------------
-//
-void
-CCamConfiguration::ConstructL()
- {
- PRINT( _L("Camera => CCamConfiguration::ConstructL") );
-
- PRINT( _L("Camera <> CCamConfiguration::ConstructL - Instantiate ICM") );
- iIcm = CImagingConfigManager::NewL();
-
- PRINT( _L("Camera <> CCamConfiguration::ConstructL - Init image qualities") );
- InitializeImageQualitiesL();
-
- PRINT( _L("Camera <> CCamConfiguration::ConstructL - Init video qualities") );
- InitializeVideoQualitiesL();
-
- PRINT( _L("Camera <= CCamConfiguration::ConstructL") );
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::InitializeImageQualitiesL
-// ---------------------------------------------------------------------------
-//
-void
-CCamConfiguration::InitializeImageQualitiesL()
- {
- PRINT( _L("Camera => CCamConfiguration::InitializeImageQualitiesL") );
- TInt totalLevels = iIcm->NumberOfImageQualityLevels();
-
- CArrayFixFlat<TUint>* levels
- = new (ELeave) CArrayFixFlat<TUint>( totalLevels );
- CleanupStack::PushL( levels );
- TImageQualitySet set;
- TCamImageQualityData data;
-
- // Get primary camera levels
- if( iPrimaryCameraDisplayId )
- {
- PRINT( _L("Camera <> CCamConfiguration::InitializeImageQualitiesL *** Primary camera qualities ***") );
- iIcm->GetImageQualityLevelsL( *levels, iPrimaryCameraDisplayId );
- TInt numLevels( levels->Count() );
- PRINT1(_L("Camera <> CCamConfiguration::InitializeImageQualitiesL - Total number of levels: %d"), numLevels );
-
- for( int i=0; i<numLevels; i++ )
- {
- iIcm->GetImageQualitySet( set, levels->At( i ), iPrimaryCameraDisplayId );
- if( set.iCamcorderVisible > 0 )
- {
- PRINT1( _L("Camera <> CCamConfiguration::InitializeImageQualitiesL - Set %d CamcorderVisible"), i );
-
- InitializeImageQualityL( set, data );
- AddToOrderedImageQualitiesArrayL( data, iPrimaryCameraPhotoQualities );
- }
- }
- }
-
- // Adjust print qualities - print => print high/print/print low
- CamConfigurationUtility::AdjustPrintQualities( iPrimaryCameraPhotoQualities );
- TInt numQualities = iPrimaryCameraPhotoQualities.Count();
-
- // Get secondary camera levels
- if( iSecondaryCameraDisplayId )
- {
- PRINT( _L("Camera <> CCamConfiguration::InitializeImageQualitiesL() *** Secondary camera qualities ***") );
- iIcm->GetImageQualityLevelsL( *levels, iSecondaryCameraDisplayId );
- TInt numLevels( levels->Count() );
- PRINT1( _L("Camera <> CCamConfiguration::InitializeImageQualitiesL - Total number of levels: %d"), numLevels );
-
- for( int i=0; i<numLevels; i++ )
- {
- iIcm->GetImageQualitySet( set, levels->At( i ), iSecondaryCameraDisplayId );
- if( set.iCamcorderVisible > 0 )
- {
- PRINT1( _L("Camera <> CCamConfiguration::InitializeImageQualitiesL - Set %d CamcorderVisible"), i );
-
- InitializeImageQualityL( set, data );
-
- // Force image quality to secondary
- // data.iPhotoQualitySetting.iPhotoQualityId = EImageQualitySecondary;
- data.iPhotoQualitySetting.iPhotoQualityId
- = static_cast<TCamImageQuality>( numQualities++ );
- data.iPhotoSize.iQualitySettingId = ECamImageQualitySecondary;
-
- AddToOrderedImageQualitiesArrayL( data, iSecondaryCameraPhotoQualities );
- }
- }
- }
-
- CleanupStack::PopAndDestroy( levels );
-
- PRINT( _L("Camera <= CCamConfiguration::InitializeImageQualitiesL") );
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::InitializeVideoQualitiesL
-// ---------------------------------------------------------------------------
-//
-void
-CCamConfiguration::InitializeVideoQualitiesL()
- {
- PRINT(_L("Camera => CCamConfiguration::InitializeVideoQualitiesL") );
- TInt totalLevels = iIcm->NumberOfVideoQualityLevels();
- CArrayFixFlat<TUint>* levels
- = new (ELeave) CArrayFixFlat<TUint>( totalLevels );
- CleanupStack::PushL( levels );
- TVideoQualitySet set;
-
- // Get primary camera levels
- if( iPrimaryCameraDisplayId )
- {
- iIcm->GetVideoQualityLevelsL( *levels, iPrimaryCameraDisplayId );
- TInt numLevels( levels->Count() );
- PRINT1(_L("Camera <> CCamConfiguration::InitializeVideoQualitiesL - Total number of levels: %d"), numLevels );
-
- for( int i=0; i<numLevels; i++ )
- {
- iIcm->GetVideoQualitySet( set, levels->At( i ), iPrimaryCameraDisplayId );
- if( set.iCamcorderVisible > 0 )
- {
- PRINT1(_L("Camera <> CCamConfiguration::InitializeVideoQualitiesL - Set %d CamcorderVisible"), i );
-
- TCamVideoQualityData data( CreateVideoQualityDataL( set ) );
- AddToOrderedVideoQualitiesArrayL( data, iVideoQualities );
- }
- }
-
- // Set the video quality values now that we have all data in sorted array
- CamConfigurationUtility::SetVideoQualityLevels( iVideoQualities );
- }
-
- // Secondary camera video qualities from ICM are ignored.
- // The last primary camera quality is used in seconcary camera as well.
-
- CleanupStack::PopAndDestroy( levels );
-
- // Get the average video bitrate scaler
- TCamcorderMMFPluginSettings mmfPluginSettings;
- User::LeaveIfError( iIcm->GetCamcorderMMFPluginSettings( mmfPluginSettings ) );
- iCMRAvgVideoBitRateScaler = mmfPluginSettings.iCMRAvgVideoBitRateScaler;
-
- PRINT( _L("Camera <= CCamConfiguration::InitializeVideoQualitiesL") );
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::InitializeVideoQualitiesL
-// ---------------------------------------------------------------------------
-//
-void
-CCamConfiguration::AddToOrderedImageQualitiesArrayL( TCamImageQualityData& aQuality,
- RArray<TCamImageQualityData>& aArray )
- {
- TBool added = EFalse;
- TInt numQualities = aArray.Count();
- TInt numPixels = aQuality.iPhotoSize.iWidth*aQuality.iPhotoSize.iHeight;
-
- for( TInt i=0; i<numQualities; i++ )
- {
- if( aArray[i].iPhotoSize.iWidth*aArray[i].iPhotoSize.iHeight < numPixels )
- {
- aArray.InsertL( aQuality, i );
- added = ETrue;
- break;
- }
- }
-
- if( !added )
- {
- // Item is to be last in the array
- aArray.AppendL( aQuality );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::AddToOrderedVideoQualitiesArrayL
-// ---------------------------------------------------------------------------
-//
-void
-CCamConfiguration::AddToOrderedVideoQualitiesArrayL( TCamVideoQualityData& aQuality,
- RArray<TCamVideoQualityData>& aArray )
- {
- TBool added( EFalse );
- const TInt numQualities( aArray.Count() );
- const TInt currValue( aQuality.iDescription );
-
- for( TInt i=0; i<numQualities; i++ )
- {
- if( aArray[i].iDescription > currValue )
- {
- // aQuality should be before quality aArray[i]
- aArray.InsertL( aQuality, i );
- added = ETrue;
- break;
- }
- }
-
- if( !added )
- {
- // Item is to be last in the array
- aArray.AppendL( aQuality );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::InitializeImageQualityL
-// ---------------------------------------------------------------------------
-//
-void
-CCamConfiguration::InitializeImageQualityL( const TImageQualitySet& aSet, TCamImageQualityData& aData )
- {
- PRINT3( _L("Camera => CCamConfiguration::InitializeImageQualityL - res: (%d, %d), compression: %d" ),
- aSet.iImageWidth, aSet.iImageHeight, aSet.iCompressionQuality );
- // Find out the image quality/resolution id for the set
- TInt index = KErrNotFound;
- for( int i=0; i<ECamPhotoSizeLast; i++ )
- {
- if( aSet.iImageWidth == KCamPhotoSizes[i].iWidth &&
- aSet.iImageHeight == KCamPhotoSizes[i].iHeight )
- {
- index = i;
- }
- }
-
- // Check that index is valid
- User::LeaveIfError( index );
-
- // Copy the photo size data
- aData.iPhotoSize = KCamPhotoSizes[index];
-
- // --------------------------------
- // Photo quality settings
-
- // Set the photo resulution value, based on photo size value
- aData.iPhotoQualitySetting.iPhotoResolution
- = MapPhotoSizeToResolution( aData.iPhotoSize.iSizeId );
-
- // Jpeg compression
- aData.iPhotoQualitySetting.iQualityLevel = aSet.iCompressionQuality;
-
- // Estimated file size
- aData.iFileSize = aSet.iEstimatedSize;
-
- // Set correct image quality description, quality id and icons
- TCamImageType type = CamConfigurationUtility::ImageType( aSet.iCamcorderVisible );
- aData.iDescription = KCamImageQualityMappings[index][type].iDesc;
-
- if( ECamPhotoQualityDescLast == aData.iDescription )
- {
- // No description defined for this quality => not supported
- User::Leave( KErrNotSupported );
- }
-
- aData.iPhotoQualitySetting.iPhotoQualityId = KCamImageQualityMappings[index][type].iQuality;
- aData.iQualityIcons = KCamImageIcons[ aData.iDescription ];
-
- PRINT( _L("Camera <= CCamConfiguration::InitializeImageQualityL") );
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::GetPsiIntArrayL
-// ---------------------------------------------------------------------------
-//
-void
-CCamConfiguration::GetPsiIntArrayL( TCamPsiKey aKey, RArray<TInt>& aArray ) const
- {
- PRINT1( _L("Camera => CCamConfiguration::GetPsiIntArrayL Key: %d"), aKey );
- switch( aKey )
- {
- case ECamPsiSupportedStillResolutions:
- {
- // Despite the name, returns array of TCamPhotoSizeId
- // The array contents must be ordered in TCamPhotoSizeId enum order
- for( TInt i=0; i<ECamPhotoSizeLast; i++ )
- {
- AppendIfSupportedL( ECamItemPhotoSize, i, aArray );
- }
- break;
- }
-
- case ECamPsiJpegDataSizes:
- {
- // Jpeg data sizes. Must be in same order as supported still resolutions,
- // so photo size is used for indexing.
- for( TInt i=0; i<ECamPhotoSizeLast; i++ )
- {
- AppendIfSupportedL( ECamItemPhotoSize, i, aArray, ECamItemPhotoJpegSize );
- }
- break;
- }
-
- case ECamPsiSequencePostProcessDataSizes:
- {
- // Jpeg data sizes. Must be in same order as supported still resolutions,
- // so photo size is used for indexing.
- for( TInt i=0; i<ECamPhotoSizeLast; i++ )
- {
- AppendIfSupportedL( ECamItemPhotoSize, i, aArray, ECamItemSeqPostProcSize );
- }
- break;
- }
-
- case ECamPsiSupportedStillQualities:
- {
- // This is array for primary camera qualities, so do not include secondary quality.
- // The results
- for( TInt i=0; i<ECamImageQualitySecondary; i++ )
- {
- AppendIfSupportedL( ECamItemPhotoQuality, i, aArray );
- }
- break;
- }
-
- case ECamPsiStillQualityIconIds:
- {
- // Icon ids. Must be in the same order as ECamPsiSupportedStillQualities,
- // so that type is used for indexing.
- // This is array for primary camera qualities, so do not include secondary quality.
- for( TInt i=0; i<ECamImageQualitySecondary; i++ )
- {
- AppendIfSupportedL( ECamItemPhotoQuality, i, aArray, ECamItemSettingsIconId );
- }
- break;
- }
-
- case ECamPsiPrecapStillQualityIconIds:
- {
- // Secondary camera quality is included
- for( TInt i=0; i<ECamImageQualityLast; i++ )
- {
- AppendIfSupportedL( ECamItemPhotoQuality, i, aArray, ECamItemPrecapIconId );
- }
- break;
- }
-
- case ECamPsiSupportedVideoResolutions:
- {
- for( TInt i=0; i<ECamVideoResolutionLast; i++ )
- {
- AppendVideoResIfSupportedL( i, aArray );
- }
- break;
- }
-
- case ECamPsiSupportedVideoQualities:
- {
- TInt n = iVideoQualities.Count();
- for( TInt i=0; i<n; i++ )
- {
- aArray.AppendL( iVideoQualities[i].iQualitySetting );
- }
- break;
- }
-
- case ECamPsiPrecapVideoQualityIconIds:
- {
- TInt n = iVideoQualities.Count();
- for( TInt i=0; i<n; i++ )
- {
- aArray.AppendL( iVideoQualities[i].iQualityIcons.iPrecapIconId );
- aArray.AppendL( iVideoQualities[i].iQualityIcons.iPrecapIconMask );
- }
- break;
- }
-
- case ECamPsiVideoQualityIconIds:
- {
- TInt n = iVideoQualities.Count();
- for( TInt i=0; i<n; i++ )
- {
- aArray.AppendL( iVideoQualities[i].iQualityIcons.iSettingsIconId );
- aArray.AppendL( iVideoQualities[i].iQualityIcons.iSettingsIconMask );
- }
- break;
- }
-
- case ECamPsiVideoQualityFileTypeId:
- {
- TInt n = iVideoQualities.Count();
- for( TInt i=0; i<n; i++ )
- {
- aArray.AppendL( iVideoQualities[i].iFileTypeIcons.iIconId );
- aArray.AppendL( iVideoQualities[i].iFileTypeIcons.iMask );
- }
- break;
- }
-
- default:
- {
- PRINT( _L("Camera <> CCamConfiguration::GetPsiIntArrayL - Unknown key!") );
- User::Panic( KCamConfigPanicId, ECamConfigPanicUnknownKey );
- }
-
- }
- PRINT( _L("Camera <= CCamConfiguration::GetPsiIntArrayL") );
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::AppendIfSupportedL
-// ---------------------------------------------------------------------------
-//
-void
-CCamConfiguration::AppendIfSupportedL( TCamItemType aCheckType, TInt aValue,
- RArray<TInt>&aArray, TCamItemType aAppendType ) const
- {
- TInt n( iPrimaryCameraPhotoQualities.Count() );
- for( TInt i=0; i<n; i++ )
- {
- if( CamConfigurationUtility::IsSupported( aValue, aCheckType,
- iPrimaryCameraPhotoQualities[i] ) )
- {
- if( ECamItemSame == aAppendType )
- {
- // Simply append the current value
- aArray.AppendL( aValue );
- }
- else
- {
- // Append something else corresponding the item
- AppendTypeL( aAppendType, aArray, iPrimaryCameraPhotoQualities[i] );
- }
-
- return;
- }
- }
-
- n = iSecondaryCameraPhotoQualities.Count();
- for( TInt i=0; i<n; i++ )
- {
- if( CamConfigurationUtility::IsSupported( aValue, aCheckType,
- iSecondaryCameraPhotoQualities[i] ) )
- {
- if( ECamItemSame == aAppendType )
- {
- // Simply append the current value
- aArray.AppendL( aValue );
- }
- else
- {
- // Append something else corresponding the item
- AppendTypeL( aAppendType, aArray, iSecondaryCameraPhotoQualities[i] );
- }
- return;
- }
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::AppendTypeL
-// ---------------------------------------------------------------------------
-//
-void
-CCamConfiguration::AppendTypeL( TCamItemType aType, RArray<TInt>&aArray, const TCamImageQualityData& aData )
- {
- switch( aType )
- {
- case ECamItemSettingsIconId:
- {
- aArray.AppendL( aData.iQualityIcons.iSettingsIconId );
- aArray.AppendL( aData.iQualityIcons.iSettingsIconMask );
- break;
- }
- case ECamItemPrecapIconId:
- {
- aArray.AppendL( aData.iQualityIcons.iPrecapIconId );
- aArray.AppendL( aData.iQualityIcons.iPrecapIconMask );
- break;
- }
- case ECamItemPhotoJpegSize:
- {
- aArray.AppendL( aData.iFileSize );
- break;
- }
- case ECamItemSeqPostProcSize:
- {
- aArray.AppendL( aData.iFileSize );
- break;
- }
- default:
- {
- User::Panic( KCamConfigPanicId, ECamConfigPanicUnknownType );
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::NumImageQualities
-// ---------------------------------------------------------------------------
-//
-TInt
-CCamConfiguration::NumImageQualities() const
- {
- TInt count( iPrimaryCameraPhotoQualities.Count() );
- if( iSecondaryCameraPhotoQualities.Count() > 0 )
- {
- // Only one quality currently supported for secondary cam
- count++;
- // count += iSecondaryCameraPhotoQualities.Count();
- }
-
- return count;
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::SecondaryCameraImageQuality
-// ---------------------------------------------------------------------------
-//
-TInt
-CCamConfiguration::MmsImageQuality() const
- {
- // As the primary camera image qualities are sorted, MMS quality is the
- // last one in the qualities array.
- TInt index = iPrimaryCameraPhotoQualities.Count()-1;
-
- return index < 0 ?
- KErrNotFound :
- iPrimaryCameraPhotoQualities[index].iPhotoQualitySetting.iPhotoQualityId;
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::SecondaryCameraImageQuality
-// ---------------------------------------------------------------------------
-//
-TInt
-CCamConfiguration::SecondaryCameraImageQuality() const
- {
- if( iSecondaryCameraPhotoQualities.Count() > 0 )
- {
- return iSecondaryCameraPhotoQualities[0].iPhotoQualitySetting.iPhotoQualityId;
- }
-
- return KErrNotFound;
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::ImageQuality
-// ---------------------------------------------------------------------------
-//
-const TCamPhotoQualitySetting&
-CCamConfiguration::ImageQuality( TInt aIndex ) const
- {
- const TInt count( iPrimaryCameraPhotoQualities.Count() );
- if( aIndex >= 0 && aIndex < count )
- {
- return iPrimaryCameraPhotoQualities[aIndex].iPhotoQualitySetting;
- }
- else
- {
- TInt secIndex = aIndex - count;
- if( secIndex >= 0 &&
- secIndex < iSecondaryCameraPhotoQualities.Count() )
- {
- return iSecondaryCameraPhotoQualities[secIndex].iPhotoQualitySetting;
- }
-
- User::Panic( KCamConfigPanicId, ECamConfigPanicNoQuality );
- return iPrimaryCameraPhotoQualities[0].iPhotoQualitySetting; // Get rid of warning
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::ImageQualityData
-// ---------------------------------------------------------------------------
-//
-const TCamImageQualityData&
-CCamConfiguration::ImageQualityData( TInt aIndex ) const
- {
- const TInt count( iPrimaryCameraPhotoQualities.Count() );
- if( aIndex >= 0 && aIndex < count )
- {
- return iPrimaryCameraPhotoQualities[aIndex];
- }
- else
- {
- TInt secIndex = aIndex - count;
- if( secIndex >= 0 &&
- secIndex < iSecondaryCameraPhotoQualities.Count() )
- {
- return iSecondaryCameraPhotoQualities[secIndex];
- }
-
- User::Panic( KCamConfigPanicId, ECamConfigPanicNoQuality );
- return iPrimaryCameraPhotoQualities[0]; // Get rid of warning
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::NumVideoQualities
-// ---------------------------------------------------------------------------
-//
-TInt
-CCamConfiguration::NumVideoQualities() const
- {
- return iVideoQualities.Count();
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::NumPrimaryImageQualities
-// ---------------------------------------------------------------------------
-//
-TInt
-CCamConfiguration::NumPrimaryImageQualities() const
- {
- return iPrimaryCameraPhotoQualities.Count();
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::SecondaryCameraVideoQuality
-// ---------------------------------------------------------------------------
-//
-TInt
-CCamConfiguration::SecondaryCameraVideoQuality() const
- {
- // Currently always the last of the video qualities
- // Currently always the last of the video qualities
- // As the camera video qualities are sorted, sharing quality is the
- // last one in the qualities array.
- TInt index = NumVideoQualities()-1;
-
- return index < 0 ?
- KErrNotFound :
- iVideoQualities[index].iQualitySettings.iQualityLevel;
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::VideoQualitySetting
-// ---------------------------------------------------------------------------
-//
-TInt
-CCamConfiguration::VideoQualitySetting( TInt aIndex ) const
- {
- return iVideoQualities[aIndex].iQualitySetting;
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::VideoQuality
-// ---------------------------------------------------------------------------
-//
-const TVideoQualitySettings&
-CCamConfiguration::VideoQuality( TInt aIndex ) const
- {
- return iVideoQualities[aIndex].iQualitySettings;
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::MapSupportedQualityToQualityDescriptor
-// ---------------------------------------------------------------------------
-//
-TInt
-CCamConfiguration::MapSupportedQualityToQualityDescriptor( TBool aVideoMode,
- TInt aQualityVal ) const
- {
- if( aVideoMode )
- {
- // Video mode
- TInt n = iVideoQualities.Count();
- for( TInt i=0; i<n; i++ )
- {
- const TCamVideoQualityData& data = iVideoQualities[i];
- if( aQualityVal == data.iQualitySetting )
- {
- return data.iDescription;
- }
- }
-
- // No description found for this quality => Not supported
- User::Panic( KCamConfigPanicId, ECamConfigPanicNoDescription );
- return KErrNotSupported;
- }
- else
- {
- // Image mode
- TInt n = iPrimaryCameraPhotoQualities.Count();
- for( TInt i=0; i<n; i++ )
- {
- const TCamImageQualityData& data = iPrimaryCameraPhotoQualities[i];
- if( aQualityVal == data.iPhotoSize.iQualitySettingId )
- {
- return data.iDescription;
- }
- }
-
- // No description found for this quality value => Not supported
- User::Panic( KCamConfigPanicId, ECamConfigPanicNoDescription );
- return KErrNotSupported;
- }
-
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::MapPhotoSizeToResolution
-// ---------------------------------------------------------------------------
-//
-TCamImageResolution
-CCamConfiguration::MapPhotoSizeToResolution( TCamPhotoSizeId aSizeId )
- {
- for( TInt i=0; i<ECamPhotoSizeLast; i++ )
- {
- if( KCamPhotoSizes[i].iSizeId == aSizeId )
- {
- return KCamPhotoSizes[i].iResolution;
- }
- }
- // Used as deafult in previous implementation
- return EImageResolutionMMS;
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::MapResolutionToPhotoSize
-// ---------------------------------------------------------------------------
-//
-TCamPhotoSizeId
-CCamConfiguration::MapResolutionToPhotoSize( TCamImageResolution aResolution )
- {
- for( TInt i=0; i<ECamPhotoSizeLast; i++ )
- {
- if( KCamPhotoSizes[i].iResolution == aResolution )
- {
- return KCamPhotoSizes[i].iSizeId;
- }
- }
- // Used as deafult in previous implementation
- return ECamPhotoSizeVGA;
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::ImagesRemaining
-// ---------------------------------------------------------------------------
-//
-TInt
-CCamConfiguration::ImagesRemaining( TCamMediaStorage aStorage,
- TCamPhotoSizeId aSizeId,
- TInt aCriticalLevel,
- TBool /*aBurstActive*/ ) const
- {
- // PRINT( _L("Camera => CamUtility::ImagesRemaining") );
- TInt64 memoryfree = 0;
-
- // Get the current amount of free memory on the phone.
- switch ( aStorage )
- {
- case ECamMediaStoragePhone:
- memoryfree
- = CamUtility::MemoryFree( DriveInfo::EDefaultPhoneMemory,
- aCriticalLevel );
- break;
-
- case ECamMediaStorageCard:
- PRINT( _L("Camera => CamUtility::ImagesRemaining, ECamMediaStorageCard") );
- memoryfree
- = CamUtility::MemoryFree( DriveInfo::EDefaultRemovableMassStorage,
- aCriticalLevel );
- break;
-
- case ECamMediaStorageMassStorage:
- PRINT( _L("Camera => CamUtility::ImagesRemaining, ECamMediaStorageMassStorage") );
- memoryfree
- = CamUtility::MemoryFree( DriveInfo::EDefaultMassStorage,
- aCriticalLevel );
- break;
- default:
- PRINT( _L("Camera => CamUtility::ImagesRemaining, default") );
- break;
- };
-
- TInt size = 1;
-
- TInt n=NumImageQualities();
- for( TInt i=0; i<n; i++ )
- {
- const TCamImageQualityData& data( ImageQualityData( i ) );
- if( aSizeId == data.iPhotoSize.iSizeId )
- {
- size = data.iFileSize;
- }
- }
-
- memoryfree -= KReserveedSpace;
- // In the case of exceptional circumstances, just return zero images remaining.
- if ( memoryfree <= 0 )
- {
- memoryfree = 0; // To handle exceptional situation, just return zero images.
- }
-
- TInt64 images = memoryfree / size;
-
- images = Min( KMaxTInt, images ); // Truncate value to max possible.
-
- // PRINT1( _L("Camera <= CamUtility::ImagesRemaining %d"), (TInt)images );
- return static_cast<TInt>( images ); // (nothing greater than TInt)
- }
-
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::AllocString8L
-// ---------------------------------------------------------------------------
-//
-const TUint8*
-CCamConfiguration::AllocString8L( const TUint8* aData )
- {
- TPtrC8 ptr( aData );
- HBufC8* data = HBufC8::NewLC( ptr.Length() + 1 );
- data->Des().Copy( ptr );
- data->Des().Append( '\0' );
-
- iStrings8.AppendL( data );
-
- CleanupStack::Pop( data );
-
- return data->Ptr();
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::AllocString16L
-// ---------------------------------------------------------------------------
-//
-const TUint16*
-CCamConfiguration::AllocString16L( const TUint8* aData )
- {
- TPtrC8 ptr( aData );
- HBufC16* data = HBufC16::NewLC( ptr.Length() + 1 );
- data->Des().Copy( ptr );
- data->Des().Append( '\0' );
-
- iStrings16.AppendL( data );
-
- CleanupStack::Pop( data );
-
- return data->Ptr();
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::CreateVideoQualityDataL
-// ---------------------------------------------------------------------------
-//
-TCamVideoQualityData
-CCamConfiguration::CreateVideoQualityDataL( const TVideoQualitySet& aSet )
- {
- PRINT3( _L("Camera => CCamConfiguration::CreateVideoQualityDataL - res: (%d, %d), video bitrate: %d" ),
- aSet.iVideoWidth, aSet.iVideoHeight, aSet.iVideoBitRate );
-
- TInt resIndex( CamConfigurationUtility::VideoSizeIndex(
- aSet.iVideoWidth, aSet.iVideoHeight ) );
- if( resIndex < 0 )
- {
- User::Panic( KCamConfigPanicId, ECamConfigPanicNoVideoRes );
- }
-
- TCamVideoQualityDescription descType
- = CamConfigurationUtility::VideoDescId( aSet.iCamcorderVisible );
-
- TInt videoType = CamConfigurationUtility::VideoType( aSet.iVideoFileMimeType );
-
- // Convert FourCC value from TFourCC to asciiz string
- const TInt KFourCCLength = 5; // 4 characters + '\0'
- TText8 fourCCBuf[KFourCCLength ];
- TPtr8 fourCC( fourCCBuf, KFourCCLength );
- aSet.iAudioFourCCType.FourCC( &fourCC );
- fourCC.Append( '\0' );
-
- // Initialized as here to avoid const_casts for the text pointers
- TCamVideoQualityData data =
- {
- // TVideoQualitySettings:
- {
- 0, // iQualityLevel - defined later
- KCamVideoSizes[resIndex].iCamVideoRes, // iVideoResolution
- aSet.iVideoFrameRate, // iVideoFrameRate
- aSet.iVideoBitRate, // iVideoBitRate
- aSet.iAudioBitRate, // iAudioBitRate
- AllocString8L( aSet.iVideoFileMimeType ), // iVideoMimeType
- AllocString16L( aSet.iPreferredSupplier ), // iPreferredSupplier
- AllocString8L( aSet.iVideoCodecMimeType ), // iVideoCodec
- AllocString8L( fourCCBuf ), // iAudioCodec
- CamConfigurationUtility::VideoType( aSet.iVideoFileMimeType ), // iVideoFileType
- ECamVideoClipMax // iVideoLength - changed later if necessary
- },
-
- KCamVideoSizes[resIndex].iCamVideoRes, // iVideoResolution
- ECamVideoQualitySharing, // iQualitySetting - replaced later
- descType, // iDescription
- KCamVideoIcons[descType],
- KCamVideoTypeIcons[videoType]
- };
-
- PRINT( _L("Camera <= CCamConfiguration::CreateVideoQualityDataL" ) );
- return data;
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::AppendVideoResIfSupportedL
-// ---------------------------------------------------------------------------
-//
-void
-CCamConfiguration::AppendVideoResIfSupportedL( TInt aValue, RArray<TInt>&aArray ) const
- {
- TInt n( iVideoQualities.Count() );
- for( TInt i=0; i<n; i++ )
- {
- if( iVideoQualities[i].iVideoResolution == aValue )
- {
- aArray.AppendL( aValue );
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::CMRAvgVideoBitRateScaler
-// ---------------------------------------------------------------------------
-//
-TReal
-CCamConfiguration::CMRAvgVideoBitRateScaler() const
- {
- return iCMRAvgVideoBitRateScaler;
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::GetRequiredImageQualityIndex
-// ---------------------------------------------------------------------------
-//
-TInt CCamConfiguration::GetRequiredImageQualityIndex( const TSize& aResolution ) const
- {
- TInt QualityIndex = 0;
- TInt MaxCount = NumPrimaryImageQualities();
- TCamImageQualityData QData;
- for ( TInt i = 0; i < MaxCount; i++ )
- {
- QData = ImageQualityData( i );
- if ( QData.iPhotoSize.iWidth == aResolution.iWidth
- && QData.iPhotoSize.iHeight == aResolution.iHeight )
- {
- QualityIndex = i;
- }
- }
- return QualityIndex;
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::MapRequiredResolutionToActualResolutionPhoto
-// ---------------------------------------------------------------------------
-//
-TSize CCamConfiguration::MapRequiredResolutionToActualResolutionPhoto( const TSize& aRequiredResolution ) const {
- PRINT2(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionPhoto aRequiredResolution: (%d,%d)"), aRequiredResolution.iWidth, aRequiredResolution.iHeight );
- TInt MaxCount = NumPrimaryImageQualities();
- TCamImageQualityData QData;
- TSize Reso( 0, 0 );
- TBool found = EFalse;
- for ( TInt i = 0; i < MaxCount; i++ )
- {
- QData = ImageQualityData( i );
- PRINT3(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionPhoto index: %d PhotoSize: (%d,%d)"), i,QData.iPhotoSize.iWidth, QData.iPhotoSize.iHeight );
- if ( QData.iPhotoSize.iWidth == aRequiredResolution.iWidth
- && QData.iPhotoSize.iHeight == aRequiredResolution.iHeight )
- {
- Reso = aRequiredResolution;
- found = ETrue;
- }
- }
- if ( !found && aRequiredResolution != TSize(0,0) ) { // TSize(0,0) should be returned the same as it means the mms quality
- TInt referenceQuality = aRequiredResolution.iWidth*aRequiredResolution.iHeight;
- TInt currentQuality = 0;
- TInt closestMatch = Abs(referenceQuality-currentQuality);
- PRINT1(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionPhoto closestMatch: (%d)"), closestMatch );
- TInt currentMatch = 0;
- for ( TInt i = 0; i < MaxCount; i++ )
- {
- QData = ImageQualityData( i );
- PRINT3(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionPhoto index: %d PhotoSize: (%d,%d)"), i, QData.iPhotoSize.iWidth, QData.iPhotoSize.iHeight );
- currentQuality = QData.iPhotoSize.iWidth*QData.iPhotoSize.iHeight;
- currentMatch = Abs(referenceQuality-currentQuality);
- PRINT1(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionPhoto currentMatch: (%d)"), currentMatch );
- if ( currentMatch < closestMatch )
- {
- Reso.SetSize( QData.iPhotoSize.iWidth, QData.iPhotoSize.iHeight );
- closestMatch = currentMatch;
- }
- }
- }
- PRINT2(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionPhoto return resolution: (%d,%d)"), Reso.iWidth, Reso.iHeight );
- return Reso;
-}
-
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::GetRequiredVideoQualityIndex
-// ---------------------------------------------------------------------------
-//
-TInt CCamConfiguration::GetRequiredVideoQualityIndex( const TSize& aResolution ) const
- {
- PRINT2(_L("Camera <=> CCamConfiguration::GetRequiredVideoQualityIndex aResolution: (%d,%d)"), aResolution.iWidth, aResolution.iHeight );
- TInt QualityIndex = 0;
- TInt MaxCount = NumVideoQualities();
- PRINT1(_L("Camera <=> CCamConfiguration::GetRequiredVideoQualityIndex MaxCount: %d"), MaxCount );
- TCamVideoQualityData QData;
- TSize VideoResolution(0,0);
- //for ( TInt i = 0; i < MaxCount; i++ )
- for ( TInt i = MaxCount-1; i >= 0; i-- )
- {
- QData = iVideoQualities[i];
- VideoResolution = CamConfigurationUtility::CamVideoResolution( QData.iVideoResolution );
- PRINT3(_L("Camera <=> CCamConfiguration::GetRequiredVideoQualityIndex index: %d VideoResolution: (%d,%d)"), i, VideoResolution.iWidth, VideoResolution.iHeight );
- if ( VideoResolution.iWidth == aResolution.iWidth
- && VideoResolution.iHeight == aResolution.iHeight )
- {
- QualityIndex = i;
- }
- }
- PRINT1(_L("Camera <=> CCamConfiguration::GetRequiredVideoQualityIndex return: %d"), QualityIndex );
- return QualityIndex;
- }
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::MapRequiredResolutionToActualResolutionVideo
-// ---------------------------------------------------------------------------
-//
-TSize CCamConfiguration::MapRequiredResolutionToActualResolutionVideo( const TSize& aRequiredResolution ) const {
- PRINT2(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionVideo aRequiredResolution: (%d,%d)"), aRequiredResolution.iWidth, aRequiredResolution.iHeight );
- TInt MaxCount = NumVideoQualities();
- TCamVideoQualityData QData;
- TSize Reso( 0, 0 );
- TBool found = EFalse;
- TSize VideoResolution(0,0);
- for ( TInt i = 0; i < MaxCount; i++ )
- {
- QData = iVideoQualities[i];
- VideoResolution = CamConfigurationUtility::CamVideoResolution( QData.iVideoResolution );
- PRINT3(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionVideo index: %d VideoResolution: (%d,%d)"), i, VideoResolution.iWidth, VideoResolution.iHeight );
- if ( VideoResolution.iWidth == aRequiredResolution.iWidth
- && VideoResolution.iHeight == aRequiredResolution.iHeight )
- {
- Reso = aRequiredResolution;
- found = ETrue;
- }
- }
- if ( !found && aRequiredResolution != TSize(0,0) ) { // TSize(0,0) should be returned the same as it means the mms quality
- TInt referenceQuality = aRequiredResolution.iWidth*aRequiredResolution.iHeight;
- TInt currentQuality = 0;
- TInt closestMatch = Abs(referenceQuality-currentQuality);
- PRINT1(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionVideo closestMatch: (%d)"), closestMatch );
- TInt currentMatch = 0;
- for ( TInt i = 0; i < MaxCount; i++ )
- {
- QData = iVideoQualities[i];
- VideoResolution = CamConfigurationUtility::CamVideoResolution( QData.iVideoResolution );
- PRINT3(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionVideo index: %d VideoResolution: (%d,%d)"), i, VideoResolution.iWidth, VideoResolution.iHeight );
- currentQuality = VideoResolution.iWidth*VideoResolution.iHeight;
- currentMatch = Abs(referenceQuality-currentQuality);
- PRINT1(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionVideo currentMatch: (%d)"), currentMatch );
- if ( currentMatch < closestMatch )
- {
- Reso.SetSize( VideoResolution.iWidth, VideoResolution.iHeight );
- closestMatch = currentMatch;
- }
- }
- }
- PRINT2(_L("Camera <=> CCamConfiguration::MapRequiredResolutionToActualResolutionVideo return resolution: (%d,%d)"), Reso.iWidth, Reso.iHeight );
- return Reso;
-}
-
-// ---------------------------------------------------------------------------
-// CCamConfiguration::GetDefaultVideoQualityFromIcmL
-// ---------------------------------------------------------------------------
-//
-TCamVideoQualitySettings CCamConfiguration::GetDefaultVideoQualityFromIcmL()
- {
- PRINT(_L("Camera => CCamConfiguration::GetDefaultVideoQualityFromIcmL") );
- TInt totalLevels = iIcm->NumberOfVideoQualityLevels();
- CArrayFixFlat<TUint>* levels
- = new (ELeave) CArrayFixFlat<TUint>( totalLevels );
- CleanupStack::PushL( levels );
- TVideoQualitySet set;
- TVideoQualitySet temp;
-
- if( iPrimaryCameraDisplayId )
- {
- iIcm->GetVideoQualityLevelsL( *levels, iPrimaryCameraDisplayId );
- TInt numLevels( levels->Count() );
- PRINT1(_L("Camera <> CCamConfiguration::GetDefaultVideoQualityFromIcmL - Total number of levels: %d"), numLevels );
-
- iIcm->GetVideoQualitySet( set, levels->At( 0 ), iPrimaryCameraDisplayId );
-
- for( int i=1; i<numLevels; i++ )
- {
- iIcm->GetVideoQualitySet( temp, levels->At( i ), iPrimaryCameraDisplayId );
- if( temp.iCamcorderVisible > 0 && temp.iVideoQualitySetLevel > set.iVideoQualitySetLevel )
- {
- set = temp;
- }
- }
- }
- CleanupStack::PopAndDestroy( levels );
-
- TInt count = iVideoQualities.Count();
- TCamVideoQualityDescription descType
- = CamConfigurationUtility::VideoDescId( set.iCamcorderVisible );
- for(TInt i = 0; i < count; i++)
- {
- if(iVideoQualities[i].iDescription == descType )
- {
- PRINT( _L("Camera <= CCamConfiguration::GetDefaultVideoQualityFromIcmL") );
- return iVideoQualities[i].iQualitySetting;
- }
- }
-
- // In normal case application should not come to here
- // If could not find the exact video qulity setting, just return WidescreenHigh
- // Should be fixed in other product
- return ECamVideoQualityNormalHigh;
- }
-
-// End of file
-