--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videditor/ManualVideoEditor/src/VeiEditVideoView.cpp Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,5569 @@
+/*
+* 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 <aknviewappui.h>
+#include <avkon.hrh>
+#include <manualvideoeditor.rsg>
+#include <aknappui.h>
+#include <akntitle.h>
+#include <caknfilenamepromptdialog.h>
+#include <aknnotewrappers.h>
+#include <aknlists.h>
+#include <aknquerydialog.h>
+#include <pathinfo.h>
+#include <eikmenub.h>
+
+#include <sendui.h>
+#include <caknfileselectiondialog.h>
+#include <stringloader.h>
+#include <eikprogi.h>
+#include <mgfetch.h>
+#include <aknnavilabel.h>
+#include <aknnavide.h>
+#include <aknselectionlist.h>
+#include <MdaAudioSampleEditor.h>
+#include <bautils.h>
+#include <sysutil.h>
+#include <aknwaitdialog.h>
+#include <utf.h>
+#include <akncolourselectiongrid.h>
+//#include <akncontext.h>
+#include <MGXFileManagerFactory.h>
+#include <CMGXFileManager.h>
+#include <audiopreference.h>
+#include <senduiconsts.h>
+#include <mmsconst.h>
+#include <CMessagedata.h>
+#include <e32property.h>
+#include <e32math.h>
+
+#include <VedVideoClipInfo.h>
+
+// User includes
+#include "veiapp.h"
+#include "veicutaudioview.h"
+#include "VeiEditVideoView.h"
+#include "VeiEditVideoContainer.h"
+#include "manualvideoeditor.hrh"
+#include "veieditvideolabelnavi.h"
+#include "veicutvideoview.h"
+#include "veiappui.h"
+#include "VideoEditorCommon.h"
+#include "VideoEditorUtils.h"
+#include "VeiTimeLabelNavi.h"
+#include "veiaddqueue.h"
+#include "veitempmaker.h"
+#include "videoeditorcommon.h"
+#include "VeiImageClipGenerator.h"
+#include "VeiTitleClipGenerator.h"
+#include "VeiTextDisplay.h"
+#include "VeiPopup.h"
+#include "VeiVideoEditorSettings.h"
+#include "VeiMGFetchVerifier.h"
+#include "VeiErrorUi.h"
+
+
+const TInt KTitleScreenMaxTextLength = 100; //2048;
+
+
+void CleanupRestoreOrientation( TAny* object )
+ {
+ LOG( KVideoEditorLogFile, "CleanupRestoreOrientation: in" );
+
+ CVeiEditVideoView* me = static_cast < CVeiEditVideoView* > ( object );
+ me->RestoreOrientation();
+
+ LOG( KVideoEditorLogFile, "CleanupRestoreOrientation: Out" );
+ }
+
+CVeiEditVideoView* CVeiEditVideoView::NewL( CVeiCutVideoView& aCutView,
+ CVeiCutAudioView& aCutAudioView,
+ CSendUi& aSendAppUi )
+ {
+ CVeiEditVideoView* self = CVeiEditVideoView::NewLC( aCutView, aCutAudioView, aSendAppUi );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+CVeiEditVideoView* CVeiEditVideoView::NewLC( CVeiCutVideoView& aCutView,
+ CVeiCutAudioView& aCutAudioView,
+ CSendUi& aSendAppUi )
+ {
+ CVeiEditVideoView* self = new ( ELeave ) CVeiEditVideoView( aCutView, aCutAudioView, aSendAppUi );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+CVeiEditVideoView::CVeiEditVideoView( CVeiCutVideoView& aCutView,
+ CVeiCutAudioView& aCutAudioView,
+ CSendUi& aSendAppUi )
+ : iCutView( aCutView ),
+ iCutAudioView( aCutAudioView ),
+ iSendAppUi( aSendAppUi ),
+ iOriginalAudioStartPoint( -1 ),
+ iOriginalAudioDuration( -1 ),
+ iMemoryCardChecked(EFalse),
+ iOriginalOrientation( CAknAppUiBase::EAppUiOrientationAutomatic )
+ {
+ iOriginalVideoClipIndex = - 1;
+ iMovieSavedFlag = ETrue;
+ SetNewTempFileNeeded( EFalse );
+ iMovieFirstAddFlag = ETrue;
+ iWaitMode = ENotWaiting;
+ }
+
+void CVeiEditVideoView::ConstructL()
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::ConstructL: in" );
+
+ BaseConstructL( R_VEI_EDIT_VIDEO_VIEW );
+
+ CEikStatusPane* sp = StatusPane();
+ iNaviPane = ( CAknNavigationControlContainer* ) sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) );
+
+ /** General navilabel(mms state, movie size, movie time).
+ Is visible always except when in moving state */
+ iEditLabel = CreateEditNaviLabelL();
+
+
+ /** Navilabel when previewing video in small preview */
+ iPreviewLabel = CreatePreviewNaviLabelL();
+
+ /** Navipane updating timer when editor is on small preview - mode */
+ iPreviewUpdatePeriodic = CPeriodic::NewL( CActive::EPriorityLow );
+
+ /* volume bars are showed when volume is changed in small preview */
+ // iVolumeHider = CPeriodic::NewL( CActive::EPriorityLow );
+
+ iVolumeNavi = iNaviPane->CreateVolumeIndicatorL(
+ R_AVKON_NAVI_PANE_VOLUME_INDICATOR );
+
+ /** Navilabel when audio or video clip is in moving state */
+ iMoveLabel = CreateMoveNaviLabelL();
+
+ iTempMaker = CVeiTempMaker::NewL();
+
+ iErrorUI = CVeiErrorUI::NewL( *iCoeEnv );
+
+ iMovie = CVedMovie::NewL( NULL );
+ iMovie->RegisterMovieObserverL( this );
+
+ /** All media files are added to video/audio tracks through mediaqueue */
+ iMediaQueue = CVeiAddQueue::NewL( *this, * iMovie, * this );
+
+ iOriginalAudioDuration = TTimeIntervalMicroSeconds( - 1 );
+ /* Create recorder with max priority. */
+ iRecorder = CMdaAudioRecorderUtility::NewL( *this, NULL, EMdaPriorityMax,
+ TMdaPriorityPreference( KAudioPrefVideoRecording )
+ /*EMdaPriorityPreferenceQuality*/ );
+ iAudioRecordPeriodic = CPeriodic::NewL( CActive::EPriorityStandard );
+
+ /** Popup menus for video editor */
+ iPopup = CVeiPopup::NewL( *this );
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::ConstructL: out" );
+ }
+
+TUid CVeiEditVideoView::Id()const
+ {
+ return TUid::Uid( EVeiEditVideoView );
+ }
+
+CAknNavigationDecorator* CVeiEditVideoView::CreateMoveNaviLabelL()
+ {
+ CAknNaviLabel* movelabel = new( ELeave )CAknNaviLabel;
+ movelabel->SetNaviLabelType( CAknNaviLabel::ENavigationLabel );
+
+ CleanupStack::PushL( movelabel );
+
+ CAknNavigationDecorator* decoratedFolder = CAknNavigationDecorator::NewL(
+ iNaviPane, movelabel, CAknNavigationDecorator::ENotSpecified );
+
+ CleanupStack::Pop( movelabel );
+
+ CleanupStack::PushL( decoratedFolder );
+ decoratedFolder->SetContainerWindowL( *iNaviPane );
+ CleanupStack::Pop( decoratedFolder );
+ decoratedFolder->MakeScrollButtonVisible( ETrue );
+
+ return decoratedFolder;
+ }
+
+CAknNavigationDecorator* CVeiEditVideoView::CreatePreviewNaviLabelL()
+ {
+ CVeiTimeLabelNavi* timelabelnavi = CVeiTimeLabelNavi::NewLC();
+ CAknNavigationDecorator* decoratedFolder = CAknNavigationDecorator::NewL(
+ iNaviPane, timelabelnavi, CAknNavigationDecorator::ENotSpecified );
+ CleanupStack::Pop( timelabelnavi );
+
+ CleanupStack::PushL( decoratedFolder );
+ decoratedFolder->SetContainerWindowL( *iNaviPane );
+ CleanupStack::Pop( decoratedFolder );
+ decoratedFolder->MakeScrollButtonVisible( EFalse );
+
+ return decoratedFolder;
+ }
+
+/**
+ * Default navilabel. Shows MMS,Size and Time information.
+ */
+CAknNavigationDecorator* CVeiEditVideoView::CreateEditNaviLabelL()
+ {
+ CVeiEditVideoLabelNavi* editvideolabelnavi = CVeiEditVideoLabelNavi::NewLC();
+
+ editvideolabelnavi->SetState( CVeiEditVideoLabelNavi::EStateInitializing );
+
+ CAknNavigationDecorator* navidecorator = CAknNavigationDecorator::NewL(
+ iNaviPane, editvideolabelnavi, CAknNavigationDecorator::ENotSpecified );
+
+ CleanupStack::Pop( editvideolabelnavi );
+
+ CleanupStack::PushL( navidecorator );
+ navidecorator->SetContainerWindowL( *iNaviPane );
+ CleanupStack::Pop( navidecorator );
+ navidecorator->MakeScrollButtonVisible( EFalse );
+
+ return navidecorator;
+ }
+
+CVeiEditVideoView::~CVeiEditVideoView()
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: In" );
+
+ if ( iProgressNote )
+ {
+ delete iProgressNote;
+ iProgressNote = NULL;
+ }
+
+ if ( iPopup )
+ {
+ delete iPopup;
+ iPopup = NULL;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iContainer" );
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromStack( iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iMediaQueue" );
+ if ( iMediaQueue )
+ {
+ delete iMediaQueue;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iMovie" );
+ if ( iMovie )
+ {
+ iMovie->Reset();
+ //if application is closed from cut video view, observer is not
+ //registered.
+ if ( ( EProcessingMovieForCutting != iWaitMode ) &&
+ ( ECuttingAudio != iWaitMode ) )
+ {
+ iMovie->UnregisterMovieObserver( this );
+ }
+ delete iMovie;
+ iMovie = NULL;
+ }
+
+ if ( iAudioRecordPeriodic )
+ {
+ iAudioRecordPeriodic->Cancel();
+ delete iAudioRecordPeriodic;
+ }
+
+ if ( iPreviewUpdatePeriodic )
+ {
+ iPreviewUpdatePeriodic->Cancel();
+ delete iPreviewUpdatePeriodic;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iTempFile" );
+ if ( iTempFile )
+ {
+ TInt err = iEikonEnv->FsSession().Delete( *iTempFile );
+ if ( err )
+ {
+ // what to do when error occurs in destructor???
+ }
+ delete iTempFile;
+ iTempFile = NULL;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iSaveToFileName" );
+
+ if ( iSaveToFileName )
+ {
+ delete iSaveToFileName;
+ iSaveToFileName = NULL;
+ }
+
+ if ( iTempRecordedAudio )
+ {
+ TInt err = iEikonEnv->FsSession().Delete( *iTempRecordedAudio );
+ if ( err )
+ {
+ // what to do when error occurs in destructor???
+ }
+ delete iTempRecordedAudio;
+ iTempRecordedAudio = NULL;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iTempMaker" );
+
+ if ( iTempMaker )
+ {
+ delete iTempMaker;
+ iTempMaker = NULL;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iErrorUI" );
+ if ( iErrorUI )
+ {
+ delete iErrorUI;
+ iErrorUI = NULL;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iAudioClipInfo" );
+ delete iAudioClipInfo;
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iEditLabel" );
+ delete iEditLabel;
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iMoveLabel" );
+ delete iMoveLabel;
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iPreviewLabel" );
+ delete iPreviewLabel;
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iRecorder" );
+ if ( iRecorder )
+ {
+ delete iRecorder;
+ iRecorder = NULL;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iVolumeHider" );
+ if ( iVolumeHider )
+ {
+ iVolumeHider->Cancel();
+ delete iVolumeHider;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iVolumeNavi" );
+ delete iVolumeNavi;
+
+ delete iCallBack;
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: Out" );
+ }
+
+void CVeiEditVideoView::DialogDismissedL( TInt aButtonId )
+ {
+ LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: In, aButtonId:%d, iWaitMode:%d", aButtonId, iWaitMode );
+
+ IsEnoughFreeSpaceToSaveL();
+
+ if ( aButtonId != EAknSoftkeyDone )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: In, 2" );
+ CMdaAudioRecorderUtility::TState rState;
+ rState = CMdaAudioClipUtility::ENotReady;
+
+ if ( iRecorder )
+ {
+ rState = iRecorder->State();
+ }
+
+ if (( EOpeningAudioInfo == iWaitMode ) || ( CMdaAudioClipUtility::EOpen == rState ))
+ {
+ delete iAudioClipInfo;
+ iAudioClipInfo = NULL;
+ iWaitMode = EProcessingError;
+ iMovie->CancelProcessing();
+ }
+ else
+ {
+ iWaitMode = EProcessingError;
+ iMovie->CancelProcessing();
+ }
+ }
+ else if ( EProcessingMovieSend == iWaitMode )
+ {
+ //SendMovieL();
+ if ( !iCallBack )
+ {
+ TCallBack cb( CVeiEditVideoView::AsyncBackSend, this );
+ iCallBack = new ( ELeave ) CAsyncCallBack( cb, CActive::EPriorityStandard );
+ }
+ iCallBack->CallBack();
+ }
+ else if ( EProcessingMovieTrimMms == iWaitMode )
+ {
+ SetNewTempFileNeeded( EFalse );
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 3, EProcessingMovieTrimMms" );
+
+ RFs& fs = iEikonEnv->FsSession();
+ TEntry entry;
+ User::LeaveIfError( fs.Entry( *iTempFile, entry ));
+ TInt tempFileSize = entry.iSize / 1024;
+ TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi*, iEditLabel->DecoratedControl() )->GetMaxMmsSize();
+
+ LOGFMT2( KVideoEditorLogFile,
+ "CVeiEditVideoView::DialogDismissedL: 4, tempFileSize:%d, maxMmsSize:%d", tempFileSize, maxMmsSize );
+
+ if ( iMovie->IsMovieMMSCompatible())
+ {
+ if ( tempFileSize <= maxMmsSize )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 5, MMS SIZE OK -- SEND" );
+ iWaitMode = EProcessingMovieSend;
+ iGivenSendCommand = KSenduiMtmMmsUid; // MMS
+
+ //SendMovieL();
+ if ( !iCallBack )
+ {
+ TCallBack cb( CVeiEditVideoView::AsyncBackSend, this );
+ iCallBack = new( ELeave )CAsyncCallBack( cb, CActive::EPriorityStandard );
+ }
+ iCallBack->CallBack();
+ }
+ else
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 6, MMS SIZE FAILED - to TRIMM" );
+ TBuf8 < 255 > conv8Filename;
+ CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, *iTempFile );
+ iMovie->UnregisterMovieObserver( iContainer );
+ iMovie->UnregisterMovieObserver( this );
+
+ AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid(0), conv8Filename );
+ }
+ }
+ else
+ {
+ // if movie is not mms capable, trimming it does not help, instead its quality should be set
+ // trimming is made when other compatibility issues are fullfilled
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 7, MMS Compatible FAILED - to TRIMM" );
+ TBuf8 < KMaxFileName > conv8Filename;
+ CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, *iTempFile );
+
+ iMovie->UnregisterMovieObserver( iContainer );
+ iMovie->UnregisterMovieObserver( this );
+
+ AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid( 0 ), conv8Filename );
+ }
+ iMovie->SetQuality( iBackupSaveQuality );
+ return ;
+ }
+ else if (( EProcessingMovieSave == iWaitMode ) ||
+ ( EProcessingMovieSaveThenQuit == iWaitMode ))
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 8, EProcessingMovieSave|EProcessingMovieSaveThenQuit" );
+ RFs& fs = iEikonEnv->FsSession();
+
+ CFileMan* fileman = CFileMan::NewL( fs );
+ CleanupStack::PushL( fileman );
+
+ TInt moveErr( KErrNone );
+
+ if ( iTempFile->Left( 1 ) == iSaveToFileName->Left( 1 ))
+ {
+ moveErr = fileman->Rename( *iTempFile, * iSaveToFileName );
+ LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 9, rename %S to %S", iTempFile, iSaveToFileName );
+ }
+ else
+ {
+ moveErr = fileman->Move( *iTempFile, * iSaveToFileName );
+ LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 10, moved %S to %S", iTempFile, iSaveToFileName );
+ }
+ CleanupStack::PopAndDestroy( fileman );
+
+ delete iTempFile;
+ iTempFile = NULL;
+
+ if ( moveErr )
+ {
+ ShowGlobalErrorNote( moveErr );
+ UpdateEditNaviLabel();
+ iWaitMode = ENotWaiting;
+ return ;
+ }
+
+ iMovieSavedFlag = ETrue;
+
+ if ( EProcessingMovieSaveThenQuit == iWaitMode )
+ {
+ iMovie->Reset();
+ iMovieFirstAddFlag = ETrue; // True for the next edit process.
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 11" );
+ UpdateMediaGalleryL();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 12, media gallery updated" );
+
+ if ( EProcessingMovieSaveThenQuit == iWaitMode )
+ {
+ if ( !iCallBack )
+ {
+ TCallBack cb( CVeiEditVideoView::AsyncBackSaveThenExitL, this );
+ iCallBack = new( ELeave )CAsyncCallBack( cb, CActive::EPriorityStandard );
+
+ }
+ iCallBack->CallBack();
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL Out" );
+ return ;
+ }
+ else if ( EProcessingMoviePreview == iWaitMode && ( iTempFile != NULL ))
+ {
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview );
+ iContainer->PlayVideoFileL( *iTempFile, iFullScreenSelected );
+ }
+ else
+ {
+ if ( EProcessingError == iWaitMode )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 13" );
+ if ( iTempFile )
+ {
+ RFs& fs = iEikonEnv->FsSession();
+
+ fs.Delete( *iTempFile );
+ delete iTempFile;
+ iTempFile = NULL;
+ SetNewTempFileNeeded( ETrue );
+ }
+
+ iWaitMode = ENotWaiting;
+ ShowGlobalErrorNote( iErrorNmb );
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 14" );
+ UpdateEditNaviLabel();
+ }
+
+ if ( EProcessingAudioError == iWaitMode )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 15" );
+ ShowErrorNote( R_VEI_ERRORNOTE_AUDIO_INSERTING_FAILED );
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 16" );
+ UpdateEditNaviLabel();
+ iWaitMode = ENotWaiting;
+ }
+
+ if ( iChangedFromMMCToPhoneMemory )
+ {
+ HBufC* noteText = StringLoader::LoadLC( R_VED_MMC_NOT_INSERTED,
+ iEikonEnv );
+ CAknInformationNote* informationNote = new( ELeave )
+ CAknInformationNote( ETrue );
+ informationNote->ExecuteLD( *noteText );
+
+ CleanupStack::PopAndDestroy( noteText );
+ }
+ }
+ if ( EProcessingMovieSend != iWaitMode )
+ {
+ iWaitMode = ENotWaiting;
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: Out" );
+ }
+
+
+TInt CVeiEditVideoView::AsyncBackSend( TAny* aThis )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSend" );
+
+ // In the asynchronous version, trap the rest of the functions
+ // to make sure that the caller's TRequestStatus is always
+ // completed, also in case of failures.
+ CVeiEditVideoView* view = static_cast < CVeiEditVideoView* > ( aThis );
+ TInt err = KErrNone;
+ TRAP( err, view->SendMovieL());
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSend 1, err:%d", err );
+
+ view->iWaitMode = ENotWaiting;
+ User::LeaveIfError( err );
+ return KErrNone;
+ }
+
+TInt CVeiEditVideoView::AsyncBackSaveThenExitL( TAny* aThis )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSaveThenExitL In" );
+
+ // In the asynchronous version, trap the rest of the functions
+ // to make sure that the caller's TRequestStatus is always
+ // completed, also in case of failures.
+
+ CVeiEditVideoView* view = static_cast < CVeiEditVideoView* > ( aThis );
+
+ view->AppUi()->HandleCommandL( EAknCmdExit );
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSaveThenExitL 1" );
+ return KErrNone;
+ }
+
+void CVeiEditVideoView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane*
+ aMenuPane )
+ {
+ if ( !iContainer || !iMovie )
+ {
+ return ;
+ }
+ if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_MENU && CVeiEditVideoContainer
+ ::EModeMixingAudio == iContainer->SelectionMode())
+ {
+ // Dim all the items and replace the with
+ // R_VEI_EDIT_VIDEO_VIEW_AUDIO_MIXING_MENU
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewInsert, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewMovie, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewSettings, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditStartTransition, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditMiddleTransition, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditEndTransition, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewHelp, ETrue );
+ aMenuPane->SetItemDimmed( EEikCmdExit, ETrue );
+
+ aMenuPane->AddMenuItemsL( R_VEI_EDIT_VIDEO_VIEW_AUDIO_MIXING_MENU );
+
+ return ;
+ }
+
+ if (( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_VIDEO_MENU ) ||
+ ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_VIDEO_SUBMENU ))
+ {
+ // @ : if muted, remove AdjustVolume, if video has no audio, remove AdjustVolume
+ //if (!iMovie->VideoClipEditedHasAudio(iContainer->CurrentIndex()))
+ if ( !( iMovie->VideoClipInfo( iContainer->CurrentIndex()))->HasAudio())
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoAdjustVolume );
+ }
+
+ if ( iMovie->VideoClipCount() < 2 )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoMove );
+ }
+
+ if ( iMovie->VideoClipIsMuteable( iContainer->CurrentIndex()) == EFalse
+ )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoMute );
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoUnmute );
+ }
+ else if ( iMovie->VideoClipIsMuted( iContainer->CurrentIndex()))
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoMute );
+ }
+ else
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoUnmute );
+ }
+ // remove "cut" if video duration < 1 sec. because engine/codec(s) do not handle them wholly at the moment
+ TTimeIntervalMicroSeconds duration = iMovie->VideoClipInfo(
+ iContainer->CurrentIndex())->Duration();
+ if ( duration.Int64() < KMinCutVideoLength )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoCutting );
+ }
+ }
+
+ if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_MOVIE_SUBMENU )
+ {
+ if ( STATIC_CAST( CVeiEditVideoLabelNavi* ,
+ iEditLabel->DecoratedControl())->IsMMSAvailable())
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewTrimForMms, ETrue );
+ }
+
+ /*TInt tempint;
+ if (aMenuPane->MenuItemExists(EVeiCmdEditVideoMixAudio, tempint))
+ {
+ if ((iMovie->VideoClipCount() > 0 &&
+ (iMovie->VideoClipEditedHasAudio(0) &&
+ iMovie->VideoClipEditedHasAudio(iMovie->VideoClipCount() - 1)))
+ && iMovie->AudioClipCount() > 0)*/
+ if ( MixingConditionsOk())
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoMixAudio, EFalse );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoMixAudio, ETrue );
+ }
+ //}
+ }
+
+ if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_MENU )
+ {
+ if ( iSendKey )
+ //Display send menu.
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewInsert, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewMovie, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewSettings, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditStartTransition, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditMiddleTransition, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditEndTransition, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewHelp, ETrue );
+ aMenuPane->SetItemDimmed( EEikCmdExit, ETrue );
+
+ ShowAndHandleSendMenuCommandsL();
+
+ iSendKey = EFalse;
+ return ;
+ }
+
+ if ( iMovie->VideoClipCount() == 0 )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue );
+ }
+
+
+ if ( iMovie->VideoClipCount() == 0 && iMovie->AudioClipCount() == 0 )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditStartTransition, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditMiddleTransition, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditEndTransition, ETrue );
+
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewMovie, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue );
+ return ;
+ }
+ else
+ {
+ TInt index = 0;
+
+ aMenuPane->ItemAndPos( EVeiCmdEditVideoViewHelp, index );
+ iSendAppUi.AddSendMenuItemL( *aMenuPane, index, EVeiCmdEditVideoViewSend );
+ }
+ /* Remove irrelevant "edit" menus. */
+
+ if ( iContainer->CursorLocation() != VideoEditor::ECursorOnClip )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
+ }
+ /* Checks if title or image */
+ if (( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) &&
+ ( iMovie->VideoClipCount() > 0 ) &&
+ ( iMovie->VideoClipInfo( iContainer->CurrentIndex())->Class()
+ == EVedVideoClipClassGenerated
+ ))
+ {
+ /* Now refine the menu dimming to specific generators. */
+ TUid generatorUid = iMovie->VideoClipInfo(
+ iContainer->CurrentIndex())->Generator()->Uid();
+
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
+ if ( generatorUid == KUidImageClipGenerator )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue )
+ ;
+ }
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
+ }
+
+
+ if ( iContainer->CurrentClipIsFile())
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
+ }
+
+ if ( iContainer->CursorLocation() != VideoEditor::ECursorOnTransition )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditStartTransition )
+ ;
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditEndTransition );
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditMiddleTransition
+ );
+ }
+ if (( iContainer->CursorLocation() != VideoEditor::ECursorOnAudio ) ||
+ ( iMovie->AudioClipCount() == 0 ))
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue );
+ }
+
+ /* Remove irrelevant transition effect menus. */
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
+ }
+
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnTransition )
+ {
+ if ( iContainer->CurrentIndex() == 0 )
+ {
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewEditEndTransition );
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewEditMiddleTransition );
+ }
+ else if ( iContainer->CurrentIndex() < iMovie->VideoClipCount())
+ {
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewEditStartTransition );
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewEditEndTransition );
+ }
+ else
+ {
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewEditStartTransition );
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewEditMiddleTransition );
+ }
+ }
+ }
+
+ if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_START_TRANSITION_SUBMENU )
+ {
+ switch ( iMovie->StartTransitionEffect())
+ {
+ case EVedStartTransitionEffectNone:
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewTransitionNone );
+ break;
+ case EVedStartTransitionEffectFadeFromBlack:
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewTransitionFadeFromBlack );
+ break;
+ case EVedStartTransitionEffectFadeFromWhite:
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewTransitionFadeFromWhite );
+ break;
+ default:
+ break;
+ }
+ }
+
+ if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_END_TRANSITION_SUBMENU )
+ {
+ switch ( iMovie->EndTransitionEffect())
+ {
+ case EVedEndTransitionEffectNone:
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewTransitionNone );
+ break;
+ case EVedEndTransitionEffectFadeToBlack:
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewTransitionFadeToBlack );
+ break;
+ case EVedEndTransitionEffectFadeToWhite:
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewTransitionFadeToWhite );
+ break;
+ default:
+ break;
+ }
+ }
+
+ if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_MIDDLE_TRANSITION_SUBMENU )
+ {
+ TInt currentindex = iContainer->CurrentIndex() - 1;
+ switch ( iMovie->MiddleTransitionEffect( currentindex ))
+ {
+ case EVedMiddleTransitionEffectNone:
+ aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewTransitionNone );
+ break;
+ case EVedMiddleTransitionEffectDipToBlack:
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewTransitionDipToBlack );
+ break;
+ case EVedMiddleTransitionEffectDipToWhite:
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewTransitionDipToWhite );
+ break;
+ case EVedMiddleTransitionEffectCrossfade:
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewTransitionCrossfade );
+ break;
+ case EVedMiddleTransitionEffectWipeLeftToRight:
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewTransitionWipeFromLeft );
+ break;
+ case EVedMiddleTransitionEffectWipeRightToLeft:
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewTransitionWipeFromRight );
+ break;
+ case EVedMiddleTransitionEffectWipeTopToBottom:
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewTransitionWipeFromTop );
+ break;
+ case EVedMiddleTransitionEffectWipeBottomToTop:
+ aMenuPane->DeleteMenuItem(
+ EVeiCmdEditVideoViewTransitionWipeFromBottom );
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+void CVeiEditVideoView::HandleCommandL( TInt aCommand )
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::HandleCommandL( %d ): In", aCommand );
+
+ // At the startup HandleCommandL may get called before iContainer
+ // has been constructed.
+ if ( !iContainer )
+ {
+ LOG( KVideoEditorLogFile, "\tiContainer == NULL" );
+ AppUi()->HandleCommandL( aCommand );
+ return ;
+ }
+
+ TInt index;
+ switch ( aCommand )
+ {
+ /* Cursor is on transition and up/key key is pressed*/
+ case EVeiCmdEditVideoViewTransitionKeyUp:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionKeyUp" );
+ BrowseStartTransition( ETrue );
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionKeyDown:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionKeyDown" );
+ BrowseStartTransition( EFalse );
+ break;
+ }
+ case EVeiCmdSendMovie:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdSendMovie" );
+ if (( iMovie->VideoClipCount() == 0 ) &&
+ ( iMovie->AudioClipCount() == 0 ))
+ {
+ iSendKey = EFalse;
+ }
+ else
+ {
+ MenuBar()->TryDisplayMenuBarL();
+ }
+ break;
+ }
+ case EAknSoftkeyDone:
+ {
+ LOG( KVideoEditorLogFile, "\tEAknSoftkeyDone" );
+
+ /*if (CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode())
+ {
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ Cba()->DrawDeferred();
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+ //iContainer->ArrowsControl();
+ break;
+ }
+ */
+
+ if ( CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode())
+
+ {
+
+ MixAudio();
+
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ Cba()->DrawDeferred();
+
+ VideoEditor::TCursorLocation cursorLocation = iContainer->CursorLocation();
+ if (( cursorLocation == VideoEditor::ECursorOnClip ) &&
+ ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeSlowMotion ))
+
+ {
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+ iContainer->ArrowsControl();
+ }
+ else
+ {
+ iOriginalAudioClipIndex = - 1;
+ iOriginalVideoClipIndex = - 1;
+ iOriginalAudioStartPoint = TTimeIntervalMicroSeconds( -1 );
+ iOriginalAudioDuration = TTimeIntervalMicroSeconds( -1 );
+
+
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+ }
+ SetEditorState( EEdit );
+ UpdateEditNaviLabel();
+
+ // Setting the cursor location resets the image in the video display box
+ iContainer->SetCursorLocation( cursorLocation );
+ }
+ break;
+ }
+
+ case EAknSoftkeyOk:
+ {
+ LOG( KVideoEditorLogFile, "\tEAknSoftkeyOk" );
+
+ if ( CVeiEditVideoContainer::EModeAdjustVolume == iContainer->SelectionMode())
+
+ {
+ AdjustVolumeL();
+ SetEditorState( EEdit );
+ }
+
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ Cba()->DrawDeferred();
+
+ if (( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) &&
+ ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeSlowMotion ))
+
+ {
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+ iContainer->ArrowsControl();
+ }
+ else
+ {
+ iOriginalAudioClipIndex = - 1;
+ iOriginalVideoClipIndex = - 1;
+ iOriginalAudioStartPoint = TTimeIntervalMicroSeconds( -1 );
+ iOriginalAudioDuration = TTimeIntervalMicroSeconds( -1 );
+
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+ }
+ UpdateEditNaviLabel();
+ break;
+ }
+ case EAknSoftkeyCancel:
+ case EVeiCmdEditVideoMixAudioCancel:
+ {
+ LOG( KVideoEditorLogFile, "\tEAknSoftkeyCancel||EVeiCmdEditVideoMixAudioCancel" );
+
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ Cba()->DrawDeferred();
+
+ SetEditorState( EEdit );
+
+ if ( CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode() ||
+ CVeiEditVideoContainer::EModeAdjustVolume == iContainer->SelectionMode())
+ {
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+ // Setting the cursor location resets the image in the video display box
+ iContainer->SetCursorLocation( iContainer->CursorLocation());
+ break;
+ }
+
+ if (( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) &&
+ ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeSlowMotion ))
+ {
+ iMovie->VideoClipSetSpeed( iContainer->CurrentIndex(), iOriginalVideoSpeed );
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+
+ iContainer->ArrowsControl();
+ }
+ else
+ {
+ if ( iContainer->CursorLocation() == VideoEditor
+ ::ECursorOnAudio )
+ {
+ if ( iOriginalAudioStartPoint >= TTimeIntervalMicroSeconds( 0 ))
+ {
+ iMovie->AudioClipSetStartTime( iContainer->CurrentIndex(), iOriginalAudioStartPoint );
+ iOriginalAudioStartPoint = TTimeIntervalMicroSeconds( -1 );
+ iMovie->AudioClipSetCutOutTime( iContainer->CurrentIndex(), iOriginalAudioDuration );
+ iOriginalAudioDuration = TTimeIntervalMicroSeconds( -1 );
+ }
+ else
+ {
+ index = iContainer->CurrentIndex();
+
+ iContainer->SetCurrentIndex( iOriginalAudioClipIndex );
+ iOriginalAudioClipIndex = - 1;
+ iOriginalAudioDuration = TTimeIntervalMicroSeconds( -1 );
+
+ iMovie->RemoveAudioClip( index );
+ }
+ }
+ else
+ {
+ if ( iContainer->SelectionMode() != CVeiEditVideoContainer::EModeDuration )
+ {
+ iMovie->VideoClipSetIndex( iContainer->CurrentIndex(), iOriginalVideoClipIndex );
+ iContainer->SetVideoCursorPosition( iOriginalVideoClipIndex );
+ iOriginalVideoClipIndex = - 1;
+ }
+ else
+ {
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+ if ( info->Class() == EVedVideoClipClassGenerated )
+ {
+ if ( info->Generator()->Uid() == KUidTitleClipGenerator )
+ {
+ CVeiTitleClipGenerator* generator =
+ STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());
+ generator->SetDuration( TTimeIntervalMicroSeconds(
+ iOriginalVideoCutOutTime.Int64() -
+ iOriginalVideoCutInTime.Int64()));
+ }
+ else if ( info->Generator()->Uid() == KUidImageClipGenerator )
+ {
+ CVeiImageClipGenerator* generator =
+ STATIC_CAST( CVeiImageClipGenerator* , info->Generator());
+ generator->SetDuration( TTimeIntervalMicroSeconds(
+ iOriginalVideoCutOutTime.Int64() -
+ iOriginalVideoCutInTime.Int64()));
+ }
+ }
+ }
+ }
+ }
+
+ if ( iContainer->SelectionMode() == CVeiEditVideoContainer
+ ::EModePreview )
+ {
+ iContainer->SetBlackScreen( EFalse );
+ iContainer->SetRect( AppUi()->ClientRect());
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+ iContainer->ArrowsControl();
+ }
+ else
+ {
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+ UpdateEditNaviLabel();
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewSend:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewSend" );
+ ShowAndHandleSendMenuCommandsL();
+ break;
+ }
+
+ case EVeiCmdEditVideoViewPreviewLarge:
+ case EVeiCmdEditVideoViewPreviewSmall:
+ {
+ LOG( KVideoEditorLogFile,
+ "\tEVeiCmdEditVideoViewPreviewLarge||EVeiCmdEditVideoViewPreviewSmall" );
+
+ if ( CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode())
+ {
+ MixAudio();
+ }
+
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ if ( aCommand == EVeiCmdEditVideoViewPreviewLarge )
+ {
+ iFullScreenSelected = ETrue;
+ }
+ else
+ {
+ iFullScreenSelected = EFalse;
+ }
+ iWaitMode = EProcessingMoviePreview;
+ StartTempFileProcessingL();
+ }
+ break;
+ }
+
+ /**
+ * Trim for MMS
+ */
+ case EVeiCmdEditVideoViewTrimForMms:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTrimForMms" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ iWaitMode = EProcessingMovieTrimMms;
+ StartTempFileProcessingL();
+ }
+ break;
+ }
+ /**
+ * Cut (Audio and Video)
+ */
+ case EVeiCmdEditVideoViewEditVideoCutting:
+ {
+ LOG( KVideoEditorLogFile,
+ "\tEVeiCmdEditVideoViewEditVideoCutting" );
+
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ // Cut video
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
+ {
+ __ASSERT_ALWAYS( iMovie->VideoClipCount() > 0,
+ User::Panic( _L( "VideoEditor" ), 34 ));
+
+ iCutVideoIndex = iContainer->CurrentIndex();
+ iWaitMode = EProcessingMovieForCutting;
+ iOriginalCutInTime = iMovie->VideoClipCutInTime( iCutVideoIndex );
+ iOriginalCutOutTime = iMovie->VideoClipCutOutTime( iCutVideoIndex );
+
+ iMovie->UnregisterMovieObserver( iContainer );
+ iMovie->UnregisterMovieObserver( this );
+
+ AppUi()->DeactivateActiveViewL();
+
+ // set file name & clip
+ iCutView.SetVideoClipAndIndex( *iMovie, iCutVideoIndex )
+ ;
+
+ // activate cut view
+ AppUi()->ActivateLocalViewL( iCutView.Id());
+ }
+ else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
+ // Cut audio
+ {
+ __ASSERT_ALWAYS( iMovie->AudioClipCount() > 0,
+ User::Panic( _L( "VideoEditor" ), 34 ));
+
+ iCutAudioIndex = iContainer->CurrentIndex();
+ iWaitMode = ECuttingAudio;
+ iOriginalAudioCutInTime = iMovie->AudioClipCutInTime( iCutAudioIndex );
+ iOriginalAudioCutOutTime = iMovie->AudioClipCutOutTime( iCutAudioIndex );
+
+ iMovie->UnregisterMovieObserver( iContainer );
+ iMovie->UnregisterMovieObserver( this );
+
+ AppUi()->DeactivateActiveViewL();
+
+ // set file name & clip
+ iCutAudioView.SetVideoClipAndIndex( *iMovie, iCutAudioIndex );
+ // activate cut view
+ AppUi()->ActivateLocalViewL( TUid::Uid( EVeiCutAudioView ));
+ }
+ }
+ break;
+ }
+ /**
+ * Selection (joystick).
+ */
+ case EVeiCmdEditVideoViewContainerShowMenu:
+ {
+ LOG( KVideoEditorLogFile,
+ "\tEVeiCmdEditVideoViewContainerShowMenu" );
+
+ //preview popup
+ if ( iEditorState != EEdit )
+ {
+ if ( iEditorState == CVeiEditVideoView::EQuickPreview )
+ {
+ StopNaviPaneUpdateL();
+ iContainer->PauseVideoL();
+ LOG( KVideoEditorLogFile,
+ "\tEVeiCmdEditVideoViewContainerShowMenu, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" );
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK
+ );
+ Cba()->DrawDeferred();
+ }
+ MenuBar()->SetMenuTitleResourceId( R_VEI_PREVIEW_BAR );
+ MenuBar()->TryDisplayMenuBarL();
+ MenuBar()->SetMenuTitleResourceId(
+ R_VEI_MENUBAR_EDIT_VIDEO_VIEW );
+ break;
+ }
+ switch ( iContainer->CursorLocation())
+ {
+ case VideoEditor::ECursorOnAudio:
+ {
+ iPopup->ShowEditAudioPopupList();
+ break;
+ }
+ case VideoEditor::ECursorOnClip:
+ {
+ if ( iMovie->VideoClipInfo( iContainer->CurrentIndex())->Class() == EVedVideoClipClassFile )
+ {
+ iPopup->ShowEditVideoPopupList();
+ }
+ else
+ {
+
+ TUid generatorUid = iMovie->VideoClipInfo(
+ iContainer->CurrentIndex())->Generator()->Uid();
+ if ( generatorUid == KUidImageClipGenerator )
+ // Image
+ {
+ iPopup->ShowEditImagePopupList();
+ }
+ else
+ // Text
+ {
+ iPopup->ShowEditTextPopupList();
+ }
+ }
+ break;
+ }
+ /**
+ * Cursor on video transition.
+ */
+ case VideoEditor::ECursorOnTransition:
+ {
+ if ( iContainer->CurrentIndex() == 0 )
+ {
+ iPopup->ShowStartTransitionPopupListL();
+ }
+ else if ( iContainer->CurrentIndex() < iMovie->VideoClipCount())
+ {
+ iPopup->ShowMiddleTransitionPopupListL();
+ }
+ else
+ {
+ iPopup->ShowEndTransitionPopupListL();
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewInsert:
+ case EVeiCmdEditVideoViewEditVideo:
+ case EVeiCmdEditVideoViewEditAudio:
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsert||EVeiCmdEditVideoViewEditVideo||EVeiCmdEditVideoViewEditAudio" );
+ break;
+ case EVeiCmdEditVideoViewTransitionNone:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionNone" );
+
+ if ( iContainer->CurrentIndex() == 0 )
+ {
+ iMovie->SetStartTransitionEffect( EVedStartTransitionEffectNone );
+ }
+ else if ( iContainer->CurrentIndex() < iMovie->VideoClipCount())
+ {
+ index = iContainer->CurrentIndex() - 1;
+ iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectNone, index );
+ }
+ else
+ {
+ iMovie->SetEndTransitionEffect( EVedEndTransitionEffectNone );
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionFadeFromBlack:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeFromBlack" );
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() == 0, User::Panic( _L( "VideoEditor" ), 34 ));
+ iMovie->SetStartTransitionEffect( EVedStartTransitionEffectFadeFromBlack );
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionFadeFromWhite:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeFromWhite" );
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() == 0, User::Panic( _L( "VideoEditor" ), 34 ));
+ iMovie->SetStartTransitionEffect( EVedStartTransitionEffectFadeFromWhite );
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionDipToBlack:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionDipToBlack" );
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
+ index = iContainer->CurrentIndex() - 1;
+ iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectDipToBlack, index );
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionDipToWhite:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionDipToWhite" );
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
+ index = iContainer->CurrentIndex() - 1;
+ iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectDipToWhite, index );
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionCrossfade:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionCrossfade" );
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
+ index = iContainer->CurrentIndex() - 1;
+ iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectCrossfade, index );
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionWipeFromLeft:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromLeft" );
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
+ index = iContainer->CurrentIndex() - 1;
+ iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeLeftToRight, index );
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionWipeFromRight:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromRight" );
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
+ index = iContainer->CurrentIndex() - 1;
+ iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeRightToLeft, index );
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionWipeFromTop:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromTop" );
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
+ index = iContainer->CurrentIndex() - 1;
+ iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeTopToBottom, index );
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionWipeFromBottom:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromBottom" );
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
+ index = iContainer->CurrentIndex() - 1;
+ iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeBottomToTop, index );
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionFadeToBlack:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeToBlack" );
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() == iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
+ iMovie->SetEndTransitionEffect( EVedEndTransitionEffectFadeToBlack );
+ break;
+ }
+ case EVeiCmdEditVideoViewTransitionFadeToWhite:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeToWhite" );
+ __ASSERT_ALWAYS( iContainer->CurrentIndex() == iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
+ iMovie->SetEndTransitionEffect( EVedEndTransitionEffectFadeToWhite );
+ break;
+ }
+ case EVeiCmdEditVideoViewEditStartTransition:
+ case EVeiCmdEditVideoViewEditMiddleTransition:
+ case EVeiCmdEditVideoViewEditEndTransition:
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditStartTransition||EVeiCmdEditVideoViewEditMiddleTransition||EVeiCmdEditVideoViewEditEndTransition" );
+ break;
+ case EVeiCmdEditVideoViewSaveTo:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewSaveTo" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ TInt err;
+ TRAP( err, SaveL( EProcessingMovieSave ));
+ if ( err != KErrNone )
+ {
+ ShowErrorNote( R_VEI_ERROR_NOTE );
+ }
+ }
+ break;
+ }
+ case EVeiCmdEditVideoMixAudio:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoMixAudio" );
+ SetEditorState( EMixAudio );
+ break;
+ }
+
+ case EVeiCmdEditVideoAdjustVolume:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoAdjustVolume" );
+ SetEditorState( EAdjustVolume );
+ break;
+ }
+
+ case EVeiCmdEditVideoViewInsertVideo:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertVideo" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ __ASSERT_ALWAYS( iMediaQueue, User::Panic( _L( "CVeiEditVideoView" ), 1 ));
+
+ if ( !iMediaQueue->ShowVideoClipDialogL( iContainer->CursorLocation(), iContainer->CurrentIndex()))
+ {
+ return ;
+ }
+ }
+ HandleScreenDeviceChangedL();
+ break;
+ }
+ case EVeiCmdEditVideoDuplicate:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoDuplicate" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ TEntry fileinfo;
+
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+
+ iWaitMode = EDuplicating;
+
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
+ {
+ CVedVideoClipInfo* previousInfo = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+
+ RFs& fs = iEikonEnv->FsSession();
+ fs.Entry( previousInfo->FileName(), fileinfo );
+
+ if ( IsEnoughFreeSpaceToSaveL( fileinfo.iSize ))
+ {
+ iMovie->InsertVideoClipL( previousInfo->FileName(), iContainer->CurrentIndex() + 1 );
+ }
+ }
+ else
+ {
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
+ {
+ CVedAudioClipInfo* currentInfo = iMovie->AudioClipInfo( iContainer->CurrentIndex());
+ TTimeIntervalMicroSeconds currentDuration = iMovie->AudioClipEditedDuration( iContainer->CurrentIndex());
+
+ TInt currentIndex = iContainer->CurrentIndex();
+
+ for ( TInt i = iMovie->AudioClipCount() - 1; i > currentIndex; i-- )
+ {
+ TTimeIntervalMicroSeconds oldStartTime = iMovie->AudioClipStartTime( i );
+ iMovie->AudioClipSetStartTime( i, TTimeIntervalMicroSeconds( oldStartTime.Int64() + currentDuration.Int64()));
+ }
+
+ TTimeIntervalMicroSeconds currentAudioClipEndTime = iMovie->AudioClipEndTime( currentIndex );
+ TTimeIntervalMicroSeconds currentCutInTime = iMovie->AudioClipCutInTime( currentIndex );
+ TTimeIntervalMicroSeconds currentCutOutTime = iMovie->AudioClipCutOutTime( currentIndex );
+ iMovie->AddAudioClipL( currentInfo->FileName(), currentAudioClipEndTime, currentCutInTime, currentCutOutTime );
+ }
+ }
+ }
+ break;
+ }
+
+ /*
+ * Insert TITLE text *
+ */
+ case EVeiCmdEditVideoViewInsertText:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertText" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ iPopup->ShowInsertTextPopupList();
+ }
+ break;
+ }
+
+ case EVeiCmdEditVideoViewInsertTextTitle:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextTitle" );
+
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ StoreOrientation();
+ CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
+ AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );
+
+ TSize res = TSize( iMovie->Resolution());
+
+ CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res,
+ EVeiTitleClipTransitionNone,
+ EVeiTitleClipHorizontalAlignmentCenter,
+ EVeiTitleClipVerticalAlignmentCenter );
+
+ HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_NAME, iEikonEnv );
+ generator->SetDescriptiveNameL( *descriptiveName );
+ CleanupStack::PopAndDestroy( descriptiveName );
+
+ generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone,
+ EVeiTitleClipHorizontalAlignmentCenter,
+ EVeiTitleClipVerticalAlignmentCenter );
+
+ /* Ask for text. */
+ HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
+ TPtr txtptr( text->Des());
+ CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
+ CleanupStack::PushL( textQuery );
+
+ textQuery->SetMaxLength( KTitleScreenMaxTextLength );
+ //textQuery->SetPredictiveTextInputPermitted(ETrue);
+ CleanupStack::Pop( textQuery );
+
+ if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
+ {
+ CleanupStack::PopAndDestroy( text );
+ CleanupStack::PopAndDestroy( generator );
+ CleanupStack::PopAndDestroy( this ); // restore appui orientation
+ break;
+ }
+
+ generator->SetTextL( *text );
+ CleanupStack::PopAndDestroy( text );
+
+ /* Insert generator into the movie. */
+ TInt err = 0;
+ index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
+ TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index ));
+
+ CleanupStack::Pop( generator );
+ User::LeaveIfError( err );
+
+ CleanupStack::PopAndDestroy( this ); // restore appui orientation
+ }
+ break;
+ }
+ /*
+ * Insert TITLE (fading) text *
+ */
+ case EVeiCmdEditVideoViewInsertTextTitleFading:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextTitleFading" );
+
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+
+ StoreOrientation();
+ CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
+ AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );
+
+ TSize res = TSize( iMovie->Resolution());
+ CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res,
+ EVeiTitleClipTransitionNone,
+ EVeiTitleClipHorizontalAlignmentCenter,
+ EVeiTitleClipVerticalAlignmentCenter );
+
+ HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_FADING_NAME, iEikonEnv );
+ generator->SetDescriptiveNameL( *descriptiveName );
+ CleanupStack::PopAndDestroy( descriptiveName );
+
+ generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade,
+ EVeiTitleClipHorizontalAlignmentCenter,
+ EVeiTitleClipVerticalAlignmentCenter );
+ /* Ask for text. */
+ HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
+ TPtr txtptr( text->Des());
+
+ CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
+ CleanupStack::PushL( textQuery );
+
+ textQuery->SetMaxLength( KTitleScreenMaxTextLength );
+ //textQuery->SetPredictiveTextInputPermitted(ETrue);
+ CleanupStack::Pop( textQuery );
+
+ if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
+ {
+ CleanupStack::PopAndDestroy( text );
+ CleanupStack::PopAndDestroy( generator );
+ CleanupStack::PopAndDestroy( this ); // restore appui orientation
+ break;
+ }
+
+ generator->SetTextL( *text );
+ CleanupStack::PopAndDestroy( text );
+
+ /* Insert generator into the movie. */
+ TInt err = 0;
+ index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
+ TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index ));
+ CleanupStack::Pop( generator );
+ User::LeaveIfError( err );
+
+ CleanupStack::PopAndDestroy( this ); // restore appui orientation
+ }
+ break;
+ }
+ /*
+ * Insert SUBTITLE text *
+ */
+ case EVeiCmdEditVideoViewInsertTextSubTitle:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextSubTitle" );
+
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ StoreOrientation();
+ CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
+ AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );
+
+ TSize res = TSize( iMovie->Resolution());
+ CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res,
+ EVeiTitleClipTransitionNone,
+ EVeiTitleClipHorizontalAlignmentCenter,
+ EVeiTitleClipVerticalAlignmentCenter );
+
+ HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_NAME, iEikonEnv );
+ generator->SetDescriptiveNameL( *descriptiveName );
+ CleanupStack::PopAndDestroy( descriptiveName );
+
+ generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone,
+ EVeiTitleClipHorizontalAlignmentLeft,
+ EVeiTitleClipVerticalAlignmentBottom );
+
+ /* Ask for text. */
+ HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
+ TPtr txtptr( text->Des());
+ CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
+ CleanupStack::PushL( textQuery );
+
+ textQuery->SetMaxLength( KTitleScreenMaxTextLength );
+ //textQuery->SetPredictiveTextInputPermitted(ETrue);
+ CleanupStack::Pop( textQuery );
+
+ if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
+ {
+ CleanupStack::PopAndDestroy( text );
+ CleanupStack::PopAndDestroy( generator );
+ CleanupStack::PopAndDestroy( this ); // restore appui orientation
+ break;
+ }
+
+ generator->SetTextL( *text );
+ CleanupStack::PopAndDestroy( text );
+
+ /* Insert generator into the movie. */
+ TInt err = 0;
+ index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
+ TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index ));
+ CleanupStack::Pop( generator );
+ User::LeaveIfError( err );
+
+ CleanupStack::PopAndDestroy( this ); // restore appui orientation
+ }
+ break;
+ }
+ /*
+ * Insert SUBTITLE (fading) text *
+ */
+ case EVeiCmdEditVideoViewInsertTextSubTitleFading:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextSubTitleFading" );
+
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ StoreOrientation();
+ CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
+ AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );
+
+ TSize res = TSize( iMovie->Resolution());
+ CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res,
+ EVeiTitleClipTransitionNone,
+ EVeiTitleClipHorizontalAlignmentCenter,
+ EVeiTitleClipVerticalAlignmentCenter );
+
+ HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_FADING_NAME, iEikonEnv );
+ generator->SetDescriptiveNameL( *descriptiveName );
+ CleanupStack::PopAndDestroy( descriptiveName );
+
+ generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade,
+ EVeiTitleClipHorizontalAlignmentLeft,
+ EVeiTitleClipVerticalAlignmentBottom );
+
+ /* Ask for text. */
+ HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
+ TPtr txtptr( text->Des());
+ CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
+ CleanupStack::PushL( textQuery );
+
+ textQuery->SetMaxLength( KTitleScreenMaxTextLength );
+ //textQuery->SetPredictiveTextInputPermitted(ETrue);
+ CleanupStack::Pop( textQuery );
+
+ if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
+ {
+ CleanupStack::PopAndDestroy( text );
+ CleanupStack::PopAndDestroy( generator );
+ CleanupStack::PopAndDestroy( this ); // restore appui orientation
+ break;
+ }
+
+ generator->SetTextL( *text );
+ CleanupStack::PopAndDestroy( text );
+
+ /* Insert generator into the movie. */
+ TInt err = 0;
+ index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
+ TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index ));
+ CleanupStack::Pop( generator );
+ User::LeaveIfError( err );
+
+ CleanupStack::PopAndDestroy( this ); // restore appui orientation
+ }
+ break;
+ }
+ /*
+ * Insert CREDIT text *
+ */
+ case EVeiCmdEditVideoViewInsertTextCredits:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextCredits" );
+
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ StoreOrientation();
+ CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
+ AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );
+
+ TSize res = TSize( iMovie->Resolution());
+ CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res,
+ EVeiTitleClipTransitionNone,
+ EVeiTitleClipHorizontalAlignmentCenter,
+ EVeiTitleClipVerticalAlignmentCenter );
+
+ HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_CREDITS_NAME, iEikonEnv );
+ generator->SetDescriptiveNameL( *descriptiveName );
+ CleanupStack::PopAndDestroy( descriptiveName );
+
+ generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionScrollBottomToTop,
+ EVeiTitleClipHorizontalAlignmentCenter,
+ EVeiTitleClipVerticalAlignmentCenter );
+
+ /* Ask for text. */
+ HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
+ TPtr txtptr( text->Des());
+ CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
+ CleanupStack::PushL( textQuery );
+
+ textQuery->SetMaxLength( KTitleScreenMaxTextLength );
+ //textQuery->SetPredictiveTextInputPermitted(ETrue);
+ CleanupStack::Pop( textQuery );
+
+ if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
+ {
+ CleanupStack::PopAndDestroy( text );
+ CleanupStack::PopAndDestroy( generator );
+ CleanupStack::PopAndDestroy( this );
+ break;
+ }
+ generator->SetTextL( *text );
+ CleanupStack::PopAndDestroy( text );
+
+ /* Insert generator into the movie. */
+ TInt err = 0;
+ index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
+ TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index ));
+ CleanupStack::Pop( generator );
+ User::LeaveIfError( err );
+
+ CleanupStack::PopAndDestroy( this ); // restore appui orientation
+ }
+ break;
+ }
+
+ /*
+ * Edit Text *
+ */
+ case EVeiCmdEditVideoViewEditTextMove:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextMove" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
+ Cba()->DrawDeferred();
+
+ index = iContainer->CurrentIndex();
+
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
+ {
+ iOriginalVideoClipIndex = index;
+ }
+ else
+ {
+ User::Panic( _L( "VideoEditor" ), 34 );
+ }
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMove );
+ UpdateEditNaviLabel();
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditTextChangeDuration:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextChangeDuration" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
+ Cba()->DrawDeferred();
+ index = iContainer->CurrentIndex();
+
+ iOriginalVideoStartPoint = iMovie->VideoClipStartTime( index );
+ iOriginalVideoCutInTime = iMovie->VideoClipCutInTime( index );
+ iOriginalVideoCutOutTime = iMovie->VideoClipCutOutTime( index );
+
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeDuration );
+ UpdateEditNaviLabel();
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditTextChangeText:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextChangeText" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ StoreOrientation();
+ CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
+ AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );
+
+ Cba()->DrawDeferred();
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+
+ CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());
+ HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
+ *text = (( CVeiTitleClipGenerator* )info->Generator())->Text();
+
+ TPtr txtptr( text->Des());
+ CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
+ CleanupStack::PushL( textQuery );
+
+ textQuery->SetMaxLength( KTitleScreenMaxTextLength );
+ //textQuery->SetPredictiveTextInputPermitted(ETrue);
+ CleanupStack::Pop( textQuery );
+
+ if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
+ {
+ CleanupStack::PopAndDestroy( text );
+ CleanupStack::PopAndDestroy( this ); // restore appui orientation
+ break;
+ }
+ generator->SetTextL( *text );
+ CleanupStack::PopAndDestroy( text );
+ UpdateEditNaviLabel();
+
+ CleanupStack::PopAndDestroy( this ); // restore appui orientation
+ }
+ break;
+ }
+
+ case EVeiCmdEditVideoViewEditTextSetTextColor:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextSetTextColor" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+ CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());
+
+ TRgb color = generator->TextColor();
+ if ( !iPopup->ShowColorSelectorL( color ))
+ {
+ break;
+ }
+ generator->SetTextColorL( color );
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditTextSetBackGround:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextSetBackGround" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+ CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());
+
+ // ask for color or image
+ TBool imageSelected;
+ TInt err = iPopup->ShowTitleScreenBackgroundSelectionPopupL( imageSelected );
+ if ( err != KErrNone )
+ {
+ break;
+ }
+
+ if ( imageSelected )
+ {
+ CDesCArrayFlat* selectedFiles = new( ELeave )CDesCArrayFlat( 1 );
+ CleanupStack::PushL( selectedFiles );
+
+ CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC();
+
+ if ( MGFetch::RunL( *selectedFiles, EImageFile, EFalse, mgFetchVerifier ) == EFalse )
+ {
+ /* User cancelled the dialog. */
+ CleanupStack::PopAndDestroy( mgFetchVerifier );
+ CleanupStack::PopAndDestroy( selectedFiles );
+ break;
+ }
+
+ CleanupStack::PopAndDestroy( mgFetchVerifier );
+
+ if ( !iWaitDialog )
+ {
+ iWaitDialog = new( ELeave )CAknWaitDialog( REINTERPRET_CAST( CEikDialog** , &iWaitDialog ), ETrue );
+ iWaitDialog->ExecuteLD( R_VEI_WAIT_DIALOG_INSERTING_IMAGE );
+ }
+
+
+ TRAP( err, generator->SetBackgroundImageL(( *selectedFiles )[0], * this ));
+
+ if ( err )
+ {
+ if ( iWaitDialog )
+ {
+ CancelWaitDialog();
+ }
+ ShowErrorNote( R_VEI_ERRORNOTE_IMAGE_INSERTING_FAILED );
+ }
+
+ CleanupStack::PopAndDestroy( selectedFiles );
+ }
+ else
+ {
+ TRgb color = generator->BackgroundColor();
+ if ( !iPopup->ShowColorSelectorL( color ))
+ {
+ break;
+ }
+ generator->SetBackgroundColorL( color );
+ }
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditTextStyle:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyle" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ /* Ask for style. */
+ iPopup->ShowTitleScreenStyleSelectionPopupL();
+ }
+ break;
+ }
+ /*
+ * Edit text, AddColorEffect *
+ */
+ case EVeiCmdEditVideoViewEditTextAddColorEffect:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextAddColorEffect" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ iPopup->ShowEffectSelectionPopupListL();
+ }
+ break;
+ }
+ /*
+ * Edit text style *
+ */
+ case EVeiCmdEditVideoViewEditTextStyleTitle:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleTitle" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+
+ CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());
+
+ HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_NAME, iEikonEnv );
+ generator->SetDescriptiveNameL( *descriptiveName );
+ CleanupStack::PopAndDestroy( descriptiveName );
+
+ generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone,
+ EVeiTitleClipHorizontalAlignmentCenter,
+ EVeiTitleClipVerticalAlignmentCenter );
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditTextStyleTitleFading:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleTitleFading" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+
+ CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());
+
+ HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_FADING_NAME, iEikonEnv );
+ generator->SetDescriptiveNameL( *descriptiveName );
+ CleanupStack::PopAndDestroy( descriptiveName );
+ generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade,
+ EVeiTitleClipHorizontalAlignmentCenter,
+ EVeiTitleClipVerticalAlignmentCenter );
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditTextStyleSubTitle:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleSubTitle" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+
+ CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());
+
+ HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_NAME, iEikonEnv );
+ generator->SetDescriptiveNameL( *descriptiveName );
+ CleanupStack::PopAndDestroy( descriptiveName );
+ generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone,
+ EVeiTitleClipHorizontalAlignmentLeft,
+ EVeiTitleClipVerticalAlignmentBottom );
+
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditTextStyleSubTitleFading:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleSubTitleFading" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+
+ CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());
+
+ HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_FADING_NAME, iEikonEnv );
+ generator->SetDescriptiveNameL( *descriptiveName );
+ CleanupStack::PopAndDestroy( descriptiveName );
+ generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade,
+ EVeiTitleClipHorizontalAlignmentLeft,
+ EVeiTitleClipVerticalAlignmentBottom );
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditTextStyleCredit:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleCredit" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+
+ CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());
+
+ HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_CREDITS_NAME, iEikonEnv );
+ generator->SetDescriptiveNameL( *descriptiveName );
+ CleanupStack::PopAndDestroy( descriptiveName );
+ generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionScrollBottomToTop,
+ EVeiTitleClipHorizontalAlignmentCenter,
+ EVeiTitleClipVerticalAlignmentCenter );
+ }
+ break;
+ }
+ /*
+ * Edit text, Duplicate *
+ */
+ case EVeiCmdEditVideoViewEditTextDuplicate:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextDuplicate" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ CVedVideoClipInfo* previousInfo = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+ CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , previousInfo->Generator());
+
+ iWaitMode = EDuplicating;
+
+ CVeiTitleClipGenerator* generator2 = CVeiTitleClipGenerator::NewLC( iMovie->Resolution(),
+ generator->Transition(),
+ generator->HorizontalAlignment(),
+ generator->VerticalAlignment());
+
+ generator2->SetDescriptiveNameL( generator->DescriptiveName());
+ generator2->SetTransitionAndAlignmentsL( generator->Transition(),
+ generator->HorizontalAlignment(),
+ generator->VerticalAlignment() );
+ generator2->SetTextL( generator->Text());
+ generator2->SetTextColorL( generator->TextColor());
+
+ generator2->SetBackgroundColorL( generator->BackgroundColor());
+ if ( generator->BackgroundImage())
+ {
+ generator2->SetBackgroundImageL( generator->BackgroundImage());
+ }
+
+ generator2->SetDuration( generator->Duration());
+
+ TInt err = 0;
+ index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
+ TRAP( err, iMovie->InsertVideoClipL( *generator2, ETrue, index ));
+
+ CleanupStack::Pop( generator2 );
+ User::LeaveIfError( err );
+ }
+ break;
+ }
+ /**
+ * Insert Image
+ */
+ case EVeiCmdEditVideoViewInsertImage:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertImage" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ TTimeIntervalMicroSeconds duration( 5000000 );
+
+ CDesCArrayFlat* selectedFiles = new( ELeave )CDesCArrayFlat( 1 );
+ CleanupStack::PushL( selectedFiles );
+
+ CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC();
+
+ if ( MGFetch::RunL( *selectedFiles, EImageFile, EFalse, mgFetchVerifier ) == EFalse )
+ {
+ /* User cancelled the dialog. */
+ CleanupStack::PopAndDestroy( mgFetchVerifier );
+ CleanupStack::PopAndDestroy( selectedFiles );
+ break;
+ }
+
+ CleanupStack::PopAndDestroy( mgFetchVerifier );
+
+ if ( !iWaitDialog )
+ {
+ iWaitDialog = new( ELeave )CAknWaitDialog( REINTERPRET_CAST( CEikDialog** , &iWaitDialog ), ETrue );
+ iWaitDialog->ExecuteLD( R_VEI_WAIT_DIALOG_INSERTING_IMAGE );
+ }
+
+ RFs& fs = iEikonEnv->FsSession();
+
+ TRAPD( err, iGenerator = CVeiImageClipGenerator::NewL(( *selectedFiles )[0],
+ TSize( KMaxVideoFrameResolutionX, KMaxVideoFrameResolutionY ),
+ duration,
+ KRgbBlack,
+ KVideoClipGenetatorDisplayMode,
+ fs,
+ *this ));
+ if ( err )
+ {
+ if ( iWaitDialog )
+ {
+ CancelWaitDialog();
+ }
+ ShowErrorNote( R_VEI_ERRORNOTE_IMAGE_INSERTING_FAILED );
+ }
+
+ CleanupStack::PopAndDestroy( selectedFiles );
+ }
+ break;
+ }
+
+ /**
+ * Edit Image *
+ */
+ case EVeiCmdEditVideoViewEditImageMove:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageMove" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
+ Cba()->DrawDeferred();
+
+ index = iContainer->CurrentIndex();
+
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
+ {
+ iOriginalVideoClipIndex = index;
+ }
+ else
+ {
+ User::Panic( _L( "VideoEditor" ), 34 );
+ }
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMove );
+ UpdateEditNaviLabel();
+ }
+ break;
+ }
+
+ case EVeiCmdEditVideoViewEditImageChangeDuration:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageChangeDuration" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
+ Cba()->DrawDeferred();
+ index = iContainer->CurrentIndex();
+
+ iOriginalVideoStartPoint = iMovie->VideoClipStartTime( index );
+ iOriginalVideoCutInTime = iMovie->VideoClipCutInTime( index );
+ iOriginalVideoCutOutTime = iMovie->VideoClipCutOutTime( index );
+
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeDuration );
+ UpdateEditNaviLabel();
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditImageBackGround:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageBackGround" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+ CVeiImageClipGenerator* generator = STATIC_CAST( CVeiImageClipGenerator* , info->Generator());
+
+ // ask for color
+ TRgb color = generator->BackgroundColor();
+ if ( !iPopup->ShowColorSelectorL( color ))
+ {
+ break;
+ }
+
+ generator->SetBackgroundColor( color );
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditImageAddColorEffect:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageAddColorEffect" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ iPopup->ShowEffectSelectionPopupListL();
+ }
+ break;
+ }
+ // * DUPLICATE Image *
+ case EVeiCmdEditVideoViewEditImageDuplicate:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageDuplicate" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ CVedVideoClipInfo* previousInfo = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+ CVeiImageClipGenerator* generator = STATIC_CAST( CVeiImageClipGenerator* , previousInfo->Generator());
+
+ RFs& fs = iEikonEnv->FsSession();
+
+ iWaitMode = EDuplicating;
+
+ iGenerator = CVeiImageClipGenerator::NewL( generator->ImageFilename(),
+ TSize( KMaxVideoFrameResolutionX, KMaxVideoFrameResolutionY ),
+ previousInfo->Duration(),
+ generator->BackgroundColor(),
+ KVideoClipGenetatorDisplayMode,
+ fs,
+ *this );
+ }
+ break;
+ }
+
+ /**
+ * Insert -> Sound clip
+ */
+ case EVeiCmdEditVideoViewInsertAudio:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertAudio" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ if ( !iMediaQueue->ShowAudioClipDialogL())
+ {
+ break;
+ }
+ }
+ HandleScreenDeviceChangedL();
+ break;
+ }
+ /**
+ * Insert -> New sound clip
+ */
+ case EVeiCmdEditVideoViewInsertNewAudio:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertNewAudio" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ InsertNewAudio();
+ }
+ break;
+ }
+
+ case EVeiCmdEditVideoViewEditAudioSetDuration:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditAudioSetDuration" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
+ Cba()->DrawDeferred();
+ index = iContainer->CurrentIndex();
+
+ iOriginalAudioStartPoint = iMovie->AudioClipStartTime( index );
+ iOriginalAudioDuration = iMovie->AudioClipEditedDuration( index );
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeDuration );
+ UpdateEditNaviLabel();
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewSettings:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewSettings" );
+ AppUi()->ActivateLocalViewL( TUid::Uid( EVeiSettingsView ));
+ break;
+ }
+ case EVeiCmdEditVideoViewRecord:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewRecord" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ /* Set the mode, CBAs and Navi label. */
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecording );
+
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
+ Cba()->DrawDeferred();
+ UpdateEditNaviLabel();
+
+ iRecordedAudioMaxDuration = TTimeIntervalMicroSeconds( - 1 );
+ for ( TInt i = 0; i < iMovie->AudioClipCount(); i++ )
+ {
+
+ if ( iMovie->AudioClipStartTime( i ) > iContainer->RecordedAudioStartTime())
+ {
+ TInt64 startTimeInt = iContainer->RecordedAudioStartTime().Int64();
+ TInt64 nextStartTimeInt = iMovie->AudioClipStartTime( i ).Int64();
+ iRecordedAudioMaxDuration = TTimeIntervalMicroSeconds( nextStartTimeInt - startTimeInt );
+ break;
+ }
+ }
+
+ iRecorder->RecordL();
+ const TUint delay = 1000 * 1000 / 10;
+
+ iAudioRecordPeriodic->Start( delay, delay, TCallBack( CVeiEditVideoView::UpdateAudioRecording, this ));
+
+ iContainer->SetRecordedAudioDuration( TTimeIntervalMicroSeconds( 0 ));
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewRecordCancel:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewRecordCancel" );
+ // cancel recording
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ iContainer->SetRecordedAudioStartTime( TTimeIntervalMicroSeconds( 0 ));
+ iContainer->SetCursorLocation( VideoEditor::ECursorOnAudio );
+ Cba()->DrawDeferred();
+
+ UpdateEditNaviLabel();
+ break;
+ }
+ /*
+ * Stop previewing
+ */
+ case EVeiCmdPlayViewStop:
+ case EVeiCmdCutVideoViewStop:
+ case EVeiCmdEditVideoViewRecordStop:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewStop||EVeiCmdCutVideoViewStop||EVeiCmdEditVideoViewRecordStop" );
+ if ( EditorState() == EQuickPreview )
+ {
+ iContainer->StopVideo( EFalse );
+ iContainer->SetFinishedStatus( ETrue );
+ StopNaviPaneUpdateL();
+ LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewStop||EVeiCmdCutVideoViewStop||EVeiCmdEditVideoViewRecordStop, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" );
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK );
+ Cba()->DrawDeferred();
+ break;
+ }
+
+ // stop recording
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ Cba()->DrawDeferred();
+ UpdateEditNaviLabel();
+
+ iRecorder->Stop();
+ iAudioRecordPeriodic->Cancel();
+
+ if ( iAudioClipInfo )
+ {
+ delete iAudioClipInfo;
+ iAudioClipInfo = NULL;
+ }
+
+ iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue );
+
+ iProgressNote->SetCallback( this );
+ iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE );
+ HBufC* stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_INSERTING_AUDIO, iEikonEnv );
+ CleanupStack::PushL( stringholder );
+
+ iProgressNote->SetTextL( *stringholder );
+ CleanupStack::PopAndDestroy( this ); // stringholder
+
+ iProgressNote->GetProgressInfoL()->SetFinalValue( 100 );
+ iWaitMode = EOpeningAudioInfo;
+
+ iAudioClipInfo = CVedAudioClipInfo::NewL( *iTempRecordedAudio, *this );
+ break;
+ }
+ case EVeiCmdPlayViewPause:
+ case EVeiCmdEditVideoViewRecordPause:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewPause||EVeiCmdEditVideoViewRecordPause" );
+ if ( EditorState() == EQuickPreview )
+ {
+ iContainer->PauseVideoL();
+ StopNaviPaneUpdateL();
+
+ LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewPause||EVeiCmdEditVideoViewRecordPause, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" );
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK );
+ Cba()->DrawDeferred();
+ }
+ else
+ {
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
+ Cba()->DrawDeferred();
+
+ // Pause recording
+ // Cba is set to CONTINUE_STOP in DoUpdateAudioRecording()
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecordingPaused );
+ iRecorder->Stop();
+ UpdateEditNaviLabel();
+ }
+ break;
+ }
+ /*
+ * Preview continue:
+ */
+ case EVeiCmdCutVideoViewPlay:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdCutVideoViewPlay" );
+
+ if ( !iUpdateTemp && !iTempFile && 1 == iMovie->VideoClipCount() )
+ {
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview );
+ iContainer->PlayVideo( iMovie->VideoClipInfo( 0 )->DescriptiveName(), iFullScreenSelected );
+ }
+ else
+ {
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview );
+ iContainer->PlayVideo( *iTempFile, iFullScreenSelected );
+ }
+
+ // @: think should this be put under condition play was started
+ // (actually play starts when "loadingComplete" event comes to NotifyVideoDisplayEvent
+ //StartNaviPaneUpdateL();
+ break;
+ }
+
+ case EVeiCmdCutVideoTakeSnapshot:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdCutVideoTakeSnapshot" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ iContainer->TakeSnapshotL();
+ }
+ break;
+ }
+
+ case EVeiCmdCutVideoViewContinue:
+ case EVeiCmdEditVideoViewContinue:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdCutVideoViewContinue||EVeiCmdEditVideoViewContinue" );
+ if (( iRecorder->State() != CMdaAudioClipUtility::ERecording ) &&
+ ( iRecorder->State() != CMdaAudioClipUtility::ENotReady ) )
+ {
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
+ Cba()->DrawDeferred();
+
+ // Continue recording
+ iRecorder->RecordL();
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecording );
+
+ UpdateEditNaviLabel();
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditAudioMove:
+ case EVeiCmdEditVideoViewEditVideoMove:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditAudioMove||EVeiCmdEditVideoViewEditVideoMove" );
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
+ Cba()->DrawDeferred();
+
+ index = iContainer->CurrentIndex();
+
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
+ {
+ iOriginalAudioStartPoint = iMovie->AudioClipStartTime( index );
+ iOriginalAudioDuration = iMovie->AudioClipEditedDuration( index );
+ }
+ else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
+ {
+ iOriginalVideoClipIndex = index;
+ }
+ else
+ {
+ User::Panic( _L( "VideoEditor" ), 34 );
+ }
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMove );
+ UpdateEditNaviLabel();
+ break;
+ }
+ /**
+ * Edit video clip -> Add colour effect
+ */
+ case EVeiCmdEditVideoViewEditVideoColorEffect:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoColorEffect" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ iPopup->ShowEffectSelectionPopupListL();
+ }
+ break;
+ }
+ /**
+ * Use slow motion
+ */
+ case EVeiCmdEditVideoViewEditVideoSlowMotion:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoSlowMotion" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
+ Cba()->DrawDeferred();
+ iOriginalVideoSpeed = iMovie->VideoClipSpeed( iContainer->CurrentIndex());
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeSlowMotion );
+ iContainer->SetSlowMotionStartValueL( iOriginalVideoSpeed );
+ iContainer->ArrowsControl();
+ }
+ break;
+ }
+ case EVeiCmdEditVideoViewEditVideoMute:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoMute" );
+ SetNewTempFileNeeded( ETrue );
+ iMovie->VideoClipSetMuted( iContainer->CurrentIndex(), ETrue );
+ break;
+ }
+ case EVeiCmdEditVideoViewEditVideoUnmute:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoUnmute" );
+ SetNewTempFileNeeded( ETrue );
+ iMovie->VideoClipSetMuted( iContainer->CurrentIndex(), EFalse );
+ break;
+ }
+ case EVeiCmdEditVideoViewEditAudioRemove:
+ case EVeiCmdEditVideoViewEditVideoRemove:
+ case EVeiCmdEditVideoViewEditTextRemove:
+ case EVeiCmdEditVideoViewEditImageRemove:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditAudioRemove||EVeiCmdEditVideoViewEditVideoRemove||EVeiCmdEditVideoViewEditTextRemove||EVeiCmdEditVideoViewEditImageRemove" );
+ RemoveCurrentClipL();
+ break;
+ }
+ /**
+ * Back
+ */
+ case EAknSoftkeyBack:
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleCommandL: EAknSoftkeyBack" );
+ LOGFMT( KVideoEditorLogFile, "\tiFullScreenSelected: %d", iFullScreenSelected );
+
+ if ( EditorState() != EEdit || iFullScreenSelected )
+ {
+ iFullScreenSelected = EFalse;
+ iContainer->StopVideo( ETrue );
+ StopNaviPaneUpdateL();
+ UpdateEditNaviLabel();
+ break;
+ }
+ else if ( !iMovieSavedFlag && ( iMovie->VideoClipCount() > 0 || iMovie->AudioClipCount() > 0 ))
+ {
+ HBufC* saveConfirmationString; // String holding the text shown in dialog.
+ CAknQueryDialog* dlg; // Save confirmation dialog.
+ TInt saveEditedVideo; // Query result.
+
+ saveConfirmationString = StringLoader::LoadLC( R_VEI_CONFIRM_EXIT_SAVE, iEikonEnv );
+ dlg = new( ELeave )CAknQueryDialog( *saveConfirmationString, CAknQueryDialog::ENoTone );
+ saveEditedVideo = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY );
+
+ if ( !saveEditedVideo )
+ // Do not save.
+ {
+ // Activate videos view.
+ AppUi()->HandleCommandL( EAknCmdExit );
+
+ iMovie->Reset();
+
+ iMovieSavedFlag = ETrue; // Movie is saved.
+ iMovieFirstAddFlag = ETrue; // True for the next edit process.
+
+ AppUi()->HandleCommandL( aCommand );
+ }
+ else
+ {
+ if ( SaveL( EProcessingMovieSaveThenQuit ))
+ // Quit after saving?
+ {
+ //iMovieSavedFlag = ETrue; // Movie is saved.
+ iMovieFirstAddFlag = ETrue; // True for the next edit process.
+ iWaitMode = EProcessingMovieSaveThenQuit;
+ }
+ }
+
+ CleanupStack::PopAndDestroy( saveConfirmationString );
+ }
+ // No changes to clip(s) or no clip(s) in time line.
+ else
+ {
+ // Remove all clips from edit view (for future use).
+ iMovie->Reset();
+
+ iMovieSavedFlag = ETrue; // Movie is saved.
+ iMovieFirstAddFlag = ETrue; // True for the next edit process.
+ AppUi()->HandleCommandL( aCommand );
+ }
+
+ break;
+ }
+ //
+ // Options->Help
+ //
+ case EVeiCmdEditVideoViewHelp:
+ {
+ LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewHelp" );
+ // CS Help launching is handled in Video Editor's AppUi.
+ AppUi()->HandleCommandL( EVeiCmdEditVideoViewHelp );
+ break;
+ }
+ /**
+ * Exit
+ */
+ case EEikCmdExit:
+ {
+ LOG( KVideoEditorLogFile, "\tEEikCmdExit" );
+ // Edited movie is not saved yet and there are video or audio clip(s) at the time line.
+ if ( !iMovieSavedFlag && ( iMovie->VideoClipCount() > 0 || iMovie->AudioClipCount() > 0 ))
+ {
+ HBufC* stringholder; // String holding the text shown in dialog.
+
+ CAknQueryDialog* dlg; // Save confirmation dialog.
+ TInt queryok; // Query result.
+
+ stringholder = StringLoader::LoadLC( R_VEI_CONFIRM_EXIT_SAVE, iEikonEnv );
+
+ dlg = new( ELeave )CAknQueryDialog( *stringholder, CAknQueryDialog::ENoTone );
+ queryok = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY );
+
+ if ( !queryok )
+ {
+ iMovie->Reset();
+ AppUi()->HandleCommandL( aCommand );
+ }
+ else
+ {
+ SaveL( EProcessingMovieSaveThenQuit );
+ iWaitMode = EProcessingMovieSaveThenQuit;
+ }
+
+ CleanupStack::PopAndDestroy( stringholder );
+ }
+ else
+ // No changes to clip(s) or no clip(s) in time line.
+ {
+ iMovie->Reset(); // Remove all clips from edit view.
+ AppUi()->HandleCommandL( aCommand ); // Let appUi handle the exit.
+ }
+ break;
+ }
+ default:
+ {
+ LOG( KVideoEditorLogFile, "\tdefault" );
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleCommandL: Out" );
+ }
+
+void CVeiEditVideoView::HandleResourceChange( TInt aType )
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::HandleResourceChange() In, aType:%d", aType );
+
+ if ( KAknsMessageSkinChange == aType )
+ {
+ // Handle skin change in the navi label controls - they do not receive
+ // it automatically since they are not in the control stack
+ iPreviewLabel->DecoratedControl()->HandleResourceChange( aType );
+ iEditLabel->DecoratedControl()->HandleResourceChange( aType );
+ iVolumeNavi->DecoratedControl()->HandleResourceChange( aType );
+ iMoveLabel->DecoratedControl()->HandleResourceChange( aType );
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleResourceChange() Out" );
+ }
+
+void CVeiEditVideoView::SetEditorState( TEditorState aState )
+ {
+ LOGFMT3( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState: in, aState:%d, iEditorState:%d, iFullScreenSelected:%d", aState, iEditorState, iFullScreenSelected );
+
+ CAknTitlePane* titlePane;
+ CEikStatusPane* statusPane;
+ TResourceReader reader1;
+
+ iEditorState = aState;
+
+ switch ( aState )
+ {
+ case EPreview:
+ /*
+ if ( iFullScreenSelected )
+ {
+ // @: this need more elaborating
+ // problem is: after large preview signal and battery pane are black in some phone models
+ //statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane();
+ //statusPane ->MakeVisible( EFalse );
+ Cba()->MakeVisible( EFalse );
+ Cba()->DrawDeferred();
+ }
+ else
+ {
+ iEditorState = EQuickPreview;
+ statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane();
+
+ titlePane = (CAknTitlePane*) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) );
+ iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_PREVIEW_VIEW_TITLE_NAME );
+ titlePane->SetFromResourceL( reader1 );
+ CleanupStack::PopAndDestroy(); //reader1
+
+ LOG(KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 1, setting R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK");
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK );
+ Cba()->DrawDeferred();
+ }
+ */
+ Cba()->MakeVisible( EFalse );
+ Cba()->DrawDeferred();
+ break;
+ case EQuickPreview:
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState: 2, iContainer->PreviewState():%d", iContainer->PreviewState());
+ statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane();
+
+ titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ));
+ iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_PREVIEW_VIEW_TITLE_NAME );
+ titlePane->SetFromResourceL( reader1 );
+ CleanupStack::PopAndDestroy(); //reader1
+
+ if (( iContainer->PreviewState() == CVeiEditVideoContainer::EStatePaused ) ||
+ ( iContainer->PreviewState() == CVeiEditVideoContainer::EStateStopped ))
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 3, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" );
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK );
+ }
+ else if (( iContainer->PreviewState() == CVeiEditVideoContainer::EStateOpening ) ||
+ ( iContainer->PreviewState() == CVeiEditVideoContainer::EStateGettingFrame ) ||
+ ( iContainer->PreviewState() == CVeiEditVideoContainer::EStateBuffering ))
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 4, setting R_AVKON_SOFTKEYS_EMPTY" );
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
+ }
+ else
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 5, setting R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK" );
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK );
+ }
+ Cba()->DrawDeferred();
+ break;
+ }
+ case EEdit:
+ iContainer->SetRect( AppUi()->ClientRect());
+ statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane();
+ // @: this needs more elaborating
+ //statusPane ->MakeVisible( ETrue );
+
+ titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ));
+ iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_EDIT_VIDEO_VIEW_TITLE_NAME );
+ titlePane->SetFromResourceL( reader1 );
+ CleanupStack::PopAndDestroy(); //reader1
+
+ Cba()->MakeVisible( ETrue );
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ Cba()->DrawDeferred();
+ break;
+
+ case EMixAudio:
+ iContainer->SetRect( AppUi()->ClientRect());
+ statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane();
+
+ titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ));
+ iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_AUDIO_MIX_VIEW_TITLE_NAME );
+ titlePane->SetFromResourceL( reader1 );
+ CleanupStack::PopAndDestroy(); //reader1
+
+ Cba()->MakeVisible( ETrue );
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_DONE );
+ Cba()->DrawDeferred();
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMixingAudio );
+
+ break;
+
+ case EAdjustVolume:
+ iContainer->SetRect( AppUi()->ClientRect());
+ statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane();
+
+ titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ));
+ iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_ADJUST_VOLUME_VIEW_TITLE_NAME );
+ titlePane->SetFromResourceL( reader1 );
+ CleanupStack::PopAndDestroy(); //reader1
+
+ Cba()->MakeVisible( ETrue );
+ //Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_DONE);
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
+ Cba()->DrawDeferred();
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeAdjustVolume );
+
+ break;
+
+
+ default:
+ {
+ break;
+ }
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState: Out" );
+ }
+
+
+void CVeiEditVideoView::SendMovieL()
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() -- SENDING" );
+
+ TEntry fileinfo;
+
+ RFs& fs = iEikonEnv->FsSession();
+ // Rename movie from xxxx.$$$ to defaultfilename from settingsview.
+ // looks better in attachment list..
+
+ // Get default movie name from settings view
+
+ TPtr temppeet = iTempFile->Des();
+
+ TParse parse;
+ parse.Set( iMovieSaveSettings.DefaultVideoName(), &temppeet, NULL );
+
+ TFileName orgPathAndName = parse.FullName();
+
+ TVedVideoFormat movieQuality = iMovie->Format();
+ if ( movieQuality == EVedVideoFormatMP4 )
+ {
+ orgPathAndName.Replace( orgPathAndName.Length() - 4, 4, KExtMp4 );
+ }
+ else
+ {
+ orgPathAndName.Replace( orgPathAndName.Length() - 4, 4, KExt3gp );
+ }
+
+ fs.Replace( *iTempFile, orgPathAndName );
+ iTempFile->Des() = orgPathAndName;
+
+ fs.Entry( *iTempFile, fileinfo );
+
+ DEBUGLOG_ARG( TInt tempFileSize = fileinfo.iSize / 1024 );
+ LOGFMT3( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() 1, iWaitMode:%d, tempFileSize:%d, ValidateServiceL:%d", iWaitMode, tempFileSize, iSendAppUi.ValidateServiceL( iGivenSendCommand, TSendingCapabilities( 0, tempFileSize, TSendingCapabilities::ESupportsAttachments )));
+
+ if ( EProcessingMovieSend == iWaitMode
+ /*&& (iSendAppUi.ValidateServiceL(
+ iGivenSendCommand,
+ TSendingCapabilities( 0,
+ tempFileSize,
+ TSendingCapabilities::ESupportsAttachments ) ) ) */ )
+ {
+ RFs shareFServer;
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL: shareFServer connect." );
+
+ User::LeaveIfError( shareFServer.Connect());
+ shareFServer.ShareProtected();
+ CleanupClosePushL < RFs > ( shareFServer );
+
+ RFile openFileHandle;
+
+ TInt err = openFileHandle.Open( shareFServer, * iTempFile, EFileRead | EFileShareReadersOnly );
+ if ( KErrNone != err )
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL 2: Could not open file %S with EFileShareReadersOnly. Trying EFileShareAny", iTempFile );
+ User::LeaveIfError( openFileHandle.Open( shareFServer, * iTempFile, EFileRead | EFileShareAny ));
+ }
+
+ CMessageData* messageData = CMessageData::NewLC();
+ messageData->AppendAttachmentHandleL( openFileHandle );
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() 3" );
+
+ iSendAppUi.CreateAndSendMessageL( iGivenSendCommand, messageData, KNullUid, EFalse );
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() 4" );
+ CleanupStack::PopAndDestroy( messageData );
+
+ CleanupStack::PopAndDestroy( &shareFServer ); // shareFServer.Close();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL 5: shareFServer closed." );
+ }
+
+ DoUpdateEditNaviLabelL();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() Out" );
+ }
+
+
+void CVeiEditVideoView::StartTempFileProcessingL()
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL: In" );
+
+ RFs& fs = iEikonEnv->FsSession();
+
+ TBool fileExists( ETrue );
+ if ( iTempFile )
+ {
+ fileExists = BaflUtils::FileExists( fs, * iTempFile );
+ }
+
+ /* to save from unnecessary processing before preview
+ prerequisites:
+ -user selected preview
+ -no movie modifying actions taken by user before preview (iUpdateTemp is EFalse)
+ */
+ if ( EProcessingMoviePreview == iWaitMode && !iUpdateTemp && !iTempFile && 1 == iMovie->VideoClipCount())
+ {
+ if ( iFullScreenSelected )
+ {
+ iContainer->SetBlackScreen( ETrue );
+ iContainer->SetRect( AppUi()->ApplicationRect());
+ }
+
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview );
+ iContainer->PlayVideoFileL( iMovie->VideoClipInfo( 0 )->DescriptiveName(), iFullScreenSelected );
+ }
+ else if ( EProcessingMovieTrimMms == iWaitMode && !iUpdateTemp && !iTempFile && 1 == iMovie->VideoClipCount() && !FitsToMmsL())
+ {
+ /*
+ Read documentation of FitsToMmsL() in the header file
+ */
+ TBuf8 < KMaxFileName > conv8Filename;
+ CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, iMovie->VideoClipInfo( 0 )->DescriptiveName());
+ iMovie->UnregisterMovieObserver( iContainer );
+ iMovie->UnregisterMovieObserver( this );
+ AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid( 0 ), conv8Filename );
+ }
+ else if ( iUpdateTemp || !fileExists || ( !iTempFile ))
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 1, -- NEW TEMP" );
+
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
+ Cba()->DrawDeferred();
+ if ( iTempFile && fileExists )
+ {
+ User::LeaveIfError( fs.Delete( *iTempFile ));
+ delete iTempFile;
+ iTempFile = NULL;
+ }
+
+ if ( !IsEnoughFreeSpaceToSaveL()) // modifies iMemoryInUse
+ {
+ return ;
+ }
+
+ iTempFile = HBufC::NewL( KMaxFileName );
+ iTempMaker->GenerateTempFileName( *iTempFile, iMemoryInUse, iMovie->Format());
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 2, iTempFile:%S", iTempFile );
+
+ TVeiSettings movieSaveSettings;
+
+ STATIC_CAST( CVeiAppUi* , AppUi())->ReadSettingsL( movieSaveSettings );
+
+ TInt settingsSaveQuality = movieSaveSettings.SaveQuality();
+ CVedMovie::TVedMovieQuality saveQuality;
+
+ switch ( settingsSaveQuality )
+ {
+ case TVeiSettings::EMmsCompatible:
+ {
+ saveQuality = CVedMovie::EQualityMMSInteroperability;
+ break;
+ }
+ case TVeiSettings::EMedium:
+ {
+ saveQuality = CVedMovie::EQualityResolutionMedium;
+ break;
+ }
+ case TVeiSettings::EBest:
+ {
+ saveQuality = CVedMovie::EQualityResolutionHigh;
+ break;
+ }
+ case TVeiSettings::EAuto: default:
+ {
+ saveQuality = CVedMovie::EQualityAutomatic;
+ break;
+ }
+ }
+
+ iMovie->SetQuality( saveQuality );
+ iBackupSaveQuality = saveQuality;
+
+ if ( EProcessingMovieTrimMms == iWaitMode )
+ {
+ if ( saveQuality != CVedMovie::EQualityMMSInteroperability )
+ {
+ iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );
+ SetNewTempFileNeeded( ETrue );
+ }
+ else
+ {
+ SetNewTempFileNeeded( EFalse );
+ }
+ }
+
+ TInt err;
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 3, calling iMovie->Process(%S)", iTempFile );
+ TRAP( err, iMovie->ProcessL( *iTempFile, * this ));
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 4, err:%d", err );
+ if ( err )
+ {
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ Cba()->DrawDeferred();
+ ShowGlobalErrorNote( err );
+ }
+ }
+ else
+ /* use old temp file*/
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 5, -- OLD TEMP" );
+ if ( EProcessingMovieSend == iWaitMode )
+ {
+ SendMovieL();
+ }
+ else if ( EProcessingMovieTrimMms == iWaitMode )
+ {
+ if ( iMovie->IsMovieMMSCompatible())
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 6, MMS COMPATIBLE" );
+
+ TEntry entry;
+ User::LeaveIfError( fs.Entry( *iTempFile, entry ));
+ TInt tempFileSize = entry.iSize / 1024;
+ TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize();
+
+ if ( tempFileSize < maxMmsSize )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 7, -- MMS SIZE OK" );
+ iWaitMode = EProcessingMovieSend;
+ SendMovieL();
+ }
+ else
+ {
+ SetNewTempFileNeeded( EFalse );
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 8, -- TRIM MMS" );
+
+ TBuf8 < KMaxFileName > conv8Filename;
+ CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, * iTempFile );
+ iMovie->UnregisterMovieObserver( iContainer );
+ iMovie->UnregisterMovieObserver( this );
+ AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid( 0 ), conv8Filename );
+ }
+ }
+ else
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 9, -- NO MMS COMPATIBLE" );
+
+ TInt err;
+ if ( EProcessingMovieTrimMms == iWaitMode )
+ {
+ iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );
+ }
+
+ TRAP( err, iMovie->ProcessL( *iTempFile, * this ));
+
+ if ( err )
+ {
+ ShowGlobalErrorNote( err );
+ }
+ }
+ }
+ else if ( EProcessingMoviePreview == iWaitMode )
+ {
+ if ( iFullScreenSelected )
+ {
+ iContainer->SetBlackScreen( ETrue );
+ iContainer->SetRect( AppUi()->ApplicationRect());
+ }
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview );
+ iContainer->PlayVideoFileL( *iTempFile, iFullScreenSelected );
+ }
+ else if (( EProcessingMovieSave == iWaitMode ) || ( EProcessingMovieSaveThenQuit == iWaitMode ))
+ {
+ CFileMan* fileman = CFileMan::NewL( fs );
+ CleanupStack::PushL( fileman );
+
+ if ( iTempFile->Left( 1 ) == iSaveToFileName->Left( 1 ))
+ {
+ fileman->Rename( *iTempFile, * iSaveToFileName );
+ }
+ else
+ {
+ fileman->Move( *iTempFile, * iSaveToFileName );
+ }
+
+ CleanupStack::PopAndDestroy( fileman );
+
+ HBufC* stringholder = StringLoader::LoadL( R_VEI_NOTE_VIDEO_SAVED, iEikonEnv );
+ CleanupStack::PushL( stringholder );
+ iWaitMode = ENotWaiting;
+ ShowInformationNoteL( *stringholder );
+ iMovieSavedFlag = ETrue;
+ CleanupStack::PopAndDestroy( stringholder);
+
+ UpdateMediaGalleryL();
+ }
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL: Out" );
+ }
+
+void CVeiEditVideoView::InsertNewAudio()
+ {
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
+ Cba()->DrawDeferred();
+
+ iContainer->SetRecordedAudio( ETrue );
+
+ TInt64 startTimeInt = 0;
+ TInt64 durationInt = 1000000;
+ TInt currIndex( 0 );
+
+ if ((( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) ||
+ ( iContainer->CursorLocation() == VideoEditor::ECursorOnEmptyAudioTrack )) &&
+ ( iMovie->AudioClipCount() > 0 ))
+ {
+ currIndex = iContainer->CurrentIndex() + 1;
+ startTimeInt = iMovie->AudioClipEndTime( iContainer->CurrentIndex()).Int64();
+ }
+ else
+ {
+ currIndex = iMovie->AudioClipCount() - 1;
+ if ( currIndex >= 0 )
+ {
+ startTimeInt = iMovie->AudioClipEndTime( currIndex ).Int64();
+ }
+ else
+ {
+ currIndex = 0;
+ }
+ }
+
+ while ( currIndex < iMovie->AudioClipCount())
+ {
+ // safety margin: it is not possible to insert new audio if there is less than 1s between clips
+ TInt64 adjustedClipStartTimeInt = iMovie->AudioClipStartTime( currIndex ).Int64() - 1000000;
+
+ if ( startTimeInt > adjustedClipStartTimeInt )
+ {
+ startTimeInt = iMovie->AudioClipEndTime( currIndex ).Int64();
+ currIndex++;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ if ( currIndex < iMovie->AudioClipCount())
+ {
+ TInt64 endTimeInt = startTimeInt + durationInt;
+ TInt64 nextStartTimeInt = iMovie->AudioClipStartTime( currIndex ).Int64();
+
+ if ( endTimeInt > nextStartTimeInt )
+ {
+ durationInt = nextStartTimeInt - startTimeInt;
+ }
+ }
+
+ iContainer->SetRecordedAudioStartTime( TTimeIntervalMicroSeconds( startTimeInt ));
+ iContainer->SetRecordedAudioDuration( TTimeIntervalMicroSeconds( durationInt ));
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecordingSetStart );
+ iContainer->SetCursorLocation( VideoEditor::ECursorOnAudio );
+
+ UpdateEditNaviLabel();
+
+ /* Create temp file. */
+ if ( iTempRecordedAudio )
+ {
+ delete iTempRecordedAudio;
+ iTempRecordedAudio = NULL;
+ }
+
+ iTempRecordedAudio = HBufC::NewL( KMaxFileName );
+ iTempMaker->GenerateTempFileName( *iTempRecordedAudio, iMemoryInUse, iMovie->Format(), ETrue );
+
+ /* Open the file, this is asynchronous so we'll come to our callback. */
+ iRecorder->OpenFileL( *iTempRecordedAudio );
+ }
+
+TBool CVeiEditVideoView::IsEnoughFreeSpaceToSaveL( TInt aBytesToAdd )const
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: in" );
+ RFs& fs = iEikonEnv->FsSession();
+
+ TBool spaceBelowCriticalLevel( EFalse );
+
+ TInt sizeEstimate = iMovie->GetSizeEstimateL();
+ sizeEstimate += aBytesToAdd;
+
+ if ( iEditorState == EQuickPreview )
+ {
+ TInt snapShotSize = iContainer->SnapshotSize();
+ if ( snapShotSize != 0 )
+ {
+ sizeEstimate = snapShotSize;
+ }
+ }
+
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: 2, needed space: %d", sizeEstimate );
+
+ if ( iMemoryInUse == CAknMemorySelectionDialog::EPhoneMemory )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: " );
+ spaceBelowCriticalLevel = SysUtil::DiskSpaceBelowCriticalLevelL( &fs, sizeEstimate, EDriveC );
+ }
+ else
+ {
+ LOG( KVideoEditorLogFile, "\tMmc selected" );
+
+ spaceBelowCriticalLevel = SysUtil::MMCSpaceBelowCriticalLevelL( &fs, sizeEstimate );
+ }
+
+ if ( spaceBelowCriticalLevel )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: 3, space is below critical level" );
+ ShowErrorNote( R_VEI_MEMORY_RUNNING_OUT );
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL out" );
+
+ return !spaceBelowCriticalLevel;
+ }
+
+
+TBool CVeiEditVideoView::IsEnoughFreeSpaceToSave2L( TInt aBytesToAdd )const
+ {
+ RFs& fs = iEikonEnv->FsSession();
+ TBool spaceBelowCriticalLevel( EFalse );
+ TInt sizeEstimate = iMovie->GetSizeEstimateL();
+ sizeEstimate += aBytesToAdd;
+
+ if ( iMemoryInUse == CAknMemorySelectionDialog::EPhoneMemory )
+ {
+ spaceBelowCriticalLevel = SysUtil::DiskSpaceBelowCriticalLevelL( &fs, sizeEstimate, EDriveC );
+ }
+ else
+ {
+ spaceBelowCriticalLevel = SysUtil::MMCSpaceBelowCriticalLevelL( &fs, sizeEstimate );
+ }
+
+ if ( !spaceBelowCriticalLevel )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+TBool CVeiEditVideoView::FitsToMmsL()
+ {
+ /*
+ Read documentation of FitsToMmsL() in the header file
+ */
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::FitsToMmsL() in" );
+ TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize();
+
+ CVedMovie::TVedMovieQuality origQuality = iMovie->Quality();
+ iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );
+ TInt videoTimeLineSize = iMovie->GetSizeEstimateL() / 1024;
+ iMovie->SetQuality( origQuality );
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::FitsToMmsL() out" );
+ videoTimeLineSize = videoTimeLineSize * 1.1;
+ return videoTimeLineSize < maxMmsSize;
+ }
+
+void CVeiEditVideoView::BrowseStartTransition( TBool aUpOrDown )
+ {
+ TInt currentEffect;
+ TInt currentIndex = iContainer->CurrentIndex();
+
+ if ( currentIndex == 0 )
+ {
+ currentEffect = iMovie->StartTransitionEffect();
+ if ( aUpOrDown )
+ {
+ if ( !( TVedStartTransitionEffect( currentEffect - 1 ) < EVedStartTransitionEffectNone ))
+ {
+ iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( currentEffect - 1 ));
+ }
+ else
+ {
+ iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( EVedStartTransitionEffectLast - 1 ));
+ }
+ }
+ else
+ {
+ if ( !( TVedStartTransitionEffect( currentEffect + 1 ) >= EVedStartTransitionEffectLast ))
+ {
+ iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( currentEffect + 1 ));
+ }
+ else
+ {
+ iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( EVedStartTransitionEffectNone ));
+ }
+ }
+ }
+ else if ( currentIndex < iMovie->VideoClipCount())
+ {
+ currentEffect = iMovie->MiddleTransitionEffect( currentIndex - 1 );
+
+ if ( aUpOrDown )
+ {
+ if ( !( TVedMiddleTransitionEffect( currentEffect - 1 ) < EVedMiddleTransitionEffectNone ))
+ {
+ iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( currentEffect - 1 ), currentIndex - 1 );
+ }
+ else
+ {
+ iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( EVedMiddleTransitionEffectLast - 1 ), currentIndex - 1 );
+ }
+ }
+ else
+ {
+ if ( !( TVedMiddleTransitionEffect( currentEffect + 1 ) >= EVedMiddleTransitionEffectLast ))
+ {
+ iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( currentEffect + 1 ), currentIndex - 1 );
+ }
+ else
+ {
+ iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( EVedMiddleTransitionEffectNone ), currentIndex - 1 );
+ }
+ }
+ }
+ else
+ {
+ currentEffect = iMovie->EndTransitionEffect();
+
+ if ( aUpOrDown )
+ {
+ if ( !( TVedEndTransitionEffect( currentEffect - 1 ) < EVedEndTransitionEffectNone ))
+ {
+ iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( currentEffect - 1 ));
+ }
+ else
+ {
+ iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( EVedEndTransitionEffectLast - 1 ));
+ }
+ }
+ else
+ {
+ if ( !( TVedEndTransitionEffect( currentEffect + 1 ) >= EVedEndTransitionEffectLast ))
+ {
+ iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( currentEffect + 1 ));
+ }
+ else
+ {
+ iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( EVedEndTransitionEffectNone ));
+ }
+ }
+ }
+
+ }
+
+void CVeiEditVideoView::ShowErrorNote( const TInt aResourceId, TInt /*aError*/ )const
+ {
+ CVeiErrorUI::ShowErrorNote( *iEikonEnv, aResourceId );
+ }
+
+void CVeiEditVideoView::ShowGlobalErrorNote( const TInt aError )const
+ {
+ iErrorUI->ShowGlobalErrorNote( aError );
+ }
+
+void CVeiEditVideoView::ShowInformationNoteL( const TDesC& aMessage )const
+ {
+ CAknInformationNote* note = new( ELeave )CAknInformationNote( ETrue );
+ note->ExecuteLD( aMessage );
+ }
+
+void CVeiEditVideoView::ShowVolumeLabelL( TInt aVolume )
+ {
+ STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetVolumeIconVisibilityL( ETrue );
+
+ if ( iVolumeHider && iVolumeHider->IsActive())
+ {
+ iVolumeHider->Cancel();
+ }
+ if ( aVolume == 0 )
+ {
+ STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetVolumeIconVisibilityL( EFalse );
+ HideVolume();
+ return ;
+ }
+
+ iNaviPane->PushL( *iVolumeNavi );
+ if ( !iVolumeHider )
+ {
+ iVolumeHider = CPeriodic::NewL( CActive::EPriorityLow );
+ }
+ iVolumeHider->Start( 1000000, 1000000, TCallBack( CVeiEditVideoView::HideVolumeCallbackL, this ));
+
+ STATIC_CAST( CAknVolumeControl* , iVolumeNavi->DecoratedControl())->SetValue( aVolume );
+
+ if ( aVolume > KMinVolume + 1 )
+ {
+ STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetLeftArrowVisibilityL( ETrue );
+ }
+ else
+ {
+ STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetLeftArrowVisibilityL( EFalse );
+ }
+
+ if ( aVolume < KMaxVolume )
+ {
+ STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetRightArrowVisibilityL( ETrue );
+ }
+ else
+ {
+ STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetRightArrowVisibilityL( EFalse );
+ }
+
+ }
+
+void CVeiEditVideoView::RemoveCurrentClipL()
+ {
+ if ( !iContainer )
+ {
+ return ;
+ }
+ TParse fp;
+
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
+ {
+ if ( iMovie->AudioClipCount() == 0 )
+ {
+ return ;
+ }
+ CVedAudioClipInfo* audioclipinfo = iMovie->AudioClipInfo( iContainer->CurrentIndex());
+ fp.Set( audioclipinfo->FileName(), NULL, NULL );
+ }
+ else
+ {
+ if ( iMovie->VideoClipCount() == 0 )
+ {
+ return ;
+ }
+
+ /* Get filename to remove query. */
+ TBool isFile( iMovie->VideoClipInfo( iContainer->CurrentIndex())->Class() == EVedVideoClipClassFile );
+ CVedVideoClipInfo* videoclipinfo = iMovie->VideoClipInfo( iContainer->CurrentIndex());
+
+ if ( isFile )
+ {
+ fp.Set( videoclipinfo->FileName(), NULL, NULL );
+ }
+ else
+ {
+ fp.Set( videoclipinfo->DescriptiveName(), NULL, NULL );
+ }
+ }
+
+ HBufC* stringholder = StringLoader::LoadL( R_VEI_REMOVE_CLIP_QUERY, fp.Name(), iEikonEnv );
+ CleanupStack::PushL( stringholder );
+ CAknQueryDialog* dlg = new( ELeave )CAknQueryDialog( *stringholder, CAknQueryDialog::ENoTone );
+ TInt queryok = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY );
+ CleanupStack::PopAndDestroy( stringholder );
+
+ if ( queryok )
+ {
+ TUint currentIndex = iContainer->GetAndDecrementCurrentIndex();
+
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
+ {
+ iMovie->RemoveAudioClip( currentIndex );
+ }
+ else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
+ {
+ iMovie->RemoveVideoClip( currentIndex );
+ }
+ else
+ {
+ ShowErrorNote( R_VEI_ERROR_NOTE );
+ }
+ }
+ }
+
+
+TInt CVeiEditVideoView::AddClipL( const TDesC& aFilename, TBool aStartNow )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::AddClipL: In" );
+
+ if ( !iContainer )
+ {
+ iContainer = new( ELeave )CVeiEditVideoContainer( *iMovie, * this );
+ iContainer->SetMopParent( this );
+ iContainer->ConstructL( AppUi()->ClientRect());
+ AppUi()->AddToStackL( *this, iContainer );
+ }
+
+ iMediaQueue->InsertMediaL( aFilename );
+
+ if ( aStartNow )
+ {
+ iMediaQueue->StartProcessingL();
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::AddClipL: Out" );
+ return KErrNone;
+ }
+
+
+void CVeiEditVideoView::AddNext()
+ {
+ iMediaQueue->GetNext();
+ }
+
+TBool CVeiEditVideoView::SaveL( TWaitMode aQuitAfterSaving )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: In" );
+ RFs& fs = iEikonEnv->FsSession();
+
+ TParse file;
+ TFileName newname;
+
+ // Get default movie name from settings view
+ CAknMemorySelectionDialog::TMemory memory( iMovieSaveSettings.MemoryInUse());
+
+ if ( memory == CAknMemorySelectionDialog::EPhoneMemory )
+ {
+ newname = PathInfo::PhoneMemoryRootPath();
+ }
+ else
+ {
+ newname = PathInfo::MemoryCardRootPath();
+ }
+
+ newname.Append( PathInfo::VideosPath());
+
+ TVedVideoFormat movieQuality = iMovie->Format();
+ if ( movieQuality == EVedVideoFormatMP4 )
+ {
+ newname.Append( KExtMp4 );
+ }
+ else
+ {
+ newname.Append( KExt3gp );
+ }
+
+ file.Set( iMovieSaveSettings.DefaultVideoName(), &newname, NULL );
+
+ TInt error( KErrNone );
+ error = fs.MkDirAll( file.DriveAndPath());
+
+ if (( error != KErrAlreadyExists ) && ( error != KErrNone ))
+ {
+ return EFalse;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: 2" );
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: 3" );
+ //FileNameQuery
+ newname.Zero();
+ newname.Append( file.FullName());
+
+ CApaApplication::GenerateFileName( fs, newname );
+ CAknFileNamePromptDialog* dlg = CAknFileNamePromptDialog::NewL();
+ CleanupStack::PushL( dlg );
+
+ HBufC* filenametitle = StringLoader::LoadLC( R_VEI_QUERY_FILE_NAME, iEikonEnv );
+
+ dlg->SetTitleL( *filenametitle );
+ CleanupStack::PopAndDestroy( filenametitle );
+
+ TBool namegiven = dlg->ExecuteL( newname );
+ CleanupStack::PopAndDestroy( dlg );
+
+ if ( namegiven )
+ {
+ newname.Insert( 0, file.DriveAndPath());
+
+ file.Set( newname, NULL, NULL );
+
+ if ( BaflUtils::FileExists( fs, newname ))
+ {
+ TBool overWrite;
+ CAknQueryDialog* queryDlg;
+
+ HBufC* overWriteConfirmationString;
+ overWriteConfirmationString = StringLoader::LoadLC( R_VEI_CONFIRM_OVERWRITE, file.Name(), iEikonEnv );
+ queryDlg = new( ELeave )CAknQueryDialog( *overWriteConfirmationString, CAknQueryDialog::ENoTone );
+ overWrite = queryDlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY );
+
+ CleanupStack::PopAndDestroy( overWriteConfirmationString );
+ if ( !overWrite )
+ {
+ return EFalse;
+ }
+ }
+
+ iWaitMode = aQuitAfterSaving;
+
+ if ( iSaveToFileName )
+ {
+ delete iSaveToFileName;
+ iSaveToFileName = NULL;
+ }
+
+ iSaveToFileName = HBufC::NewL( newname.Length());
+ *iSaveToFileName = newname;
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: 4, iSaveToFileName:%S", iSaveToFileName );
+ StartTempFileProcessingL();
+
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+ else
+ {
+ return EFalse;
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CVeiEditVideoView::CheckMemoryCardAvailability()
+//
+// Checks the memory card availability if MMC is selected as save store in
+// application settings. An information note is shown in following
+// situations:
+// - MMC not inserted
+// - MMC corrupted (unformatted)
+// [- MMC is read-only (not implemented)]
+//
+// If note is popped up, this function waits until it's dismissed.
+// ----------------------------------------------------------------------------
+//
+void CVeiEditVideoView::CheckMemoryCardAvailabilityL()
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): in" );
+
+ // Read the video editor settings from ini file.
+
+ iChangedFromMMCToPhoneMemory = EFalse;
+
+ TVeiSettings settings;
+ STATIC_CAST( CVeiAppUi* , AppUi())->ReadSettingsL( settings );
+
+ CAknMemorySelectionDialog::TMemory memoryInUse( settings.MemoryInUse());
+
+ // Check the MMC accessibility only if MMC is used as saving store.
+ if ( memoryInUse == CAknMemorySelectionDialog::EMemoryCard )
+ {
+ RFs& fs = iEikonEnv->FsSession();
+ TDriveInfo driveInfo;
+
+ User::LeaveIfError( fs.Drive( driveInfo, KMmcDrive ));
+
+ // Media is not present (MMC card not inserted).
+ if ( driveInfo.iType == EMediaNotPresent )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): no media" );
+ iChangedFromMMCToPhoneMemory = ETrue;
+
+ settings.MemoryInUse() = CAknMemorySelectionDialog::EPhoneMemory;
+ STATIC_CAST( CVeiAppUi* , AppUi())->WriteSettingsL( settings );
+ }
+ // Media is present
+ else
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): media present" );
+
+ TVolumeInfo volumeInfo;
+ TInt volumeErr = fs.Volume( volumeInfo, KMmcDrive );
+ LOGFMT( KVideoEditorLogFile, "CEditVideoView::CheckMemoryCardAvailability() Volume(): %d", volumeErr );
+
+ // Show note if media is corrupted/unformatted.
+ if ( volumeErr == KErrCorrupt )
+ {
+ HBufC* noteText = StringLoader::LoadLC( R_VED_MMC_NOT_INSERTED, iEikonEnv );
+ CAknInformationNote* informationNote = new( ELeave )CAknInformationNote( ETrue );
+ informationNote->ExecuteLD( *noteText );
+
+ CleanupStack::PopAndDestroy( noteText );
+
+ settings.MemoryInUse() = CAknMemorySelectionDialog::EPhoneMemory;
+ STATIC_CAST( CVeiAppUi* , AppUi())->WriteSettingsL( settings );
+ }
+ }
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): out" );
+ }
+
+void CVeiEditVideoView::UpdateEditNaviLabel()const
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateEditNaviLabel(): In" );
+ if ( !iContainer )
+ {
+ return ;
+ }
+
+ TRAPD( err, DoUpdateEditNaviLabelL());
+
+ if ( err != KErrNone )
+ {
+ ShowGlobalErrorNote( err );
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateEditNaviLabel(): In" );
+ }
+
+void CVeiEditVideoView::DoUpdateEditNaviLabelL()const
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): In" );
+
+ HBufC* buf;
+
+ CAknNavigationDecorator* currentDecorator = iNaviPane->Top();
+
+ iNaviPane->Pop( iMoveLabel );
+ iNaviPane->Pop( iPreviewLabel );
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): navi labels popped" );
+
+ TBool leftArrowVisible = EFalse;
+ TBool rightArrowVisible = EFalse;
+
+ TInt currentIndex = iContainer->CurrentIndex();
+
+ TInt test = iContainer->SelectionMode();
+
+ // Draw the time indicators to the navi pane in Small preview state.
+ // However, if the volume indicator is being show, do not draw the time label
+ if ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModePreview && !iFullScreenSelected && !iVolumeHider )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): iContainer->SelectionMode() == CVeiEditVideoContainer::EModePreview && !iFullScreenSelected && !iVolumeHider" );
+
+ TTime elapsed( iContainer->PlaybackPositionL().Int64());
+ TTime total( iContainer->TotalLength().Int64());
+
+ TBuf < 16 > elapsedBuf;
+ TBuf < 16 > totalBuf;
+
+ HBufC* dateFormatString;
+
+ // check if time is over 99:59
+ if (( total.Int64() / 1000 ) < 3600000 )
+ {
+ dateFormatString = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_DURAT_MIN_SEC );
+ }
+ else
+ {
+ dateFormatString = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_DURAT_LONG );
+ }
+
+ elapsed.FormatL( elapsedBuf, * dateFormatString );
+ total.FormatL( totalBuf, * dateFormatString );
+ CleanupStack::PopAndDestroy( dateFormatString );
+
+ CDesCArrayFlat* strings = new CDesCArrayFlat( 2 );
+ CleanupStack::PushL( strings );
+ strings->AppendL( elapsedBuf );
+ strings->AppendL( totalBuf );
+ HBufC* stringholder = StringLoader::LoadL( R_VEI_NAVI_TIME, * strings, iEikonEnv );
+ CleanupStack::PopAndDestroy( strings );
+ CleanupStack::PushL( stringholder );
+
+ STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetLabelL( stringholder->Des());
+
+ CleanupStack::PopAndDestroy( stringholder );
+
+ iNaviPane->PushL( *iPreviewLabel );
+ }
+
+
+ else if ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeMove )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): iContainer->SelectionMode() == CVeiEditVideoContainer::EModeMove" );
+
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
+ {
+ buf = StringLoader::LoadLC( R_VEI_MOVE_AUDIO_NAVILABEL, iEikonEnv );
+
+ TTimeIntervalMicroSeconds startTime = iMovie->AudioClipStartTime( currentIndex );
+
+ if (( currentIndex == 0 ) && ( startTime > TTimeIntervalMicroSeconds( 0 )))
+ {
+ leftArrowVisible = ETrue;
+ }
+ else
+ {
+ if ( currentIndex >= 1 )
+ {
+ TTimeIntervalMicroSeconds prevEndTime = iMovie->AudioClipEndTime( currentIndex - 1 );
+ TTimeIntervalMicroSeconds modifiedStartTime = TTimeIntervalMicroSeconds( startTime.Int64() - 100000 );
+
+ if ( modifiedStartTime > prevEndTime )
+ {
+ leftArrowVisible = ETrue;
+ }
+ }
+ }
+
+ if ( currentIndex < ( iMovie->AudioClipCount() - 1 ))
+ {
+ TTimeIntervalMicroSeconds modifiedEndTime = TTimeIntervalMicroSeconds( iMovie->AudioClipEndTime( currentIndex ).Int64() + 100000 );
+ TTimeIntervalMicroSeconds nextStartTime = iMovie->AudioClipStartTime( currentIndex + 1 );
+ if ( modifiedEndTime < nextStartTime )
+ {
+ rightArrowVisible = ETrue;
+ }
+ }
+
+ if ( currentIndex == iMovie->AudioClipCount() - 1 )
+ {
+ rightArrowVisible = ETrue;
+ }
+ }
+ else
+ {
+ buf = StringLoader::LoadLC( R_VEI_MOVE_VIDEO_NAVILABEL, iEikonEnv );
+
+ if ( currentIndex > 0 )
+ {
+ leftArrowVisible = ETrue;
+ }
+ if ( currentIndex < iMovie->VideoClipCount() - 1 )
+ {
+ rightArrowVisible = ETrue;
+ }
+ }
+
+ STATIC_CAST( CAknNaviLabel* , iMoveLabel->DecoratedControl())->SetTextL( *buf );
+
+ CleanupStack::PopAndDestroy( buf );
+
+ iMoveLabel->DrawNow();
+
+ iMoveLabel->MakeScrollButtonVisible( ETrue );
+ iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, !leftArrowVisible );
+ iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, !rightArrowVisible );
+
+ iNaviPane->PushL( *iMoveLabel );
+ }
+ else if ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeDuration )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): iContainer->SelectionMode() == CVeiEditVideoContainer::EModeDuration" );
+
+ buf = StringLoader::LoadLC( R_VEI_NAVI_PANE_DURATION, iEikonEnv );
+
+ STATIC_CAST( CAknNaviLabel* , iMoveLabel->DecoratedControl())->SetTextL( *buf );
+
+ CleanupStack::PopAndDestroy( buf );
+
+ iMoveLabel->DrawNow();
+
+ if ( currentDecorator )
+ {
+ iMoveLabel->MakeScrollButtonVisible( ETrue );
+
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
+ {
+ TTimeIntervalMicroSeconds editedDuration = iMovie->AudioClipEditedDuration( currentIndex );
+ TTimeIntervalMicroSeconds duration = iMovie->AudioClipInfo( currentIndex )->Duration();
+
+ if ( editedDuration > TTimeIntervalMicroSeconds( 100000 ))
+ {
+ leftArrowVisible = ETrue;
+ }
+
+ if ( editedDuration < duration )
+ {
+ rightArrowVisible = ETrue;
+ }
+ }
+ else
+ // Cursor on generated video clip
+ {
+ TTimeIntervalMicroSeconds duration = iMovie->VideoClipInfo( currentIndex )->Duration();
+ if ( duration > TTimeIntervalMicroSeconds( 100000 ))
+ {
+ leftArrowVisible = ETrue;
+ }
+ rightArrowVisible = ETrue;
+ }
+
+ iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, !leftArrowVisible );
+ iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, !rightArrowVisible );
+ iNaviPane->PushL( *iMoveLabel );
+ }
+ }
+ else
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): else-branch" );
+
+ TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize();
+
+ CVedMovie::TVedMovieQuality origQuality = iMovie->Quality();
+ iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );
+
+ TInt videoTimeLineSize = iMovie->GetSizeEstimateL() / 1024;
+
+ iMovie->SetQuality( origQuality );
+
+ // Navipanes MMS icon control.
+ if ( videoTimeLineSize < maxMmsSize )
+ {
+ STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMmsAvailableL( ETrue );
+ }
+ else
+ {
+ STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMmsAvailableL( EFalse );
+ }
+
+ TInt size = iMovie->GetSizeEstimateL() / 1024;
+ /* If in recording state, show last audio clip end time+ recorded audio clip duration in navipane*/
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL: iMovie->GetSizeEstimateL() OK : %d", size );
+ TTimeIntervalMicroSeconds audioEndTime( 0 );
+ if ((( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecording ) ||
+ ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecordingPaused )))
+ {
+ TInt audioCount = iMovie->AudioClipCount();
+ /* check that cursor is on last audio clip */
+ if (( audioCount > 0 ) && ( iContainer->CurrentIndex() == audioCount - 1 ))
+ {
+ audioEndTime = iMovie->AudioClipEndTime( audioCount - 1 );
+ }
+ audioEndTime = audioEndTime.Int64() + iContainer->RecordedAudioDuration().Int64();
+ /*
+ * Get recorded audio clip size and add it to engine size estimate
+ * The size won't match with size estimate that engine gives when recorded audio clip is added,
+ *
+ */
+ RFs& fs = iEikonEnv->FsSession();
+ TEntry entry;
+
+ User::LeaveIfError( fs.Entry( *iTempRecordedAudio, entry ));
+ TInt recordedClipSize = entry.iSize / 1024;
+ size += recordedClipSize;
+ }
+
+ if ( audioEndTime > iMovie->Duration())
+ {
+ STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetDurationLabelL( audioEndTime.Int64());
+ }
+ else
+ {
+ STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetDurationLabelL( iMovie->Duration().Int64());
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL: iMovie->Duration() OK : %Ld", iMovie->Duration().Int64());
+ }
+
+ // Video line size to navipane.
+ STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetSizeLabelL( size );
+
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL: SetSizeLabelL(%d) OK", size );
+
+ // Get default memory from settings view
+
+ if ( iMemoryInUse == CAknMemorySelectionDialog::EPhoneMemory )
+ {
+ STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryInUseL( ETrue );
+ }
+ else
+ {
+ STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryInUseL( EFalse );
+ }
+
+ if ( IsEnoughFreeSpaceToSave2L())
+ {
+ STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryAvailableL( ETrue );
+ }
+ else
+ {
+ STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryAvailableL( EFalse );
+ }
+ if ( !currentDecorator )
+ {
+ iNaviPane->PushL( *iEditLabel );
+ }
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): Out" );
+ }
+
+void CVeiEditVideoView::NotifyQueueProcessingStarted( MVeiQueueObserver::TProcessing aMode )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingStarted: in" );
+
+ if ( iProgressNote )
+ {
+ delete iProgressNote;
+ iProgressNote = NULL;
+ }
+
+ if ( iWaitDialog )
+ {
+ CancelWaitDialog();
+ }
+
+ HBufC* stringholder;
+
+ switch ( aMode )
+ {
+ case MVeiQueueObserver::EProcessingAudio:
+
+ iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue );
+
+ iProgressNote->SetCallback( this );
+
+ iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE_WITH_CANCEL );
+
+
+ stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_INSERTING_AUDIO, iEikonEnv );
+ iProgressNote->SetTextL( *stringholder );
+ CleanupStack::PopAndDestroy( stringholder );
+
+ iWaitMode = EOpeningAudioInfo;
+ iProgressNote->GetProgressInfoL()->SetFinalValue( 100 );
+ break;
+ case MVeiQueueObserver::EProcessingVideo:
+
+ iWaitDialog = new( ELeave )CAknWaitDialog( REINTERPRET_CAST( CEikDialog** , &iWaitDialog ), ETrue );
+ iWaitDialog->ExecuteLD( R_VEI_WAIT_DIALOG_INSERTING_VIDEO );
+ break;
+ default:
+ iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue );
+
+ iProgressNote->SetCallback( this );
+
+ iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE );
+ UpdateInsertingProgressNoteL( 1 );
+ iProgressNote->GetProgressInfoL()->SetFinalValue( 100 );
+ break;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingStarted: out" );
+ }
+
+void CVeiEditVideoView::NotifyQueueProcessingProgressed( TInt aProcessedCount, TInt aPercentage )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingProgressed: in" );
+ if ( iProgressNote )
+ {
+ UpdateInsertingProgressNoteL( aProcessedCount );
+ iProgressNote->GetProgressInfoL()->SetAndDraw( aPercentage );
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingProgressed: out" );
+ }
+
+TBool CVeiEditVideoView::NotifyQueueClipFailed( const TDesC& aFilename, TInt aError )
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueClipFailed: in, aError:%d", aError );
+
+ TBool result;
+ if ( aError == CVeiAddQueue::EInsertingSingleClip )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueClipFailed: 1" );
+ ShowErrorNote( R_VEI_VIDEO_FAILED );
+ result = ETrue;
+ }
+ else
+ {
+ TBool continueProcessing;
+ CAknQueryDialog* dlg;
+ HBufC* failedContinueString;
+
+ failedContinueString = StringLoader::LoadLC( R_VEI_WARNING_NOTE_INSERTING_FAILED, aFilename, iEikonEnv );
+ dlg = new( ELeave )CAknQueryDialog( *failedContinueString, CAknQueryDialog::ENoTone );
+ continueProcessing = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY );
+
+ CleanupStack::PopAndDestroy( failedContinueString );
+
+ result = continueProcessing;
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueClipFailed: out" );
+
+ return result;
+ }
+
+void CVeiEditVideoView::NotifyQueueEmpty( TInt /*aInserted*/, TInt DEBUGLOG_ARG( aFailed ))
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueEmpty: in, aFailed:%d", aFailed );
+ if ( iProgressNote )
+ {
+ iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
+ TRAP_IGNORE( iProgressNote->ProcessFinishedL());
+ }
+ if ( iWaitDialog )
+ {
+ CancelWaitDialog();
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueEmpty: out" );
+ }
+
+
+void CVeiEditVideoView::NotifyMovieProcessingStartedL( CVedMovie& /*aMovie*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingStartedL: in" );
+
+ iPercentProcessed = 0;
+
+ iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue );
+ iProgressNote->SetCallback( this );
+ iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE_WITH_CANCEL );
+
+ HBufC* stringholder;
+
+ if (( EProcessingMovieSend == iWaitMode ) && ( KSenduiMtmBtUid == iGivenSendCommand ))
+ {
+ stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv );
+ }
+ else if ( EProcessingMovieSend == iWaitMode )
+ {
+ stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_SEND, iEikonEnv );
+ }
+ else if ( EProcessingMoviePreview == iWaitMode )
+ {
+ stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv );
+ }
+ else if ( EProcessingMovieTrimMms == iWaitMode )
+ {
+ stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv );
+ }
+ else
+ {
+ stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_SAVING, iEikonEnv );
+ }
+
+ CleanupStack::PushL( stringholder );
+
+ iProgressNote->SetTextL( *stringholder );
+ CleanupStack::PopAndDestroy( stringholder );
+
+ iProgressNote->GetProgressInfoL()->SetFinalValue( 100 );
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingStartedL: out" );
+ }
+
+void CVeiEditVideoView::NotifyMovieProcessingProgressed( CVedMovie& /*aMovie*/, TInt aPercentage )
+ {
+ iPercentProcessed = aPercentage;
+ User::ResetInactivityTime();
+ iProgressNote->GetProgressInfoL()->SetAndDraw( aPercentage );
+ }
+
+void CVeiEditVideoView::NotifyMovieProcessingCompleted( CVedMovie& aMovie, TInt aError )
+ {
+ LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: in, aError:%d, iPercentProcessed:%d", aError, iPercentProcessed );
+
+ aMovie.SetMovieSizeLimit( 0 ); // Movie size limit not in use
+
+ if ( aError == KErrNone )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 2" );
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ Cba()->DrawDeferred();
+ SetNewTempFileNeeded( EFalse );
+ iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
+ TRAP_IGNORE( iProgressNote->ProcessFinishedL());
+ }
+ else
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 3" );
+ if ( iProgressNote )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 4" );
+ iWaitMode = EProcessingError;
+ TRAP_IGNORE( iProgressNote->GetProgressInfoL()->SetAndDraw( 100 ));
+ iErrorNmb = aError;
+ TRAP_IGNORE( iProgressNote->ProcessFinishedL());
+ }
+ else
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 5" );
+ if ( iTempFile )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 6" );
+ RFs& fs = iEikonEnv->FsSession();
+
+ fs.Delete( *iTempFile );
+ delete iTempFile;
+ iTempFile = NULL;
+ SetNewTempFileNeeded( ETrue );
+ }
+ }
+
+ // SetEditorState() must be called because of its side effects eventhough state has not changed,
+ // it sets CBAs. CBAs are set to empty before calling ProcessL()
+ if ( EMixAudio != iEditorState )
+ {
+ SetEditorState( EEdit );
+ }
+ else
+ {
+ SetEditorState( EMixAudio );
+ }
+
+ iContainer->SetBlackScreen( EFalse );
+ iContainer->SetRect( AppUi()->ClientRect());
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: out" );
+ }
+
+void CVeiEditVideoView::NotifyVideoClipAdded( CVedMovie& /*aMovie*/, TInt aIndex )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAdded: in" );
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+
+ if ( iMovieFirstAddFlag )
+ {
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( aIndex );
+
+ if ( EVedVideoClipClassGenerated != info->Class())
+ {
+ SetNewTempFileNeeded( EFalse );
+ iMovieSavedFlag = ETrue;
+ }
+ iMovieFirstAddFlag = EFalse;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAdded: Completed" );
+
+ STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetState( CVeiEditVideoLabelNavi::EStateEditView );
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAdded: out" );
+ }
+
+void CVeiEditVideoView::NotifyVideoClipAddingFailed( CVedMovie& /*aMovie*/, TInt DEBUGLOG_ARG( aError ))
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAddingFailed: in, aError:%d", aError );
+ if ( iProgressNote )
+ {
+ iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
+ TRAP_IGNORE( iProgressNote->ProcessFinishedL());
+ }
+
+ if ( iWaitDialog )
+ {
+ CancelWaitDialog();
+ }
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAddingFailed: out" );
+ }
+
+void CVeiEditVideoView::NotifyVideoClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipRemoved: in" );
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipRemoved: out" );
+ }
+
+void CVeiEditVideoView::NotifyVideoClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipIndicesChanged: in" );
+ iMovieSavedFlag = EFalse;
+ SetNewTempFileNeeded( ETrue );
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipIndicesChanged: out" );
+ }
+
+void CVeiEditVideoView::NotifyVideoClipTimingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipTimingsChanged: in" );
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipTimingsChanged: out" );
+ }
+
+void CVeiEditVideoView::NotifyVideoClipColorEffectChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipColorEffectChanged: in" );
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipColorEffectChanged: out" );
+ }
+
+void CVeiEditVideoView::NotifyVideoClipAudioSettingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAudioSettingsChanged: in" );
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAudioSettingsChanged: out" );
+ }
+
+void CVeiEditVideoView::NotifyStartTransitionEffectChanged( CVedMovie& /*aMovie*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyStartTransitionEffectChanged: in" );
+ iMovieSavedFlag = EFalse;
+ SetNewTempFileNeeded( ETrue );
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyStartTransitionEffectChanged: out" );
+ }
+
+void CVeiEditVideoView::NotifyMiddleTransitionEffectChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMiddleTransitionEffectChanged: in" );
+ iMovieSavedFlag = EFalse;
+ SetNewTempFileNeeded( ETrue );
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMiddleTransitionEffectChanged: out" );
+ }
+
+void CVeiEditVideoView::NotifyEndTransitionEffectChanged( CVedMovie& /*aMovie*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyEndTransitionEffectChanged: in" );
+ iMovieSavedFlag = EFalse;
+ SetNewTempFileNeeded( ETrue );
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyEndTransitionEffectChanged: out" );
+ }
+
+void CVeiEditVideoView::NotifyAudioClipAdded( CVedMovie& aMovie, TInt aIndex )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAdded: in" );
+ iMovieSavedFlag = EFalse;
+ SetNewTempFileNeeded( ETrue );
+
+ if ( iProgressNote )
+ {
+ iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
+ TRAP_IGNORE( iProgressNote->ProcessFinishedL());
+ }
+
+ iOriginalAudioClipIndex = iContainer->CurrentIndex();
+
+ if ( iOriginalAudioClipIndex > aIndex )
+ {
+ iOriginalAudioClipIndex--;
+ }
+ iContainer->SetCurrentIndex( aIndex );
+
+ iOriginalAudioStartPoint = TTimeIntervalMicroSeconds( - 1 );
+ CVedAudioClipInfo* audioclipinfo = aMovie.AudioClipInfo( aIndex );
+ iOriginalAudioDuration = audioclipinfo->Duration();
+
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAdded: out" );
+ }
+
+void CVeiEditVideoView::NotifyAudioClipAddingFailed( CVedMovie& /*aMovie*/, TInt DEBUGLOG_ARG( aError ))
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAddingFailed: in, aError:%d", aError );
+ if ( iProgressNote )
+ {
+ iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
+ TRAP_IGNORE( iProgressNote->ProcessFinishedL());
+ }
+
+ if ( iWaitDialog )
+ {
+ CancelWaitDialog();
+ }
+ ShowErrorNote( R_VEI_ERRORNOTE_AUDIO_INSERTING_FAILED );
+
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAddingFailed: out" );
+ }
+
+void CVeiEditVideoView::NotifyAudioClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipRemoved: in" );
+ if ( iTempRecordedAudio )
+ {
+ delete iTempRecordedAudio;
+ iTempRecordedAudio = NULL;
+ }
+ iMovieSavedFlag = EFalse;
+ SetNewTempFileNeeded( ETrue );
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipRemoved: out" );
+ }
+
+void CVeiEditVideoView::NotifyAudioClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipIndicesChanged: in" );
+ iMovieSavedFlag = EFalse;
+ SetNewTempFileNeeded( ETrue );
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipIndicesChanged: out" );
+ }
+
+void CVeiEditVideoView::NotifyAudioClipTimingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipTimingsChanged: in" );
+ iMovieSavedFlag = EFalse;
+ SetNewTempFileNeeded( ETrue );
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipTimingsChanged: out" );
+ }
+
+void CVeiEditVideoView::NotifyMovieReseted( CVedMovie& /*aMovie*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieReseted: in" );
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieReseted: out" );
+ }
+
+void CVeiEditVideoView::NotifyAudioClipInfoReady( CVedAudioClipInfo& aInfo, TInt aError )
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: in, aError:%d", aError );
+ TInt err( KErrNone );
+
+ if ( aError == KErrNone )
+ {
+ if ( aInfo.Type() == EVedAudioTypeUnrecognized )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 2: EVedAudioTypeUnrecognized" );
+
+ aError = KErrNotSupported;
+
+ /*TPtrC filename = aInfo.FileName();
+
+ iTempRecordedAudio = HBufC::NewL(KMaxFileName);
+ iTempMaker->GenerateTempFileName( *iTempRecordedAudio, iMovie );
+
+ TRAP_IGNORE( iConverter->StartConversionL( filename, *iTempRecordedAudio) );
+
+ delete iTempRecordedAudio;
+ iTempRecordedAudio = NULL;
+ */
+ }
+ else if (( aInfo.Type() == EVedAudioTypeAMR ) ||
+ ( aInfo.Type() == EVedAudioTypeAMRWB ) ||
+ ( aInfo.Type() == EVedAudioTypeMP3 ) ||
+ ( aInfo.Type() == EVedAudioTypeAAC_LC ) ||
+ ( aInfo.Type() == EVedAudioTypeAAC_LTP ) ||
+ ( aInfo.Type() == EVedAudioTypeWAV ))
+ {
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 3" );
+ TInt index = 0;
+ TInt64 startTimeInt = 0;
+ TInt64 durationInt = aInfo.Duration().Int64();
+
+ if ((( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) ||
+ ( iContainer->CursorLocation() == VideoEditor::ECursorOnEmptyAudioTrack )) &&
+ ( iMovie->AudioClipCount() > 0 ))
+ {
+ index = iContainer->CurrentIndex() + 1;
+ startTimeInt = iMovie->AudioClipEndTime( iContainer->CurrentIndex()).Int64();
+ }
+
+ while ( index < iMovie->AudioClipCount())
+ {
+ if ( TTimeIntervalMicroSeconds( startTimeInt ) == iMovie->AudioClipStartTime( index ))
+ {
+ startTimeInt = iMovie->AudioClipEndTime( index ).Int64();
+ index++;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ if ( index < iMovie->AudioClipCount())
+ {
+ TInt64 endTimeInt = startTimeInt + durationInt;
+ TInt64 nextStartTimeInt = iMovie->AudioClipStartTime( index ).Int64();
+ if ( endTimeInt > nextStartTimeInt )
+ {
+ durationInt = nextStartTimeInt - startTimeInt;
+ }
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 4" );
+ TRAP( err, iMovie->AddAudioClipL( aInfo.FileName(),
+ TTimeIntervalMicroSeconds( startTimeInt ),
+ TTimeIntervalMicroSeconds( 0 ),
+ TTimeIntervalMicroSeconds( durationInt )));
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 5" );
+ }
+ }
+ if (( aError != KErrNone ) || ( err != KErrNone ))
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 6" );
+ if ( aError != KErrCancel )
+ {
+ if ( aError )
+ {
+ iErrorNmb = aError;
+ }
+ else
+ {
+ iErrorNmb = err;
+ }
+ }
+ iWaitMode = EProcessingAudioError;
+
+ iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
+ TRAP_IGNORE( iProgressNote->ProcessFinishedL());
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: out" );
+ }
+
+
+
+void CVeiEditVideoView::NotifyVideoClipGeneratorSettingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipGeneratorSettingsChanged: in" );
+ if ( iWaitDialog )
+ {
+ iWaitDialog->ProcessFinishedL();
+ }
+
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+ UpdateEditNaviLabel();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipGeneratorSettingsChanged: out" );
+ }
+
+void CVeiEditVideoView::NotifyVideoClipDescriptiveNameChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipDescriptiveNameChanged: in and out" );
+ }
+
+void CVeiEditVideoView::NotifyMovieQualityChanged( CVedMovie& /*aMovie*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieQualityChanged: in" );
+
+ // If there are text generator inserted into the movie, they need
+ // to be notified that the movie resolution has changed so that
+ // they can re-calculate the the wrapping etc. parameters.
+ /* TInt clipCount = iMovie->VideoClipCount();
+ for (TInt i = 0; i < clipCount; i++)
+ {
+ CVedVideoClipInfo* clipInfo = iMovie->VideoClipInfo(i);
+ if (clipInfo->Class() == EVedVideoClipClassGenerated)
+ {
+ TUid generatorUid = clipInfo->Generator()->Uid();
+ if (generatorUid == KUidTitleClipGenerator)
+ {
+ CVeiTitleClipGenerator* generator = static_cast<CVeiTitleClipGenerator*>(clipInfo->Generator());
+ generator->RefreshTextFrameParametersL();
+ }
+ }
+ }*/
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieQualityChanged: out" );
+ }
+
+void CVeiEditVideoView::NotifyMovieOutputParametersChanged( CVedMovie& /*aMovie*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieOutputParametersChanged: in and out" );
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+ }
+
+void CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkInserted( CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkInserted: in and out" );
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+ }
+
+void CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkRemoved( CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkRemoved: in and out" );
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+ }
+
+void CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkInserted( CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkInserted: in and out" );
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+ }
+
+void CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkRemoved( CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkRemoved: in and out" );
+ SetNewTempFileNeeded( ETrue );
+ iMovieSavedFlag = EFalse;
+ }
+
+void CVeiEditVideoView::MoscoStateChangeEvent( CBase* aObject, TInt aPreviousState, TInt aCurrentState, TInt aErrorCode )
+ {
+ LOGFMT3( KVideoEditorLogFile, "CVeiEditVideoView::MoscoStateChangeEvent: In: aPreviousState:%d, aCurrentState:%d, aErrorCode:%d", aPreviousState, aCurrentState, aErrorCode );
+
+ if ( aObject == iRecorder )
+ {
+ if ( aErrorCode != KErrNone )
+ {
+ ShowErrorNote( R_VEI_RECORDING_FAILED );
+
+ if ( iTempRecordedAudio )
+ {
+ TInt err = iEikonEnv->FsSession().Delete( *iTempRecordedAudio );
+ if ( err ){
+
+ }
+ delete iTempRecordedAudio;
+ iTempRecordedAudio = NULL;
+ }
+
+ iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
+ TRAP_IGNORE( Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ));
+ Cba()->DrawDeferred();
+ UpdateEditNaviLabel();
+
+ iRecorder->Close();
+ }
+ else if ( aCurrentState == CMdaAudioClipUtility::ERecording )
+ {
+ const TUint delay = 1000 * 1000 / 10;
+
+ if ( !iAudioRecordPeriodic->IsActive())
+ {
+ iAudioRecordPeriodic->Start( delay, delay, TCallBack( CVeiEditVideoView::UpdateAudioRecording, this ));
+ }
+
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PAUSE_STOP );
+ Cba()->DrawDeferred();
+ }
+ else if ( aPreviousState == CMdaAudioClipUtility::ENotReady )
+ {
+ TRAP_IGNORE( Cba()->SetCommandSetL( R_VEI_SOFTKEYS_RECORD_CANCEL ));
+ Cba()->DrawDeferred();
+ }
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::MoscoStateChangeEvent: Out" );
+ }
+
+
+void CVeiEditVideoView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoActivateL: In" );
+ if ( !iMemoryCardChecked )
+ {
+ CheckMemoryCardAvailabilityL();
+ iMemoryCardChecked = ETrue;
+ }
+
+ if ( !iContainer )
+ {
+ iContainer = new( ELeave )CVeiEditVideoContainer( *iMovie, * this );
+ iContainer->SetMopParent( this );
+ iContainer->ConstructL( AppUi()->ClientRect());
+ AppUi()->AddToStackL( *this, iContainer );
+ }
+
+ SetEditorState( EEdit );
+
+ // Add Context Pane icon
+
+ /* TUid contextPaneUid;
+ contextPaneUid.iUid = EEikStatusPaneUidContext;
+
+ CEikStatusPane* sp = StatusPane();
+ CEikStatusPaneBase::TPaneCapabilities subPane = sp->PaneCapabilities( contextPaneUid );
+
+ if ( subPane.IsPresent() && subPane.IsAppOwned() )
+ {
+ CAknContextPane* contextPane = (CAknContextPane*)sp->ControlL( contextPaneUid);
+
+ TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KManualVideoEditorIconFileId) );
+ }*/
+
+ // Quality is taken from settings and set to engine.
+ STATIC_CAST( CVeiAppUi* , AppUi())->ReadSettingsL( iMovieSaveSettings );
+
+ TInt settingsSaveQuality = iMovieSaveSettings.SaveQuality();
+ CVedMovie::TVedMovieQuality saveQuality;
+
+ switch ( settingsSaveQuality )
+ {
+ case TVeiSettings::EMmsCompatible: saveQuality = CVedMovie::EQualityMMSInteroperability;
+ break;
+ case TVeiSettings::EMedium: saveQuality = CVedMovie::EQualityResolutionMedium;
+ break;
+ case TVeiSettings::EBest: saveQuality = CVedMovie::EQualityResolutionHigh;
+ break;
+ case TVeiSettings::EAuto: default:
+ saveQuality = CVedMovie::EQualityAutomatic;
+ break;
+ }
+
+ iMovie->SetQuality( saveQuality );
+ iMemoryInUse = iMovieSaveSettings.MemoryInUse();
+
+ if (( EProcessingMovieForCutting == iWaitMode ) ||
+ ( EProcessingMovieTrimMms == iWaitMode ) ||
+ ( ECuttingAudio == iWaitMode ))
+ {
+ iMovie->RegisterMovieObserverL( this );
+ iMovie->RegisterMovieObserverL( iContainer );
+ }
+
+ if ( EProcessingMovieForCutting == iWaitMode )
+ {
+ // miksi laitetaan jos ollaan oltu rimmaamassa?
+ //SetNewTempFileNeeded(ETrue);
+
+ TTimeIntervalMicroSeconds cutin;
+ TTimeIntervalMicroSeconds cutout;
+ cutin = iMovie->VideoClipCutInTime( iCutVideoIndex );
+ cutout = iMovie->VideoClipCutOutTime( iCutVideoIndex );
+
+ if (( cutin != TTimeIntervalMicroSeconds( 0 )) ||
+ ( cutout != iMovie->VideoClipInfo( iCutVideoIndex )->Duration()))
+ {
+ iMovieSavedFlag = EFalse;
+ }
+
+ if (( cutin != iOriginalCutInTime ) || ( cutout != iOriginalCutOutTime ) )
+ {
+ SetNewTempFileNeeded( ETrue );
+ iContainer->DrawNow();
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
+ iContainer->UpdateThumbnailL( iCutVideoIndex );
+ }
+ iContainer->SetCursorLocation( VideoEditor::ECursorOnClip );
+ }
+ else if ( ECuttingAudio == iWaitMode )
+ {
+
+ //SetNewTempFileNeeded(ETrue);
+
+ TTimeIntervalMicroSeconds cutin;
+ TTimeIntervalMicroSeconds cutout;
+ cutin = iMovie->AudioClipCutInTime( iCutAudioIndex );
+ cutout = iMovie->AudioClipCutOutTime( iCutAudioIndex );
+
+ if (( cutin != TTimeIntervalMicroSeconds( 0 )) ||
+ ( cutout != iMovie->AudioClipInfo( iCutAudioIndex )->Duration()))
+ {
+ iMovieSavedFlag = EFalse;
+ }
+
+ TTimeIntervalMicroSeconds currentEndTime;
+ TTimeIntervalMicroSeconds nextStartTime;
+
+ for ( TInt i = iContainer->CurrentIndex(); i < ( iMovie->AudioClipCount() - 1 ); i++ )
+ {
+ currentEndTime = iMovie->AudioClipEndTime( i );
+ nextStartTime = iMovie->AudioClipStartTime( i + 1 );
+
+ if ( nextStartTime < currentEndTime )
+ // what is the reason behind?
+ // is this a typo, should it be like this?:
+ //if ( nextStartTime != currentEndTime )
+ {
+ nextStartTime = currentEndTime;
+ iMovie->AudioClipSetStartTime( i + 1, nextStartTime );
+ }
+ }
+ if (( cutin != iOriginalAudioCutInTime ) || ( cutout != iOriginalAudioCutOutTime ))
+ {
+ SetNewTempFileNeeded( ETrue );
+ iContainer->DrawNow();
+ }
+
+ iContainer->SetCursorLocation( VideoEditor::ECursorOnAudio );
+ }
+
+ iNaviPane->PushL( *iEditLabel );
+
+ iSendKey = EFalse;
+ iWaitMode = ENotWaiting;
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoActivateL: out" );
+ }
+
+void CVeiEditVideoView::HandleForegroundEventL( TBool aForeground )
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL: in: %d", aForeground );
+
+ if ( !aForeground )
+ {
+ // If the application is closing down, calling PauseVideoL could result in
+ // a callback from the MMF player after the container is already deleted,
+ // causing KERN-EXEC 3
+ if ( static_cast < CVeiAppUi* > ( AppUi())->AppIsOnTheWayToDestruction())
+ {
+ iContainer->PrepareForTerminationL();
+ return ;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL 1" );
+ //if ( (EditorState() != EEdit ) && iContainer)
+ if ( EPreview == EditorState() || EQuickPreview == EditorState())
+ {
+ iContainer->PauseVideoL();
+ }
+ // In phones with clamshell (läppäpuhelin) background can be activated with closing the shell
+ // iContainer's OfferKeyEvent do not get this kind of shell events
+ if ( EPreview == EditorState())
+ // large preview
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL 2" );
+ SetEditorState( CVeiEditVideoView::EEdit );
+ iContainer->SetBlackScreen( EFalse );
+ SetFullScreenSelected( EFalse );
+ iContainer->StopVideo( ETrue );
+ }
+
+ if (( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecordingPaused ) || ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecording ))
+ {
+ HandleCommandL( EVeiCmdEditVideoViewRecordStop );
+ }
+ DoDeactivate();
+ }
+ else
+ {
+ if ( EditorState() != EEdit )
+ {
+ if ( EMixAudio != EditorState() && EAdjustVolume != EditorState())
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL: 3, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" );
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK );
+ }
+ Cba()->DrawDeferred();
+ }
+
+ /* When view is activated some clips can be deleted or
+ names can be changed.. So check that all video and audio clips are still available.*/
+ if ( iMovie )
+ {
+ TInt i;
+ TFileName clipName;
+ RFs& fs = iEikonEnv->FsSession();
+
+ for ( i = 0; i < iMovie->VideoClipCount(); i++ )
+ {
+ if ( iMovie->VideoClipInfo( i )->Class() == EVedVideoClipClassFile )
+ {
+ clipName = iMovie->VideoClipInfo( i )->FileName();
+
+ if ( !BaflUtils::FileExists( fs, clipName ))
+ {
+ iContainer->GetAndDecrementCurrentIndex();
+
+ iMovie->RemoveVideoClip( i );
+ i--;
+ UpdateMediaGalleryL();
+ }
+ clipName.Zero();
+ }
+ }
+
+ for ( i = 0; i < iMovie->AudioClipCount(); i++ )
+ {
+ clipName = iMovie->AudioClipInfo( i )->FileName();
+
+ if ( !BaflUtils::FileExists( fs, clipName ))
+ {
+ iContainer->GetAndDecrementCurrentIndex();
+
+ iMovie->RemoveAudioClip( i );
+ i--;
+ UpdateMediaGalleryL();
+ }
+ clipName.Zero();
+ }
+
+ }
+
+ UpdateEditNaviLabel();
+ HandleScreenDeviceChangedL();
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL: out" );
+ }
+
+void CVeiEditVideoView::DoDeactivate()
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView:DoDeactivate: In" );
+
+ iNaviPane->Pop( iEditLabel );
+
+ if ( iVolumeHider )
+ {
+ iVolumeHider->Cancel();
+ delete iVolumeHider;
+ iVolumeHider = NULL;
+ }
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView:DoDeactivate: Out" );
+ }
+
+
+TTimeIntervalMicroSeconds CVeiEditVideoView::OriginalAudioDuration()const
+ {
+ return iOriginalAudioDuration;
+ }
+
+TInt CVeiEditVideoView::UpdateNaviPreviewing( TAny* aThis )
+ {
+ STATIC_CAST( CVeiEditVideoView* , aThis )->DoUpdateEditNaviLabelL();
+ return 1;
+ }
+
+
+TInt CVeiEditVideoView::UpdateAudioRecording( TAny* aThis )
+ {
+ STATIC_CAST( CVeiEditVideoView* , aThis )->DoUpdateAudioRecording();
+ return 1;
+ }
+
+void CVeiEditVideoView::DoUpdateAudioRecording()
+ {
+ if ( iRecorder->State() != CMdaAudioClipUtility::ERecording )
+ {
+ iAudioRecordPeriodic->Cancel();
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_CONTINUE_STOP );
+ Cba()->DrawDeferred();
+ }
+ else
+ {
+ TTimeIntervalMicroSeconds duration = iRecorder->Duration();
+
+ iContainer->SetRecordedAudioDuration( duration );
+ iContainer->DrawTrackBoxes();
+
+ UpdateEditNaviLabel();
+
+ // !!!*** Safety margin of 0.5s because cropping does not work, remove when cropping fixed. ***!!!
+ duration = TTimeIntervalMicroSeconds( duration.Int64());
+
+ if (( iRecordedAudioMaxDuration >= TTimeIntervalMicroSeconds( 0 )) && ( duration > iRecordedAudioMaxDuration ))
+ {
+ TRAP_IGNORE( HandleCommandL( EVeiCmdEditVideoViewRecordStop ));
+ }
+ }
+ }
+
+void CVeiEditVideoView::CancelWaitDialog( TInt aError )
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: In, aError:%d", aError );
+ if ( iWaitDialog )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 2" );
+ iWaitDialog->ProcessFinishedL();
+ }
+
+ if ( aError )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 3" );
+ ShowGlobalErrorNote( aError );
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 4" );
+ }
+ Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 5" );
+ Cba()->DrawDeferred();
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: Out" );
+ }
+
+void CVeiEditVideoView::NotifyImageClipGeneratorInitializationComplete( CVeiImageClipGenerator& /*aGenerator*/, TInt aError )
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyImageClipGeneratorInitializationComplete: in, aError:%d", aError );
+ if ( aError != KErrNone )
+ {
+ ShowGlobalErrorNote( aError );
+ delete iGenerator;
+ iGenerator = 0;
+ return ;
+ }
+
+ // insert the generator into movie
+ TInt index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
+ iMovie->InsertVideoClipL( *iGenerator, ETrue, index );
+
+ // Generator is no longer our concern
+ iGenerator = 0;
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyImageClipGeneratorInitializationComplete: out" );
+ }
+
+
+void CVeiEditVideoView::NotifyTitleClipBackgroundImageLoadComplete( CVeiTitleClipGenerator& /*aGenerator*/, TInt aError )
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyTitleClipBackgroundImageLoadComplete: in, aError:%d", aError );
+ if ( aError != KErrNone )
+ {
+ ShowGlobalErrorNote( aError );
+ delete iGenerator;
+ iGenerator = 0;
+ return ;
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyTitleClipBackgroundImageLoadComplete: out" );
+ }
+
+void CVeiEditVideoView::UpdateInsertingProgressNoteL( TInt aProcessed )
+ {
+ TInt queueCount = iMediaQueue->Count();
+
+ CArrayFix < TInt > * numbers = new CArrayFixFlat < TInt > ( 2 );
+ CleanupStack::PushL( numbers );
+ numbers->AppendL( aProcessed );
+ numbers->AppendL( queueCount );
+
+ HBufC* stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_INSERTING_MEDIA, * numbers, iEikonEnv );
+
+ CleanupStack::PushL( stringholder );
+
+ iProgressNote->SetTextL( *stringholder );
+ iProgressNote->DrawNow(); // otherwise text is not drawn at all
+ CleanupStack::PopAndDestroy( stringholder );
+ CleanupStack::PopAndDestroy( numbers );
+ }
+
+void CVeiEditVideoView::MmsSendCompatibleCheck()
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): in" );
+
+ TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize()* 1024;
+
+ CVedMovie::TVedMovieQuality origQuality = iMovie->Quality();
+ iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );
+ TInt sizeEstimate = 0;
+ TRAP_IGNORE( sizeEstimate = iMovie->GetSizeEstimateL());
+ iMovie->SetQuality( origQuality );
+
+ LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): maxMmsSize: %d, sizeEstimate: %d", maxMmsSize, sizeEstimate );
+
+ TInt movieSizeLimit = ( TInt )( maxMmsSize* 0.9 );
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): testing, test:%d", movieSizeLimit );
+
+ if ( sizeEstimate < ( TInt )( maxMmsSize* 1.1 ))
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): SetMovieSizeLimit..ok" );
+ iMovie->SetMovieSizeLimit( movieSizeLimit );
+ }
+
+ TVeiSettings movieSaveSettings;
+
+ if ( iMovie->IsMovieMMSCompatible())
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck: MMSCompatible YES" );
+ iWaitMode = EProcessingMovieTrimMms;
+ StartTempFileProcessingL();
+ }
+ else
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck: MMSCompatible NO" );
+ iWaitMode = EProcessingMovieTrimMms;
+ movieSaveSettings.SaveQuality() = TVeiSettings::EMmsCompatible;
+ StartTempFileProcessingL();
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): out" );
+ }
+
+// Screen twisting
+/*
+/* experimental code trying to fix this:
+EECO-6W39YS
+Manual Video Editor: Wrong layout displays if switching phone mode during large preview playing
+
+void CVeiEditVideoView::HandleScreenDeviceChangedL()
+{
+LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() in");
+if ( iContainer )
+{
+// Orientation changed. Resize container rect and update component
+//positions.
+
+
+// iContainer->SetRect( ClientOrApplicationRect( iFullScreenSelected ) );
+//
+// iContainer->SetRect( AppUi()->ClientRect() );
+//
+
+if(CVeiEditVideoContainer::EModePreview == iContainer->SelectionMode() && iFullScreenSelected &&
+CVeiEditVideoContainer::EStatePlaying == iContainer->PreviewState())
+{
+LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() 1");
+iContainer->SetBlackScreen( ETrue );
+iContainer->SetRect( ClientOrApplicationRect( iFullScreenSelected ) );
+return;
+}
+LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() 2");
+iContainer->SetCursorLocation( iContainer->CursorLocation() );
+iContainer->ArrowsControl();
+
+iContainer->DrawDeferred();
+}
+LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() out");
+}
+ */
+/* Screen twisting */
+void CVeiEditVideoView::HandleScreenDeviceChangedL()
+ {
+ if ( iContainer )
+ {
+ // Orientation changed. Resize container rect and update component
+ //positions.
+ iContainer->SetRect( AppUi()->ClientRect());
+
+ iContainer->SetCursorLocation( iContainer->CursorLocation());
+ iContainer->ArrowsControl();
+
+ iContainer->DrawDeferred();
+ }
+ }
+
+void CVeiEditVideoView::HideVolume()
+ {
+ iNaviPane->Pop( iVolumeNavi );
+
+ delete iVolumeHider;
+ iVolumeHider = NULL;
+ }
+
+TInt CVeiEditVideoView::HideVolumeCallbackL( TAny* aPtr )
+ {
+ CVeiEditVideoView* view = ( CVeiEditVideoView* )aPtr;
+ view->HideVolume();
+ return 0;
+ }
+
+void CVeiEditVideoView::UpdateMediaGalleryL()
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateMediaGalleryL(): In" );
+
+
+ // Publish & Subscribe API used to make the saved file name available to AIW provider
+ if ( iSaveToFileName )
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateMediaGalleryL(): Calling RProperty::Define(KUidVideoEditorProperties, VideoEditor::EPropertyFilename, RProperty::EText); " );
+ TInt err = RProperty::Define( KUidVideoEditorProperties, VideoEditor::EPropertyFilename, RProperty::EText );
+ if ( err != KErrAlreadyExists )
+ {
+ User::LeaveIfError( err );
+ }
+ User::LeaveIfError( RProperty::Set( KUidVideoEditorProperties, VideoEditor::EPropertyFilename, iSaveToFileName->Des()));
+ }
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateMediaGalleryL(): Out" );
+ }
+
+void CVeiEditVideoView::SetFullScreenSelected( TBool aFullScreenSelected )
+ {
+ iFullScreenSelected = aFullScreenSelected;
+ }
+
+void CVeiEditVideoView::StartNaviPaneUpdateL()
+ {
+ if ( iPreviewUpdatePeriodic )
+ {
+ if ( iPreviewUpdatePeriodic->IsActive())
+ {
+ iPreviewUpdatePeriodic->Cancel();
+ }
+
+ iPreviewUpdatePeriodic->Start( 100000, 100000, TCallBack( CVeiEditVideoView::UpdateNaviPreviewing, this ));
+ }
+ }
+
+void CVeiEditVideoView::ShowAndHandleSendMenuCommandsL()
+ {
+ /* Show send menu, postcard dimmed */
+ CArrayFix < TUid > * mtmToDim = new( ELeave )CArrayFixFlat < TUid > ( 3 );
+ TUid userSelection;
+ CleanupStack::PushL( mtmToDim );
+ /*
+ this uid is empirically got with one device 19.10.2006
+ there is currently (19.10.2006) no constans found in headers for Web Upload
+ */
+
+ const TInt KSenduiMtmOwnWebUploadIntValue = 536873429;
+ const TUid KSenduiMtmOwnWebUpload =
+ {
+ KSenduiMtmOwnWebUploadIntValue
+ };
+
+ mtmToDim->AppendL( KSenduiMtmPostcardUid );
+ mtmToDim->AppendL( KSenduiMtmAudioMessageUid );
+ mtmToDim->AppendL( KSenduiMtmOwnWebUpload );
+
+
+ userSelection = iSendAppUi.ShowSendQueryL( NULL, TSendingCapabilities( 0, 0, TSendingCapabilities::ESupportsAttachments ), mtmToDim );
+ CleanupStack::PopAndDestroy( mtmToDim );
+
+ iGivenSendCommand = userSelection;
+
+ if ( IsEnoughFreeSpaceToSaveL())
+ {
+ switch ( userSelection.iUid )
+ {
+ case KSenduiMtmSmtpUidValue:
+ case KSenduiMtmImap4UidValue:
+ case KSenduiMtmPop3UidValue:
+ {
+ LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: %d", userSelection.iUid );
+ iWaitMode = EProcessingMovieSend;
+ StartTempFileProcessingL();
+ break;
+ }
+ case KSenduiMtmIrUidValue:
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: KSenduiMtmIrUidValue" );
+ iWaitMode = EProcessingMovieSend;
+ StartTempFileProcessingL();
+ break;
+ }
+ case KSenduiMtmMmsUidValue:
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: KSenduiMtmMmsUidValue" );
+ iWaitMode = EProcessingMovieTrimMms;
+ MmsSendCompatibleCheck();
+ break;
+ }
+ case KSenduiMtmBtUidValue:
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: KSenduiMtmBtUidValue" );
+ iWaitMode = EProcessingMovieSend;
+ StartTempFileProcessingL();
+ break;
+ }
+ /*case KSenduiMtmOwnWebUploadIntValue: // 0x200009D5
+ {
+ LOG(KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL 6: MTM UID: 536873429");
+ iWaitMode = EProcessingMovieSend;
+ StartTempFileProcessingL();
+ break;
+ }
+ */
+ default:
+ break;
+
+ }
+ }
+ }
+
+void CVeiEditVideoView::StopNaviPaneUpdateL()
+ {
+ DoUpdateEditNaviLabelL();
+
+ if ( iPreviewUpdatePeriodic && iPreviewUpdatePeriodic->IsActive())
+ {
+ iPreviewUpdatePeriodic->Cancel();
+ }
+ }
+
+TRect CVeiEditVideoView::ClientOrApplicationRect( TBool aFullScreenSelected )const
+ {
+ if ( aFullScreenSelected )
+ {
+ return AppUi()->ApplicationRect();
+ }
+ else
+ {
+ return AppUi()->ClientRect();
+ }
+
+ }
+
+TBool CVeiEditVideoView::MixingConditionsOk()const
+ {
+ // prerequisites for sound mixing: at least one video with audio and one imported audio exist
+ if ( iMovie->VideoClipCount() > 0 && iMovie->AudioClipCount() > 0 )
+ {
+ for ( TInt i = 0; i < iMovie->VideoClipCount(); i++ )
+ {
+ //if (iMovie->VideoClipEditedHasAudio(i))
+ if ( iMovie->VideoClipInfo( i )->HasAudio())
+ {
+ return ETrue;
+ }
+ }
+ }
+ return EFalse;
+ }
+
+/*void CVeiEditVideoView::MixAudio()
+{
+
+//TReal gainVideoNew(0);
+//TReal gainAudioNew(0);
+
+TInt gainVideoNew(0);
+TInt gainAudioNew(0);
+
+TInt gainVideoCurrent = iMovie->GetVideoClipVolumeGainL(KVedClipIndexAll);
+TInt gainAudioCurrent = iMovie->GetAudioClipVolumeGainL(KVedClipIndexAll);
+
+// video clips are faded
+if (iContainer->AudioMixingRatio() > 0)
+{
+//@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int
+//Math::Round(fadevideo, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2);
+
+gainVideoNew = iContainer->AudioMixingRatio()*(KVolumeMaxGain/10);
+gainVideoNew += 0.5; // for making real to int rounding work in constructor of TVedDynamicLevelMark
+gainVideoNew = 0 - gainVideoNew;
+}
+// audio clips are faded
+else if (iContainer->AudioMixingRatio() < 0)
+{
+//@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int
+//Math::Round(fadeaudio, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2);
+gainAudioNew = iContainer->AudioMixingRatio()*(KVolumeMaxGain/10);
+gainAudioNew -= 0.5; // for making real to int rounding work in constructor of TVedDynamicLevelMark
+}
+
+if (gainVideoNew != gainVideoCurrent)
+{
+iMovie->SetVideoClipVolumeGainL(KVedClipIndexAll, gainVideoNew);
+}
+if (gainAudioNew != gainAudioCurrent)
+{
+iMovie->SetAudioClipVolumeGainL(KVedClipIndexAll, gainAudioNew);
+}
+}
+ */
+
+void CVeiEditVideoView::MixAudio()
+ {
+ TReal fadevideo( 0 );
+ TReal fadeaudio( 0 );
+
+ // video clips are faded
+ if ( iContainer->AudioMixingRatio() > 0 )
+ {
+ //@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int
+ //Math::Round(fadevideo, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2);
+
+ fadevideo = iContainer->AudioMixingRatio()*( KVolumeMaxGain / 10 );
+ fadevideo += 0.5; // for making real to int rounding work in constructor of TVedDynamicLevelMark
+ fadevideo = 0-fadevideo;
+ fadeaudio = 0;
+ }
+ // audio clips are faded
+ else if ( iContainer->AudioMixingRatio() < 0 )
+ {
+ //@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int
+ //Math::Round(fadeaudio, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2);
+
+ fadeaudio = iContainer->AudioMixingRatio()*( KVolumeMaxGain / 10 );
+ fadeaudio -= 0.5; // for making real to int rounding work in constructor of TVedDynamicLevelMark
+ fadevideo = 0;
+ }
+
+ // video clips are faded
+ if ( iContainer->AudioMixingRatio() > 0 && iMovie->VideoClipCount() > 0 )
+ {
+ TInt gain = iMovie->GetVideoClipVolumeGainL( KVedClipIndexAll ); ///(KVolumeMaxGain/10);
+ TInt gainNew = ( TInt )fadevideo;
+ if ( gainNew != gain )
+ {
+ iMovie->SetAudioClipVolumeGainL( KVedClipIndexAll, 0 );
+ iMovie->SetVideoClipVolumeGainL( KVedClipIndexAll, gainNew );
+ }
+ }
+ // audio clips are faded
+ else if ( iContainer->AudioMixingRatio() < 0 && iMovie->AudioClipCount() > 0 )
+ {
+ TInt gain = iMovie->GetAudioClipVolumeGainL( KVedClipIndexAll ); ///(KVolumeMaxGain/10);
+ TInt gainNew = ( TInt )fadeaudio;
+ if ( gainNew != gain )
+ {
+ iMovie->SetVideoClipVolumeGainL( KVedClipIndexAll, 0 );
+ iMovie->SetAudioClipVolumeGainL( KVedClipIndexAll, gainNew );
+ }
+ }
+ else
+ //if marks set back to position '0'
+ {
+ if ( 0 != iMovie->GetVideoClipVolumeGainL( KVedClipIndexAll ))
+ {
+ iMovie->SetVideoClipVolumeGainL( KVedClipIndexAll, 0 );
+ }
+ if ( 0 != iMovie->GetAudioClipVolumeGainL( KVedClipIndexAll ))
+ {
+ iMovie->SetAudioClipVolumeGainL( KVedClipIndexAll, 0 );
+ }
+ }
+ }
+
+void CVeiEditVideoView::AdjustVolumeL()
+ {
+ TReal adjustVolume = iContainer->Volume()*( KVolumeMaxGain / 10 );
+ // to make rounding to int work correctly in constructor of TVedDynamicLevelMark
+ // @ : if adjustvolume is x.0, rounding does not work, think how to fix problem
+ if ( 0 < adjustVolume )
+ {
+ adjustVolume += 0.5;
+ }
+ else
+ {
+ adjustVolume -= 0.5;
+ }
+
+ if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
+ {
+ TReal currentVolume = iMovie->GetVideoClipVolumeGainL( iContainer->CurrentIndex()); ///(KVolumeMaxGain/10);
+ if ( 0 == iContainer->Volume())
+ {
+ if ( 0 != ( TInt )currentVolume )
+ {
+ iMovie->SetVideoClipVolumeGainL( iContainer->CurrentIndex(), 0 );
+ }
+ }
+ else if (( TInt )currentVolume != ( TInt )adjustVolume )
+ {
+ iMovie->SetVideoClipVolumeGainL( iContainer->CurrentIndex(), ( TInt )adjustVolume );
+ }
+ }
+ else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
+ {
+ TReal currentVolume = iMovie->GetAudioClipVolumeGainL( iContainer->CurrentIndex()); ///(KVolumeMaxGain/10);
+ if ( 0 == iContainer->Volume())
+ {
+ if ( 0 != ( TInt )currentVolume )
+ {
+ iMovie->SetAudioClipVolumeGainL( iContainer->CurrentIndex(), 0 );
+ }
+ }
+ else if (( TInt )currentVolume != ( TInt )adjustVolume )
+ {
+ iMovie->SetAudioClipVolumeGainL( iContainer->CurrentIndex(), ( TInt )adjustVolume );
+ }
+ }
+ }
+
+void CVeiEditVideoView::StoreOrientation()
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::StoreOrientation: in" );
+
+ iOriginalOrientation = AppUi()->Orientation();
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::StoreOrientation: out" );
+ }
+
+void CVeiEditVideoView::RestoreOrientation()
+ {
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::RestoreOrientation: in" );
+
+ TRAP_IGNORE( AppUi()->SetOrientationL( iOriginalOrientation ));
+
+ LOG( KVideoEditorLogFile, "CVeiEditVideoView::RestoreOrientation: out" );
+ }
+
+void CVeiEditVideoView::SetNewTempFileNeeded( const TBool aUpdateNeeded )
+ {
+ iUpdateTemp = aUpdateNeeded;
+ }
+
+// End of File