--- a/browserplugins/browseraudiovideoplugin/src/BavpControllerAudio.cpp Thu Aug 19 09:57:56 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,479 +0,0 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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: Controller class for handling browser requests to play video
-*
-*/
-
-
-// INCLUDE FILES
-#include <AudioPreference.h> // For priority/pref values
-#include <mmf/common/mmferrors.h>
-
-#include "BavpLogger.h"
-#include "BavpControllerAudio.h"
-#include "BavpView.h"
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-CBavpControllerAudio* CBavpControllerAudio::NewL( MBavpView* aView,
- TUint aAccessPtId,
- TBavpMediaType aMediaType,
- const TDesC& aFileName )
- {
- CBavpControllerAudio* self = new( ELeave ) CBavpControllerAudio( aView, aAccessPtId );
-
- Log( EFalse, _L("CBavpControllerAudio::NewL this="), (TInt)self );
-
- CleanupStack::PushL( self );
- self->ConstructL( aMediaType, aFileName );
- CleanupStack::Pop( self );
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::~CBavpControllerAudio()
-// Destructor
-// -----------------------------------------------------------------------------
-CBavpControllerAudio::~CBavpControllerAudio()
- {
- Log( EFalse, _L("CBavpControllerAudio::~CBavpControllerAudio") );
-
- // If currently playing, call Stop before you close and delete
- if ( iCurrentState == EBavpPlaying && iAudioPlayer != NULL)
- {
- iAudioPlayer->Stop();
- }
- if ( iAudioPlayer )
- {
- iAudioPlayer->Close();
- delete iAudioPlayer;
- }
-
- iFs.Close();
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::CBavpControllerAudio
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-CBavpControllerAudio::CBavpControllerAudio( MBavpView* aView,
- TUint aAccessPtId )
- : CBavpController( aView, aAccessPtId )
- {
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::ConstructL( TBavpMediaType aMediaType,
- const TDesC& aFileName )
- {
- // Construct the BavpController base class
- BaseConstructL( aMediaType, aFileName );
-
- // Create Audio Player Client:
- iAudioPlayer = CMdaAudioPlayerUtility::NewL( *this, KAudioPriorityRealOnePlayer,
- TMdaPriorityPreference( KAudioPrefRealOneLocalPlayback ) );
-
- // Connect to file server:
- User::LeaveIfError( iFs.Connect() );
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::OpenAudioUrlL
-// Open the audio url link
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::OpenAudioUrlL()
- {
- Log( EFalse, _L("CBavpControllerAudio::OpenUrlL() ") );
-
- // Note: Play() is called from MapcInitComplete()
- iAudioPlayer->OpenUrlL( *iClipInfo->iUrl, iAccessPtId, KNullDesC8 );
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::OpenAudioFileL
-// Open the audio file
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::OpenAudioFileL()
- {
- Log( EFalse, _L("CBavpControllerAudio::OpenFileL() ") );
-
- // Note: Play() is called from MapcInitComplete()
- iAudioPlayer->OpenFileL( *iClipInfo->iFileName );
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::PlayAudioVideoL
-// Handles request to open and play an audio or video file
-// TDesC& aFilename: Name of audio file, or video file, or URL link
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::PlayAudioVideoL()
- {
- Log( EFalse, _L("CBavpControllerAudio::OpenAndPlayL() ") );
-
- // If currently playing, call Stop before you attempt to open and play
- if ( iCurrentState == EBavpPlaying )
- {
- Stop();
- }
-
- OpenAudioFileL();
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::Stop
-// Stops audio from playing, if playing.
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::Stop()
- {
- Log( EFalse, _L("CBavpControllerAudio::Stop") );
-
- iAudioPlayer->Stop();
- iClipInfo->iPosition = 0;
- iAudioPlayer->SetPosition( iClipInfo->iPosition );
- iCurrentState = EBavpStopped;
-
- iBavpView->UpdateView();
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::Play
-// Non leaving method to play audio
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::Play()
- {
- // To keep LeaveScan from complaining everwhere, we use this non leaving
- // method
- TRAP_IGNORE( PlayL() );
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::PlayL
-// Plays audio
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::PlayL()
- {
- Log( EFalse, _L("CBavpControllerAudio::PlayL") );
-
- SetPlayerVolume( iCurrentVolume );
-
- // Handle multiple media object case
- if ( iBavpControllerArray.Count() > 1 && IsAnotherControllerPlaying() )
- {
- if ( iLastCommand == EBavpCmdPlay )
- {
- // Another controller is playing, and the user wants to play
- // this media object. Pause (or stop) all of the others and
- // play this one.
- PauseOtherControllersPlaying();
- }
- }
-
- iAudioPlayer->SetPosition( iClipInfo->iPosition );
- iAudioPlayer->Play();
- iCurrentState = EBavpPlaying;
-
- iBavpView->UpdateView();
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::Pause
-// Non leaving method to pause playing audio
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::Pause()
- {
- // To keep LeaveScan from complaining everwhere, we use this non leaving
- // method
- TRAP_IGNORE( PauseL() );
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::PauseL
-// Pauses video while playing, if playing.
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::PauseL()
- {
- Log( EFalse, _L("CBavpControllerAudio::PauseL") );
-
- if ( IsClipSeekable() &&
- (iCurrentState == EBavpPlaying || iCurrentState == EBavpPaused))
- {
- // Save clip position, in case we want to resume playing
- iAudioPlayer->GetPosition(iClipInfo->iPosition);
- iAudioPlayer->Pause();
- iCurrentState = EBavpPaused;
- }
- else
- {
- // Not seekable content, i.e. Live stream
- iAudioPlayer->Stop();
- iClipInfo->iPosition = 0;
- iCurrentState = EBavpStopped;
- }
-
- iBavpView->UpdateView();
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::FastForwardL
-// Fast forwards the audio
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::FastForwardL()
- {
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::RewindL
-// Rewinds the audio
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::RewindL()
- {
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::SetPlayerVolume
-// Calculate the player volume from the CR volume (aka BavpController
-// volume value) and sets it
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::SetPlayerVolume( TInt aVolume )
- {
- TInt playerVolume( 0 );
- if ( iPlayerInitialized )
- {
- TInt maxVolume = iAudioPlayer->MaxVolume();
- if (aVolume < 0)
- {
- playerVolume = 0;
- }
- else if (aVolume > maxVolume)
- {
- playerVolume = maxVolume;
- }
- else
- {
- // The CR volume is 0-10, convert to Audio player volume 0-100
- playerVolume = ( aVolume * iPlayerMaxVolume ) / KCRVolumeMax;
- }
-
- // Set Video player volume
- iAudioPlayer->SetVolume( playerVolume );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::GetPlayerVolume
-// Calculate the player volume value and sets the playback volume for the audio
-// track of the video clip.
-// -----------------------------------------------------------------------------
-TInt CBavpControllerAudio::GetPlayerVolume()
- {
- TInt playerVolume( 0 );
- TInt CRVolume( 0 );
-
- if ( iPlayerInitialized )
- {
- // Audio player returns 0-100
- iAudioPlayer->GetVolume( playerVolume );
-
- // Convert to CR volume 0-10
- CRVolume = ( playerVolume * KCRVolumeMax ) / iPlayerMaxVolume;
- }
-
- return CRVolume;
- }
-
-// --------------------------------------------------------------------------
-// CBavpControllerAudio::HandleError
-// Handle error codes. We can receive errors from the MMF Video Player
-// and its MMF callbacks (mvpuoPlayComplete, etc).
-// The MMF errors are for handling content issues, such as decoding content
-// and network access.
-// NOTES:
-// MMF errors start at -12000, see /epoc32/include/mmf/common/MMFErrors.h
-// MMF also returns -1 (KErrNotFound) and few other system-wide errors
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::HandleError( TInt aError )
- {
- Log( EFalse, _L("In CBavpControllerAudioo::HandleError(): err="), aError );
-
- switch ( aError )
- {
- case KErrMMVideoDevice:
- case KErrMMAudioDevice:
- // We get this when the controllers can only support
- // playing one media at a time.
- HandleMultiInstanceError();
- break;
-
- default:
- iCurrentState = EBavpBadContent;
- iBavpView->UpdateView();
- break;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::MapcInitComplete
-// Required due to MMdaAudioPlayerCallback derivation.
-// Called by client to indicate initialization has completed and device is ready
-// to play.
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::MapcInitComplete( TInt aError,
- const TTimeIntervalMicroSeconds& /*aDuration */ )
- {
- Log( EFalse, _L("MapcInitComplete aError="), aError );
-
- // Check for error
- if ( aError != KErrNone )
- {
- HandleError( aError );
- return;
- }
-
- // Audio player is initialized, so we can interact with it, volume,
- iPlayerInitialized = ETrue;
-
- iClipInfo->iDurationInSeconds = iAudioPlayer->Duration();
- iClipInfo->iPosition = 0;
- iAudioPlayer->SetPosition( iClipInfo->iPosition );
-
- // Get the max player volume, so we can scale volume
- iClipInfo->iMaxVolume = iAudioPlayer->MaxVolume();
- iPlayerMaxVolume = iClipInfo->iMaxVolume;
-
- // Handle multiple media object case
- if ( iBavpControllerArray.Count() > 1 && IsAnotherControllerPlaying() )
- {
- if ( iLastCommand == EBavpCmdUnknown )
- {
- // Another controller is playing, and this controller was
- // initializing. Because we can only play one media object at a
- // time, stop this media and let the first one
- // initialized continue to play.
- Stop();
- }
- else if ( iCurrentState == EBavpPlaying && iLastCommand == EBavpCmdPlay )
- {
- // Another controller is playing, and the user wants to play
- // another media object. Pause (or stop) all of the others and
- // play this one.
- PauseOtherControllersPlaying();
- Play();
- }
- }
- // Handle the single media object case
- else
- {
- Play();
- }
-
- // Stop the buffering animation and play the audio only animation
- iBavpView->UpdateView();
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::MapcPlayComplete
-// Required due to MMdaAudioPlayerCallback derivation.
-// Called by client to indicate audio file has completed or has stopped playing.
-// -----------------------------------------------------------------------------
-void CBavpControllerAudio::MapcPlayComplete( TInt aError )
- {
- Log( EFalse, _L("MapcPlayComplete aError="), aError );
-
- if ( iInfiniteLoopFlag )
- {
- // If infinite flag set: play audio again and again...
- iClipInfo->iPosition = 0;
- Play();
- }
- else if ( ( iLoopCount - 1 ) > 0 )
- {
- // If loop count: play, decrement loop count, play again...
- iClipInfo->iPosition = 0;
- Play();
- iLoopCount-- ;
- }
- else
- {
- // We're done looping, or just done playing the audio
- iCurrentState = EBavpPlayComplete;
- iClipInfo->iPosition = 0;
- iLoopCount = iInitLoopCount;
-
- iBavpView->UpdateView();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::getPositionL
-// To get the current position of the clip
-// -----------------------------------------------------------------------------
-
- TTimeIntervalMicroSeconds CBavpControllerAudio::getPositionL()
- {
- if ( iAudioPlayer )
- {
- TTimeIntervalMicroSeconds pos;
- iAudioPlayer->GetPosition( pos );
- return pos;
- }
- return NULL;
- }
-
- // -----------------------------------------------------------------------------
-// CBavpControllerAudio::setPositionL
-// To set the position of the clip
-// -----------------------------------------------------------------------------
-
- void CBavpControllerAudio::setPositionL( TTimeIntervalMicroSeconds val )
- {
- if ( iAudioPlayer )
- {
-
- if ( !IsClipSeekable() && !IsClipLocalMedia() )
- {
- return;
- }
-
- TBool didWePause = EFalse;
- // If playing, pause it (PauseL stops the PositionUpdater)
- if ( iCurrentState == EBavpPlaying )
- {
- PauseL();
- didWePause = ETrue;
- }
-
- if ( (val > iClipInfo->iDurationInSeconds ) || (val < 0) )
- {
- val = 0;
- }
-
- iAudioPlayer->SetPosition(val);
- iClipInfo->iPosition = val;
- if ( didWePause )
- {
- PlayL();
- }
- }
- }
-
-
-// End of File