camerauis/cameraapp/generic/src/camvideotime.cpp
changeset 0 1ddebce53859
child 20 38fb6f7eacd5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/camvideotime.cpp	Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2008 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 "camvideotime.h"
+
+const TReal   KMetaDataCoeff         = 1.03;      // Coefficient to estimate metadata amount
+const TUint   KCamCMaxClipDurationInSecs = 5400;  // Maximun video clip duration in seconds
+const TReal   KCMRAvgVideoBitRateScaler = 0.9;
+const TUint   KDiskSafetyLimit       = 400000;    // Amount of free disk space to leave unused
+
+// -----------------------------------------------------------------------------
+// TCamVideoTime::TCamVideoTime
+//
+// Constructor
+// -----------------------------------------------------------------------------
+//
+TCamVideoTime::TCamVideoTime( TInt64 aDiskSpace,
+                              TInt64 aCriticalLimit,             
+                              TInt   aVideoBitRate,
+                              TInt   aAudioBitRate,
+                              TUint  aSizeLimit,
+                              TBool  aMuteAudio,
+                              TReal  aBitrateScaler )
+    {
+
+    // Video bitrate scaler - if not given, use default
+    TReal scaler = KCMRAvgVideoBitRateScaler;
+    if( aBitrateScaler != 0 )
+      {
+      scaler = aBitrateScaler;
+      }
+     
+    // Init bitrates    
+    iVideoAverageBitRate = static_cast<TInt>( aVideoBitRate * scaler );
+    iAudioAverageBitRate = aAudioBitRate;  
+          
+    if( aMuteAudio )
+      {  
+      iAudioAverageBitRate = 0;
+      }      
+        
+    // Calculate available disk space, taking into account safety limit
+    // and disk critical level limit
+    iAvailableSpaceAtStart = aDiskSpace - KDiskSafetyLimit - aCriticalLimit;
+    if( iAvailableSpaceAtStart <= 0 )
+      {
+      iAvailableSpaceAtStart = 0;
+      }
+    
+    // File size limit
+    iSizeLimit = aSizeLimit;           
+    }               
+
+
+
+// -----------------------------------------------------------------------------
+// TCamVideoTime::GetRemainingTimeL - from CamC3GPDataSinkImp.cpp 
+//
+// Return the estimated remaining time for the recording in microseconds.
+// This method takes into account the file size and disk full restrictions.
+// -----------------------------------------------------------------------------
+//
+TTimeIntervalMicroSeconds TCamVideoTime::GetRemainingTimeL()
+    {
+    TTimeIntervalMicroSeconds  remaining;
+    TInt64 availableSpace;
+    TBool remainingFromSizeLimit = EFalse;                   
+
+    if (iSizeLimit && ( (TInt64)iSizeLimit < iAvailableSpaceAtStart ) )
+        {
+        // use sizelimit as available space.
+        remainingFromSizeLimit = ETrue;
+        }
+
+    // Use average audio/video bitrates to estimate remaining time
+    TUint  averageBitRate;
+    TUint  averageByteRate;
+
+    averageBitRate = (TUint)((iVideoAverageBitRate + iAudioAverageBitRate) * KMetaDataCoeff);
+    averageByteRate = averageBitRate / 8;
+
+    if (remainingFromSizeLimit)
+        {
+        availableSpace = iSizeLimit;
+        }
+    else
+        {
+        availableSpace = iAvailableSpaceAtStart;
+        }
+
+    if (availableSpace <= 0)
+        {
+        remaining = 0;
+        }
+    else
+        {
+        remaining = availableSpace * 1000000 / averageByteRate; // 1000000 is for conversion between microseconds and seconds
+
+        if ( (remaining.Int64()) > (TInt64(KCamCMaxClipDurationInSecs)*1000000) )
+            {
+            remaining = (TInt64(KCamCMaxClipDurationInSecs)*1000000);
+            }
+        }
+
+    if ( remaining <= TInt64(0) )
+        {
+        remaining = 0;
+        }
+    return remaining;
+    }
+
+// End of file