diff -r 000000000000 -r 951a5db380a0 videditor/ManualVideoEditor/src/VeiCutAudioView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videditor/ManualVideoEditor/src/VeiCutAudioView.cpp Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,989 @@ +/* +* Copyright (c) 2010 Ixonos Plc. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - Initial contribution +* +* Contributors: +* Ixonos Plc +* +* Description: +* +*/ + + +// INCLUDE FILES +// System includes +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//User includes +#include "VeiAppUi.h" +#include "VeiCutAudioView.h" +#include "VeiCutAudioContainer.h" +#include "ManualVideoEditor.hrh" +#include "VeiTimeLabelNavi.h" +#include "VideoEditorCommon.h" +#include "VeiVideoEditorSettings.h" +#include "VeiErrorUi.h" + +CVeiCutAudioView* CVeiCutAudioView::NewL() + { + CVeiCutAudioView* self = CVeiCutAudioView::NewLC(); + CleanupStack::Pop( self ); + + return self; + } + + +CVeiCutAudioView* CVeiCutAudioView::NewLC() + { + CVeiCutAudioView* self = new (ELeave) CVeiCutAudioView(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +CVeiCutAudioView::CVeiCutAudioView() + { + } + +void CVeiCutAudioView::ConstructL() + { + BaseConstructL( R_VEI_CUT_AUDIO_VIEW ); + + CEikStatusPane* sp = StatusPane(); + + iNaviPane = (CAknNavigationControlContainer*) sp->ControlL( + TUid::Uid(EEikStatusPaneUidNavi)); + + iTimeNavi = CreateTimeLabelNaviL(); + iTimeNavi->SetMopParent( this ); + + iVolumeNavi = iNaviPane->CreateVolumeIndicatorL( + R_AVKON_NAVI_PANE_VOLUME_INDICATOR ); + + iErrorUI = CVeiErrorUI::NewL( *iCoeEnv ); + + iTimeUpdater = CPeriodic::NewL( CActive::EPriorityLow ); + iVolumeHider = CPeriodic::NewL( CActive::EPriorityLow ); + } + +// --------------------------------------------------------- +// CVeiCutAudioView::~CVeiCutAudioView() +// ?implementation_description +// --------------------------------------------------------- +// +CVeiCutAudioView::~CVeiCutAudioView() + { + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = 0; + } + if ( iTimeUpdater ) + { + iTimeUpdater->Cancel(); + delete iTimeUpdater; + } + if ( iVolumeHider ) + { + iVolumeHider->Cancel(); + delete iVolumeHider; + } + + if ( iErrorUI ) + { + delete iErrorUI; + } + + delete iVolumeNavi; + + delete iTimeNavi; + + delete iCallBack; + } + + +void CVeiCutAudioView::DynInitMenuPaneL( TInt aResourceId,CEikMenuPane* aMenuPane ) + { + TInt state = iContainer->State(); + + if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU_CLEAR_MARKS) + { + // delet in, out, in & out as necessary. + + if (iMovie->AudioClipCutInTime(iIndex) <= TTimeIntervalMicroSeconds(0)) + { + aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksIn, ETrue); + } + if (iMovie->AudioClipCutOutTime(iIndex) >= iMovie->AudioClipInfo(iIndex)->Duration() ) + { + aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksOut, ETrue); + } + if (!((iMovie->AudioClipCutOutTime(iIndex) < iMovie->AudioClipInfo(iIndex)->Duration()) + && (iMovie->AudioClipCutInTime(iIndex) > TTimeIntervalMicroSeconds(0)))) + { + aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksInOut, ETrue); + } + } + + if ( aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU ) + { + aMenuPane->SetItemDimmed( EVeiCmdCutVideoTakeSnapshot, ETrue ); + + if ( iPopupMenuOpened != EFalse ) + { + aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue ); + aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewHelp, ETrue ); + } + + if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) && + iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo( iIndex )->Duration() ) ) + { + aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewPlayMarked ); + } + if ( state != CVeiCutAudioContainer::EStatePlayingMenuOpen && + state != CVeiCutAudioContainer::EStatePaused ) + { + aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewContinue ); + } + if ( ( state == CVeiCutAudioContainer::EStateStopped ) || + ( state == CVeiCutAudioContainer::EStateStoppedInitial ) ) + { + aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewStop ); + } + + if ( ( iMovie->AudioClipCutOutTime( iIndex ) >= iMovie->AudioClipInfo( iIndex )->Duration() ) && + ( iMovie->AudioClipCutInTime( iIndex ) <= TTimeIntervalMicroSeconds( 0 ) ) ) + { + aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue ); + } + if ( state == CVeiCutAudioContainer::EStatePaused ) + { + aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue ); + } + if ( state == CVeiCutAudioContainer::EStateStoppedInitial ) + { + //aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue ); + //aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue ); + } + } + + if ( aResourceId != R_VEI_CUT_VIDEO_VIEW_MENU ) + return; + + + if ( ( state != CVeiCutAudioContainer::EStateStopped ) && + ( state != CVeiCutAudioContainer::EStateStoppedInitial ) && + ( state != CVeiCutAudioContainer::EStatePaused ) ) + { + aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue ); + aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue ); + aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue ); + } + else + { + if ( iContainer->PlaybackPositionL() <= iMovie->AudioClipCutInTime( iIndex ) ) + { + aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue ); + } + else + { + if ( iContainer->PlaybackPositionL() >= iMovie->AudioClipCutOutTime( iIndex ) ) + { + aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue ); + } + } + } + + } + +TUid CVeiCutAudioView::Id() const + { + return TUid::Uid( EVeiCutAudioView ); + } + +void CVeiCutAudioView::HandleCommandL(TInt aCommand) + { + switch ( aCommand ) + { + case EAknSoftkeyOk: + { + iPopupMenuOpened = ETrue; + if (iContainer->State() == CVeiCutAudioContainer::EStatePlaying) + { + PausePreviewL(); + iContainer->SetStateL(CVeiCutAudioContainer::EStatePlayingMenuOpen); + } + + MenuBar()->TryDisplayMenuBarL(); + if (iContainer->State() == CVeiCutAudioContainer::EStatePlayingMenuOpen) + { + iContainer->SetStateL(CVeiCutAudioContainer::EStatePaused); + } + iPopupMenuOpened = EFalse; + break; + } + case EVeiCmdCutVideoViewDone: + case EVeiCmdCutVideoViewBack: + case EAknSoftkeyBack: + { + iContainer->CloseStreamL(); + + StopNaviPaneUpdateL(); + + // Activate Edit Video view + AppUi()->ActivateLocalViewL( TUid::Uid(EVeiEditVideoView) ); + break; + } + + case EVeiCmdCutVideoViewMarkIn: + { + MarkInL(); + break; + } + case EVeiCmdCutVideoViewMarkOut: + { + MarkOutL(); + break; + } + case EVeiCmdCutVideoViewClearMarksInOut: + { + ClearInOutL( ETrue, ETrue ); + break; + } + case EVeiCmdCutVideoViewClearMarksIn: + { + ClearInOutL( ETrue, EFalse ); + break; + } + case EVeiCmdCutVideoViewClearMarksOut: + { + ClearInOutL( EFalse, ETrue ); + break; + } + case EVeiCmdCutVideoViewPlayMarked: + { + STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> + SetPauseIconVisibilityL( EFalse ); + PlayMarkedL(); + break; + } + case EVeiCmdCutVideoViewPlay: + { + STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> + SetPauseIconVisibilityL( EFalse ); + iNaviPane->PushL( *iTimeNavi ); + + PlayPreviewL(); + break; + } + case EVeiCmdCutVideoViewStop: + { + STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> + SetPauseIconVisibilityL( EFalse ); + iNaviPane->PushL( *iTimeNavi ); + iContainer->StopL(); + StopNaviPaneUpdateL(); + break; + } + case EVeiCmdCutVideoViewContinue: + { + STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> + SetPauseIconVisibilityL( EFalse ); + iNaviPane->PushL( *iTimeNavi ); + PlayPreviewL(); + break; + } + case EVeiCmdCutVideoVolumeDown: + { + if ( !iAudioMuted ) + { + VolumeDownL(); + } + break; + } + case EVeiCmdCutVideoVolumeUp: + { + if ( !iAudioMuted ) + { + VolumeUpL(); + } + break; + } + // + // Options->Help + // + case EVeiCmdCutVideoViewHelp: + { + // CS Help launching is handled in Video Editor's AppUi. + AppUi()->HandleCommandL( EVeiCmdCutVideoViewHelp ); + break; + } + default: + { + AppUi()->HandleCommandL( aCommand ); + break; + } + } + } + + +void CVeiCutAudioView::DoActivateL( + const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/) + { + + if (!iContainer) + { + iContainer = CVeiCutAudioContainer::NewL( AppUi()->ClientRect(), *this, *iErrorUI ); + iContainer->SetMopParent( this ); + AppUi()->AddToStackL( *this, iContainer ); + } + + CEikStatusPane *statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane(); + + CAknTitlePane* titlePane = (CAknTitlePane*) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ); + TResourceReader reader1; + iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_CUTAUDIO_VIEW_TITLE_NAME ); + titlePane->SetFromResourceL( reader1 ); + CleanupStack::PopAndDestroy(); //reader1 + + iNaviPane->PushL( *iTimeNavi ); + + iAudioMuted = EFalse; + + STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())-> + SetVolumeIconVisibilityL( ETrue ); + STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> + SetPauseIconVisibilityL( EFalse ); + + iContainer->SetInTimeL( iMovie->AudioClipCutInTime( iIndex ) ); + iContainer->SetOutTimeL( iMovie->AudioClipCutOutTime( iIndex ) ); + iContainer->SetDuration( iMovie->AudioClipInfo( iIndex )->Duration() ); + + // +/* TTimeIntervalMicroSeconds time1 = iMovie->AudioClipInfo( iIndex )->Duration(); + TTimeIntervalMicroSeconds time2 = iMovie->AudioClipCutInTime( iIndex ); + TTimeIntervalMicroSeconds time3 = iMovie->AudioClipCutOutTime( iIndex ); + TTimeIntervalMicroSeconds time4 = iMovie->AudioClipStartTime( iIndex ); + TTimeIntervalMicroSeconds time5 = iMovie->AudioClipEndTime( iIndex ); + TTimeIntervalMicroSeconds time6 = iMovie->AudioClipEditedDuration( iIndex ); + TTimeIntervalMicroSeconds time7(time3.Int64() - time2.Int64()); + TTimeIntervalMicroSeconds time8(time5.Int64() - time4.Int64()); +*/ // + + // Start processing the file asynchronously. This is needed because + // CVeiCutAudioContainer::OpenAudioFileL launches a progress dialog. + // If it is called syncronously the previous view deactivation has + // not completed, and view shutter dismisses the progress dialog... + if (! iCallBack) + { + TCallBack cb (CVeiCutAudioView::AsyncOpenAudioFile, this); + iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard); + } + iCallBack->CallBack(); + + iOriginalCutInTime = iMovie->AudioClipCutInTime( iIndex ); + + DrawTimeNaviL(); + + iErrorNmb = 0; + } + +// --------------------------------------------------------- +// CVeiCutAudioView::AsyncOpenAudioFile +// ?implementation_description +// --------------------------------------------------------- +// +TInt CVeiCutAudioView::AsyncOpenAudioFile(TAny* aThis) + { + LOG( KVideoEditorLogFile, "CVeiCutAudioView::AsyncOpenAudioFile"); + + // 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. + CVeiCutAudioView* view = static_cast(aThis); + TRAPD(err, view->OpenAudioFileL() ); + + if (err) + { + // Display error message here, otherwise it would be quietly ignored. + TBuf<256> unused; + view->AppUi()->HandleError(err, SExtendedError(), unused, unused); + } + + return err; + } + +// --------------------------------------------------------- +// CVeiCutAudioView::OpenAudioFileL() +// ?implementation_description +// --------------------------------------------------------- +// +void CVeiCutAudioView::OpenAudioFileL() + { + TFileName audioClipFileName = iMovie->AudioClipInfo( iIndex )->FileName(); + iContainer->OpenAudioFileL( audioClipFileName ); + } + +// --------------------------------------------------------- +// CVeiCutAudioView::DoDeactivate() +// ?implementation_description +// --------------------------------------------------------- +// +void CVeiCutAudioView::DoDeactivate() + { + iNaviPane->Pop( iVolumeNavi ); + + if ( iTimeUpdater ) + { + iTimeUpdater->Cancel(); + } + if ( iVolumeHider ) + { + iVolumeHider->Cancel(); + } + if ( iContainer ) + { + iNaviPane->Pop( iTimeNavi ); + AppUi()->RemoveFromViewStack( *this, iContainer ); + + delete iContainer; + iContainer = NULL; + } + + } + +void CVeiCutAudioView::SetVideoClipAndIndex( CVedMovie& aVideoClip, TInt aIndex ) + { + iMovie = &aVideoClip; + + iIndex = aIndex; + } + +void CVeiCutAudioView::PlayPreviewL() + { + iPlayMarked = EFalse; + StartNaviPaneUpdateL(); + iContainer->PlayL(); + } + +void CVeiCutAudioView::PausePreviewL() + { + STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> + SetPauseIconVisibilityL( ETrue ); + StopNaviPaneUpdateL(); + iContainer->PauseL(); + } + +void CVeiCutAudioView::UpdateCBAL(TInt aState) + { + switch (aState) + { + case CVeiCutAudioContainer::EStateInitializing: + case CVeiCutAudioContainer::EStateOpening: + { + Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY); + break; + } + case CVeiCutAudioContainer::EStateStoppedInitial: + { + if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) ) && + ( iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo(iIndex)->Duration() ) ) + { + Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK); + } + else + { + Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_DONE); + } + break; + } + case CVeiCutAudioContainer::EStatePaused: + case CVeiCutAudioContainer::EStateStopped: + { + if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) ) && + ( iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo(iIndex)->Duration() ) ) + { + Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK); + } + else + { + Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_DONE); + } + break; + } + case CVeiCutAudioContainer::EStatePlaying: + { + + if ( iContainer->PlaybackPositionL() < iMovie->AudioClipCutInTime( iIndex ) ) + { + Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_EMPTY ); + iMarkState = EMarkStateIn; + } + else if ( iContainer->PlaybackPositionL() < iMovie->AudioClipCutOutTime( iIndex ) ) + { + Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_OUT ); + iMarkState = EMarkStateInOut; + } + else if ( ( iContainer->PlaybackPositionL() > iMovie->AudioClipCutOutTime( iIndex ) ) && iPlayMarked ) + { + iContainer->StopL(); + iPlayMarked = EFalse; + } + else + { + Cba()->SetCommandSetL( R_VEI_SOFTKEYS_EMPTY_OUT ); + iMarkState = EMarkStateOut; + } + break; + } + default: + { + break; + } + } + Cba()->DrawDeferred(); + } + +void CVeiCutAudioView::PlayMarkedL() + { + TTimeIntervalMicroSeconds audioPlayStartTime; + audioPlayStartTime = iMovie->AudioClipCutInTime( iIndex ); + + TTimeIntervalMicroSeconds audioPlayCutOutTime; + audioPlayCutOutTime = iMovie->AudioClipCutOutTime( iIndex ); + + if ( !(( audioPlayStartTime.Int64() + 50000 ) > audioPlayCutOutTime.Int64() ) ) + { + iPlayMarked = ETrue; + StartNaviPaneUpdateL(); + + iContainer->PlayL( audioPlayStartTime.Int64() + 1000 ); + } + else + { + iContainer->StopL(); + } + } + +void CVeiCutAudioView::ClearInOutL( TBool aClearIn, TBool aClearOut ) + { + if ( aClearIn ) + { + iMovie->AudioClipSetCutInTime( iIndex, TTimeIntervalMicroSeconds( 0 ) ); + iContainer->SetInTimeL( iMovie->AudioClipCutInTime( iIndex ) ); + } + if ( aClearOut ) + { + TTimeIntervalMicroSeconds audioClipOriginalDuration; + audioClipOriginalDuration = iMovie->AudioClipInfo( iIndex )->Duration(); + iMovie->AudioClipSetCutOutTime( iIndex, audioClipOriginalDuration ); + iContainer->SetOutTimeL( audioClipOriginalDuration ); + } + + TTimeIntervalMicroSeconds cutin = iMovie->AudioClipCutInTime( iIndex ); + TTimeIntervalMicroSeconds cutout = iMovie->AudioClipCutOutTime( iIndex ); + + if ( ( cutin == TTimeIntervalMicroSeconds( 0 ) ) && + ( cutout == iMovie->AudioClipInfo(iIndex)->Duration() ) ) + { + Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK); + Cba()->DrawDeferred(); + } + } + +void CVeiCutAudioView::MarkInL() + { + STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> + SetPauseIconVisibilityL( ETrue ); + StopNaviPaneUpdateL(); +/* Check that cut in time is before cut out time */ + TTimeIntervalMicroSeconds cutOutTime = iMovie->AudioClipCutOutTime( iIndex ); + TTimeIntervalMicroSeconds cutInTime = iContainer->PlaybackPositionL(); + if ( cutInTime >= cutOutTime ) + { + cutInTime = cutOutTime.Int64() - 100000; + } + + iMovie->AudioClipSetCutInTime( iIndex, cutInTime ); + iContainer->MarkedInL(); + } + +void CVeiCutAudioView::MarkOutL() + { + STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> + SetPauseIconVisibilityL( ETrue ); + StopNaviPaneUpdateL(); + + TTimeIntervalMicroSeconds cutOutTime = iContainer->PlaybackPositionL(); + TTimeIntervalMicroSeconds cutInTime = iMovie->AudioClipCutInTime( iIndex ); + if ( cutOutTime <= cutInTime ) + { + cutOutTime = cutInTime.Int64() + 100000; + } + + //iMovie->AudioClipSetCutOutTime( iIndex, iContainer->PlaybackPositionL() ); + iMovie->AudioClipSetCutOutTime( iIndex, cutOutTime ); + iContainer->MarkedOutL(); + } + +void CVeiCutAudioView::MoveStartOrEndMarkL( TTimeIntervalMicroSeconds aPosition, CVeiCutAudioContainer::TCutMark aMarkType ) + { + LOG(KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, In"); + + StopNaviPaneUpdateL(); + + LOG(KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, 2"); + + if ( aMarkType == CVeiCutAudioContainer::EStartMark ) + { + iMovie->VideoClipSetCutInTime( iIndex, aPosition ); + } + else if ( aMarkType == CVeiCutAudioContainer::EEndMark ) + { + iMovie->VideoClipSetCutOutTime( iIndex, aPosition ); + } + LOG( KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, Out" ); + } + + +TUint CVeiCutAudioView::InPointTime() + { + if ( !iMovie ) + { + return 0; + } + else + { + return (static_cast(iMovie->AudioClipCutInTime(iIndex).Int64() / 1000)); + } + } + +TUint CVeiCutAudioView::OutPointTime() + { + if ( !iMovie ) + { + return 0; + } + else + { + return (static_cast(iMovie->AudioClipCutOutTime(iIndex).Int64() / 1000)); + } + } + +CAknNavigationDecorator* CVeiCutAudioView::CreateTimeLabelNaviL() + { + 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; + } + +TInt CVeiCutAudioView::UpdateTimeCallbackL(TAny* aPtr) + { + CVeiCutAudioView* view = (CVeiCutAudioView*)aPtr; + + view->UpdateTimeL(); + + return 1; + } + + +void CVeiCutAudioView::UpdateTimeL() + { + DrawTimeNaviL(); + + TTimeIntervalMicroSeconds playbackPos = iContainer->PlaybackPositionL(); + + if (iMarkState == EMarkStateIn) + { + if (playbackPos > iMovie->AudioClipCutInTime( iIndex )) + { + UpdateCBAL(iContainer->State()); + } + } + else if (iMarkState == EMarkStateOut) + { + if (playbackPos < iMovie->AudioClipCutOutTime( iIndex )) + { + UpdateCBAL(iContainer->State()); + } + } + else + { + if ((playbackPos < iMovie->AudioClipCutInTime( iIndex )) || + (playbackPos > iMovie->AudioClipCutOutTime( iIndex ))) + { + UpdateCBAL(iContainer->State()); + } + } + } + +void CVeiCutAudioView::DrawTimeNaviL() + { + TTime elapsed( iContainer->PlaybackPositionL().Int64() ); + TTime total( iContainer->TotalLength().Int64() ); + + TBuf<16> elapsedBuf; + TBuf<16> totalBuf; + + HBufC* dateFormatString; + + if ( ( total.Int64() / 1000 ) < 3600000 ) // check if time is over 99:59 + { + 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 (ELeave) 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*, iTimeNavi->DecoratedControl())->SetLabelL(stringholder->Des()); + + CleanupStack::PopAndDestroy(stringholder); + + + /* Prevent the screen light dimming. */ + if (elapsed.DateTime().Second() == 0 || elapsed.DateTime().Second() == 15 || elapsed.DateTime().Second() == 30 || elapsed.DateTime().Second() == 45) + { + User::ResetInactivityTime(); + } + } + + +void CVeiCutAudioView::StartNaviPaneUpdateL() + { + DrawTimeNaviL(); + if (iTimeUpdater && !iTimeUpdater->IsActive()) + { + iTimeUpdater->Start(500000, 500000, TCallBack(CVeiCutAudioView::UpdateTimeCallbackL, this)); + } + } + +void CVeiCutAudioView::StopNaviPaneUpdateL() + { + if (iContainer) + { + DrawTimeNaviL(); + } + if (iTimeUpdater && iTimeUpdater->IsActive()) + { + iTimeUpdater->Cancel(); + } + } + +TInt CVeiCutAudioView::HideVolumeCallbackL(TAny* aPtr) + { + CVeiCutAudioView* view = (CVeiCutAudioView*)aPtr; + view->HideVolume(); + return 0; + } + +void CVeiCutAudioView::HideVolume() + { + iNaviPane->Pop(iVolumeNavi); + } + +void CVeiCutAudioView::VolumeMuteL() + { + iContainer->SetVolumeL(-1000); + } + +void CVeiCutAudioView::VolumeDownL() + { + iContainer->SetVolumeL(-1); + TInt volume = iContainer->Volume(); + if (iVolumeHider->IsActive()) + { + iVolumeHider->Cancel(); + } + if (volume == 0) + { + STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())-> + SetVolumeIconVisibilityL( EFalse ); + HideVolume(); + volume = 1; + return; + } + + iNaviPane->PushL(*iVolumeNavi); + iVolumeHider->Start(1000000, 100000, TCallBack(CVeiCutAudioView::HideVolumeCallbackL, this)); + + STATIC_CAST(CAknVolumeControl*, iVolumeNavi->DecoratedControl())->SetValue(volume); + + STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(ETrue); + + if (volume < iContainer->MaxVolume()) + { + STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(ETrue); + } + else + { + STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(EFalse); + } + } + +void CVeiCutAudioView::VolumeUpL() + { + iContainer->SetVolumeL(1); + STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())-> + SetVolumeIconVisibilityL( ETrue ); + + TInt volume = iContainer->Volume(); + if (iVolumeHider->IsActive()) + { + iVolumeHider->Cancel(); + } + iNaviPane->PushL(*iVolumeNavi); + iVolumeHider->Start(1000000, 1000000, TCallBack(CVeiCutAudioView::HideVolumeCallbackL, this)); + + STATIC_CAST(CAknVolumeControl*, iVolumeNavi->DecoratedControl())->SetValue(volume); + + if (volume > iContainer->MinVolume() + 1) + { + STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(ETrue); + } + else + { + STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(EFalse); + } + + if (volume < iContainer->MaxVolume()) + { + STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(ETrue); + } + else + { + STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(EFalse); + } + + } + +void CVeiCutAudioView::HandleForegroundEventL ( TBool aForeground ) + { + if ( !aForeground ) + { + // If the application is closing down, calling PauseL could result in + // a callback from the MMF player after the container is already deleted, + // causing KERN-EXEC 3 + if ( static_cast( AppUi() )->AppIsOnTheWayToDestruction() ) + { + iContainer->PrepareForTerminationL(); + } + else + { + iContainer->PauseL(); + } + iNaviPane->Pop( iTimeNavi ); + } + else + { + iNaviPane->PushL( *iTimeNavi ); + } + } + +// --------------------------------------------------------- +// CVeiCutAudioView::HandleStatusPaneSizeChange() +// --------------------------------------------------------- +// +void CVeiCutAudioView::HandleStatusPaneSizeChange() + { + if ( iContainer ) + { + iContainer->SetRect( AppUi()->ClientRect() ); + } + } + +void CVeiCutAudioView::GetAudioVisualizationL() + { + LOG(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization(), In"); + CVedAudioClipInfo* audioInfo = NULL; + if (iMovie) + { + audioInfo = iMovie->AudioClipInfo( iIndex ); + if (audioInfo && iContainer) + { + TInt64 duration = audioInfo->Duration().Int64(); + TInt resolution = (duration/1000)/KAudioSampleInterval; + + LOGFMT(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization() 2, calling audioInfo->GetVisualizationL(*iContainer, resolution, 1), where resolution is:%Ld", resolution); + audioInfo->GetVisualizationL(*iContainer, resolution, 1); + } + } + + LOG(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization(), Out"); + } + +void CVeiCutAudioView::CancelVisualizationL() + { + CVedAudioClipInfo* audioInfo = NULL; + if (iMovie) + { + audioInfo = iMovie->AudioClipInfo( iIndex ); + } + if (audioInfo && iContainer) + { + TInt resolution = (audioInfo->Duration().Int64()/1000)/KAudioSampleInterval; + audioInfo->CancelVisualizationL(); + } + } + +void CVeiCutAudioView::HandleResourceChange(TInt aType) + { + LOGFMT(KVideoEditorLogFile, "CVeiCutAudioView::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 + iTimeNavi->DecoratedControl()->HandleResourceChange( aType ); + iVolumeNavi->DecoratedControl()->HandleResourceChange( aType ); + } + + LOG(KVideoEditorLogFile, "CVeiCutAudioView::HandleResourceChange() Out"); + } + +// End of File