# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1271420894 -10800 # Node ID a05c44bc3c61ecd48a7b7a24b37541e0ae1064c1 # Parent b1fb57be53feddfa94bc4fb4d9cd1b2134338b7c Revision: 201009 Kit: 201015 diff -r b1fb57be53fe -r a05c44bc3c61 mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackpluginversion2.h --- a/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackpluginversion2.h Fri Mar 19 09:38:24 2010 +0200 +++ b/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackpluginversion2.h Fri Apr 16 15:28:14 2010 +0300 @@ -39,8 +39,9 @@ * @param aUri URI of the item * @param aType the mime type of the item * @param aAccessPoint the access point + * @param aPosition the starting position */ - virtual void InitStreamingL(const TDesC& aUri, const TDesC8& aType, TInt aAccessPoint) = 0; + virtual void InitStreamingL(const TDesC& aUri, const TDesC8& aType, TInt aAccessPoint, TInt aPosition = 0) = 0; /** * Initializes a file handle for playback. @@ -48,8 +49,9 @@ * @since S60 9.2 * @param aFile file handle of a file * @param aAccessPoint the access point + * @param aPosition the starting position */ - virtual void InitStreamingL(RFile& aFile, TInt aAccessPoint) = 0; + virtual void InitStreamingL(RFile& aFile, TInt aAccessPoint, TInt aPosition = 0) = 0; #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API /** @@ -58,17 +60,39 @@ * @since S60 9.2 * @param aFile 64 bit file handle of a file * @param aAccessPoint the access point + * @param aPosition the starting position */ - virtual void InitStreaming64L(RFile64& aFile, TInt aAccessPoint) = 0; + virtual void InitStreaming64L(RFile64& aFile, TInt aAccessPoint, TInt aPosition = 0) = 0; /** * Initializes a song for playback. * * @since S60 9.2 * @param aFile 64 bit file handle of a song + * @param aPosition the starting position */ - virtual void Initialise64L(RFile64& aSong) = 0; + virtual void Initialise64L(RFile64& aSong, TInt aPosition = 0) = 0; #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + + + /** + * Initializes a song for playback. + * + * @since S60 9.2 + * @param aSong the song path + * @param aPosition the starting position + */ + virtual void InitialiseWithPositionL(const TDesC& aSong, TInt aPosition = 0) = 0; + + /** + * Initializes a song for playback. + * + * @since S60 9.2 + * @param aFile file handle of a song + * @param aPosition the starting position + */ + virtual void InitialiseWithPositionL(RFile& aSong, TInt aPosition = 0) = 0; + }; #endif // CMPXPLAYBACKPLUGINVERSION2_H diff -r b1fb57be53fe -r a05c44bc3c61 mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h --- a/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h Fri Mar 19 09:38:24 2010 +0200 +++ b/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h Fri Apr 16 15:28:14 2010 +0300 @@ -857,11 +857,16 @@ void SavePlaybackCompleteInfoL(); /** - * Restore playback position and state if it was saved previously + * Restore playback position if it was saved previously */ - void RestorePlaybackPositionAndStateL( const CMPXMedia& aMedia ); + void RestorePlaybackPositionL( const CMPXMedia& aMedia ); /** + * Restore playback state if it was saved previously + */ + void RestorePlaybackStateL(); + + /** * Sets the volume increment depending on accessory state */ void SetVolumeIncrement( TMPXPlaybackAccessoryMode aMode ); @@ -1031,6 +1036,9 @@ #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API RFile64 iFile64; #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + + TInt iPositionFromMedia; + }; #include "mpxplaybackengine.inl" diff -r b1fb57be53fe -r a05c44bc3c61 mpx/playbackframework/playbackengine/inc/mpxplaybackinitializer.h --- a/mpx/playbackframework/playbackengine/inc/mpxplaybackinitializer.h Fri Mar 19 09:38:24 2010 +0200 +++ b/mpx/playbackframework/playbackengine/inc/mpxplaybackinitializer.h Fri Apr 16 15:28:14 2010 +0300 @@ -193,7 +193,7 @@ /** * Initialize streaming */ - void InitL(const TDesC& aUri, const TDesC8& aType, TInt aAccessPoint); + void InitL(const TDesC& aUri, const TDesC8& aType ); private: /** diff -r b1fb57be53fe -r a05c44bc3c61 mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp --- a/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp Fri Mar 19 09:38:24 2010 +0200 +++ b/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp Fri Apr 16 15:28:14 2010 +0300 @@ -109,6 +109,7 @@ iState(EPbStateNotInitialised), iNextState(EPbStateNotInitialised), iPluginState(EPbStateNotInitialised), + iCategory(EMPXCategoryUndefined), iModeId(aModeId), iObserver(aObserver), iPreservedState( EPbStateNotInitialised ), @@ -116,7 +117,8 @@ iSkipping(EFalse), iPluginUid(KNullUid), iLastActiveProcess(KNullProcessId), - iLastInactiveProcess(KNullProcessId) + iLastInactiveProcess(KNullProcessId), + iPositionFromMedia( KErrNotFound ) { iProperties[EPbPropertyVolumeRamp]=KPbFadeInDurationMicroSeconds; } @@ -140,6 +142,7 @@ iNextState(EPbStateNotInitialised), iPluginState(EPbStateNotInitialised), iModeId(aModeId), + iCategory(aCategory), iObserver(aObserver), iPreservedState( EPbStateNotInitialised ), iPreservedPosition( KErrNotFound ), @@ -147,7 +150,7 @@ iPluginUid(KNullUid), iLastActiveProcess(KNullProcessId), iLastInactiveProcess(KNullProcessId), - iCategory(aCategory) + iPositionFromMedia( KErrNotFound ) { iProperties[EPbPropertyVolumeRamp]=KPbFadeInDurationMicroSeconds; } @@ -180,16 +183,24 @@ iMediaHelper = CMPXPlaybackMediaHelper::NewL( *this ); iDummyMediaObserver = new(ELeave) CMPXPlaybackDummyMediaObserver(); - // Select local plugin by default if none selected - iPluginHandler->SelectPlayersL( EPbLocal ); - iInitVolume = ETrue; + iInitVolume = EFalse; + + if (iCategory != EMPXCategoryVideo) + { + // Select local plugin by default if none selected + iPluginHandler->SelectPlayersL( EPbLocal ); + iInitVolume = ETrue; + iPluginHandler->Plugin()->PropertyL( EPbPropertyVolume ); + } + #if defined(__HIGH_RESOLUTION_VOLUME) iVolRoundedUp = EFalse; #endif - iPluginHandler->Plugin()->PropertyL( EPbPropertyVolume ); + iSyncMsgTimer = CPeriodic::NewL( CActive::EPriorityIdle ); iSyncMsgWait = new (ELeave) CActiveSchedulerWait; - } + iProperties[EPbPropertyPosition] = 0; + } // ---------------------------------------------------------------------------- // Destructor @@ -305,7 +316,10 @@ 0, EFalse)); - iPluginUid = iPluginHandler->Plugin()->Uid(); + if ( iPluginHandler->PlayerFound() ) + { + iPluginUid = iPluginHandler->Plugin()->Uid(); + } RArray dummy; CleanupClosePushL( dummy ); @@ -1462,11 +1476,7 @@ if ( iProperties[EPbPropertyPosition] >= iProperties[EPbPropertyDuration] ) { iProperties[EPbPropertyPosition] = 0; - } - - // Set position to restore saved position. - TRAP_IGNORE( // uPnP leaves if set position in stop state - PluginL()->SetL( EPbPropertyPosition, iProperties[EPbPropertyPosition] )); + } iAutoResumeHandler->HandleOpenFileComplete(); @@ -1995,6 +2005,18 @@ SetStateL( msg ); iProperties[EPbPropertyPosition]=0; + if ( KErrNotFound != iPreservedPosition ) + { + iProperties[EPbPropertyPosition] = iPreservedPosition; + iPreservedPosition = KErrNotFound; + } + else if ( KErrNotFound != iPositionFromMedia ) + { + iProperties[EPbPropertyPosition] = iPositionFromMedia; + iPositionFromMedia = KErrNotFound; + } + MPX_DEBUG2("CMPXPlaybackEngine::InitL iPropertyPosition %d", iProperties[EPbPropertyPosition] ); + // make sure our interface is supported CDesCArray* interfaces = iPluginHandler->SupportedInterfacesL( p->Uid() ); TBool version2InterfaceSupported = EFalse; @@ -2018,22 +2040,22 @@ { if (aSong && aType) { - plugin->InitStreamingL( *aSong, *aType, aAccessPoint ); + plugin->InitStreamingL( *aSong, *aType, aAccessPoint, iProperties[EPbPropertyPosition] ); } else if (aFile) { - plugin->InitStreamingL( *aFile, aAccessPoint ); + plugin->InitStreamingL( *aFile, aAccessPoint, iProperties[EPbPropertyPosition] ); } } else { if (aSong && aType) { - plugin->InitialiseL( *aSong ); + plugin->InitialiseWithPositionL( *aSong, iProperties[EPbPropertyPosition] ); } else if (aFile) { - plugin->InitialiseL( *aFile ); + plugin->InitialiseWithPositionL( *aFile, iProperties[EPbPropertyPosition] ); } } } @@ -2256,6 +2278,7 @@ } else { + RestorePlaybackPositionL( aMedia ); TRAP( aError, InitL( iUri, mimeType, NULL, iAccessPoint) ); /* // 20 steps fix @@ -2284,7 +2307,7 @@ */ if ( KErrNone == aError ) { - RestorePlaybackPositionAndStateL( aMedia ); + RestorePlaybackStateL(); } else { @@ -3468,36 +3491,37 @@ // Restore playback position if it was saved previously // ---------------------------------------------------------------------------- // -void CMPXPlaybackEngine::RestorePlaybackPositionAndStateL( +void CMPXPlaybackEngine::RestorePlaybackPositionL( const CMPXMedia& aMedia ) { - MPX_DEBUG1("CMPXPlaybackEngine::RestorePlaybackPositionAndStateL() entering"); + MPX_FUNC("CMPXPlaybackEngine::RestorePlaybackPositionL() "); // Restore Position iProperties[EPbPropertyPosition] = 0; - if ( KErrNotFound != iPreservedPosition ) - { - iProperties[EPbPropertyPosition] = iPreservedPosition; - iPreservedPosition = KErrNotFound; - } - else - { + // Check media if (aMedia.IsSupported(KMPXMediaGeneralLastPlaybackPosition)) { - iProperties[EPbPropertyPosition] = - aMedia.ValueTObjectL( KMPXMediaGeneralLastPlaybackPosition ); + iPositionFromMedia = + aMedia.ValueTObjectL( KMPXMediaGeneralLastPlaybackPosition ); } - } + MPX_DEBUG2("CMPXPlaybackEngine::RestorePlaybackPositionL iPositionFromMedia %d", iPositionFromMedia ); + } + +// ---------------------------------------------------------------------------- +// Restore playback state if it was saved previously +// ---------------------------------------------------------------------------- +// +void CMPXPlaybackEngine::RestorePlaybackStateL() + { + MPX_FUNC("CMPXPlaybackEngine::RestorePlaybackStateL() "); // Restore State if ( EPbStateNotInitialised != iPreservedState ) { iNextState = iPreservedState; iPreservedState = EPbStateNotInitialised; - } - - MPX_DEBUG1("CMPXPlaybackEngine::RestorePlaybackPositionAndStateL() exiting"); + } } // ---------------------------------------------------------------------------- @@ -3832,6 +3856,18 @@ SetStateL( msg ); iProperties[EPbPropertyPosition]=0; + if ( KErrNotFound != iPreservedPosition ) + { + iProperties[EPbPropertyPosition] = iPreservedPosition; + iPreservedPosition = KErrNotFound; + } + else if ( KErrNotFound != iPositionFromMedia ) + { + iProperties[EPbPropertyPosition] = iPositionFromMedia; + iPositionFromMedia = KErrNotFound; + } + MPX_DEBUG2("CMPXPlaybackEngine::InitL iPropertyPosition %d", iProperties[EPbPropertyPosition] ); + // Check if version2 interface is supported. CDesCArray* interfaces = iPluginHandler->SupportedInterfacesL( p->Uid() ); TBool version2InterfaceSupported = EFalse; @@ -3853,11 +3889,11 @@ { if ( iAccessPointSet ) { - plugin->InitStreaming64L( *aFile, aAccessPoint ); + plugin->InitStreaming64L( *aFile, aAccessPoint, iProperties[EPbPropertyPosition] ); } else { - plugin->Initialise64L( *aFile ); + plugin->Initialise64L( *aFile, iProperties[EPbPropertyPosition] ); } } else diff -r b1fb57be53fe -r a05c44bc3c61 mpx/playbackframework/playbackengine/src/mpxplaybackinitializer.cpp --- a/mpx/playbackframework/playbackengine/src/mpxplaybackinitializer.cpp Fri Mar 19 09:38:24 2010 +0200 +++ b/mpx/playbackframework/playbackengine/src/mpxplaybackinitializer.cpp Fri Apr 16 15:28:14 2010 +0300 @@ -424,7 +424,8 @@ { if ( iMedia ) { - iEngine.RestorePlaybackPositionAndStateL( *iMedia ); + iEngine.RestorePlaybackPositionL( *iMedia ); + iEngine.RestorePlaybackStateL(); } // // Set plug-in handler @@ -621,12 +622,9 @@ iHandler->SelectPlayersL(t); } } - TInt accessPoint = 0; - if ( aMedia.IsSupported(KMPXMediaGeneralExtAccessPoint) ) - { - accessPoint = aMedia.ValueTObjectL( KMPXMediaGeneralExtAccessPoint ); - MPX_DEBUG2("CMPXPlaybackInitializer::InitL accessPoint %d", accessPoint ); - } + + + HBufC8* mimeType = MPXUser::Alloc8L(aMedia.ValueText(KMPXMediaGeneralMimeType)); CleanupStack::PushL(mimeType); @@ -635,7 +633,7 @@ // Plugin handler guarantee to choose a plugin // In case there is file open in the audio controller iHandler->Plugin()->CommandL(EPbCmdClose); - InitL(uri, *mimeType, accessPoint); + InitL(uri, *mimeType); CleanupStack::PopAndDestroy(mimeType); } else // No URI @@ -840,7 +838,7 @@ // Initialize. // ---------------------------------------------------------------------------- // -void CMPXPlaybackInitializer::InitL(const TDesC& aUri, const TDesC8& aType, TInt aAccessPoint) +void CMPXPlaybackInitializer::InitL(const TDesC& aUri, const TDesC8& aType ) { MPX_FUNC("CMPXPlaybackInitializer::InitL"); CMPXPlaybackPlugin* p = iHandler->Plugin(); @@ -869,13 +867,29 @@ // if cast was successful, then init streaming with access point if (plugin) { - if ( aAccessPoint ) + + TInt accessPoint = 0; + if ( iMedia->IsSupported(KMPXMediaGeneralExtAccessPoint) ) { - plugin->InitStreamingL( aUri, aType, aAccessPoint ); + accessPoint = iMedia->ValueTObjectL( KMPXMediaGeneralExtAccessPoint ); + MPX_DEBUG2("CMPXPlaybackInitializer::InitL accessPoint %d", accessPoint ); + } + + TInt position = 0; + if (iMedia->IsSupported(KMPXMediaGeneralLastPlaybackPosition)) + { + position = iMedia->ValueTObjectL( KMPXMediaGeneralLastPlaybackPosition ); + MPX_DEBUG2("CMPXPlaybackInitializer::InitL position %d", position ); + } + + + if ( accessPoint ) + { + plugin->InitStreamingL( aUri, aType, accessPoint, position ); } else { - plugin->InitialiseL(aUri); + plugin->InitialiseWithPositionL(aUri, position); } } else diff -r b1fb57be53fe -r a05c44bc3c61 package_definition.xml --- a/package_definition.xml Fri Mar 19 09:38:24 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -