--- /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 <e32svr.h>
+#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