diff -r 000000000000 -r 951a5db380a0 videoeditorengine/vedengine/videoprocessor/src/statusmonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/vedengine/videoprocessor/src/statusmonitor.cpp Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,531 @@ +/* +* 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: +* Video player status monitor definitions, class CStatusMonitor. +* +*/ + + +// EXTERNAL RESOURCES + + +// Include Files + +#include "movieprocessorimpl.h" +#include "statusmonitor.h" +#include "vedmovie.h" + + +// LOCAL CONSTANTS AND MACROS +// Debug print macro +#if defined _DEBUG +#include +#define PRINT(x) RDebug::Print x; +#else +#define PRINT(x) +#endif + + +// MEMBER FUNCTIONS + + +//============================================================================= + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + CStatusMonitor() + + Standard C++ constructor + +----------------------------------------------------------------------------- +*/ + +CStatusMonitor::CStatusMonitor(MVedMovieProcessingObserver *anObserver, + CMovieProcessorImpl *aMovieProcessor, + CVedMovie *aMovie, TInt aPriority) + : CActive(aPriority) +{ + // Remember the objects + iObserver = anObserver; + iProcessor = aMovieProcessor; + iMovie = aMovie; + // Initialize status: + + iPrepared = EFalse; + iPreparing = EFalse; + + iProcessingStarted = EFalse; + iProcessing = EFalse; + iClipProcessed = EFalse; + iComplete = EFalse; + iCancelled = EFalse; + iError = KErrNone; + iOutError = KErrNone; + +} + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + ~CStatusMonitor() + + Standard C++ destructor + +----------------------------------------------------------------------------- +*/ + +CStatusMonitor::~CStatusMonitor() +{ + Cancel(); +} + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + ConstructL() + + Symbian OS second-phase constructor + +----------------------------------------------------------------------------- +*/ + +void CStatusMonitor::ConstructL() +{ + // Add to active scheduler: + CActiveScheduler::Add(this); + + // Make us active: + if (!IsActive()) + { + SetActive(); + iStatus = KRequestPending; + } +} + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + Error() + + An error has occurred + +----------------------------------------------------------------------------- +*/ + +void CStatusMonitor::Error(TInt anErrorCode) +{ + // Remember the error + iError = anErrorCode; + +#ifndef _DEBUG + if (iError < KErrHardwareNotAvailable) + iError = KErrGeneral; +#endif + + PRINT((_L("CStatusMonitor::Error() Error = %d "), iError )); + + // Activate the object: + if ( iStatus == KRequestPending ) + { + TRequestStatus *status = &iStatus; + User::RequestComplete(status, KErrNone); + } +} + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + StartOpening() + + The stream opening has been started + +----------------------------------------------------------------------------- +*/ + +void CStatusMonitor::StartPreparing() +{ + __ASSERT_DEBUG((!iPrepared) && (!iPreparing) && (!iProcessing), + User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); + + // Note the state change: + iPreparing = ETrue; +} + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + Opened() + + The stream has been opened and it is ready for playback + +----------------------------------------------------------------------------- +*/ + +void CStatusMonitor::PrepareComplete() +{ + __ASSERT_DEBUG((!iPrepared) && iPreparing && (!iProcessing), + User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); + + // Note the state change + iPrepared = ETrue; + iPreparing = EFalse; + +} + +void CStatusMonitor::StreamEndReached() +{ + + +} + +void CStatusMonitor::Progress(TInt aPercentage) +{ + PRINT((_L("CStatusMonitor::Progress() Progress = %d "), aPercentage )); + + iObserver->NotifyMovieProcessingProgressed(*iMovie, aPercentage); +} + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + Closed() + + The stream has been closed + +----------------------------------------------------------------------------- +*/ + +void CStatusMonitor::Closed() +{ + __ASSERT_DEBUG((iPrepared || iPreparing) && (!iProcessing), + User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); + + // Note the state change: + iPreparing = EFalse; + + // Do not report a stream open if one had been done + iPrepared = EFalse; +} + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + ProcessingStarted() + + Processing has been started + +----------------------------------------------------------------------------- +*/ + +void CStatusMonitor::ProcessingStarted(TBool aNotifyObserver) +{ + __ASSERT_DEBUG( (!iProcessing) && (!iProcessingStarted) && (iPrepared), + User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); + + // Note the state change: + iProcessing = ETrue; + + if (aNotifyObserver) + { + iProcessingStarted = ETrue; + + // Activate the object: + if ( iStatus == KRequestPending ) + { + TRequestStatus *status = &iStatus; + User::RequestComplete(status, KErrNone); + } + } +} + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + ProcessingStopped() + + Processing has been stopped + +----------------------------------------------------------------------------- +*/ + +void CStatusMonitor::ProcessingStopped() +{ + __ASSERT_DEBUG(iProcessing, + User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); + + // Note the state change: + iProcessing = EFalse; +} + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + ClipProcessed() + + The video clip end has been reached + +----------------------------------------------------------------------------- +*/ + +void CStatusMonitor::ClipProcessed() +{ + __ASSERT_DEBUG( (iProcessing), + User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); + + // Note the stream end: + iClipProcessed = ETrue; + + // Activate the object: + if ( iStatus == KRequestPending ) + { + TRequestStatus *status = &iStatus; + User::RequestComplete(status, KErrNone); + } +} + +void CStatusMonitor::ProcessingComplete() +{ + __ASSERT_DEBUG((!iProcessing), + User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); + + // Note the stream end: + iComplete = ETrue; + + // Activate the object: + if ( iStatus == KRequestPending ) + { + TRequestStatus *status = &iStatus; + User::RequestComplete(status, KErrNone); + } +} + +void CStatusMonitor::ProcessingCancelled() +{ + __ASSERT_DEBUG((!iProcessing), + User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); + + iCancelled = ETrue; + + // Activate the object: + if ( iStatus == KRequestPending ) + { + TRequestStatus *status = &iStatus; + User::RequestComplete(status, KErrNone); + } +} + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + FatalError() + + A fatal non-recovereable error has occurred + +----------------------------------------------------------------------------- +*/ + +void CStatusMonitor::FatalError(TInt anError) +{ + PRINT((_L("CStatusMonitor::FatalError Error = %d "), anError )); + + // Pass the error to the observer + iObserver->NotifyMovieProcessingCompleted(*iMovie, anError); + + // The observer returned -- panic the program + User::Panic(_L("CVideoProcessor"), anError); + +} + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + RunL() + + The active object running method, called by the active scheduler when the + object has been activated. + +----------------------------------------------------------------------------- +*/ + +void CStatusMonitor::RunL() +{ + TInt error; + + // Re-activate us: + if (!IsActive()) + { + SetActive(); + iStatus = KRequestPending; + } + + // Check if an error occurred: + if ( iError != KErrNone ) + { + // Yes, stop processing if we are processing, close stream if it was open: + if ( iProcessing ) + { + if ( iProcessor ) + { + iProcessor->CancelProcessingL(); + } + iProcessing = EFalse; + } + else + { + if ( iPrepared || iPreparing ) + { + if ( iProcessor ) + { + iProcessor->CancelProcessingL(); + } + iPreparing = EFalse; + iPrepared = EFalse; + } + } + + // Report the error to the observer: + //iObserver->NotifyMovieProcessingCompleted(*iMovie, iError); + iOutError = iError; + iError = KErrNone; + + + } + + else + { + // Nope, no errors + + // If processing has been started, report that: + if ( iProcessingStarted ) + { + iProcessingStarted = EFalse; + TRAP(error, iObserver->NotifyMovieProcessingStartedL(*iMovie)); + if ( error != KErrNone ) + FatalError(error); + } + else if ( iCancelled ) + { + // processing has been cancelled + iCancelled = EFalse; + iComplete = EFalse; + iClipProcessed = EFalse; + + if ( iOutError == KErrNone ) + iObserver->NotifyMovieProcessingCompleted(*iMovie, KErrCancel); + else + iObserver->NotifyMovieProcessingCompleted(*iMovie, iOutError); + + iOutError = KErrNone; + + } + + else if ( iClipProcessed ) + { + // a clip has been processed + iClipProcessed = EFalse; + iProcessor->FinalizeVideoClip(); + } + + else + { + if ( iComplete ) + { + // If the movie has been completed, report that: + iComplete = EFalse; + iObserver->NotifyMovieProcessingCompleted(*iMovie, KErrNone); + + } + } + } +} + + + +/* +----------------------------------------------------------------------------- + + CStatusMonitor + + DoCancel() + + Cancels the internal request + +----------------------------------------------------------------------------- +*/ + +void CStatusMonitor::DoCancel() +{ + // Cancel it: + TRequestStatus *status = &iStatus; + User::RequestComplete(status, KErrCancel); +} + + + + +// OTHER EXPORTED FUNCTIONS + + +//============================================================================= + + +// End of File