diff -r 666f9a5a90a9 -r 91d5ad76f5c6 mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/src/testvideoplaybackplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/testvideoplaybackplugin/src/testvideoplaybackplugin.cpp Wed Sep 15 12:45:22 2010 +0300 @@ -0,0 +1,793 @@ +/* +* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: +* +* Description: CTestVideoPlaybackPlugin implementation +* +*/ + +// +// INCLUDE FILES +// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "testvideoplaybackplugin.h" +#include "mpxplaybackutilitytestdefs.h" +#include "mpxplaybackutilitytest.h" + + +// +// CONSTANTS +// +const TUid KLocalPlaybackUid = { 0x10282556 }; + + +// ============================ MEMBER FUNCTIONS =============================== + +// ---------------------------------------------------------------------------- +// Two-phased constructor. +// ---------------------------------------------------------------------------- +// +CTestVideoPlaybackPlugin* CTestVideoPlaybackPlugin::NewL( TAny* /*aInitParams*/ ) +{ + + CTestVideoPlaybackPlugin* p = new (ELeave) CTestVideoPlaybackPlugin(); + CleanupStack::PushL(p); + p->ConstructL(); + CleanupStack::Pop(p); + return p; +} + +// ---------------------------------------------------------------------------- +// Symbian 2nd phase constructor can leave. +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::ConstructL() +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::ConstructL()"); + User::LeaveIfError( iFs.Connect() ); + iFs.ShareProtected(); + + iEventArray = new (ELeave) CArrayPtrFlat( 1 ); + iCallback = CIdle::NewL( CActive::EPriorityLow ); +} + +// ---------------------------------------------------------------------------- +// C++ constructor +// ---------------------------------------------------------------------------- +// +CTestVideoPlaybackPlugin::CTestVideoPlaybackPlugin() + +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::CTestVideoPlaybackPlugin()"); +} + +// ---------------------------------------------------------------------------- +// Destructor +// ---------------------------------------------------------------------------- +// +CTestVideoPlaybackPlugin::~CTestVideoPlaybackPlugin() +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::~CTestVideoPlaybackPlugin()"); + iFile.Close(); + iFs.Close(); + + if ( iCallback->IsActive() ) + { + iCallback->Cancel(); + } + + delete iCallback; + + iEventArray->ResetAndDestroy(); +} + +// ---------------------------------------------------------------------------- +// Set observer +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::SetObserver( MMPXPlaybackPluginObserver& aObs ) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::SetObserver( MMPXPlaybackPluginObserver& aObs )"); + iObs = &aObs; +} + +// ---------------------------------------------------------------------------- +// Initializes a clip for playback from a file name +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::InitialiseL( const TDesC& aSong ) +{ + + MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitialiseL( const TDesc& aSong)"); + + delete iClipName; + iClipName = NULL; + iClipName = aSong.AllocL(); + + iFile.Close(); + + TInt err = iFile.Open( iFs, aSong, EFileRead | EFileShareReadersOrWriters ); + + // + // Remap KErrNotReady to KErrNotFound, because it is referencing a drive + // that is not existent + // + if ( KErrNotReady == err ) + { + err = KErrNotFound; + } + + // if aSong is an streaming link and contains one of the streaming schemas + // eg. rtsp:// , http:// etc. then a file handle can not be opened + // ignore KErrBadName + if (err != KErrBadName) + { + User::LeaveIfError( err ); + } + + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPInitialised; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); +} + +// ---------------------------------------------------------------------------- +// Initializes a clip for playback from a file handle +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::InitialiseL( RFile& aSong ) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitialiseL( RFile& aSong )"); + + delete iClipName; + iClipName = NULL; + iClipName = HBufC::NewL( KMaxFileName ); + TPtr ptr = iClipName->Des(); + aSong.FullName( ptr ); + + iFile.Close(); + User::LeaveIfError( iFile.Duplicate( aSong )); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPInitialised; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); +} + +/** +* Initializes a file for playback. +* +* @since S60 9.2 +* @param aUri URI of the item +* @param aType the mime type of the item +* @param aAccessPoint the access point +*/ +void CTestVideoPlaybackPlugin::InitStreamingL(const TDesC& /*aUri*/, + const TDesC8& /*aType*/, TInt /*aAccessPoint*/, TInt /*aPosition*/) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitStreamingL(const TDesC& /*aUri*/, const TDesC8& /*aType*/, TInt /*aAccessPoint*/, TInt /*aPosition*/)"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPInitialised; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); +} + +/** +* Initializes a file handle for playback. +* +* @since S60 9.2 +* @param aFile file handle of a file +* @param aAccessPoint the access point +*/ +void CTestVideoPlaybackPlugin::InitStreamingL(RFile& /*aFile*/, TInt /*aAccessPoint*/, TInt /*aPosition*/) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitStreamingL(RFile& /*aFile*/, TInt /*aAccessPoint*/, TInt /*aPosition*/)"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPInitialised; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); +} + +#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API +/** +* Initializes a file handle for playback. +* +* @since S60 9.2 +* @param aFile 64 bit file handle of a file +* @param aAccessPoint the access point +*/ +void CTestVideoPlaybackPlugin::InitStreaming64L(RFile64& /*aFile*/, TInt /*aAccessPoint*/, TInt /*aPosition*/) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitStreaming64L(RFile64& /*aFile*/, TInt /*aAccessPoint*/, TInt /*aPosition*/)"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPInitialised; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); +} + +/** +* Initializes a song for playback. +* +* @since S60 9.2 +* @param aFile 64 bit file handle of a song +*/ +void CTestVideoPlaybackPlugin::Initialise64L(RFile64& /*aSong*/, TInt /*aPosition*/) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::Initialise64L(RFile64& /*aSong*/, TInt /*aPosition*/)"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPInitialised; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); +} +#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + +// ---------------------------------------------------------------------------- +// Executes a command on the selected song +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::CommandL( CMPXCommand& aCmd ) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::CommandL( CMPXCommand& aCmd )"); + + if ( aCmd.IsSupported( KMPXStifPlaybackCommand ) ) + { + TMPXStifCommand cmd = static_cast(aCmd.ValueTObjectL(KMPXStifPlaybackCommand)); + TMPXPlaybackState state = static_cast(aCmd.ValueTObjectL(KMPXCommandPlaybackGeneralData)); + + MPX_DEBUG3("CTestVideoPlaybackPlugin::CommandL cmd = %d, state = %d ", cmd, state); + + switch ( cmd ) + { + case EPbStifPlayComplete: + { + MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbStifPlaybackComplete"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPPlayComplete; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + break; + } + case EPbStifSeekForward: + { + MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbStifSeekForward"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPPluginSeeking; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPPositionChanged; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + if ( state == EPbStatePlaying ) + { + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPPlaying; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + } + else if ( state == EPbStatePaused ) + { + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPPaused; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + } + break; + } + + case EPbStifSeekBackward: + { + MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbStifSeekBackward"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPPluginSeeking; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPPositionChanged; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + if ( state == EPbStatePlaying ) + { + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPPlaying; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + } + else if ( state == EPbStatePaused ) + { + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPPaused; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + } + break; + } + + default: + { + MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd default"); + break; + } + } + } +} + + +// ---------------------------------------------------------------------------- +// Executes a command on the selected song +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::CommandL(TMPXPlaybackCommand aCmd, TInt /*aData*/) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::CommandL(TMPXPlaybackCommand aCmd, TInt /*aData*/)"); + + MPX_DEBUG2("CTestVideoPlaybackPlugin::CommandL aCmd = %d", aCmd); + + switch (aCmd) + { + case EPbCmdPlay: + { + MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbCmdPlay"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPPlaying; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + break; + } + + case EPbCmdClose: + { + MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbCmdClose"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPClosed; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + break; + } + + case EPbCmdStop: + { + MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbCmdStop"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPStopped; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + break; + } + + case EPbCmdPause: + { + MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbCmdPause"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPPaused; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + break; + } + + case EPbCmdStartSeekForward: + { + MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd is EPbCmdStartSeekForward"); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPPluginSeeking; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPPositionChanged; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPPlaying; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + break; + } + + default: + { + MPX_DEBUG1("CTestVideoPlaybackPlugin::CommandL aCmd default"); + break; + } + } +} + + +// ---------------------------------------------------------------------------- +// Sets a property of the plugin +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::SetL( TMPXPlaybackProperty aProperty, TInt aValue ) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::SetL( TMPXPlaybackProperty /*aProperty*/, TInt /*aValue*/ )"); + MPX_DEBUG3("CTestVideoPlaybackPlugin::SetL aProperty = %d, aValue = %d", aProperty, aValue); + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPSetComplete; + event->iData = aProperty; + event->iError = KErrNone; + + AddCallbackEvent( event ); +} + +// ---------------------------------------------------------------------------- +// Gets a property of the plugin (async) +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::PropertyL( TMPXPlaybackProperty /*aProperty*/ ) const +{ + +} + +// ---------------------------------------------------------------------------- +// Gets a list of sub players, UPnP only +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::SubPlayerNamesL() +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::SubPlayerNamesL()"); + + iObs->HandleSubPlayerNames( KLocalPlaybackUid, NULL, ETrue, KErrNone ); +} + +// ---------------------------------------------------------------------------- +// Select a sub player +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::SelectSubPlayerL( TInt /*aIndex*/ ) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::SelectSubPlayerL( TInt aIndex )"); + + User::Leave( KErrNotSupported ); +} + +// ---------------------------------------------------------------------------- +// Returns current sub player name +// ---------------------------------------------------------------------------- +// +const TDesC& CTestVideoPlaybackPlugin::SubPlayerName() +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::SubPlayerName()"); + + return KNullDesC; +} + +// ---------------------------------------------------------------------------- +// Current sub player index +// ---------------------------------------------------------------------------- +// +TInt CTestVideoPlaybackPlugin::SubPlayerIndex() const +{ + + return KErrNotFound; +} + +// ---------------------------------------------------------------------------- +// Gets media properties +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::MediaL( const TArray& /*aAttrs*/ ) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::MediaL( const TArray TMPXAttribute )"); +} + +// ---------------------------------------------------------------------------- +// Cancel request +// ---------------------------------------------------------------------------- +// +void CTestVideoPlaybackPlugin::CancelRequest() +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::CancelRequest()"); +} + +// ---------------------------------------------------------------------------- +// CTestVideoPlaybackPlugin::GetFileHandle() +// ---------------------------------------------------------------------------- +// +RFile CTestVideoPlaybackPlugin::GetFileHandle() +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::GetFileHandle()"); + + return iFile; +} + +/** +* Initializes a song for playback. +* +* @since S60 9.2 +* @param aSong the song path +* @param aPosition the starting position +*/ +void CTestVideoPlaybackPlugin::InitialiseWithPositionL(const TDesC& aSong, TInt aPosition) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitialiseWithPositionL(const TDesC& /*aSong*/, TInt /*aPosition*/)"); + + delete iClipName; + iClipName = NULL; + iClipName = aSong.AllocL(); + + iFile.Close(); + + TInt err = iFile.Open( iFs, aSong, EFileRead | EFileShareReadersOrWriters ); + + // + // Remap KErrNotReady to KErrNotFound, because it is referencing a drive + // that is not existent + // + if ( KErrNotReady == err ) + { + err = KErrNotFound; + } + + // if aSong is an streaming link and contains one of the streaming schemas + // eg. rtsp:// , http:// etc. then a file handle can not be opened + // ignore KErrBadName + if (err != KErrBadName) + { + User::LeaveIfError( err ); + } + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPInitialised; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); +} + +/** +* Initializes a song for playback. +* +* @since S60 9.2 +* @param aFile file handle of a song +* @param aPosition the starting position +*/ +void CTestVideoPlaybackPlugin::InitialiseWithPositionL(RFile& aSong, TInt aPosition) +{ + MPX_FUNC_EX("CTestVideoPlaybackPlugin::InitialiseWithPositionL(RFile& aSong, TInt aPosition)"); + + delete iClipName; + iClipName = NULL; + iClipName = HBufC::NewL( KMaxFileName ); + TPtr ptr = iClipName->Des(); + aSong.FullName( ptr ); + + iFile.Close(); + User::LeaveIfError( iFile.Duplicate( aSong )); + + + TTestVideoPlaybackCallbackEvent* event = new (ELeave) TTestVideoPlaybackCallbackEvent; + + event->iEvent = MMPXPlaybackPluginObserver::EPInitialised; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); + + event = new TTestVideoPlaybackCallbackEvent; + event->iEvent = MMPXPlaybackPluginObserver::EPBufferingStarted; + event->iData = 0; + event->iError = KErrNone; + + AddCallbackEvent( event ); +} + + +void CTestVideoPlaybackPlugin::RunL() +{ + MPX_FUNC_EX("CTestVideoPaybackPlugin::RunL"); +} + +void CTestVideoPlaybackPlugin::DoCancel() +{ + MPX_FUNC_EX("CTestVideoPaybackPlugin::DoCancel"); +} + +void CTestVideoPlaybackPlugin::AddCallbackEvent( TTestVideoPlaybackCallbackEvent* event ) +{ + MPX_DEBUG1("CTestVideoPlaybackPlugin::AddCallbackEvent"); + + iEventArray->AppendL( event ); + + if ( ! iCallback->IsActive() ) + { + iCallback->Start( TCallBack( CTestVideoPlaybackPlugin::SendEvent, this ) ); + } +} + +TInt CTestVideoPlaybackPlugin::SendEvent (TAny* aPtr ) +{ + MPX_DEBUG1("CTestVideoPlaybackPlugin::SendEvent"); + + static_cast(aPtr)->DoSendEvent(); + + return KErrNone; +} + +void CTestVideoPlaybackPlugin::DoSendEvent() +{ + MPX_DEBUG1("-->CTestVideoPlaybackPlugin::DoSendEvent"); + + TInt count = iEventArray->Count(); + + if ( count > 0 ) + { + TTestVideoPlaybackCallbackEvent* event = (*iEventArray)[0]; + + MMPXPlaybackPluginObserver::TEvent myevent = static_cast(event->iEvent); + + iObs->HandlePluginEvent( myevent, event->iData, event->iError); + + if ( count > 1 ) + { + // + // More events exist, start another callback + // + MPX_DEBUG1("CTestVideoPlaybackPlugin::DoSendEvent - there are more events, start another callback"); + iCallback->Start( TCallBack( CTestVideoPlaybackPlugin::SendEvent, this ) ); + } + + iEventArray->Delete( 0 ); + } + MPX_DEBUG1("<--CTestVideoPlaybackPlugin::DoSendEvent"); +} + +// End of file