diff -r 000000000000 -r 951a5db380a0 videditor/TrimForMms/src/VeiTrimForMmsContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videditor/TrimForMms/src/VeiTrimForMmsContainer.cpp Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,1018 @@ +/* +* 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 // AknIconUtils +#include // iEikonEnv +#include // Video Editor resources +#include // StringLoader + +#include +#include + +#include +#include +#include + +#include +#include +#include + + +// User includes +#include "VeiTrimForMmsContainer.h" +#include "VeiVideoDisplay.h" +#include "VideoEditorCommon.h" +//#include "VideoEditorHelp.hlp.hrh" // Topic contexts (literals) +#include "veiframetaker.h" +#include "VeiTrimForMmsView.h" +#include "VeiCutterBar.h" +#include "VeiVideoEditorSettings.h" +#include "VideoEditorUtils.h" +#include "VideoEditorDebugUtils.h" + +void CVeiTrimForMmsContainer::DialogDismissedL( TInt /*aButtonId*/ ) + { + iProgressInfo = NULL; + } + + +CVeiTrimForMmsContainer* CVeiTrimForMmsContainer::NewL( const TRect& aRect, + CVedMovie& aMovie, CVeiTrimForMmsView& aView ) + { + CVeiTrimForMmsContainer* self = CVeiTrimForMmsContainer::NewLC( aRect, + aMovie, + aView ); + CleanupStack::Pop( self ); + + return self; + } + +CVeiTrimForMmsContainer* CVeiTrimForMmsContainer::NewLC( const TRect& aRect, + CVedMovie& aMovie, + CVeiTrimForMmsView& aView) + { + CVeiTrimForMmsContainer* self = + new(ELeave)CVeiTrimForMmsContainer( aMovie, aView ); + + CleanupStack::PushL( self ); + self->ConstructL( aRect ); + + return self; + } + + +CVeiTrimForMmsContainer::CVeiTrimForMmsContainer( CVedMovie& aMovie, CVeiTrimForMmsView& aView ): + iLastKeyLeftOrRight(EFalse), + iMovie(aMovie), + iView( aView ) + + { + } + + +void CVeiTrimForMmsContainer::ConstructL( const TRect& aRect ) + { + LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::ConstructL: in"); + + // Make this compound control window-owning. + CreateWindowL(); + + iMovie.RegisterMovieObserverL( this ); + + // Read the texts shown above the thumbnails from resources + iStartText = StringLoader::LoadL( R_VED_THUMBNAIL_START_TEXT, iEikonEnv ); + iEndText = StringLoader::LoadL( R_VED_THUMBNAIL_END_TEXT, iEikonEnv ); + + iSeekPos = TTimeIntervalMicroSeconds( 0 ); + + iVideoDisplayStart = CVeiVideoDisplay::NewL( iVideoDisplayStartRect, this, *this ); + + iVideoDisplayEnd = CVeiVideoDisplay::NewL( iVideoDisplayEndRect, this, *this ); + + iCutterBar = CVeiCutterBar::NewL( this ); + iCutterBar->SetPlayHeadVisible( EFalse ); + iVideoDisplay = CVeiVideoDisplay::NewL( aRect, this, *this ); + + iFrameTaker = CVeiFrameTaker::NewL( *this ); + + /* Timer to keep back light on when user is not giving key events */ + iScreenLight = CVeiDisplayLighter::NewL(); + CVeiVideoEditorSettings::GetMaxMmsSizeL( iMaxMmsSize ); + /* SharedData returns maxmmssize in kbytes. Change it to bytes(1000) and + add some margin to final value.*/ + iMaxMmsSize = STATIC_CAST( TInt, iMaxMmsSize*0.98 ); + iBlack = EFalse; + + // Set this control extent. + SetRect( aRect ); + iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse ); + + ActivateL(); + + iKeyEnable = EFalse; + LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::ConstructL: out"); + } + + + +CVeiTrimForMmsContainer::~CVeiTrimForMmsContainer() + { + iMovie.UnregisterMovieObserver( this ); + + delete iEndText; + delete iStartText; + delete iScreenLight; + + delete iCutterBar; + + delete iVideoDisplayStart; + delete iVideoDisplayEnd; + if( iVideoDisplay ) + { + delete iVideoDisplay; + iVideoDisplay = NULL; + } + + if (iFrameTaker) + { + delete iFrameTaker; + iFrameTaker = NULL; + } + + if ( iProgressNote ) + { + delete iProgressNote; + iProgressNote = NULL; + } + iProgressInfo = NULL; + + delete iBgContext; + } + +void CVeiTrimForMmsContainer::SetMaxMmsSize( TInt aMaxSizeInBytes ) + { + iMaxMmsSize = aMaxSizeInBytes; + } + +const TTimeIntervalMicroSeconds& CVeiTrimForMmsContainer::CutInTime() const + { + return iSeekPos; + } + + +const TTimeIntervalMicroSeconds& CVeiTrimForMmsContainer::CutOutTime() const + { + return iSeekEndPos; + } + + +// ---------------------------------------------------------------------------- +// CVeiTrimForMmsContainer::ComponentControl(...) const +// +// Gets the specified component of a compound control. +// ---------------------------------------------------------------------------- +// +CCoeControl* CVeiTrimForMmsContainer::ComponentControl( TInt aIndex ) const + { + LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::ComponentControl()"); + + switch( aIndex ) + { + // + // iCutterDisplay + // + case ECutFrame: + { + return iCutterBar; + } + // + // iVideoDisplayStart + // + case EVideoDisplayStart: + { + return iVideoDisplayStart; + } + // + // iVideoDisplayEnd + // + case EVideoDisplayEnd: + { + return iVideoDisplayEnd; + } + // + // iVideoDisplay + // + case EVideoPreview: + { + return iVideoDisplay; + + } + + // + // Default + // + default: + { + return NULL; + } + } + + } + + +// ---------------------------------------------------------------------------- +// CVeiTrimForMmsContainer::CountComponentControls() const +// +// Gets the number of controls contained in a compound control. +// ---------------------------------------------------------------------------- +// +TInt CVeiTrimForMmsContainer::CountComponentControls() const + { + return ENumberOfControls; + } + + +void CVeiTrimForMmsContainer::Draw( const TRect& aRect ) const + { + LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::Draw(): In"); + + CWindowGc& gc = SystemGc(); + gc.Clear( aRect ); + + // Black backbround for the preview + if ( iBlack ) + { + iVideoDisplay->MakeVisible( EFalse ); + gc.SetPenStyle( CWindowGc::ENullPen ); + gc.SetBrushColor( KRgbBlack ); + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + gc.DrawRect( aRect ); + gc.SetPenStyle( CWindowGc::ESolidPen ); + gc.DrawRoundRect(aRect, TSize(4,4)); + return; + } + else + { + // Draw skin background + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); + AknsDrawUtils::Background( skin, cc, this, gc, aRect ); + + const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); + TBuf<95> startVisualText; + TPoint startTextPoint; + TBuf<95> endVisualText; + TPoint endTextPoint; + + startTextPoint.iY = iStartTextBox.iTl.iY + font->HeightInPixels(); + endTextPoint.iY = iEndTextBox.iTl.iY + font->HeightInPixels(); + + gc.UseFont( font ); + + TBidiText::TDirectionality textDirectionality; + + textDirectionality = AknTextUtils::CurrentScriptDirectionality(); + + TInt maxWidthNonClippingStart = iStartTextBox.Width(); + + AknBidiTextUtils::ConvertToVisualAndClip( *iStartText, startVisualText, *font, maxWidthNonClippingStart, + maxWidthNonClippingStart ); + /** check text alignment */ + if ( textDirectionality == TBidiText::ELeftToRight ) + { + startTextPoint.iX = iVideoDisplayStartRect.iTl.iX; + } + else + { + startTextPoint.iX = iVideoDisplayStartRect.iBr.iX - font->TextWidthInPixels( startVisualText ); + } + + gc.DrawText( startVisualText, startTextPoint ); + + + TInt maxWidthNonClippingEnd = iEndTextBox.Width(); + + AknBidiTextUtils::ConvertToVisualAndClip( *iEndText, endVisualText, *font, maxWidthNonClippingEnd, + maxWidthNonClippingEnd ); + /** check text alignment */ + if ( textDirectionality == TBidiText::ELeftToRight ) + { + endTextPoint.iX = iVideoDisplayEndRect.iTl.iX; + } + else + { + endTextPoint.iX = iVideoDisplayEndRect.iBr.iX - font->TextWidthInPixels( endVisualText ); + } + + gc.DrawText( endVisualText, endTextPoint ); + + gc.DiscardFont(); + + // Draw Start/End displays + iVideoDisplayStart->SetRect( iVideoDisplayStartRect ); + iVideoDisplayEnd->SetRect( iVideoDisplayEndRect ); + + if( iPreviewState == EPlaying ) + { + iVideoDisplay->MakeVisible( ETrue ); + } + else + { + iVideoDisplay->MakeVisible( EFalse ); + } + + } + + LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::Draw(): Out"); + } + + +// ---------------------------------------------------------------------------- +// CVeiTrimForMmsContainer::GetHelpContext(...) const +// +// Gets the control's help context. Associates the control with a particular +// Help file and topic in a context sensitive application. +// ---------------------------------------------------------------------------- +// +void CVeiTrimForMmsContainer::GetHelpContext( TCoeHelpContext& /*aContext*/ ) const + { + LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::GetHelpContext(): In"); + + // Set UID of the CS Help file (same as application UID). + //aContext.iMajor = KUidVideoEditor; + + // Set the context/topic. + //aContext.iContext = KVED_HLP_TRIM_FOR_MMS_VIEW; + + LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::GetHelpContext(): Out"); + } + +// ---------------------------------------------------------------------------- +// CVeiTrimForMmsContainer::SizeChanged() +// +// The function is called whenever SetExtent(), SetSize(), SetRect(), +// SetCornerAndSize(), or SetExtentToWholeScreen() are called on the control. +// ---------------------------------------------------------------------------- +// +void CVeiTrimForMmsContainer::SizeChanged() + { + LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::SizeChanged(): In"); + + TRect rect = Rect(); + if ( iBgContext ) + { + iBgContext->SetRect( rect ); + } + + if ( VideoEditorUtils::IsLandscapeScreenOrientation() ) //Landscape + { + // Start Text rect + TInt startTextTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.00962 ); + TInt startTextTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.01389 ); + TInt startTextBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.49512 ); + TInt startTextBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.09375 ); + + iStartTextBox = TRect(startTextTlX, startTextTlY, startTextBrX, + startTextBrY); + // End Text rect + TInt endTextTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.50481 ); + TInt endTextTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.01389 ); + TInt endTextBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.99039 ); + TInt endTextBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.09375 ); + + iEndTextBox = TRect(endTextTlX, endTextTlY, endTextBrX, + endTextBrY); + + // Start Video rect + TInt startVideoTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.00962 ); + TInt startVideoTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.10764 ); + TInt startVideoBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.49512 ); + TInt startVideoBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.68056 ); + + iVideoDisplayStartRect = TRect(startVideoTlX, startVideoTlY, startVideoBrX, + startVideoBrY); + // End Video rect + TInt endVideoTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.50481 ); + TInt endVideoTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.10764 ); + TInt endVideoBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.99039 ); + TInt endVideoBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.68056 ); + + iVideoDisplayEndRect = TRect(endVideoTlX, endVideoTlY, endVideoBrX, + endVideoBrY); + + // Timeline rect + TInt timeLineTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.0114 ); + TInt timeLineTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.80208 ); + + TSize cutBarSize = TSize(STATIC_CAST( TInt, rect.iBr.iX*0.9773 ), + STATIC_CAST( TInt, rect.iBr.iY*0.0973 ) ); + + iTimelineRect = TRect( TPoint(timeLineTlX, timeLineTlY), cutBarSize ); + } + else // Portrait + { + // Start Text rect + TInt startTextTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.01136 ); + TInt startTextTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.01389 ); + TInt startTextBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.49432 ); + TInt startTextBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.10417 ); + + iStartTextBox = TRect(startTextTlX, startTextTlY, startTextBrX, + startTextBrY); + + // End Text rect + TInt endTextTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.50568 ); + TInt endTextTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.01389 ); + TInt endTextBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.98864 ); + TInt endTextBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.10417 ); + + iEndTextBox = TRect(endTextTlX, endTextTlY, endTextBrX, + endTextBrY); + + // Start Video rect + TInt startVideoTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.01136 ); + TInt startVideoTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.11806 ); + TInt startVideoBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.49432 ); + TInt startVideoBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.60069 ); + + iVideoDisplayStartRect = TRect(startVideoTlX, startVideoTlY, startVideoBrX, + startVideoBrY); + + // End Video rect + TInt endVideoTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.50568 ); + TInt endVideoTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.11806 ); + TInt endVideoBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.98864 ); + TInt endVideoBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.60069 ); + + iVideoDisplayEndRect = TRect(endVideoTlX, endVideoTlY, endVideoBrX, + endVideoBrY); + + // Timeline rect + TInt timeLineTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.0114 ); + TInt timeLineTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.767361 ); + + + TSize cutBarSize = TSize(STATIC_CAST( TInt, rect.iBr.iX*0.9773 ), + STATIC_CAST( TInt, rect.iBr.iY*0.0973 ) ); + + iTimelineRect = TRect(TPoint(timeLineTlX, timeLineTlY), cutBarSize); + } + + iCutterBar->SetRect( iTimelineRect ); + + LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::SizeChanged(): Out"); + } + + +TKeyResponse CVeiTrimForMmsContainer::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + if( iKeyEnable ) + { + switch( aType ) + { + // + // Key down event + // + case EEventKeyDown: + { + if( iPreviewState == EPlaying ) + { +// iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); +// Stop( ETrue ); + return EKeyWasConsumed; + } + else + { + iKeyRepeatCount = 0; + + iMovie.VideoClipSetCutInTime( 0,TTimeIntervalMicroSeconds(0) ); + iMovie.VideoClipSetCutOutTime( 0, iDuration ); + return EKeyWasConsumed; + } + } + // + // The key event + // + case EEventKey: + { + if( iPreviewState == EPlaying ) + { + return EKeyWasConsumed; + } + switch( aKeyEvent.iCode ) + { + // + // Navi-key right + // + case EKeyRightArrow: + { + if( iSeekEndPos != iDuration ) + { + iSeekEvent = ETrue; + iLastKeyLeftOrRight = ETrue; + if(iKeyRepeatCount < 18) + { + iKeyRepeatCount++; + } + + TInt adjustment = TimeIncrement( iKeyRepeatCount ); + TInt64 newPos = iSeekPos.Int64() + adjustment; + + TTimeIntervalMicroSeconds endTime(0); + iMovie.GetDurationEstimateL( iMaxMmsSize, newPos, endTime ); + + if ( endTime.Int64() >= iDuration.Int64() - adjustment ) + { + iKeyRepeatCount-=3; + adjustment = TimeIncrement( iKeyRepeatCount ); + endTime = iDuration; + newPos+=adjustment; + } + + iSeekPos = TTimeIntervalMicroSeconds( newPos ); + + iSeekEndPos = endTime; + iCutterBar->SetInPoint(iSeekPos); + iCutterBar->SetOutPoint(endTime); + } + + return EKeyWasConsumed; + } + // + // Navi-key left + // + case EKeyLeftArrow: + { + if( iSeekPos.Int64() > 0 ) + { + iSeekEvent = ETrue; + iLastKeyLeftOrRight = ETrue; + // Process the command only when repeat count is zero. + iKeyRepeatCount++; + + + TInt adjustment = TimeIncrement( iKeyRepeatCount ); + + TInt64 newPos = iSeekPos.Int64() - adjustment; + if ( newPos < 0 ) + { + newPos = 0; + } + iSeekPos = TTimeIntervalMicroSeconds( newPos ); + + TTimeIntervalMicroSeconds endTime(0); + iMovie.GetDurationEstimateL( iMaxMmsSize, newPos, endTime ); + + iSeekEndPos = endTime; + + iCutterBar->SetInPoint(iSeekPos); + iCutterBar->SetOutPoint(endTime); + } + return EKeyWasConsumed; + } + // + // Default + // + default: + { + return EKeyWasNotConsumed; + } + } + } + // + // Key up event + // + + case EEventKeyUp: + { + if( iPreviewState == EPlaying ) + { + iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); + + Stop( ETrue ); + return EKeyWasConsumed; + } + else + { + if ( iLastKeyLeftOrRight ) + { + iView.ProcessNeeded( ETrue ); + iMovie.VideoClipSetCutInTime( 0, iSeekPos ); + iMovie.VideoClipSetCutOutTime( 0, iSeekEndPos ); + iView.UpdateNaviPaneL( iMovie.GetSizeEstimateL()/1024,iMovie.Duration() ); + iLastKeyLeftOrRight = EFalse; + if( iSeekEvent ) + { + StartFrameTakerL( iClipIndex ); + iSeekEvent = EFalse; + } + return EKeyWasConsumed; + } + } + break; + } + // + // Default + // + default: + return EKeyWasNotConsumed; + } + } //iKeyEnable + return EKeyWasNotConsumed; + } + + + +TInt CVeiTrimForMmsContainer::TimeIncrement(TInt aKeyCount) const + { + if ( aKeyCount < 3 ) + { + return 100000; + } + else if ( aKeyCount < 6 ) // 4 + { + return 300000; + } + else if ( aKeyCount < 9 ) // 5 + { + return 500000; + } + else if ( aKeyCount < 12 ) // 10 + { + return 1000000; + } + else if ( aKeyCount < 15 ) // 13 + { + return 2000000; + } + else if ( aKeyCount < 18 ) // 15 + { + return 3000000; + } + else + { + return 5000000; + } + } + + +void CVeiTrimForMmsContainer::NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo ) + { + switch (aEvent) + { + case MVeiVideoDisplayObserver::EOpenComplete: + { + iVideoDisplay->SetRect( iPreviewRect ); + if ( !VideoEditorUtils::IsLandscapeScreenOrientation() ) //Portrait + { + iVideoDisplay->SetRotationL( EVideoRotationClockwise90 ); + } + iPreviewState = ELoading; + + iVideoDisplay->SetPositionL( CutInTime() ); + iVideoDisplay->PlayL( iMovie.VideoClipInfo( iClipIndex )->FileName(), CutInTime(), CutOutTime() ); + + break; + } + + case MVeiVideoDisplayObserver::ELoadingComplete: + { + + iVideoDisplay->MakeVisible( ETrue ); + iPreviewState = EPlaying; + break; + } + + case MVeiVideoDisplayObserver::EStop: + { + iPreviewState = EIdle; + iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); + + iVideoDisplay->MakeVisible(EFalse); + + DrawDeferred(); + break; + } + case MVeiVideoDisplayObserver::EPlayComplete: + { + iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); + Stop( ETrue ); + if (KErrNoMemory == aInfo) + { + iView.ShowGlobalErrorNoteL( KErrNoMemory ); + } + break; + } + default: + { + break; + } + } + } + + +/** + * Called to notify that a new video clip has been successfully + * added to the movie. Note that the indices and the start and end times + * of the video clips after the new clip have also changed as a result. + * Note that the transitions may also have changed. + * + * @param aMovie movie + * @param aIndex index of video clip in movie + */ +void CVeiTrimForMmsContainer::NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ) + { + LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded: in"); + + iSeekPos = TTimeIntervalMicroSeconds(0); + + aMovie.GetDurationEstimateL( iMaxMmsSize, iSeekPos, iSeekEndPos ); + LOGFMT3(KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded: 1, iMaxMmsSize:%d, iSeekPos:%Ld, iSeekEndPos:%Ld", + iMaxMmsSize, iSeekPos.Int64(), iSeekEndPos.Int64()); + + iCutterBar->SetInPoint( iSeekPos ); + iCutterBar->SetOutPoint( iSeekEndPos ); + iCutterBar->SetTotalDuration( aMovie.Duration() ); + iDuration = aMovie.Duration(); + + iClipIndex = aIndex; + + aMovie.VideoClipSetCutInTime( 0, iSeekPos ); + aMovie.VideoClipSetCutOutTime( 0, iSeekEndPos ); + + TInt movieSizeLimit = static_cast(iMaxMmsSize*0.9); + aMovie.SetMovieSizeLimit( movieSizeLimit ); + + LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded(): 2, movie size set to:%d", movieSizeLimit); + + StartFrameTakerL( iClipIndex ); + + iSeekEvent = EFalse; + + + iView.UpdateNaviPaneL( iMovie.GetSizeEstimateL()/1024,iMovie.Duration() ); + + iKeyEnable = ETrue; + + LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded: out"); + } + + +void CVeiTrimForMmsContainer::NotifyVideoClipAddingFailed( CVedMovie& /*aMovie*/, + TInt /*aError*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyVideoClipRemoved( CVedMovie& /*aMovie*/, + TInt /*aIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyVideoClipIndicesChanged( CVedMovie& /*aMovie*/, + TInt /*aOldIndex*/, + TInt /*aNewIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyVideoClipTimingsChanged( + CVedMovie& /*aMovie*/, + TInt /*aIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyVideoClipColorEffectChanged( + CVedMovie& /*aMovie*/, + TInt /*aIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyVideoClipAudioSettingsChanged( + CVedMovie& /*aMovie*/, + TInt /*aIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyVideoClipGeneratorSettingsChanged( + CVedMovie& /*aMovie*/, + TInt /*aIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyVideoClipDescriptiveNameChanged( + CVedMovie& /*aMovie*/, + TInt /*aIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyStartTransitionEffectChanged( + CVedMovie& /*aMovie*/ ) + { + } + + +void CVeiTrimForMmsContainer::NotifyMiddleTransitionEffectChanged( + CVedMovie& /*aMovie*/, + TInt /*aIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyEndTransitionEffectChanged( + CVedMovie& /*aMovie*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyAudioClipAdded( CVedMovie& /*aMovie*/, + TInt /*aIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyAudioClipAddingFailed( + CVedMovie& /*aMovie*/, + TInt /*aError*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyAudioClipRemoved( CVedMovie& /*aMovie*/, + TInt /*aIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyAudioClipIndicesChanged( + CVedMovie& /*aMovie*/, + TInt /*aOldIndex*/, + TInt /*aNewIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyAudioClipTimingsChanged( + CVedMovie& /*aMovie*/, + TInt /*aIndex*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyMovieQualityChanged( CVedMovie& /*aMovie*/ ) + { + } + + +void CVeiTrimForMmsContainer::NotifyMovieReseted( CVedMovie& /*aMovie*/ ) + { + } + +void CVeiTrimForMmsContainer::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/) + { + } + +void CVeiTrimForMmsContainer::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, + TInt /*aClipIndex*/, + TInt /*aMarkIndex*/) + { + } + +void CVeiTrimForMmsContainer::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, + TInt /*aClipIndex*/, + TInt /*aMarkIndex*/) + { + } + +void CVeiTrimForMmsContainer::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, + TInt /*aClipIndex*/, + TInt /*aMarkIndex*/) + { + } + +void CVeiTrimForMmsContainer::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, + TInt /*aClipIndex*/, + TInt /*aMarkIndex*/) + { + } + +void CVeiTrimForMmsContainer::PlayL( const TDesC& aFilename, const TRect& aRect ) + { + iCutterBar->MakeVisible( EFalse ); + iVideoDisplayStart->MakeVisible( EFalse ); + iVideoDisplayEnd->MakeVisible( EFalse ); + iVideoDisplay->MakeVisible( EFalse ); + + iVideoDisplay->ShowBlackScreen(); + + iPreviewRect = aRect; + iBlack = ETrue; + iScreenLight->Start(); + + iPreviewState = EOpeningFile; + iVideoDisplay->OpenFileL( aFilename ); + } + +void CVeiTrimForMmsContainer::Stop( TBool aCloseStream ) + { + iCutterBar->MakeVisible( ETrue ); + iVideoDisplayStart->MakeVisible( ETrue ); + iVideoDisplayEnd->MakeVisible( ETrue ); + iBlack = EFalse; + iScreenLight->Stop(); + iVideoDisplay->Stop( aCloseStream ); + DrawNow(); + } + +void CVeiTrimForMmsContainer::PauseL() + { + iPreviewState = EPause; + iVideoDisplay->PauseL(); + iVideoDisplay->MakeVisible(EFalse); + DrawNow(); + } + +TInt CVeiTrimForMmsContainer::PreviewState() const + { + return iPreviewState; + } + +void CVeiTrimForMmsContainer::NotifyFramesCompleted( CFbsBitmap* aFirstFrame, + CFbsBitmap* aLastFrame, CFbsBitmap* /*aTimelineFrame*/, TInt aError ) + { + if( aError==KErrNone ) + { + iVideoDisplayStart->ShowPictureL( *aFirstFrame ); + iVideoDisplayEnd->ShowPictureL( *aLastFrame ); + } + + if( iProgressNote ) + { + iProgressInfo->SetAndDraw(100); + iProgressNote->ProcessFinishedL(); + } + } + +void CVeiTrimForMmsContainer::StartFrameTakerL( TInt aIndex ) + { + iProgressNote = + new (ELeave) CAknProgressDialog(REINTERPRET_CAST(CEikDialog**, &iProgressNote), ETrue); + iProgressNote->SetCallback(this); + iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE ); + + HBufC* stringholder; + stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv ); + CleanupStack::PushL( stringholder ); + iProgressNote->SetTextL( *stringholder ); + CleanupStack::PopAndDestroy( stringholder ); + + iProgressInfo = iProgressNote->GetProgressInfoL(); + iProgressInfo->SetFinalValue(100); + iProgressInfo->SetAndDraw(50); + +// First frame is shown in main display so it is bigger.. Last frame is always +// on transition display and one frame for the video timeline. + TSize firstThumbResolution = iVideoDisplayStart->GetScreenSize(); + TSize lastThumbResolution = iVideoDisplayEnd->GetScreenSize(); + TSize timelineThumbResolution = TSize( 34, 28 ); + + TInt frameCount = iMovie.VideoClipInfo(aIndex)->VideoFrameCount(); + + TInt firstThumbNailIndex = iMovie.VideoClipInfo(aIndex)->GetVideoFrameIndexL( CutInTime() ); + TInt lastThumbNailIndex = iMovie.VideoClipInfo(aIndex)->GetVideoFrameIndexL( CutOutTime() ); + if ( lastThumbNailIndex >= frameCount ) + { + lastThumbNailIndex = frameCount-1; + } + + + iFrameTaker->GetFramesL( *iMovie.VideoClipInfo(aIndex), + firstThumbNailIndex, &firstThumbResolution, + lastThumbNailIndex, &lastThumbResolution, + firstThumbNailIndex, &timelineThumbResolution, + EPriorityLow ); + } + +TTypeUid::Ptr CVeiTrimForMmsContainer::MopSupplyObject( TTypeUid aId ) + { + if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext ) + { + return MAknsControlContext::SupplyMopObject( aId, iBgContext ); + } + return CCoeControl::MopSupplyObject( aId ); + } +// End of File +