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