videoeditorengine/vedengine/inc/vedqualitysettingsapi.inl
changeset 0 951a5db380a0
--- /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