diff -r 000000000000 -r 951a5db380a0 videoeditorengine/vedengine/inc/vedqualitysettingsapi.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/vedengine/inc/vedqualitysettingsapi.inl Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,207 @@ +/* +* 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: +* +*/ + + +#ifndef __VEDQUALITYSETTINGSAPI_INL__ +#define __VEDQUALITYSETTINGSAPI_INL__ + +#include "vedqualitysettingsvariation.h" + + +inline TInt TVideoQualitySelector::NumberOfQualityLevels() + { + return ENumberOfQualitySets; + } + +inline void TVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel, TBool aAspectRatioWide ) + { + if ( !aAspectRatioWide ) + { + GetVideoQualitySetL( aSet, aLevel ); + } + else + { + // NOT READY + TInt nrOfWideSets = ENumberOfWideQualitySets; + if ( nrOfWideSets == 0 ) + { + User::Leave( KErrNotSupported ); + } + + switch ( aLevel ) + { + case EVideoQualityMMS : + { + aSet = KVideoQualitySetsWide[EQualityLow]; + } + break; + case EVideoQualityNormal : + { + if ( nrOfWideSets > 1 ) + { + aSet = KVideoQualitySetsWide[EQualityMedium]; + } + else + { + aSet = KVideoQualitySetsWide[EQualityLow]; + } + } + break; + case EVideoQualityHigh : + { + if ( nrOfWideSets > 2 ) + { + aSet = KVideoQualitySetsWide[EQualityHigh]; + } + else if ( nrOfWideSets > 1 ) + { + aSet = KVideoQualitySetsWide[EQualityMedium]; + } + else + { + aSet = KVideoQualitySetsWide[EQualityLow]; + } + } + break; + default: + aSet = KVideoQualitySetsWide[EQualityLow]; + } + } + } + + +inline void TVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel ) + { + + switch ( aLevel ) + { + case EVideoQualityMMS : + { + aSet = KVideoQualitySets[EQualityLow]; + } + break; + case EVideoQualityNormal : + { + aSet = KVideoQualitySets[EQualityMedium]; + } + break; + case EVideoQualityHigh : + { + aSet = KVideoQualitySets[EQualityHigh]; + } + break; + default: + if ( (aLevel > EVideoQualityHigh) || (aLevel < EVideoQualityMin) ) + { + User::Leave( KErrArgument ); + } + TInt moreSetsThanNominal = ENumberOfQualitySets - ENumberOfNominalLevels; + if ( moreSetsThanNominal ) + { + // there are also qualities in-between the nominal levels + if ( aLevel < EVideoQualityMMS ) + { + // even lower than the default MMS; no more than 1 step granularity there (atm) + aSet = KVideoQualitySets[EQualityLegacy]; + } + else if ( aLevel < EQualityMedium ) + { + // between Low and Medium + TInt nrSetsBetweenMediumAndLow = EQualityMedium - EQualityLow - 1; + if ( nrSetsBetweenMediumAndLow > 0 ) + { + // no better granularity yet + aSet = KVideoQualitySets[EQualityMedium-1]; + } + else + { + // there are no specified quality in that range, give medium + aSet = KVideoQualitySets[EQualityMedium]; + } + } + else + { + // between Medium and High + TInt nrSetsBetweenHighAndMedium = EQualityHigh - EQualityMedium - 1; + if ( nrSetsBetweenHighAndMedium > 0 ) + { + // no better granularity yet + aSet = KVideoQualitySets[EQualityHigh-1]; + } + else + { + // there are no specified quality in that range, give medium + aSet = KVideoQualitySets[EQualityMedium]; + } + } + } + else + { + // round to the closest nominal level + aSet = KVideoQualitySets[(aLevel-(EVideoQualityNominalGranularity/2))/EVideoQualityNominalGranularity]; + } + } + } + +inline void TVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, const TSize& aVideoResolution ) + { + // go through the qualities until a match is found. If several matches, pick the 1st one + TInt candidate = -1; + TInt i; + for ( i = ENumberOfQualitySets-1; i >= 0; i-- ) // searches from up to down to find higher quality first + { + if ( (KVideoQualitySets[i].iVideoWidth == aVideoResolution.iWidth) && (KVideoQualitySets[i].iVideoHeight == aVideoResolution.iHeight) ) + { + // we've found a set which matches with the requested size + candidate = i; + if ( (i == EQualityLow) || (i == EQualityMedium) || (i == EQualityHigh) ) + { + // we've found a set which matches also with preferred qualities + break; + } + } + } + if ( candidate >= 0 ) + { + aSet = KVideoQualitySets[candidate]; + } + else + { + User::Leave( KErrNotSupported ); + } + } + +inline void TVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, const TPtrC8& aVideoCodecMimeType ) + { + TPtrC8 settingsMimeType; + + TInt i; + for ( i = ENumberOfQualitySets-1; i >= 0; i-- ) // searches from up to down to find higher quality first + { + settingsMimeType.Set(TPtrC8(KVideoQualitySets[i].iVideoCodecMimeType)); + if ( settingsMimeType.MatchF( (const TDesC8& )aVideoCodecMimeType ) != KErrNotFound ) + { + // found + aSet = KVideoQualitySets[i]; + return; + } + } + User::Leave( KErrNotSupported ); + } + +#endif