videoeditorengine/vedengine/src/vedvideoconversionimp.cpp
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/vedengine/src/vedvideoconversionimp.cpp	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,295 @@
+/*
+* 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 "vedvideoclip.h"
+#include "vedvideoconversionimp.h"
+
+// Print macro
+#ifdef _DEBUG
+#include <e32svr.h>
+#define PRINT(x) RDebug::Print x
+#else
+#define PRINT(x)
+#endif
+
+// An assertion macro wrapper to clean up the code a bit
+#define VCASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CVideoConverterImp"), -10000 ))
+
+
+// ---------------------------------------------------------------------------
+// NewL() of CVideoConverter
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CVideoConverter* CVideoConverter::NewL(MVideoConverterObserver& aObserver) 
+    {
+    PRINT(_L("CVideoConverter::NewL in"));
+    
+    CVideoConverterImp* self = (CVideoConverterImp*)NewLC(aObserver);
+    CleanupStack::Pop(self);        
+    PRINT(_L("CVideoConverter::NewL out"));
+    
+    return self;
+    }
+    
+// ---------------------------------------------------------------------------
+// NewLC() of CVideoConverter
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CVideoConverter* CVideoConverter::NewLC(MVideoConverterObserver& aObserver)
+    {
+    PRINT(_L("CVideoConverter::NewLC in"));
+    
+    CVideoConverterImp* self = new (ELeave) CVideoConverterImp(aObserver);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+
+    PRINT(_L("CVideoConverter::NewLC out"));
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Constructor of CVideoConverter
+// ---------------------------------------------------------------------------
+//
+CVideoConverterImp::CVideoConverterImp(MVideoConverterObserver& aObserver) : iObserver(aObserver)
+{    
+}
+
+    
+// ---------------------------------------------------------------------------
+// Destructor of CVideoConverter
+// ---------------------------------------------------------------------------
+//
+CVideoConverterImp::~CVideoConverterImp()
+{
+    delete iMovie;
+}
+
+// ---------------------------------------------------------------------------
+// ConstructL() of CVideoConverter
+// ---------------------------------------------------------------------------
+//
+void CVideoConverterImp::ConstructL()
+{   
+    iMovie = CVedMovie::NewL(NULL);
+ 
+    iMovie->RegisterMovieObserverL(this);
+ 
+    // set quality to MMS   
+    iMovie->SetQuality(CVedMovie::EQualityMMSInteroperability);
+}
+
+// ---------------------------------------------------------------------------
+// Insert file to be checked / converted
+// ---------------------------------------------------------------------------
+//
+void CVideoConverterImp::InsertFileL(RFile* aFile)
+{
+
+    if ( iMovie->VideoClipCount() != 0 )
+        User::Leave(KErrAlreadyExists);
+
+    iMovie->InsertVideoClipL(aFile, 0);
+}
+
+// ---------------------------------------------------------------------------
+// Check compatibility
+// ---------------------------------------------------------------------------
+//
+TMMSCompatibility CVideoConverterImp::CheckMMSCompatibilityL(TInt aMaxSize)
+{
+
+    VCASSERT( iMovie->VideoClipCount() == 1 );
+    
+    if ( iMovie->VideoClipCount() != 1 )
+        User::Leave(KErrNotFound);
+    
+    CVedVideoClipInfo* info = iMovie->VideoClipInfo(0);
+    
+    // check file size
+    RFile* file = info->FileHandle();
+    
+    TInt size = 0;
+    User::LeaveIfError( file->Size(size) );
+    
+    TBool sizeOK = ( size <= aMaxSize );
+    
+    // check format
+    TVedVideoFormat fileFormat = info->Format();
+    TVedVideoType videoCodec = info->VideoType();
+    TVedAudioType audioCodec = info->AudioType();
+
+    TBool formatOK = ( fileFormat == EVedVideoFormat3GPP ) &&
+                     ( videoCodec == EVedVideoTypeH263Profile0Level10 ) &&
+                     ( audioCodec == EVedAudioTypeNoAudio || 
+                       audioCodec == EVedAudioTypeAMR );
+
+    if ( formatOK && sizeOK )
+        return ECompatible;
+    
+    if ( sizeOK || (!sizeOK && !formatOK) )
+    { 
+         VCASSERT( !formatOK );
+         // check estimated size after conversion
+         // NOTE: This is checked also for sizeOK, because it's possible
+         //       that size increases in conversion
+        TInt sizeEstimate = iMovie->GetSizeEstimateL();
+        
+        if ( sizeEstimate <= aMaxSize )
+            return EConversionNeeded;
+        
+        else
+            return ECutNeeded;   
+    } 
+    
+    // size not ok, format ok
+    VCASSERT( !sizeOK && formatOK );
+
+    return ECutNeeded;    
+
+}
+
+// ---------------------------------------------------------------------------
+// Get end time estimate on basis of target size and start time
+// ---------------------------------------------------------------------------
+//
+void CVideoConverterImp::GetDurationEstimateL(TInt aTargetSize, TTimeIntervalMicroSeconds aStartTime, 
+                                           TTimeIntervalMicroSeconds& aEndTime)
+{
+ 
+    iMovie->GetDurationEstimateL(aTargetSize, aStartTime, aEndTime);
+
+}
+
+// ---------------------------------------------------------------------------
+// Start conversion
+// ---------------------------------------------------------------------------
+//
+void CVideoConverterImp::ConvertL(RFile* aOutputFile, TInt aSizeLimit,
+                                  TTimeIntervalMicroSeconds aCutInTime, 
+                                  TTimeIntervalMicroSeconds aCutOutTime)
+{
+
+    VCASSERT( iMovie && iMovie->VideoClipCount() == 1 );
+    
+    TTimeIntervalMicroSeconds temp = iMovie->VideoClipCutOutTime(0);
+    
+    iMovie->VideoClipSetCutInTime(0, aCutInTime);
+    
+    if ( aCutOutTime != KVedOriginalDuration )
+        iMovie->VideoClipSetCutOutTime(0, aCutOutTime);
+    
+    iMovie->SetMovieSizeLimit(aSizeLimit);
+    
+    iMovie->ProcessL(aOutputFile, *this);
+
+}
+
+// ---------------------------------------------------------------------------
+// Cancel conversion
+// ---------------------------------------------------------------------------
+//
+TInt CVideoConverterImp::CancelConversion()
+{
+    iMovie->CancelProcessing();
+    
+    return KErrNone;
+}
+
+// ---------------------------------------------------------------------------
+// Reset to initial state
+// ---------------------------------------------------------------------------
+//
+TInt CVideoConverterImp::Reset()
+{
+    if (iMovie)
+        iMovie->Reset();
+    
+    return KErrNone;
+}
+
+// ---------------------------------------------------------------------------
+// Implementation of clip added -callback
+// ---------------------------------------------------------------------------
+//
+void CVideoConverterImp::NotifyVideoClipAdded(CVedMovie& /*aMovie*/, TInt /*aIndex*/)
+{
+    iObserver.MvcoFileInserted(*this);
+}
+
+
+// ---------------------------------------------------------------------------
+// Implementation of clip adding failed -callback
+// ---------------------------------------------------------------------------
+//
+void CVideoConverterImp::NotifyVideoClipAddingFailed(CVedMovie& /*aMovie*/, TInt aError)
+{
+    iObserver.MvcoFileInsertionFailed(*this, aError);
+}
+
+// ---------------------------------------------------------------------------
+// Implementation of clip movie processing started -callback
+// ---------------------------------------------------------------------------
+//
+void CVideoConverterImp::NotifyMovieProcessingStartedL(CVedMovie& /*aMovie*/)
+{
+    iObserver.MvcoConversionStartedL(*this);
+}
+
+// ---------------------------------------------------------------------------
+// Implementation of clip movie processing progressed -callback
+// ---------------------------------------------------------------------------
+//
+void CVideoConverterImp::NotifyMovieProcessingProgressed(CVedMovie& /*aMovie*/, TInt aPercentage)
+{
+    iObserver.MvcoConversionProgressed(*this, aPercentage);
+}
+
+// ---------------------------------------------------------------------------
+// Implementation of clip movie processing completed -callback
+// ---------------------------------------------------------------------------
+//
+void CVideoConverterImp::NotifyMovieProcessingCompleted(CVedMovie& /*aMovie*/, TInt aError)
+{
+    iObserver.MvcoConversionCompleted(*this, aError);
+}
+
+void CVideoConverterImp::NotifyVideoClipRemoved(CVedMovie& /*aMovie*/, TInt /*aIndex*/){}
+void CVideoConverterImp::NotifyAudioClipAdded(CVedMovie& /*aMovie*/, TInt /*aIndex*/){}
+void CVideoConverterImp::NotifyAudioClipAddingFailed(CVedMovie& /*aMovie*/, TInt /*aError*/){}
+void CVideoConverterImp::NotifyVideoClipIndicesChanged(CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/){}
+void CVideoConverterImp::NotifyVideoClipTimingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){}
+void CVideoConverterImp::NotifyVideoClipSettingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){}
+void CVideoConverterImp::NotifyStartTransitionEffectChanged(CVedMovie& /*aMovie*/){}
+void CVideoConverterImp::NotifyMiddleTransitionEffectChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){}
+void CVideoConverterImp::NotifyEndTransitionEffectChanged(CVedMovie& /*aMovie*/){}
+void CVideoConverterImp::NotifyAudioClipRemoved(CVedMovie& /*aMovie*/, TInt /*aIndex*/){}
+void CVideoConverterImp::NotifyAudioClipIndicesChanged(CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/){}
+void CVideoConverterImp::NotifyAudioClipTimingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){}
+void CVideoConverterImp::NotifyMovieReseted(CVedMovie& /*aMovie*/){}
+void CVideoConverterImp::NotifyVideoClipGeneratorSettingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/) {} 
+void CVideoConverterImp::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/){}
+void CVideoConverterImp::NotifyVideoClipColorEffectChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){}
+void CVideoConverterImp::NotifyVideoClipAudioSettingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){}
+void CVideoConverterImp::NotifyVideoClipDescriptiveNameChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){}
+void CVideoConverterImp::NotifyMovieQualityChanged(CVedMovie& /*aMovie*/){}
+void CVideoConverterImp::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){}
+void CVideoConverterImp::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){}
+void CVideoConverterImp::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){}
+void CVideoConverterImp::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){}