diff -r ce5ada96ab30 -r 5294c000a26d videoplayback/videohelix/src/mpxvideohelixplayback.cpp --- a/videoplayback/videohelix/src/mpxvideohelixplayback.cpp Fri Mar 12 15:43:00 2010 +0200 +++ b/videoplayback/videohelix/src/mpxvideohelixplayback.cpp Mon Mar 15 12:40:47 2010 +0200 @@ -15,7 +15,7 @@ * */ -// Version : %version: 12 % +// Version : %version: 14 % // @@ -114,7 +114,11 @@ } TInt err = aFile.Open( iFs, aUri, EFileRead | EFileShareReadersOrWriters ); - HandleOpenFileHandleL( err ); + + if ( err != KErrNone ) + { + CheckForStreamingUrlL( aUri ); + } } // ---------------------------------------------------------------------------- @@ -124,7 +128,20 @@ void CMPXVideoHelixPlayback::InitialiseL( const TDesC& aSong ) { MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitialiseL()"), - _L("aSong %S"), &aSong ); + _L("aSong %S"), &aSong ); + + InitialiseWithPositionL( aSong ); +} + + +// ---------------------------------------------------------------------------- +// Initializes a clip for playback from a file name with position +// ---------------------------------------------------------------------------- +// +void CMPXVideoHelixPlayback::InitialiseWithPositionL( const TDesC& aSong, TInt aPosition ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitialiseL()"), + _L("aSong %S, aPosition %d"), &aSong, aPosition ); RFile fileHandle; @@ -134,17 +151,17 @@ if ( err == KErrNone ) { - iVideoPlaybackCtlr->OpenFileL( aSong, fileHandle ); + iVideoPlaybackCtlr->OpenFileL( aSong, fileHandle, aPosition ); } #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API else if ( err == KErrTooBig ) { - // + // // use RFile64 handle // RFile64 fileHandle64; CleanupClosePushL( fileHandle64 ); - + MPX_TRAPD( err, OpenFileHandle64L( aSong, fileHandle64 )); if ( err != KErrNone ) @@ -154,18 +171,18 @@ } else { - iVideoPlaybackCtlr->OpenFile64L( aSong, fileHandle64 ); + iVideoPlaybackCtlr->OpenFile64L( aSong, fileHandle64, aPosition ); } - - CleanupStack::PopAndDestroy(); // fileHandle64 + + CleanupStack::PopAndDestroy(); // fileHandle64 } #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API else { // Handle error - iVideoPlaybackCtlr->HandleError( err ); + iVideoPlaybackCtlr->HandleError( err ); } - + CleanupStack::PopAndDestroy(); // fileHandle } @@ -176,11 +193,23 @@ void CMPXVideoHelixPlayback::InitialiseL( RFile& aSong ) { MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitialiseL( RFile )")); + + InitialiseWithPositionL( aSong ); +} +// ---------------------------------------------------------------------------- +// Initializes a clip for playback from a file handle with position +// ---------------------------------------------------------------------------- +// +void CMPXVideoHelixPlayback::InitialiseWithPositionL( RFile& aSong, TInt aPosition ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitialiseWithPositionL( RFile )"), + _L("aPosition %d"), aPosition ); + TFileName filename; aSong.FullName( filename ); - iVideoPlaybackCtlr->OpenFileL( filename, aSong ); + iVideoPlaybackCtlr->OpenFileL( filename, aSong, aPosition ); } @@ -190,10 +219,11 @@ // void CMPXVideoHelixPlayback::InitStreamingL( const TDesC& aUri, const TDesC8& /*aType*/, - TInt aAccessPoint ) + TInt aAccessPoint, + TInt aPosition ) { MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitStreamingL()"), - _L("aUri %S, aAccessPoint %d"), &aUri, aAccessPoint ); + _L("aUri %S, aAccessPoint %d, aPosition %d"), &aUri, aAccessPoint, aPosition ); RFile fileHandle; @@ -208,7 +238,7 @@ } else { - iVideoPlaybackCtlr->OpenFileL( aUri, fileHandle, aAccessPoint ); + iVideoPlaybackCtlr->OpenFileL( aUri, fileHandle, aPosition, aAccessPoint ); } CleanupStack::PopAndDestroy(); @@ -218,15 +248,15 @@ // Initializes a clip for playback from a file handle // ---------------------------------------------------------------------------- // -void CMPXVideoHelixPlayback::InitStreamingL( RFile& aFile, TInt aAccessPoint ) +void CMPXVideoHelixPlayback::InitStreamingL( RFile& aFile, TInt aAccessPoint, TInt aPosition ) { MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitStreamingL( RFile )"), - _L("aAccessPoint = %d"), aAccessPoint ); + _L("aAccessPoint = %d, aPosition = %d"), aAccessPoint, aPosition ); TFileName filename; aFile.FullName( filename ); - iVideoPlaybackCtlr->OpenFileL( filename, aFile, aAccessPoint ); + iVideoPlaybackCtlr->OpenFileL( filename, aFile, aPosition, aAccessPoint ); } // ---------------------------------------------------------------------------- @@ -316,34 +346,23 @@ MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::CancelRequest()")); } -// ---------------------------------------------------------------------------- -// Handle Open File Handle -// ---------------------------------------------------------------------------- +// ------------------------------------------------------------------------------------------------ +// CMPXVideoHelixPlayback::CheckForStreamingUrlL() +// ------------------------------------------------------------------------------------------------ // -void CMPXVideoHelixPlayback::HandleOpenFileHandleL( TInt aError ) +void CMPXVideoHelixPlayback::CheckForStreamingUrlL( const TDesC& aUri ) { - MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::HandleOpenFileHandleL()")); - - // - // Remap KErrNotReady to KErrNotFound, because it is referencing a drive - // that is not existent - // - if ( aError == KErrNotReady ) + MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::CMPXVideoHelixPlayback::CheckForStreamingUrlL()")); + + CMediaRecognizer* recognizer = CMediaRecognizer::NewL(); + CleanupStack::PushL( recognizer ); + + if ( ! recognizer->IsValidStreamingPrefix( aUri ) ) { - aError = KErrNotFound; + User::LeaveIfError( KErrNotFound ); } - - MPX_DEBUG(_L("CMPXVideoHelixPlayback::HandleOpenFileHandleL() Open error = %d"), aError); - - // - // 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 ( aError != KErrBadName ) - { - User::LeaveIfError( aError ); - } + + CleanupStack::PopAndDestroy( recognizer ); } #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API @@ -364,36 +383,40 @@ } TInt err = aFile.Open( iFs, aUri, EFileRead | EFileShareReadersOrWriters ); - HandleOpenFileHandleL( err ); + + if ( err != KErrNone ) + { + CheckForStreamingUrlL( aUri ); + } } // ---------------------------------------------------------------------------- // Initializes a clip for playback from a 64-bit file handle // ---------------------------------------------------------------------------- // -void CMPXVideoHelixPlayback::Initialise64L( RFile64& aSong ) +void CMPXVideoHelixPlayback::Initialise64L( RFile64& aSong, TInt aPosition ) { - MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::Initialise64L( RFile64 )")); - + MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::Initialise64L( RFile64 )"), + _L("aPosition %d"), aPosition ); TFileName filename; aSong.FullName( filename ); - iVideoPlaybackCtlr->OpenFile64L( filename, aSong ); + iVideoPlaybackCtlr->OpenFile64L( filename, aSong, aPosition ); } // ---------------------------------------------------------------------------- // Initializes a clip for playback from a 64-bit file handle // ---------------------------------------------------------------------------- // -void CMPXVideoHelixPlayback::InitStreaming64L( RFile64& aFile, TInt aAccessPoint ) +void CMPXVideoHelixPlayback::InitStreaming64L( RFile64& aFile, TInt aAccessPoint, TInt aPosition ) { MPX_ENTER_EXIT(_L("CMPXVideoHelixPlayback::InitStreaming64L( RFile64 )"), - _L("aAccessPoint = %d"), aAccessPoint ); + _L("aAccessPoint = %d, aPosition %d"), aAccessPoint, aPosition ); TFileName filename; aFile.FullName( filename ); - iVideoPlaybackCtlr->OpenFile64L( filename, aFile, aAccessPoint ); + iVideoPlaybackCtlr->OpenFile64L( filename, aFile, aPosition, aAccessPoint ); } #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API