--- a/profilesservices/MediaFileList/Src/mediafilepreview.cpp Thu Aug 19 10:12:30 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1539 +0,0 @@
-/*
-* Copyright (c) 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: Class for preview audio and video
-*
-*/
-
-
-
-
-// INCLUDE FILES
-
-#include "mediafilepreview.h"
-#include "mediafiledialogutils.h"
-#include "mediafilelist.h"
-#include "mediafilelistdebug.h"
-
-#include <ScreensaverInternalPSKeys.h> // KPSUidScreenSaver
-#include <AudioPreference.h> // KAudioPriorityPreview
-#include <c3dringingtoneinterface.h> // C3DRingingToneInterface
-
-#include <ctsydomainpskeys.h> // for phone call states
-
-// for reading active profile settings
-#include <MProfileEngine.h>
-#include <MProfile.h>
-#include <MProfileTones.h>
-#include "TProfileToneSettings.h"
-#include <MProfileExtraSettings.h>
-#include <MProfile3DToneSettings.h>
-#include <ProfileInternal.hrh>
-#include <ProfileEngineDomainCRKeys.h> // KProEngDefaultRingingTone
-
-
-/******************************************************************************
- * class CMFPreviewHandlerBase
- ******************************************************************************/
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::CMFPreviewHandlerBase
-//
-// -----------------------------------------------------------------------------
-//
-CMFPreviewHandlerBase::CMFPreviewHandlerBase()
- {
- iMediaType = KErrNotFound;
- iRingingVolume = KErrNotFound;
- iRingingType = KErrNotFound;
- iVibra = KErrNotFound;
- i3DEffect = KErrNotFound;
- i3DEcho = KErrNotFound;
- iFileSize = KErrNotFound;
-
- iFullName = NULL;
-
- iActiveProfileRead = EFalse;
- iPlayerStatus = EPlayerNotCreated;
-
- iObserver = NULL;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::CMFPreviewHandlerBase
-//
-// -----------------------------------------------------------------------------
-//
-void CMFPreviewHandlerBase::ConstructL()
- {
- // To allow/not allow screensaver
- // Errors ignored, no actions needed if API is not available
- iProperty.Attach( KPSUidScreenSaver, KScreenSaverAllowScreenSaver );
-
- User::LeaveIfError( iApaSession.Connect() );
-
- TRAP_IGNORE( ReadDefaultToneL() );
- // To keep backlight on while a video is being previewed
- iBacklightTimer = CPeriodic::NewL( EPriorityLow );
- }
-
-
-// ----------------------------------------------------------------------------
-// Destructor
-//
-// ----------------------------------------------------------------------------
-//
-CMFPreviewHandlerBase::~CMFPreviewHandlerBase()
- {
- delete iFullName;
- iProperty.Close();
-
- iApaSession.Close();
-
- if ( iBacklightTimer )
- {
- delete iBacklightTimer;
- iBacklightTimer = NULL;
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::SetAttr
-//
-// -----------------------------------------------------------------------------
-void CMFPreviewHandlerBase::SetAttrL( TInt aAttr, TInt aValue )
- {
- switch ( aAttr )
- {
- case CMediaFileList::EAttrVolume:
- {
- iRingingVolume = aValue;
- break;
- }
- case CMediaFileList::EAttrRingingType:
- {
- iRingingType = aValue;
- break;
- }
- case CMediaFileList::EAttrVibra:
- {
- iVibra = aValue;
- break;
- }
- case CMediaFileList::EAttr3DEffect:
- {
- i3DEffect = aValue;
- break;
- }
- case CMediaFileList::EAttr3DEcho:
- {
- i3DEcho = aValue;
- break;
- }
- case CMediaFileList::EAttrFileSize:
- {
- iFileSize = aValue;
- break;
- }
- default:
- {
- break;
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::Attr
-//
-// -----------------------------------------------------------------------------
-TInt CMFPreviewHandlerBase::Attr( TInt aAttr )
- {
- TInt ret = KErrNotFound;
-
- switch ( aAttr )
- {
- case CMediaFileList::EAttrVolume:
- {
- ret = iRingingVolume;
- break;
- }
- case CMediaFileList::EAttrRingingType:
- {
- ret = iRingingType;
- break;
- }
- case CMediaFileList::EAttrVibra:
- {
- ret = iVibra;
- break;
- }
- case CMediaFileList::EAttr3DEffect:
- {
- ret = i3DEffect;
- break;
- }
- case CMediaFileList::EAttr3DEcho:
- {
- ret = i3DEcho;
- break;
- }
- case CMediaFileList::EAttrFileSize:
- {
- ret = iFileSize;
- break;
- }
- default:
- {
- break;
- }
- }
-
- return ret;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::SetAttrL
-//
-// -----------------------------------------------------------------------------
-void CMFPreviewHandlerBase::SetAttrL( TInt aAttr, const TDesC& aValue )
- {
- if ( aAttr == TMFDialogUtil::EAttrFileName )
- {
- delete iFullName;
- iFullName = NULL;
- iFullName = aValue.AllocL();
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::SetAttr
-//
-// -----------------------------------------------------------------------------
-//
-void CMFPreviewHandlerBase::SetAttrL( TInt aAttr, TAny* aValue )
- {
- if ( aAttr == TMFDialogUtil::EAttrDrawingWindow )
- {
- iWindow = static_cast<RWindow*>( aValue );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::SetObserver
-//
-// -----------------------------------------------------------------------------
-//
-void CMFPreviewHandlerBase::SetObserver( MPreviewHandlerObserver* aObserver )
- {
- iObserver = aObserver;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::IsCallOngoing
-//
-// -----------------------------------------------------------------------------
-//
-TBool CMFPreviewHandlerBase::IsCallOngoing()
- {
- TInt err = KErrNone;
- TInt callState = EPSCTsyCallStateUninitialized;
-
- err = RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState );
- if ( err == KErrNone )
- {
- if( callState != EPSCTsyCallStateUninitialized &&
- callState != EPSCTsyCallStateNone &&
- callState != EPSCTsyCallStateDisconnecting )
- {
- // There was call ongoing
- return ETrue;
- }
- }
-
- return EFalse;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::RingingVolume
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMFPreviewHandlerBase::RingingVolume()
- {
- const TInt KDefaultVolumeLevel = 7; // see profile.hrh for volume levels
-
- if ( iRingingVolume != KErrNotFound )
- {
- return iRingingVolume;
- }
-
- if ( iActiveProfileRead )
- {
- return iActiveProfileRingingVolume;
- }
-
- return KDefaultVolumeLevel;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::RingingType
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMFPreviewHandlerBase::RingingType()
- {
- if ( iRingingType != KErrNotFound )
- {
- return iRingingType;
- }
-
- if ( iActiveProfileRead )
- {
- return iActiveProfileRingingType;
- }
-
- return ERingingTypeRinging;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::Vibra
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMFPreviewHandlerBase::Vibra()
- {
- if ( iVibra != KErrNotFound )
- {
- return iVibra;
- }
-
- if ( iActiveProfileRead )
- {
- return iActiveProfileVibra;
- }
-
- return 0; // in case of error vibra is off
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::Echo3D
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMFPreviewHandlerBase::Echo3D()
- {
- if ( i3DEcho != KErrNotFound )
- {
- return i3DEcho;
- }
-
- if ( iActiveProfileRead )
- {
- return iActiveProfile3DEcho;
- }
-
- return EProfile3DEchoOff; // from ProfileInternal.hrh
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::Effect3D
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMFPreviewHandlerBase::Effect3D()
- {
- if ( i3DEffect != KErrNotFound )
- {
- return i3DEffect;
- }
-
- if ( iActiveProfileRead )
- {
- return iActiveProfile3DEffect;
- }
-
- return EProfile3DEffectOff;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::ConvertVolume
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMFPreviewHandlerBase::ConvertVolume( TInt aVolume, TInt aMaxVolume )
- {
- const TInt KMinVolumeLevel = 1;
- const TInt KMaxVolumeLevel = 10;
-
- TInt result = aMaxVolume * aVolume / KMaxVolumeLevel;
-
- // if user has selected minimum volume level set HW volume 1
- if ( aVolume == KMinVolumeLevel && result == 0 )
- {
- result = 1;
- }
-
- return result;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::ReadActiveProfileL
-// -----------------------------------------------------------------------------
-//
-void CMFPreviewHandlerBase::ReadActiveProfileL()
- {
- iActiveProfileRead = EFalse;
-
- MProfileEngine* profileEngine = CreateProfileEngineL();
- CleanupReleasePushL( *profileEngine );
-
- MProfile* activeProfile = profileEngine->ActiveProfileL();
- CleanupReleasePushL( *activeProfile );
-
- const MProfileTones& profileTones = activeProfile->ProfileTones();
-
- const TProfileToneSettings& toneSettings = profileTones.ToneSettings();
- iActiveProfileVibra = toneSettings.iVibratingAlert;
- iActiveProfileRingingVolume = toneSettings.iRingingVolume;
- iActiveProfileRingingType = toneSettings.iRingingType;
-
- const MProfileExtraSettings& extra = activeProfile->ProfileExtraSettings();
- const MProfile3DToneSettings& threeD = extra.Profile3DToneSettings();
-
- iActiveProfile3DEffect = threeD.Effect();
- iActiveProfile3DEcho = threeD.Echo();
-
- CleanupStack::PopAndDestroy( activeProfile );
- CleanupStack::PopAndDestroy( profileEngine );
-
- iActiveProfileRead = ETrue;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::ReadDefaultToneL
-// -----------------------------------------------------------------------------
-//
-void CMFPreviewHandlerBase::ReadDefaultToneL()
- {
- CRepository* cenrep = CRepository::NewLC( KCRUidProfileEngine );
-
- User::LeaveIfError( cenrep->Get( KProEngDefaultRingingTone, iDefaultTone ) );
- CleanupStack::PopAndDestroy( cenrep );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::EnableScreenSaver
-//
-// -----------------------------------------------------------------------------
-//
-void CMFPreviewHandlerBase::EnableScreenSaver( TBool aEnable )
- {
- if ( aEnable )
- {
- // allow screen saver, unless there's a call ongoing
- if( !IsCallOngoing() )
- {
- // ignore error, no actions needed if API is not available
- iProperty.Set( KPSUidScreenSaver, KScreenSaverAllowScreenSaver,
- EFLScreenSaverAllowed );
- }
- }
- else
- {
- iProperty.Set( KPSUidScreenSaver,
- KScreenSaverAllowScreenSaver, EFLScreenSaverNotAllowed );
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::GetDataType
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMFPreviewHandlerBase::GetDataType( const TDesC& aFileName, TDataType& aDataType )
- {
- TUid dummyUid( KNullUid );
- return iApaSession.AppForDocument( aFileName, dummyUid, aDataType );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::Panic
-//
-// -----------------------------------------------------------------------------
-//
-void CMFPreviewHandlerBase::Panic( TInt aReason )
- {
- _LIT( KPanicCategory, "CMFPreviewHandlerBase" );
-
- User::Panic( KPanicCategory, aReason );
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::DoResetInactivityTimer()
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CMFPreviewHandlerBase::DoResetInactivityTimer( TAny* /*aObject*/ )
- {
- User::ResetInactivityTime();
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CMFPreviewHandlerBase::DisableBackLight()
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CMFPreviewHandlerBase::DisableBackLight()
- {
- const TInt KResetInactivityTimerDelay = 2000000;
- iBacklightTimer->Cancel(); // Just in case
- // Disable backlight turn off during video preview
- iBacklightTimer->Start( KResetInactivityTimerDelay,
- KResetInactivityTimerDelay,
- TCallBack( DoResetInactivityTimer, NULL ) );
-
- }
-
-
-/******************************************************************************
- * class CMFVideoPreviewHandler
- ******************************************************************************/
-
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::NewL
-//
-// -----------------------------------------------------------------------------
-CMFVideoPreviewHandler* CMFVideoPreviewHandler::NewL()
- {
- CMFVideoPreviewHandler* self = new (ELeave) CMFVideoPreviewHandler();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- return self;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::CMFVideoPreviewHandler
-//
-// -----------------------------------------------------------------------------
-//
-CMFVideoPreviewHandler::CMFVideoPreviewHandler()
- {
- iPlayerStatus = EPlayerNotCreated;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CMFVideoPreviewHandler::ConstructL()
- {
- CMFPreviewHandlerBase::ConstructL();
- }
-
-
-// ----------------------------------------------------------------------------
-// Destructor
-//
-// ----------------------------------------------------------------------------
-//
-CMFVideoPreviewHandler::~CMFVideoPreviewHandler()
- {
- Cancel();
-
- if( iVolumeRampTimer )
- {
- delete iVolumeRampTimer;
- }
-
- if( iVideoPlayer )
- {
- delete iVideoPlayer;
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::IsPlaying
-//
-// -----------------------------------------------------------------------------
-TBool CMFVideoPreviewHandler::IsPlaying()
- {
- if ( iPlayerStatus == EPlayerNotCreated )
- {
- return EFalse;
- }
-
- return ETrue;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::SetDisplayWindowL
-//
-// -----------------------------------------------------------------------------
-void CMFVideoPreviewHandler::SetDisplayWindowL()
- {
- if ( !iVideoPlayer )
- {
- return;
- }
-
- if ( !iWindow )
- {
- return; // no screen for showing video
- }
-
- // Screen and clip rectangles to window dimensions
- TPoint wndPosition( iWindow->AbsPosition() );
- TSize wndSize( iWindow->Size() );
-
- TRect wndRect( wndPosition, wndSize );
-
- iVideoPlayer->SetDisplayWindowL( CCoeEnv::Static()->WsSession(),
- *(CCoeEnv::Static()->ScreenDevice()),
- *iWindow,
- wndRect,
- wndRect );
- }
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::PlayL
-//
-// -----------------------------------------------------------------------------
-void CMFVideoPreviewHandler::PlayL()
- {
- Cancel(); // stop previous playing
-
- if ( !iFullName || iFullName->Des().Length() == 0 )
- {
- User::Leave( KErrNotFound );
- }
-
- if ( !iWindow )
- {
- return; // no screen for showing video
- }
-
- TRAP_IGNORE( ReadActiveProfileL() );
-
- // Screen and clip rectangles to window dimensions
- TPoint wndPosition( iWindow->AbsPosition() );
- TSize wndSize( iWindow->Size() );
-
- // iY and iHeight should be even numbers
- if( wndPosition.iY % 2 )
- {
- wndPosition.iY = wndPosition.iY + 1;
- wndSize.iHeight = wndSize.iHeight - 1;
- }
- if( wndSize.iHeight % 2 )
- {
- wndSize.iHeight = wndSize.iHeight - 1;
- }
-
- TRect wndRect( wndPosition, wndSize );
-
-
- // check video file
- TDataType dataType;
- TInt err = GetDataType( iFullName->Des(), dataType );
- if ( err != KErrNone )
- {
- User::Leave( err );
- }
-
- TInt vibra = Vibra();
- TMdaPriorityPreference pref = (TMdaPriorityPreference) KAudioPrefRingFilePreview;
- if ( vibra )
- {
- pref = (TMdaPriorityPreference) KAudioPrefRingFilePreviewVibra;
- }
-
- delete iVideoPlayer;
- iVideoPlayer = NULL;
-
- iVideoPlayer = CVideoPlayerUtility::NewL ( *this, KAudioPriorityPreview, pref,
- CCoeEnv::Static()->WsSession(),
- *(CCoeEnv::Static()->ScreenDevice()),
- *iWindow,
- wndRect,
- wndRect );
-
- iVideoPlayer->OpenFileL( iFullName->Des() );
-
- iPlayerStatus = EPlayerInitializing;
-
- EnableScreenSaver( EFalse ); // do not allow screen saver while playing
- DisableBackLight();
-
-#ifdef _DEBUG
- User::InfoPrint( iFullName->Des() );
- FLOG( _L("CMFVideoPreviewHandler::PlayL '%S'"), &iFullName->Des() );
-#endif
-
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::Stop
-//
-// -----------------------------------------------------------------------------
-void CMFVideoPreviewHandler::Stop()
- {
- Cancel();
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::Cancel
-//
-// -----------------------------------------------------------------------------
-//
-void CMFVideoPreviewHandler::Cancel()
- {
- TBool isPlaying = EFalse;
-
- if( iVolumeRampTimer )
- {
- iVolumeRampTimer->Cancel();
- }
-
- if( iVideoPlayer )
- {
- isPlaying = ETrue;
-
- if ( iPlayerStatus == EPlayerPlaying )
- {
- iVideoPlayer->Stop();
- }
- iVideoPlayer->Close();
-
- delete iVideoPlayer;
- iVideoPlayer = NULL;
- }
-
- if ( isPlaying )
- {
- User::InfoPrint( _L("cancel video") );
-
- EnableScreenSaver( ETrue );
- iBacklightTimer->Cancel();
- }
-
- iPlayerStatus = EPlayerNotCreated;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::SetRingingType
-//
-// -----------------------------------------------------------------------------
-//
-void CMFVideoPreviewHandler::SetRingingType( TInt aRingingType )
- {
- const TInt KMinVolumeLevel = 1;
- const TInt KAscendingVolumeRampInterval = 3000000; // 3 seconds
-
- if ( aRingingType == ERingingTypeAscending )
- {
- if ( !iVolumeRampTimer )
- {
- iVolumeRampTimer = CPeriodic::New( CActive::EPriorityStandard );
- }
-
- if ( iVolumeRampTimer && !iVolumeRampTimer->IsActive() )
- {
- TCallBack cb( VolumeRampTimerCallback, this );
- iRampedVolume = KMinVolumeLevel;
- iVolumeRampTimer->Start( KAscendingVolumeRampInterval,
- KAscendingVolumeRampInterval, cb );
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::ConvertVolume
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMFVideoPreviewHandler::ConvertVolume( TInt aVolume )
- {
- if ( !iVideoPlayer )
- {
- return 0;
- }
-
- TInt result = 0;
- TBool audioEnabled = EFalse;
-
- TRAP_IGNORE( audioEnabled = iVideoPlayer->AudioEnabledL() );
-
- if ( audioEnabled )
- {
- result = CMFPreviewHandlerBase::ConvertVolume( aVolume, iVideoPlayer->MaxVolume() );
-
- // if user has selected silent ringing type or beeb once, set volume off
- TInt ringingType = RingingType();
- if ( ringingType == ERingingTypeSilent || ringingType == ERingingTypeBeepOnce )
- {
- result = 0;
- }
- }
-
- return result;
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::VolumeRampTimerCallback
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMFVideoPreviewHandler::VolumeRampTimerCallback( TAny* aObj )
- {
- return static_cast<CMFVideoPreviewHandler*>( aObj )->VolumeRamp();
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::VolumeRamp
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMFVideoPreviewHandler::VolumeRamp()
- {
- const TInt KPhoneVideoVolumeRampStep = 1;
-
- TInt ringingVolume = RingingVolume();
- if ( iRampedVolume < ringingVolume )
- {
- iRampedVolume = iRampedVolume + KPhoneVideoVolumeRampStep;
- if ( iRampedVolume >= ringingVolume )
- {
- // target volume level reached
- iRampedVolume = ringingVolume;
- iVolumeRampTimer->Cancel();
- }
- }
-
- TRAP_IGNORE( iVideoPlayer->SetVolumeL( ConvertVolume( iRampedVolume ) ) );
-
- return KErrNone;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::MvpuoOpenComplete (from MVidePlayerUtilityObserver)
-//
-// -----------------------------------------------------------------------------
-//
-void CMFVideoPreviewHandler::MvpuoOpenComplete( TInt aError )
- {
- __ASSERT_DEBUG( iPlayerStatus == EPlayerInitializing, Panic( KErrGeneral ) );
-
- if ( aError )
- {
- Cancel();
-
- if ( iObserver )
- {
- TInt event = MPreviewHandlerObserver::EPreviewError;
- TRAP_IGNORE( iObserver->HandlePreviewEventL( event, aError ) );
- }
- }
- else
- {
- iVideoPlayer->Prepare();
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::MvpuoPrepareComplete (from MVidePlayerUtilityObserver)
-//
-// -----------------------------------------------------------------------------
-//
-void CMFVideoPreviewHandler::MvpuoPrepareComplete( TInt aError )
- {
- const TInt KMinVolumeLevel = 1;
-
- __ASSERT_DEBUG( iPlayerStatus == EPlayerInitializing, Panic( KErrGeneral ) );
-
- if ( aError != KErrNone )
- {
- Cancel();
-
- if ( iObserver )
- {
- TInt event = MPreviewHandlerObserver::EPreviewError;
- TRAP_IGNORE( iObserver->HandlePreviewEventL( event, aError ) );
- }
- return;
- }
-
- iPlayerStatus = EPlayerInitialized;
-
- TInt ringingType = RingingType();
- TInt ringingVolume = RingingVolume();
- TInt vibra = Vibra();
-
-
- SetRingingType( ringingType );
-
- TInt startVolume = KMinVolumeLevel;
- if ( ringingType != ERingingTypeAscending )
- {
- startVolume = ConvertVolume( ringingVolume );
- }
- else
- {
- // Ascending starts from minimum volume level
- startVolume = ConvertVolume( KMinVolumeLevel );
- }
- TRAP_IGNORE( iVideoPlayer->SetVolumeL( startVolume ) );
-
- TMdaPriorityPreference pref = (TMdaPriorityPreference) KAudioPrefRingFilePreview;
- if ( vibra )
- {
- pref = (TMdaPriorityPreference) KAudioPrefRingFilePreviewVibra;
- }
-
- // Unfortunately SetPriorityL uses always priority/preference
- // settings which are given in videoPlayer constructor and ONLY
- // after that sets SetPriorityL parameter to its member data
- // which leads to a situation that we need to make SetPriorityL
- // call twice to make new settings effect.
- TRAP_IGNORE( iVideoPlayer->SetPriorityL( KAudioPriorityPreview, pref ) );
- TRAP_IGNORE( iVideoPlayer->SetPriorityL( KAudioPriorityPreview, pref ) );
-
- iVideoPlayer->Play();
- iPlayerStatus = EPlayerPlaying;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::MvpuoPlayComplete (from MVidePlayerUtilityObserver)
-//
-// -----------------------------------------------------------------------------
-//
-void CMFVideoPreviewHandler::MvpuoPlayComplete( TInt aError )
- {
- __ASSERT_DEBUG( iPlayerStatus == EPlayerPlaying, Panic( KErrGeneral ) );
-
- if ( aError != KErrNone )
- {
- Cancel();
-
- if ( iObserver )
- {
- TInt event = MPreviewHandlerObserver::EVideoPreviewComplete;
- TRAP_IGNORE( iObserver->HandlePreviewEventL( event, aError ) );
- }
- return;
- }
-
- TInt ringingType = RingingType();
- if( ringingType != ERingingTypeRingOnce )
- {
- iVideoPlayer->Play();
- }
- else
- {
- Cancel();
- if ( iObserver )
- {
- TInt event = MPreviewHandlerObserver::EVideoPreviewComplete;
- TRAP_IGNORE( iObserver->HandlePreviewEventL( event, aError ) );
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::MvpuoFrameReady (from MVidePlayerUtilityObserver)
-//
-// -----------------------------------------------------------------------------
-//
-void CMFVideoPreviewHandler::MvpuoFrameReady( CFbsBitmap& /*aFrame*/,TInt /*aError*/ )
- {
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::MvpuoEvent (from MVidePlayerUtilityObserver)
-//
-// -----------------------------------------------------------------------------
-//
-void CMFVideoPreviewHandler::MvpuoEvent( const TMMFEvent& /*aEvent*/ )
- {
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFVideoPreviewHandler::GetRectData
-//
-// -----------------------------------------------------------------------------
-void CMFVideoPreviewHandler::GetRectData( TRect aRect, TDes& aText )
- {
- _LIT( KFormat, "top left (%d,%d) bottom right (%d,%d)" );
-
- TPoint p1 = aRect.iTl;
- TPoint p2 = aRect.iBr;
-
- aText.Format( KFormat, p1.iX, p1.iY, p2.iX, p2.iY );
- }
-
-
-
-
-/******************************************************************************
- * class CMFAudioPreviewHandler
- ******************************************************************************/
-
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::NewL
-//
-// -----------------------------------------------------------------------------
-CMFAudioPreviewHandler* CMFAudioPreviewHandler::NewL()
- {
- CMFAudioPreviewHandler* self = new (ELeave) CMFAudioPreviewHandler();
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
-
- return self;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::CMFAudioPreviewHandler
-//
-// -----------------------------------------------------------------------------
-//
-CMFAudioPreviewHandler::CMFAudioPreviewHandler()
- {
- iAudioPlayerStatus = EPlayerNotCreated;
- iTonePlayerStatus = EPlayerNotCreated;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::CMFAudioPreviewHandler
-//
-// -----------------------------------------------------------------------------
-//
-void CMFAudioPreviewHandler::ConstructL()
- {
- CMFPreviewHandlerBase::ConstructL();
- }
-
-
-// ----------------------------------------------------------------------------
-// Destructor
-//
-// ----------------------------------------------------------------------------
-//
-CMFAudioPreviewHandler::~CMFAudioPreviewHandler()
- {
- Cancel();
-
- delete iAudioPlayer;
- delete iTonePlayer;
- delete i3dRingingTonePlugin;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::IsPlaying
-//
-// -----------------------------------------------------------------------------
-TBool CMFAudioPreviewHandler::IsPlaying()
- {
- if ( iAudioPlayerStatus != EPlayerNotCreated )
- {
- return ETrue;
- }
-
- if ( iTonePlayerStatus != EPlayerNotCreated )
- {
- return ETrue;
- }
-
- return EFalse;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::PlayL
-//
-// -----------------------------------------------------------------------------
-void CMFAudioPreviewHandler::PlayL()
- {
- //sequence for playing a beep once sound
- _LIT8( KFileListBeepSequence, "\x00\x11\x06\x0A\x08\x73\x0A\x40\x28\x0A\xF7\
- \x05\xFC\x40\x64\x0A\x08\x40\x32\x0A\xF7\x06\x0B" );
-
- // rng mime type
- _LIT( KFileListRngMimeType, "application/vnd.nokia.ringing-tone" );
-
- Cancel(); // stop previous play
-
- if ( !iFullName || iFullName->Des().Length() == 0 )
- {
- User::Leave( KErrNotFound );
- }
-
- TRAP_IGNORE( ReadActiveProfileL() );
-
- TPtrC fileName( iFullName->Des() );
- TDataType dataType;
- TInt err = GetDataType( fileName, dataType );
- if ( err == KErrNotFound )
- {
- fileName.Set( iDefaultTone );
- if ( fileName.Length() == 0 )
- {
- User::Leave( KErrNotFound );
- }
- }
- else if ( err != KErrNone )
- {
- User::Leave( err );
- }
-
- TBool mimeTypeRng = EFalse;
-
- if ( err == KErrNone )
- {
- if( dataType.Des().CompareF( KFileListRngMimeType ) == 0 )
- {
- mimeTypeRng = ETrue;
- }
- }
-
- TInt ringingType = RingingType();
- if ( ringingType == ERingingTypeBeepOnce )
- {
- // Active profile ringing tone is set to Beep Once
- // Don't initialize a FileSequence but use DesSequence instead
- iTonePlayer = CMdaAudioToneUtility::NewL( *this );
- iTonePlayer->PrepareToPlayDesSequence( KFileListBeepSequence() );
- iTonePlayerStatus = EPlayerInitializing;
- }
- else
- {
- if( mimeTypeRng )
- {
- //Ringingtone is a RNG-file
- iTonePlayer = CMdaAudioToneUtility::NewL( *this );
- iTonePlayer->PrepareToPlayFileSequence( fileName );
- iTonePlayerStatus = EPlayerInitializing;
- }
- else
- {
- delete iAudioPlayer;
- iAudioPlayer = NULL;
-
- iAudioPlayer = CDrmPlayerUtility::NewFilePlayerL(
- fileName, *this, KAudioPriorityRingingTonePreview,
- ( TMdaPriorityPreference )KAudioPrefRingFilePreview );
-
- iAudioPlayerStatus = EPlayerInitializing;
- }
- }
-
- EnableScreenSaver( EFalse );
- DisableBackLight();
-
-#ifdef _DEBUG
- User::InfoPrint( iFullName->Des() );
- FLOG( _L("CMFAudioPreviewHandler::PlayL '%S'"), &iFullName->Des() );
-#endif
-
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::Stop
-//
-// -----------------------------------------------------------------------------
-void CMFAudioPreviewHandler::Stop()
- {
- Cancel();
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::ConvertVolume
-//
-// -----------------------------------------------------------------------------
-//
-TInt CMFAudioPreviewHandler::ConvertVolume( TInt aVolume )
- {
- TInt result = 0;
- if ( iAudioPlayer )
- {
- result = CMFPreviewHandlerBase::ConvertVolume( aVolume, iAudioPlayer->MaxVolume() );
- }
- else if ( iTonePlayer )
- {
- result = CMFPreviewHandlerBase::ConvertVolume( aVolume, iTonePlayer->MaxVolume() );
- }
-
- //if user has selected silent ringing type, set volume off
- TInt ringingType = RingingType();
- if( ringingType == ERingingTypeSilent )
- {
- result = 0;
- }
-
- return result;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::SetToneRingingType
-//
-// -----------------------------------------------------------------------------
-//
-void CMFAudioPreviewHandler::SetToneRingingType( TInt aRingingType )
- {
- const TInt KToneInterval = 1000000; // 1 second pause between tones
- const TInt KAscendingVolumeInterval = 3000000; // 3 seconds
-
- if ( !iTonePlayer )
- {
- return;
- }
-
- __ASSERT_DEBUG( iTonePlayerStatus == EPlayerInitialized, Panic( KErrGeneral ) );
-
-
- TInt ringingVolume = RingingVolume();
-
- switch( aRingingType )
- {
- case ERingingTypeRinging:
- case ERingingTypeSilent:
- {
- iTonePlayer->SetRepeats( KMdaAudioToneRepeatForever,
- TTimeIntervalMicroSeconds( KToneInterval ) );
- break;
- }
- case ERingingTypeAscending:
- {
- iTonePlayer->SetRepeats( KMdaAudioToneRepeatForever,
- TTimeIntervalMicroSeconds( KToneInterval ) );
-
- TInt volRamp = KAscendingVolumeInterval * ringingVolume;
- iTonePlayer->SetVolumeRamp( TTimeIntervalMicroSeconds( volRamp ) );
- break;
- }
- case ERingingTypeRingOnce:
- case ERingingTypeBeepOnce:
- {
- iTonePlayer->SetRepeats( 0, TTimeIntervalMicroSeconds( KToneInterval ) );
- break;
- }
- default:
- {
- break;
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::SetAudioRingingType
-//
-// -----------------------------------------------------------------------------
-//
-void CMFAudioPreviewHandler::SetAudioRingingType( TInt aRingingType )
- {
- const TInt KToneInterval = 1000000; // 1 second pause between tones
- const TInt KAscendingVolumeInterval = 3000000; // 3 seconds
-
- if ( !iAudioPlayer )
- {
- return;
- }
-
- __ASSERT_DEBUG( iAudioPlayerStatus == EPlayerInitialized, Panic( KErrGeneral ) );
-
-
- TInt ringingVolume = RingingVolume();
-
- switch( aRingingType )
- {
- case ERingingTypeRinging:
- case ERingingTypeSilent:
- {
- iAudioPlayer->SetRepeats( KMdaAudioToneRepeatForever,
- TTimeIntervalMicroSeconds( KToneInterval ) );
- break;
- }
- case ERingingTypeAscending:
- {
- iAudioPlayer->SetRepeats( KMdaAudioToneRepeatForever,
- TTimeIntervalMicroSeconds( KToneInterval ) );
- TInt volRamp = KAscendingVolumeInterval * ringingVolume;
- iAudioPlayer->SetVolumeRamp( TTimeIntervalMicroSeconds( volRamp ) );
- break;
- }
- case ERingingTypeRingOnce:
- {
- iAudioPlayer->SetRepeats( 0, TTimeIntervalMicroSeconds( KToneInterval ) );
- break;
- }
-
- default:
- {
- break;
- }
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::Cancel
-//
-// -----------------------------------------------------------------------------
-//
-void CMFAudioPreviewHandler::Cancel()
- {
- TBool isPlaying = EFalse;
-
- if ( iAudioPlayer )
- {
- isPlaying = ETrue;
- if ( iAudioPlayerStatus == EPlayerPlayingWith3DEffect )
- {
- i3dRingingTonePlugin->Stop();
- // plugin calls AudioPlayer->Stop()
- iAudioPlayer->Close();
- }
- if ( iAudioPlayerStatus == EPlayerPlaying )
- {
- iAudioPlayer->Stop();
- iAudioPlayer->Close();
- }
-
- delete iAudioPlayer;
- iAudioPlayer = NULL;
- iAudioPlayerStatus = EPlayerNotCreated;
- }
-
- if ( iTonePlayer )
- {
- isPlaying = ETrue;
- if ( iTonePlayerStatus == EPlayerPlaying )
- {
- iTonePlayer->CancelPlay();
- }
-
- delete iTonePlayer;
- iTonePlayer = NULL;
- iTonePlayerStatus = EPlayerNotCreated;
- }
-
-
- if ( isPlaying )
- {
- //User::InfoPrint(_L("cancel"));
- EnableScreenSaver( ETrue );
- iBacklightTimer->Cancel();
- }
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::MatoPlayComplete (from MMdaAudioToneObserver)
-//
-// -----------------------------------------------------------------------------
-//
-void CMFAudioPreviewHandler::MatoPlayComplete( TInt aError )
- {
- if ( iObserver )
- {
- TInt event = MPreviewHandlerObserver::EAudioPreviewComplete;
- TRAP_IGNORE( iObserver->HandlePreviewEventL( event, aError ) );
- }
-
- Cancel();
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::MatoPrepareComplete (from MMdaAudioToneObserver)
-//
-// -----------------------------------------------------------------------------
-//
-void CMFAudioPreviewHandler::MatoPrepareComplete( TInt aError )
- {
- __ASSERT_DEBUG( iTonePlayerStatus == EPlayerInitializing, Panic( KErrGeneral ) );
-
- if ( aError != KErrNone )
- {
- Cancel();
-
- if ( iObserver )
- {
- TInt event = MPreviewHandlerObserver::EPreviewError;
- TRAP_IGNORE( iObserver->HandlePreviewEventL( event, aError ) );
- }
-
- return;
- }
-
- TInt ringingVolume = RingingVolume();
- TInt ringingType = RingingType();
- TInt vibra = Vibra();
-
- iTonePlayerStatus = EPlayerInitialized;
- SetToneRingingType( ringingType );
- iTonePlayer->SetVolume( ConvertVolume( ringingVolume ) );
-
- TMdaPriorityPreference pref = (TMdaPriorityPreference) KAudioPrefRingFilePreview;
- if ( vibra )
- {
- pref = (TMdaPriorityPreference) KAudioPrefRingFilePreviewVibra;
- }
- iTonePlayer->SetPriority( KAudioPriorityPreview, pref );
-
- iTonePlayer->Play();
- iTonePlayerStatus = EPlayerPlaying;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::MdapcInitComplete (from MDrmAudioPlayerCallback)
-//
-// -----------------------------------------------------------------------------
-//
-void CMFAudioPreviewHandler::MdapcInitComplete( TInt aError,
- const TTimeIntervalMicroSeconds& /* aDuration */ )
- {
- __ASSERT_DEBUG( iAudioPlayer, Panic( KErrGeneral ) );
-
- if ( aError != KErrNone )
- {
- Cancel();
-
- if ( iObserver )
- {
- TInt event = MPreviewHandlerObserver::EPreviewError;
- TRAP_IGNORE( iObserver->HandlePreviewEventL( event, aError ) );
- }
- return;
- }
-
-
- TInt ringingVolume = RingingVolume();
- TInt ringingType = RingingType();
- TInt vibra = Vibra();
- TInt echo3D = Echo3D();
- TInt effect3D = Effect3D();
-
- __ASSERT_DEBUG( ringingType != ERingingTypeBeepOnce,
- TMFDialogUtil::Panic( KErrGeneral ) );
-
- iAudioPlayerStatus = EPlayerInitialized;
- SetAudioRingingType( ringingType );
- iAudioPlayer->SetVolume( ConvertVolume( ringingVolume ) );
-
- TMdaPriorityPreference pref = (TMdaPriorityPreference) KAudioPrefRingFilePreview;
- if ( vibra )
- {
- pref = (TMdaPriorityPreference) KAudioPrefRingFilePreviewVibra;
- }
- iAudioPlayer->SetPriority( KAudioPriorityPreview, pref );
-
- iAudioPlayerStatus = EPlayerPlaying;
-
- if ( effect3D == EProfile3DEffectOff )
- {
- iAudioPlayer->Play(); // 3D not used
- return;
- }
-
- if ( !i3dRingingTonePlugin )
- {
- TUid emptyUid = { 0 };
- TRAPD( err, i3dRingingTonePlugin = C3DRingingToneInterface::NewL( emptyUid ) );
- if ( err != KErrNone || !i3dRingingTonePlugin )
- {
- iAudioPlayer->Play();
- return;
- }
- }
-
- i3dRingingTonePlugin->SetAttr( E3DRTIAttr3DEffect, effect3D );
- i3dRingingTonePlugin->SetAttr( E3DRTIAttr3DEcho, echo3D );
- i3dRingingTonePlugin->SetAttr( E3DRTIAttrDrmPlayerUtility, iAudioPlayer );
- TRAP_IGNORE( i3dRingingTonePlugin->PlayL() );
-
- iAudioPlayerStatus = EPlayerPlayingWith3DEffect;
- }
-
-
-// -----------------------------------------------------------------------------
-// CMFAudioPreviewHandler::MdapcPlayComplete (from MDrmAudioPlayerCallback)
-//
-// -----------------------------------------------------------------------------
-//
-void CMFAudioPreviewHandler::MdapcPlayComplete( TInt aError )
- {
- if ( iObserver )
- {
- TInt event = MPreviewHandlerObserver::EAudioPreviewComplete;
- TRAP_IGNORE( iObserver->HandlePreviewEventL( event, aError ) );
- }
-
- Cancel();
- }
-
-
-
-// End of File