diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/src/vedqualitysettingsapi.cpp --- a/videoeditorengine/vedengine/src/vedqualitysettingsapi.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,307 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "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: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "vedqualitysettingsapi.h" - -const TUint KCameraDisplayID = 2; - -// --------------------------------------------------------------------------- -// Constructor of CVideoQualitySelector -// --------------------------------------------------------------------------- -// -CVideoQualitySelector::CVideoQualitySelector() - { - } - -// --------------------------------------------------------------------------- -// Destructor of CVideoQualitySelector -// --------------------------------------------------------------------------- -// -CVideoQualitySelector::~CVideoQualitySelector() - { - if( iConfigManager ) - { - delete iConfigManager; - iConfigManager = 0; - } - - if( iQualityLevels ) - { - delete iQualityLevels; - iQualityLevels = 0; - } - } - -// --------------------------------------------------------------------------- -// ConstructL() of CVideoQualitySelector -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::ConstructL() - { - iConfigManager = CImagingConfigManager::NewL(); - - iQualityLevels = new (ELeave) CArrayFixFlat(16); - - iConfigManager->GetVideoQualityLevelsL( *iQualityLevels, KCameraDisplayID ); - } - -// --------------------------------------------------------------------------- -// NewL() of CVideoQualitySelector -// --------------------------------------------------------------------------- -// -CVideoQualitySelector* CVideoQualitySelector::NewL() - { - CVideoQualitySelector* self = CVideoQualitySelector::NewLC(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// NewLC() of CVideoQualitySelector -// --------------------------------------------------------------------------- -// -CVideoQualitySelector* CVideoQualitySelector::NewLC() - { - CVideoQualitySelector* self = new( ELeave ) CVideoQualitySelector; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// Get number of defined quality levels. -// --------------------------------------------------------------------------- -// -TInt CVideoQualitySelector::NumberOfQualityLevels() - { - return iQualityLevels->Count(); - } - -// --------------------------------------------------------------------------- -// Get quality set associated with the given level. -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel, TBool aAspectRatioWide ) - { - if ( !aAspectRatioWide ) - { - GetVideoQualitySetL( aSet, aLevel ); - } - else - { - // NOT READY - User::Leave( KErrNotSupported ); - } - } - -// --------------------------------------------------------------------------- -// Get quality set associated with the given level. -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel ) - { - TVideoQualitySet currentSet; - - switch ( aLevel ) - { - case EVideoQualityMMS : - { - iConfigManager->GetVideoQualitySet( currentSet, CImagingConfigManager::EQualityLow, KCameraDisplayID ); - MapQualitySet( aSet, currentSet ); - } - break; - - case EVideoQualityNormal : - { - iConfigManager->GetVideoQualitySet( currentSet, CImagingConfigManager::EQualityNormal, KCameraDisplayID ); - MapQualitySet( aSet, currentSet ); - } - break; - - case EVideoQualityHigh : - { - iConfigManager->GetVideoQualitySet( currentSet, CImagingConfigManager::EQualityHigh, KCameraDisplayID ); - MapQualitySet( aSet, currentSet ); - } - break; - - default: - { - if ( aLevel < EVideoQualityMin ) - { - User::Leave( KErrArgument ); - } - - // Map our quality level to config manager's quality level - TInt configManagerLevel = aLevel * (CImagingConfigManager::EQualityHigh - CImagingConfigManager::EQualityMin); - configManagerLevel /= (EVideoQualityHigh - EVideoQualityMin); - - iConfigManager->GetVideoQualitySet( currentSet, configManagerLevel, KCameraDisplayID ); - MapQualitySet( aSet, currentSet ); - } - break; - } - } - -// --------------------------------------------------------------------------- -// Get quality set associated with the given video resolution. -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, const TSize& aVideoResolution ) - { - TVideoQualitySet currentSet; - TInt candidate = -1; - TInt i; - - // Go through the qualities until a match is found. If several matches, pick the 1st one - for ( i = iQualityLevels->Count() - 1; i >= 0; i-- ) // Searches from up to down to find higher quality first - { - iConfigManager->GetVideoQualitySet( currentSet, iQualityLevels->At( i ), KCameraDisplayID ); - - if ( (currentSet.iVideoWidth == aVideoResolution.iWidth) && (currentSet.iVideoHeight == aVideoResolution.iHeight) ) - { - // We've found a set which matches with the requested size - - if ( candidate == -1 ) // Don't set to worse if already found - { - candidate = i; - } - - if ( (currentSet.iVideoQualitySetLevel == CImagingConfigManager::EQualityLow) || - (currentSet.iVideoQualitySetLevel == CImagingConfigManager::EQualityNormal) || - (currentSet.iVideoQualitySetLevel == CImagingConfigManager::EQualityHigh) ) - { - // We've found a set which matches also with preferred qualities - MapQualitySet( aSet, currentSet ); - return; - } - } - } - - if ( candidate >= 0 ) - { - iConfigManager->GetVideoQualitySet( currentSet, iQualityLevels->At( candidate ), KCameraDisplayID ); - MapQualitySet( aSet, currentSet ); - } - else - { - User::Leave( KErrNotSupported ); - } - } - -// --------------------------------------------------------------------------- -// Get quality set associated with the given video codec MIME-type. -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, const TPtrC8& aVideoCodecMimeType ) - { - TVideoQualitySet currentSet; - TPtrC8 settingsMimeType; - TInt i; - - for ( i = iQualityLevels->Count() - 1; i >= 0; i-- ) // searches from up to down to find higher quality first - { - iConfigManager->GetVideoQualitySet( currentSet, iQualityLevels->At( i ), KCameraDisplayID ); - - settingsMimeType.Set(TPtrC8(currentSet.iVideoCodecMimeType)); - if ( settingsMimeType.MatchF( (const TDesC8& )aVideoCodecMimeType ) != KErrNotFound ) - { - // Found a match - MapQualitySet( aSet, currentSet ); - return; - } - } - - User::Leave( KErrNotSupported ); - } - -// --------------------------------------------------------------------------- -// Copies the values from the source set to the target set. -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::MapQualitySet( SVideoQualitySet& aTargetSet, TVideoQualitySet& aSourceSet ) - { - TInt i = 0; - - // Video aspect ratio - // We don't have wide screen quality sets yet so this is always true - aTargetSet.iVideoAspectRatioNormal = ETrue; - - // Video file format mime type - for ( i = 0; (i < KQSMaxShortStringLength - 1) && (i < KMaxStringLength); i++ ) - { - aTargetSet.iVideoFileMimeType[i] = aSourceSet.iVideoFileMimeType[i]; - } - aTargetSet.iVideoFileMimeType[i] = '\0'; // Add null termination - - // Video codec mime type - for ( i = 0; (i < KQSMaxLongStringLength - 1) && (i < KMaxStringLength); i++ ) - { - aTargetSet.iVideoCodecMimeType[i] = aSourceSet.iVideoCodecMimeType[i]; - } - aTargetSet.iVideoCodecMimeType[i] = '\0'; // Add null termination - - // Video picture width in pixels (luminance) - aTargetSet.iVideoWidth = aSourceSet.iVideoWidth; - - // Video picture height in pixels (luminance) - aTargetSet.iVideoHeight = aSourceSet.iVideoHeight; - - // Video framerate in fps - aTargetSet.iVideoFrameRate = aSourceSet.iVideoFrameRate; - - // Video bitrate in bps - aTargetSet.iVideoBitRate = aSourceSet.iVideoBitRate; - - // Random access point rate, in pictures per second - aTargetSet.iRandomAccessRate = aSourceSet.iRandomAccessRate; - - // Audio codec FourCC - if ( aSourceSet.iAudioFourCCType == TFourCC(' ', 'A', 'M', 'R') ) - { - // AMR - aTargetSet.iAudioFourCCType[0] = ' '; - aTargetSet.iAudioFourCCType[1] = 'A'; - aTargetSet.iAudioFourCCType[2] = 'M'; - aTargetSet.iAudioFourCCType[3] = 'R'; - aTargetSet.iAudioFourCCType[4] = '\0'; - } - - else if (aSourceSet.iAudioFourCCType == TFourCC(' ', 'A', 'A', 'C') ) - { - // AAC - aTargetSet.iAudioFourCCType[0] = ' '; - aTargetSet.iAudioFourCCType[1] = 'A'; - aTargetSet.iAudioFourCCType[2] = 'A'; - aTargetSet.iAudioFourCCType[3] = 'C'; - aTargetSet.iAudioFourCCType[4] = '\0'; - } - else - aTargetSet.iAudioFourCCType[0] = '\0'; - - // Audio bitrate in bps - aTargetSet.iAudioBitRate = aSourceSet.iAudioBitRate; - - // Audio sampling rate in Hz - aTargetSet.iAudioSamplingRate = aSourceSet.iAudioSamplingRate; - - // Number of audio channels - aTargetSet.iAudioChannels = aSourceSet.iAudioChannels; - } -