--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videditor/VideoEditorCommon/src/VeiAddQueue.cpp Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,524 @@
+/*
+* 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 FILES
+
+// System includes
+#include <bautils.h>
+#include <coemain.h>
+#include <mgfetch.h>
+
+// User includes
+#include "Veiaddqueue.h"
+#include "Veiimageclipgenerator.h"
+#include "VeiMGFetchVerifier.h"
+#include "VideoEditorUtils.h"
+#include "VideoEditorDebugUtils.h"
+
+
+EXPORT_C CVeiAddQueue* CVeiAddQueue::NewL( MVedAudioClipInfoObserver& aView, CVedMovie& aMovie, MVeiQueueObserver& aObserver )
+ {
+ CVeiAddQueue* self = CVeiAddQueue::NewLC( aView, aMovie, aObserver );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+
+EXPORT_C CVeiAddQueue* CVeiAddQueue::NewLC( MVedAudioClipInfoObserver& aView, CVedMovie& aMovie, MVeiQueueObserver& aObserver )
+ {
+ CVeiAddQueue* self = new (ELeave) CVeiAddQueue( aView, aMovie, aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ return self;
+ }
+
+CVeiAddQueue::CVeiAddQueue( MVedAudioClipInfoObserver& aView, CVedMovie& aMovie, MVeiQueueObserver& aObserver ) :
+ CActive(CActive::EPriorityStandard), iObserver( &aObserver ), iMovie( aMovie ), iView( aView )
+ {
+ }
+
+void CVeiAddQueue::ConstructL()
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::ConstructL");
+
+ CActiveScheduler::Add(this);
+ iInsertVideoDialogOn = EFalse;
+ iWaitScheduler = new (ELeave) CActiveSchedulerWait;
+ iMovie.RegisterMovieObserverL( this );
+ }
+
+EXPORT_C CVeiAddQueue::~CVeiAddQueue()
+ {
+ iAddQueue.ResetAndDestroy();
+ delete iWaitScheduler;
+
+ if ( iAudioClipInfo )
+ {
+ delete iAudioClipInfo;
+ iAudioClipInfo = NULL;
+ }
+
+ iMovie.UnregisterMovieObserver( this );
+
+ iObserver = NULL;
+ iGenerator = NULL;
+ }
+
+
+EXPORT_C TBool CVeiAddQueue::ShowAudioClipDialogL()
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::ShowAudioClipDialogL() in");
+ // Audio insert dialog for single file
+ CDesCArrayFlat* selectedFiles = new ( ELeave ) CDesCArrayFlat( 1 );
+ CleanupStack::PushL(selectedFiles);
+
+ CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC();
+
+ if ( MGFetch::RunL( *selectedFiles, EAudioFile, EFalse, mgFetchVerifier ) == EFalse )
+ {
+ // User cancelled the dialog.
+ CleanupStack::PopAndDestroy( mgFetchVerifier );
+ CleanupStack::PopAndDestroy( selectedFiles );
+ return EFalse;
+ }
+
+ CleanupStack::PopAndDestroy( mgFetchVerifier );
+
+ if ( iAudioClipInfo )
+ {
+ delete iAudioClipInfo;
+ iAudioClipInfo = NULL;
+ }
+ iObserver->NotifyQueueProcessingStarted( MVeiQueueObserver::EProcessingAudio );
+ // AudioClipInfoReady notifier is in EditVideoView
+ iAudioClipInfo = CVedAudioClipInfo::NewL( ( *selectedFiles )[0], iView );
+
+ CleanupStack::PopAndDestroy( selectedFiles );
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::ShowAudioClipDialogL() out");
+ return ETrue;
+ }
+
+
+
+EXPORT_C TBool CVeiAddQueue::ShowVideoClipDialogL( VideoEditor::TCursorLocation aLocation, TInt aCurrentIndex )
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::ShowVideoClipDialogL In");
+ // Video insert dialog for single file
+ CDesCArrayFlat* selectedFiles = new ( ELeave ) CDesCArrayFlat( 1 );
+ CleanupStack::PushL(selectedFiles);
+
+ CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC();
+
+ if ( MGFetch::RunL( *selectedFiles, EVideoFile, EFalse, mgFetchVerifier ) == EFalse )
+ {
+ CleanupStack::PopAndDestroy( mgFetchVerifier );
+ CleanupStack::PopAndDestroy( selectedFiles );
+ return EFalse;
+ }
+
+ CleanupStack::PopAndDestroy( mgFetchVerifier );
+
+ TInt insertIndex;
+ iInsertVideoDialogOn = ETrue;
+
+ // Video clip is added next to selected video clip. If cursor is not on videotrack, clip is
+ // inserted last.
+ if ( iMovie.VideoClipCount() == 0 )
+ {
+ insertIndex = 0;
+ }
+ else if ( aLocation == VideoEditor::ECursorOnAudio || aLocation == VideoEditor::ECursorOnTransition )
+ {
+ insertIndex = iMovie.VideoClipCount();
+ }
+ else
+ {
+ insertIndex = aCurrentIndex + 1;
+ }
+
+ HBufC* filename = HBufC::NewLC( (*selectedFiles )[0].Length() );
+ *filename = (*selectedFiles )[0];
+ iAddQueue.Append( filename );
+
+ iFailedCount = 0;
+ iInsertedCount = 0;
+
+ iTotalCount = iAddQueue.Count();
+
+ iObserver->NotifyQueueProcessingStarted( MVeiQueueObserver::EProcessingVideo );
+ AddNextL( insertIndex );
+
+ CleanupStack::Pop(filename);
+ CleanupStack::PopAndDestroy( selectedFiles );
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::ShowVideoClipDialogL Out");
+ return ETrue;
+ }
+
+
+EXPORT_C void CVeiAddQueue::InsertMediaL( const TDesC& aFilename )
+ {
+ // aFilename is added to queue. Queue processing is started with StartProcessingL() function.
+ RFs& fs = CCoeEnv::Static()->FsSession();
+
+ if ( BaflUtils::FileExists( fs, aFilename ) )
+ {
+ HBufC* filename = HBufC::NewLC( aFilename.Length() );
+ *filename = aFilename;
+ iAddQueue.Append( filename );
+
+ iTotalCount = iAddQueue.Count();
+
+ CleanupStack::Pop( filename );
+ }
+ }
+
+EXPORT_C TInt CVeiAddQueue::Count() const
+ {
+ return iTotalCount;
+ }
+
+EXPORT_C void CVeiAddQueue::StartProcessingL()
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::StartProcessingL");
+
+ iFailedCount = 0;
+ iInsertedCount = 0;
+
+ iTotalCount = iAddQueue.Count();
+
+ if ( iTotalCount > 0 )
+ {
+ iObserver->NotifyQueueProcessingStarted();
+
+ AddNextL();
+ }
+ }
+
+TInt CVeiAddQueue::AddNextL( TInt aPosition )
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: In");
+
+// Image params
+ TTimeIntervalMicroSeconds imageDuration( 5000000 );
+
+ RFs& fs = CCoeEnv::Static()->FsSession();
+ TInt insertErr( KErrNone );
+ TInt insertPosition;
+
+ for( TInt i=0;i<iTotalCount;i++ )
+ {
+ insertErr = KErrNone;
+
+ if ( iAddQueue.Count() > 0 )
+ {
+ TInt percentage;
+ percentage = STATIC_CAST( TInt, ( TReal(iInsertedCount+iFailedCount) / TReal(iTotalCount) )*100 + 0.5 );
+ iObserver->NotifyQueueProcessingProgressed( iInsertedCount+iFailedCount+1, percentage );
+
+ TDesC* filename = iAddQueue[0];
+
+ TBool fileExists = BaflUtils::FileExists( fs, *filename );
+
+ TParse file;
+ file.Set( *iAddQueue[0], NULL, NULL );
+
+ // Do not allow inserting DRM protected content.
+ if( VideoEditorUtils::IsDrmProtectedL(*filename) )
+ {
+ LOGFMT(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: DRM protected file is rejected: %S", &filename);
+ insertErr = KErrAccessDenied;
+ }
+
+ if ( file.ExtPresent() && fileExists && KErrNone == insertErr )
+ {
+ if ( (file.Ext().CompareF( KExt3gp )== 0) ||
+ (file.Ext().CompareF( KExtMp4 )== 0 ))
+ {
+ if ( aPosition == -1 )
+ {
+ insertPosition = iMovie.VideoClipCount();
+ }
+ else
+ {
+ insertPosition = aPosition;
+ }
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 2");
+ iMovie.InsertVideoClipL( *filename, insertPosition );
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 3");
+ }
+ else
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 4");
+ TRAP( insertErr,
+ iGenerator = CVeiImageClipGenerator::NewL(
+ file.FullName(),
+ TSize(KMaxVideoFrameResolutionX,KMaxVideoFrameResolutionY),
+ imageDuration,
+ KRgbBlack,
+ KVideoClipGenetatorDisplayMode,
+ fs,
+ *this)
+ );
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 5");
+ }
+
+ }
+ if ( fileExists && insertErr == KErrNone )
+ {
+ iWaitScheduler->Start();
+ }
+ else
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 7");
+ if ( iInsertVideoDialogOn )
+ {
+ insertErr = EInsertingSingleClip;
+ }
+ else
+ {
+ insertErr = EInsertingFromGallery;
+ }
+ TFileName fileName = file.Name();
+ TBool cntn = iObserver->NotifyQueueClipFailed( fileName, insertErr );
+ if ( !cntn )
+ {
+ iAddQueue.Reset();
+ break;
+ }
+ iFailedCount++;
+ }
+
+ delete iAddQueue[0];
+ iAddQueue.Remove( 0 );
+ } // if
+ } // for
+ LOGFMT2(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 8, iInsertedCount:%d, iFailedCount:%d", iInsertedCount, iFailedCount);
+ iObserver->NotifyQueueEmpty( iInsertedCount, iFailedCount );
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: Out");
+ return insertErr;
+ }
+
+EXPORT_C void CVeiAddQueue::GetNext()
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::GetNext: In");
+ if (iWaitScheduler->IsStarted() )
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::GetNext: 1");
+ iWaitScheduler->AsyncStop();
+ }
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::GetNext: Out");
+ }
+
+void CVeiAddQueue::DoCancel()
+ {
+ }
+
+void CVeiAddQueue::RunL()
+ {
+ }
+
+
+void CVeiAddQueue::NotifyImageClipGeneratorInitializationComplete(
+ CVeiImageClipGenerator& /*aGenerator*/, TInt DEBUGLOG_ARG(aError) )
+ {
+ LOGFMT(KVideoEditorLogFile, "CVeiAddQueue::NotifyImageClipGeneratorInitializationComplete: in, aError:%d", aError);
+ TRAP_IGNORE( iMovie.InsertVideoClipL(*iGenerator, ETrue, 0) );
+
+ // Generator is no longer our concern
+ iGenerator = NULL;
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyImageClipGeneratorInitializationComplete: out");
+ }
+
+
+void CVeiAddQueue::NotifyVideoClipAdded(CVedMovie& /*aMovie*/, TInt /*aIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAdded: In");
+ iInsertedCount++;
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAdded: Out");
+ }
+
+void CVeiAddQueue::NotifyVideoClipAddingFailed(CVedMovie& /*aMovie*/, TInt DEBUGLOG_ARG(aError) )
+ {
+ LOGFMT(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAddingFailed: In, aError:%d", aError);
+ TInt error;
+
+ if ( iInsertVideoDialogOn )
+ {
+ error = EInsertingSingleClip;
+ }
+ else
+ {
+ error = EInsertingFromGallery;
+ }
+
+
+ TParse file;
+ file.Set( *iAddQueue[0], NULL, NULL );
+
+ TFileName fileName = file.Name();
+ TBool ifContinue = iObserver->NotifyQueueClipFailed( fileName, error );
+ if ( ifContinue && (error == EInsertingFromGallery) )
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAddingFailed: 1");
+ iObserver->NotifyQueueProcessingStarted();
+ GetNext();
+ }
+ else
+ {
+ // @: release iWaitScheduler
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAddingFailed: 2");
+ iWaitScheduler->AsyncStop();
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAddingFailed: 3");
+ }
+ iFailedCount++;
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAddingFailed: Out");
+ }
+
+void CVeiAddQueue::NotifyVideoClipRemoved(CVedMovie& /*aMovie*/, TInt /*aIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipRemoved: In and out");
+ }
+
+void CVeiAddQueue::NotifyVideoClipIndicesChanged(CVedMovie& /*aMovie*/, TInt /*aOldIndex*/,
+ TInt /*aNewIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipIndicesChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyVideoClipTimingsChanged(CVedMovie& /*aMovie*/,
+ TInt /*aIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipTimingsChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyVideoClipColorEffectChanged(CVedMovie& /*aMovie*/,
+ TInt /*aIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipColorEffectChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyVideoClipAudioSettingsChanged(CVedMovie& /*aMovie*/,
+ TInt /*aIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAudioSettingsChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyVideoClipGeneratorSettingsChanged(CVedMovie& /*aMovie*/,
+ TInt /*aIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipGeneratorSettingsChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyVideoClipDescriptiveNameChanged(CVedMovie& /*aMovie*/,
+ TInt /*aIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipDescriptiveNameChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyStartTransitionEffectChanged(CVedMovie& /*aMovie*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyStartTransitionEffectChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyMiddleTransitionEffectChanged(CVedMovie& /*aMovie*/,
+ TInt /*aIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyMiddleTransitionEffectChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyEndTransitionEffectChanged(CVedMovie& /*aMovie*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyEndTransitionEffectChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyAudioClipAdded(CVedMovie& /*aMovie*/, TInt /*aIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipAdded: In and out");
+ }
+
+void CVeiAddQueue::NotifyAudioClipAddingFailed(CVedMovie& /*aMovie*/, TInt DEBUGLOG_ARG(aError) )
+ {
+ LOGFMT(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipAddingFailed: In and out, aError:%d", aError);
+ }
+
+void CVeiAddQueue::NotifyAudioClipRemoved(CVedMovie& /*aMovie*/, TInt /*aIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipRemoved: In and out");
+ }
+
+void CVeiAddQueue::NotifyAudioClipIndicesChanged(CVedMovie& /*aMovie*/, TInt /*aOldIndex*/,
+ TInt /*aNewIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipIndicesChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyAudioClipTimingsChanged(CVedMovie& /*aMovie*/,
+ TInt /*aIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipTimingsChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyMovieQualityChanged(CVedMovie& /*aMovie*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyMovieQualityChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyMovieReseted(CVedMovie& /*aMovie*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyMovieReseted: In and out");
+ }
+
+void CVeiAddQueue::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyMovieOutputParametersChanged: In and out");
+ }
+
+void CVeiAddQueue::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipDynamicLevelMarkInserted: In and out");
+ }
+
+void CVeiAddQueue::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipDynamicLevelMarkRemoved: In and out");
+ }
+
+void CVeiAddQueue::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipDynamicLevelMarkInserted: In and out");
+ }
+
+void CVeiAddQueue::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipDynamicLevelMarkRemoved: In and out");
+ }
+
+// End of File