diff -r 000000000000 -r 951a5db380a0 videditor/VideoEditorCommon/src/VeiFrameTaker.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videditor/VideoEditorCommon/src/VeiFrameTaker.cpp Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,152 @@ +/* +* 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 +// User includes + +#include "VideoEditorDebugUtils.h" +#include "veiframetaker.h" + +CVeiFrameTaker::CVeiFrameTaker( MVeiFrameTakerObserver& aObserver ) : CActive(CActive::EPriorityLow), iObserver( aObserver ) + { + } + + +CVeiFrameTaker::~CVeiFrameTaker() + { + delete iWaitScheduler; + delete iFirstFrame; + delete iLastFrame; + delete iTimelineFrame; + } + + + +EXPORT_C CVeiFrameTaker* CVeiFrameTaker::NewL( MVeiFrameTakerObserver& aObserver ) + { + CVeiFrameTaker* self = new (ELeave) CVeiFrameTaker( aObserver ); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C void CVeiFrameTaker::GetFramesL( CVedVideoClipInfo& aInfo, + TInt const aFirstFrame, TSize* const aFirstResolution, + TInt const aLastFrame, TSize* const aLastResolution, + TInt const aTimelineFrame, TSize* const aTimelineResolution, + TInt aPriority) + { + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: In"); + iError = KErrNone; + iFrameCount = 0; + + delete iFirstFrame; + iFirstFrame = NULL; + delete iLastFrame; + iLastFrame = NULL; + delete iTimelineFrame; + iTimelineFrame = NULL; + + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 1"); + aInfo.GetFrameL( *this, aFirstFrame, aFirstResolution, EColor64K, EFalse, aPriority ); + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 2"); + + if ( iFrameCount == 0 ) // GetFrameL is still active, so start waiting + { + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 3"); + iWaitScheduler->Start(); + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 4"); + } + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 5"); + if ( iError == KErrNone ) + { + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 6"); + aInfo.GetFrameL( *this, aLastFrame, aLastResolution, EColor64K, EFalse, aPriority ); + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 7"); + if ( iFrameCount == 1 ) + { + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 8"); + iWaitScheduler->Start(); + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 9"); + } + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 10"); + } + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 11"); + if ( iError == KErrNone ) + { + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 12"); + aInfo.GetFrameL( *this, aTimelineFrame, aTimelineResolution, EColor64K, EFalse, aPriority ); + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 13"); + if ( iFrameCount == 2 ) + { + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 14"); + iWaitScheduler->Start(); + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 15"); + } + } + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 16"); + iObserver.NotifyFramesCompleted( iFirstFrame, iLastFrame, iTimelineFrame, iError ); + LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: Out"); + } + +void CVeiFrameTaker::ConstructL() + { + iWaitScheduler = new (ELeave) CActiveSchedulerWait; + CActiveScheduler::Add(this); + } + +void CVeiFrameTaker::DoCancel() + { + } + +void CVeiFrameTaker::RunL() + { + iWaitScheduler->AsyncStop(); + } + +void CVeiFrameTaker::NotifyVideoClipFrameCompleted(CVedVideoClipInfo& /*aInfo*/, TInt aError, CFbsBitmap* aFrame) + { + iError = aError; + + if ( iFrameCount == 0 ) + { + iFirstFrame = aFrame; + } + else if ( iFrameCount == 1 ) + { + iLastFrame = aFrame; + } + else if ( iFrameCount == 2 ) + { + iTimelineFrame = aFrame; + } + + iFrameCount++; +// Text frame generator is quite fast, so waitscheduler is not +// started everytime. + if (iWaitScheduler->IsStarted() ) + iWaitScheduler->AsyncStop(); + } +// End of File