diff -r 000000000000 -r 951a5db380a0 videditor/ManualVideoEditor/src/VeiEditVideoView.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +// 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(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