diff -r 6dc066157ed4 -r d9b6a8729acd vtengines/videoteleng/Src/Media/CVtEngLocalVideo.cpp --- a/vtengines/videoteleng/Src/Media/CVtEngLocalVideo.cpp Tue Jan 26 12:01:21 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4532 +0,0 @@ -/* -* Copyright (c) 2004-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: Local video configuration -* -*/ - - - -// INCLUDE FILES -#include "CVtEngLocalVideo.h" -#include "CVtEngMediaHandler.h" -#include "VtEngPanic.h" -#include "MVtEngFrameObserver.h" -#include "CVtEngStateManager.h" -#include "CVtEngEventManager.h" -#include "MVtEngMedia.h" -#include "CVtEngSettings.h" -#include "VtEngUtils.h" -#include "VtEngEvents.h" -#include -#include -#include -#include -#include - -#include "CVtEngCameraPreferences.h" - -// LOCAL CONSTANTS AND MACROS - -// Maximum count of providers stored (cameras, still, blank) -const TInt KVtEngProviderCountMax = 4; - -// Max zoom step count. -const TInt KVtMaxZoomStep = 10; - -// If prepare camera is called when provider is ready signal -// immediately back with positive value. -const TInt KVtEngAlreadySelected = 1; - -// If source is already active signal with this. -const TInt KVtEngAlreadyActive = 2; - -// Number of providers buffered in image sharer -const TInt KVtEngNumProvidersBuffered = 2; - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngLocalVideo -// C++ constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::CVtEngLocalVideo( - CVtEngMediaHandler& aObserver ) - - /** priority is high to ensure that this AO gets scheduled as soon as - * possible after signaling. If local video is requested a service, e.g. - * source switch while its signaled but not yet scheduled, local video's - * internal state may be compromised (signal AO => start selecting new source - * => RunL [this would break ongoing source selection] - */ - : CActive( EPriorityHigh ), - iRenderingMethod( EUnspecified ), - iObserver( aObserver ), - iCurrentCamera( MVtEngMedia::ESecondaryCamera ), - iLayoutChangeHandler( *this ) - { - ResetIndices(); - __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.c++") - CActiveScheduler::Add( this ); - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::ConstructL() - { - __VTPRINTENTER( "LocVideo.ConstructL" ) - - iAsyncCallBack = new ( ELeave ) CAsyncCallBack( - TCallBack( CallBackFunc, this ), EPriorityStandard ); - - TInt indexMobile( KErrNotFound ); - iShareImage = CVtEngShareImage::NewL( *this ); - iSourceController = CVSController::NewL( this ); - iVideoProviders = - new ( ELeave ) CArrayFixFlat( KVtEngProviderCountMax ); - iSource = iSourceController->CreateDataSourceL( this ); - PauseVideoSending(); - TInt providers( iSourceController->ProvidersAvailable() ); - iNumSupportedCameras = providers - 1; - ResetIndices(); - __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.providers=%d",providers) - // Get the device specified default camera. - TInt cameraId( iCurrentCamera ); - TInt err( SetCameraTrackingL( cameraId ) ); - if ( err == KErrNone && cameraId != EPSPreferredCameraUnknown ) - { - // Only if valid camera. - iCurrentCamera = MapCameraInternally( cameraId ); - err = KErrAlreadyExists; - } - - while ( providers-- ) - { - CVSDataProvider* provider = NULL; - TRAP_IGNORE( provider = - iSourceController->CreateDataProviderL( providers, this, iSource ) ); - if ( provider ) - { - CleanupStack::PushL( provider ); - TProviderItem item; - TVSDataProviderInfo info; - provider->ProviderInfo( info ); - TBool destroy( ETrue ); - __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.Orient=%d", - info.iOrientation ) - switch ( info.iOrientation ) - { - case TCameraInfo::EOrientationInwards: - SetFlag( EFlagCamera1Available ); - item.iType = KVtEngProviderCam1; - if ( err != KErrAlreadyExists ) - { - // Set only if value not obtained from PubSub - iCurrentCamera = MVtEngMedia::EPrimaryCamera; - } - iProviderInfoIndexCam1 = providers; - __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.ConL ID C1=%d", - iProviderInfoIndexCam1 ) - break; - case TCameraInfo::EOrientationOutwards: - // Configures outwards camera, it is treated as camera 1 - // if there is only one camera in the device. - ConfigureOutwardsCameraItem( item, providers ); - break; - case TCameraInfo::EOrientationMobile: - __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.Mobile") - item.iType = KVtEngProviderTempImage; - indexMobile = providers; - __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.Mobile ID=%d", - indexMobile ) - break; - case TCameraInfo::EOrientationUnknown: - { - item.iType = KVtEngProviderImage; - item.iProvider = provider; - item.iProviderState = EPermanent; - destroy = EFalse; // don't delete still provider - CreateBlankProviderL( providers ); - - if ( CVtEngUtility::Settings(). - IsDefaultStillImageDefined() ) - { - CreateDefaultStillImageProviderL( providers ); - } - - iProviderInfoIndexStill = providers; - __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT, - "LocVideo.ConL ID Still=%d",iProviderInfoIndexStill ) - } - break; - default: - break; - } - iVideoProviders->AppendL( item ); - CleanupStack::Pop(); - if ( destroy ) - { - delete provider; - provider = NULL; - } - } - } - iObserver.SetSelectedCameraId( iCurrentCamera ); - // Check if mobile is there, and either 1 or 2 is not. - - if ( indexMobile != KErrNotFound ) - { - TProviderItem* item = NULL; - const TInt err = GetProviderByType( KVtEngProviderTempImage, item ); - __ASSERT_ALWAYS( err != KErrNotFound, - Panic( EVtEngPanicInvalidInitializationState ) ); - if ( iProviderInfoIndexCam1 == KErrNotFound ) - { - __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.ConL Switch 1" ) - item->iType = KVtEngProviderCam1; - iProviderInfoIndexCam1 = indexMobile; - SetFlag( EFlagCamera1Available ); - } - else - { - __VTPRINT( DEBUG_MEDIA | DEBUG_CONSTRUCT, "LocVideo.ConL Switch 2" ) - DeleteProvider( KVtEngProviderCam2 ); - item->iType = KVtEngProviderCam2; - iProviderInfoIndexCam2 = indexMobile; - SetFlag( EFlagCamera2Available ); - } - } - __VTPRINTEXIT( "LocVideo.ConstructL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ConfigureOutwardsCameraItem -// Creates providers item for outwards camera type. It is treated as -// a) primary camera in single camera configurations -// b) secondary camera in two camera configurations -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::ConfigureOutwardsCameraItem( - TProviderItem& aItem, - const TInt aCurrentIndex ) - { - __VTPRINTENTER( "LocVideo.ConfigureOutwardsCameraItem" ) - if ( iNumSupportedCameras == 1 ) - { - SetFlag( EFlagCamera1Available ); - aItem.iType = KVtEngProviderCam1; - iProviderInfoIndexCam1 = aCurrentIndex; - iCurrentCamera = MVtEngMedia::EPrimaryCamera; - __VTPRINT2( DEBUG_MEDIA, - "LocVideo.ConL ID C1=%d", iProviderInfoIndexCam1 ) - } - else - { - SetFlag( EFlagCamera2Available ); - aItem.iType = KVtEngProviderCam2; - iProviderInfoIndexCam2 = aCurrentIndex; - __VTPRINT2( DEBUG_MEDIA, - "LocVideo.ConL ID C2=%d", iProviderInfoIndexCam2 ) - } - __VTPRINTEXITR( "LocVideo.ConfigureOutwardsCameraItem iCurrentCamera=%d", - iCurrentCamera ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CallBackFunc -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CompleteOperation( const TInt aResult ) - { - __VTPRINTENTER( "LocVideo.CompleteOperation" ) - SetResult( aResult ); - iAsyncCallBack->CallBack(); - __VTPRINTEXITR( "LocVideo.CompleteOperation %d", aResult ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::VideoChannelOpenedL -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::VideoChannelOpenedL() - { - __VTPRINTENTER( "LocVideo.VideoChannelOpenedL" ) - if ( iDelayedSelect.IsDelayedSelectPending() ) - { - SelectSourceL( iDelayedSelect.DelayedSelectTarget() ); - } - __VTPRINTEXIT( "LocVideo.VideoChannelOpenedL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CallBackFunc -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::CallBackFunc( TAny* aPtr ) - { - __VTPRINTENTER( "LocVideo.CallBackFunc" ) - CVtEngLocalVideo* self = reinterpret_cast< CVtEngLocalVideo* >( aPtr ); - TInt result( KErrNone ); - TRAP( result, - self->iObserver.HandleLocalVideoOperationCompleteL( - self->Result() ) ); - __VTPRINTEXITR( "LocVideo.CallBackFunc %d", result ) - return result; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::Result -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::Result() const - { - __VTPRINTENTER( "LocVideo.Result" ) - __VTPRINTEXITR( "LocVideo.Result %d", iResult ) - return iResult; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetResult -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SetResult( const TInt aResult ) - { - __VTPRINTENTER( "LocVideo.SetResult" ) - iResult = aResult; - __VTPRINTEXITR( "LocVideo.SetResult %d", iResult ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo* CVtEngLocalVideo::NewL( - CVtEngMediaHandler& aObserver ) - { - __VTPRINTENTER( "LocVid.NewL" ) - CVtEngLocalVideo* self = new( ELeave ) - CVtEngLocalVideo( aObserver ); - CleanupStack::PushL( self ); - self->ConstructL( ); - CleanupStack::Pop(); - __VTPRINTEXIT( "LocVid.NewL" ) - return self; - } - - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::~CVtEngLocalVideo -// Destructor. Cannot leave. -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::~CVtEngLocalVideo() - { - __VTPRINTENTER( "LocVid.~" ) - // Cancel the object - if ( iActiveProvider ) - { - iActiveProvider->DetachFromCameraPreferences(); - } - if ( iAsyncCallBack ) - { - iAsyncCallBack->Cancel(); - delete iAsyncCallBack; - } - Cancel(); - if ( iVideoProviders ) - { - while ( iVideoProviders->Count() ) - { - TProviderItem& item = (*iVideoProviders)[0]; - CVSDataProvider* provider = item.iProvider; - delete provider; - iVideoProviders->Delete( 0 ); - } - delete iVideoProviders; - } - - delete iCameraListener; - iCameraListener = NULL; - - delete iSource; - delete iSourceController; - DeleteAudioSource(); - delete iShareImage; - __VTPRINTEXIT( "LocVid.~" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::vsProviderError -// Handles error in provider. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::vsProviderError( TInt aError ) - { - if( aError == KErrCancel ) - { - vsProviderReady(); - return; - } - __VTPRINTENTER( "LocVid.vsProviderError" ) - __VTPRINT2( DEBUG_MEDIA, "LocVideo.ProviderError=%d", aError ) - iInitializingProvider = NULL; - if ( aError != KErrNone ) - { - iShareImage->Error( aError ); - if ( !iLayoutChangeHandler.ProviderError( aError ) ) - { - const TState previousState = iState; - iState = ELocNone; - __VTPRINT( DEBUG_MEDIA, " STATE TO NONE" ) - - // If the error indicates that camera is in use - if ( aError == KErrInUse && previousState == ELocInitializing ) - { - // Store the error to be used later - if( iSelectedProvider ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.ProviderError in use") - iSelectedProvider->iErrorCode = aError; - if ( iSelectedProvider->iType == KVtEngProviderCam1 ) - { - ClearFlag( EFlagCamera1Available ); - } - else if ( iSelectedProvider->iType == KVtEngProviderCam2 ) - { - ClearFlag( EFlagCamera2Available ); - } - } - } - // Camera has been lost - if ( aError == KVsErrCameraNoLongerReserved ) - { - if ( !IsActive() ) - { - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, aError ); - __VTPRINT( DEBUG_MEDIA, - "LocVideo.ProviderError AO start" ) - __VTPRINTEXITR( - "LocVid.vsProviderError err=%d", aError ) - - __VTPRINT( DEBUG_MEDIA, - "LocVideo.ProviderError iSelectedProvider NULL" ) - if ( iSelectedProvider ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.ProviderError iSelectedProvider NULL" ) - iSelectedProvider->iInitialized = EFalse; - iSelectedProvider->iProviderState = - (CVtEngLocalVideo::TProviderState) aError; - __VTPRINT( DEBUG_MEDIA, - "LocVideo.ProviderError iSelectedProvider NULL" ) - } - return; - } - } - if ( iSelectedProvider ) - { - // Try to select the last known to function camera - if ( iSelectedProvider->iType == KVtEngProviderCam1 || - iSelectedProvider->iType == KVtEngProviderCam2 ) - { - if ( !IsActive() ) - { - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, aError ); - __VTPRINT( DEBUG_MEDIA, - "LocVideo.ProviderError AO start" ) - __VTPRINTEXITR( - "LocVid.vsProviderError err=%d", aError ) - return; - } - } - //Error code needed later - iSelectedProvider->iInitialized = EFalse; - iSelectedProvider->iProviderState = - (CVtEngLocalVideo::TProviderState) aError; - iSelectedProvider = NULL; - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, - " selected provider nulled" ) - } - else if ( iActiveProvider && - !IsFlag( EFlagInitializeOnly ) && - previousState == ELocSwichingProvider ) - { - iActiveProvider = iFadingProvider; - iFadingProvider = NULL; - } - if ( IsFlag( EFlagSignalSourceSelection ) ) - { - ClearFlag( EFlagSignalSourceSelection ); - TRAP_IGNORE( - iObserver.HandleLocalVideoOperationCompleteL( aError ) ); - } - } - } - __VTPRINTEXIT( "LocVid.vsProviderError" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::vsProviderReady -// Provider is ready to be taken into use. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::vsProviderReady() - { - __VTPRINTENTER( "LocVid.vsProviderReady" ) - - __VTPRINT3( DEBUG_MEDIA, "LocVideo.ProviderReady state=%d, initOnly=%d", - iState, IsFlag( EFlagInitializeOnly ) ) - const TState prevState( iState ); - - if ( iInitializingProvider ) - { - iInitializingProvider->iInitialized = ETrue; - - // Set camera flags in order to recover - // error situation (error occured during init) - if ( iInitializingProvider->iType == KVtEngProviderCam1 ) - { - __VTPRINT( DEBUG_MEDIA, " LocVid.vsProviderReady KVtEngProviderCam1" ) - SetFlag( EFlagCamera1Available ); - } - else if ( iInitializingProvider->iType == KVtEngProviderCam2 ) - { - __VTPRINT( DEBUG_MEDIA, " LocVid.vsProviderReady KVtEngProviderCam2" ) - SetFlag( EFlagCamera2Available ); - } - - iInitializingProvider = NULL; - } - - iState = ELocReady; - __VTPRINT( DEBUG_MEDIA, " STATE TO READY" ) - - if ( iLayoutChangeHandler.ProviderReady() ) - { - __VTPRINTEXIT( "LocVid.vsProviderReady" ) - return; - } - - if ( prevState == ELocInitializing && !IsFlag( EFlagInitializeOnly ) ) - { - TProviderItem* switchTo = iActiveProvider; - if ( iSelectedProvider ) - { - iSelectedProvider->iErrorCode = KErrNone; - switchTo = iSelectedProvider; - iSelectedProvider = NULL; - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " selected provider nulled" ) - } - __VTPRINT( DEBUG_MEDIA, "LocVideo.ProviderReady switching") - SwitchProvider( switchTo ); - __VTPRINTEXIT( "LocVid.vsProviderReady" ) - return; - } - else - { - iSelectedProvider = NULL; - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "Selected provider nulled, UDS" ) - UpdateState(); - __VTPRINT( DEBUG_MEDIA, - "LocVideo.vsProviderReady KVtEngSourceCapsChanged") - CVtEngEventManager::NotifyEvent( KVtEngSourceCapsChanged ); - } - - if ( IsFlag( EFlagSignalSourceSelection ) ) - { - ClearFlag( EFlagSignalSourceSelection ); - TRAP_IGNORE( iObserver.HandleLocalVideoOperationCompleteL( KErrNone ) ); - } - __VTPRINTEXIT( "LocVid.vsProviderReady" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::vsProviderSwitchDone -// Provider switched. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::vsProviderSwitchDone( CVSDataProvider* aOldProvider ) - { - __VTPRINTENTER( "LocVid.vsProviderSwitchDone" ) - iState = ELocReady; - __VTPRINT( DEBUG_MEDIA, " STATE TO READY" ) - - iFadingProvider = NULL; - - if ( iActiveProvider && iActiveProvider->iProvider ) - { - iActiveProvider->iProvider->ProviderInfo( iProviderInfo ); - TInt error( iActiveProvider->RestoreZoomFactor() ); - if ( error ) - { - __VTPRINT2( DEBUG_MEDIA, - "LocVid.vsProviderSwitchDone restoring stored zoom FAILED %d", - error ) - } - } - - iShareImage->ProviderSwitchDone( aOldProvider ); - - if ( iActiveProvider && iActiveProvider->iType == KVtEngProviderCam1 ) - { - iCurrentCamera = MVtEngMedia::EPrimaryCamera; - iObserver.SetSelectedCameraId( iCurrentCamera ); - } - else if ( iActiveProvider && iActiveProvider->iType == KVtEngProviderCam2 ) - { - iCurrentCamera = MVtEngMedia::ESecondaryCamera; - iObserver.SetSelectedCameraId( iCurrentCamera ); - } - - // Let layout change handler handle providerswitch - if ( iLayoutChangeHandler.ProviderSwitchDone( aOldProvider ) ) - { - CVtEngEventManager::NotifyEvent( KVtEngLCHProviderSwitchDone ); - __VTPRINTEXIT( "LocVid.vsProviderSwitchDone" ) - return; - } - - ClearFlag( EFlagFrozen ); - - // If initilization of the waiting provider fails fall back to the last one. - TVtEngProviderType backupProviderType( KVtEngProviderNone ); - - // Delete non-permanent old provider - const TInt indexI( ProviderIndexByInstance( aOldProvider ) ); - - // delete provider that became unavailable - if ( indexI != KErrNotFound ) - { - __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, - "LocVideo.providerSwitchDone indexInstance=%d", indexI ) - TProviderItem& item( ( *iVideoProviders )[ indexI ] ); - if ( item.iProviderState != EPermanent && - item.iProviderState != ERefreshing ) - { - DeleteProvider( item ); - TRAP_IGNORE( item.iProvider = CreateDataProviderL( item.iType ) ); - } - } - - // Uninitialize fading provider - const TInt indexF = ProviderIndexByState( EFading ); - if ( indexF != KErrNotFound ) - { - __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, - "LocVideo.providerSwitchDone fading indexFading=%d", indexF ) - TProviderItem& item = (*iVideoProviders)[indexF]; - - // Mark up type of the last provider. - backupProviderType = item.iType; - - DeleteProvider( item ); - __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, - "LocVideo.providerSwitchDone fading=%d", item.iType ) - TRAP_IGNORE( item.iProvider = CreateDataProviderL( item.iType ) ); - } - - // Initialize waiting provider - TInt err( KErrNone ); - const TInt indexW( ProviderIndexByState( EWaiting ) ); - if ( indexW != KErrNotFound ) - { - __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, - "LocVideo.providerSwitchDone waiting=%d", indexW ) - TProviderItem& item = (*iVideoProviders)[indexW]; - item.iProviderState = EUndefined; - TRAP( err, InitializeProviderL( item ) ); - if ( err == KErrNone) - { - iSelectedProvider = &item; - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " selected provider set" ) - backupProviderType = KVtEngProviderNone; - } - else - { - iState = ELocNone; - __VTPRINT( DEBUG_MEDIA, " STATE TO NONE" ) - __VTPRINT2( DEBUG_MEDIA, "failed initializing provider=%d", err ) - // If initialization failed indicate that provider is not available - if ( item.iType == KVtEngProviderCam1 ) - { - ClearFlag( EFlagCamera1Available ); - } - else if ( item.iType == KVtEngProviderCam2 ) - { - ClearFlag( EFlagCamera2Available ); - } - else if( item.iType == KVtEngProviderShareImage ) - { - iShareImage->Error( err ); - } - CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); - } - } - - // Reconstruct refreshing (new still image) provider. - const TInt indexR( ProviderIndexByState( ERefreshing ) ); - if ( indexR != KErrNotFound ) - { - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, - "LocVideo.providerSwitchDone refreshing") - TProviderItem& item = (*iVideoProviders)[indexR]; - DeleteProvider( item ); - - // If still image disabled in settings. - CVtEngSettings& settings = CVtEngUtility::Settings(); - const CVtEngSettings::TVtEngVideoCallConfig& config = - settings.Config(); - const TBool stillImageValid( config.iVideo.iImageIsValid ); - TRAP( err, - { - item.iProvider = CreateDataProviderL( item.iType ); - if ( stillImageValid ) - { - InitializeProviderL( item ); - } - else - { - item.iProviderState = EPermanent; // change back to original - } - } ); - if ( err == KErrNone && stillImageValid ) - { - iSelectedProvider = &item; - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " selected provider set" ) - } - else - { - iState = ELocNone; - __VTPRINT2( DEBUG_MEDIA, " STATE TO NONE initerr=%d", err ) - } - } - - // If we have delayed select pending -> initiate new switch and return - if ( iDelayedSelect.IsDelayedSelectPending() ) - { - ClearFlag( EFlagCheckRevertToPrevious ); - TVtEngProviderType pending = iDelayedSelect.DelayedSelectTarget(); - __VTPRINT2( DEBUG_MEDIA, " delayed select pending type = %d", pending ) - if( iActiveProvider && iActiveProvider->iType == pending ) - { - // clear the iDelayedSelect to KVtEngProviderUndefined - // and no need to select again,continue complete this vsProviderSwitchDone - iDelayedSelect.DelayedSelectTarget(); - } - else - { - TRAP_IGNORE( SelectSourceL( pending ) ); - __VTPRINTEXIT( "LocVid.vsProviderSwitchDone" ) - return; - } - } - - if ( IsFlag( EFlagSignalSourceSelection ) && - iState != ELocInitializing && // Set in InitializeProviderL if called - err == KErrNone && // but not if init (or create provider in - // there) failed. - !IsFlag( EFlagCheckRevertToPrevious ) ) - { - // Signal only if we're in final state (i.e. not if blank provider - // was switched and just started initializing a camera). - ClearFlag( EFlagSignalSourceSelection ); - TRAP_IGNORE( iObserver.HandleLocalVideoOperationCompleteL( KErrNone ) ); - } - else if ( IsFlag( EFlagCheckRevertToPrevious ) && - ( iState == ELocReady || iState == ELocNone ) ) - { - ClearFlag( EFlagCheckRevertToPrevious ); - MVtEngMedia::TCameraId currentCam( MVtEngMedia::EPrimaryCamera ); - iObserver.GetCurrentCameraId( currentCam ); - backupProviderType = - ( currentCam==MVtEngMedia::EPrimaryCamera ) ? - KVtEngProviderCam1 : KVtEngProviderCam2; - } - - __VTPRINT2( DEBUG_MEDIA, " switch done iState=%d", iState ) - - //Inform camera preferences that valid provider is set - // Check that valid provider exist - // and set it as provider to camera - // preferences - if ( iActiveProvider ) - { - __VTPRINT2( DEBUG_MEDIA, "switch done prov.state=%d", - iActiveProvider->iProviderState ) - // Set provider to camera preferences - // only if camera preferences exist - if ( iCameraPref) - { - __VTPRINT2( DEBUG_MEDIA, - "LocVideo.providerSwitchDone iCameraPref->SetProvider type=%d", - iActiveProvider->iType ) - iCameraPref->SetProvider( iActiveProvider->iProvider, - *iActiveProvider ); - - TInt error( iActiveProvider->RestorePreferences() ); - if ( error ) - { - __VTPRINT2( DEBUG_MEDIA, " restoring preferences FAILED %d", - error ) - } - } - else - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.providerSwitchDone camera pref not created" ) - } - } - - if ( IsFlag( EFlagInitialized ) && iState != ELocInitializing ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.providerSwitchDone KVtEngSourceCapsChanged" ) - CVtEngEventManager::NotifyEvent( KVtEngSourceChanged ); - } - - TRAP( err, StartViewFinderIfWasStartedL() ); // err is ignored - - if ( backupProviderType != KVtEngProviderNone ) - { - // Initialization of new provider failed, - // try reverting back to last one. - __VTPRINT2( DEBUG_MEDIA, - "LocVideo.providerSwitchDone revert to %d", backupProviderType ) - TRAP( err, SelectSourceL( backupProviderType ) ); - if ( err != KErrNone ) - { - CVtEngEventManager::NotifyEvent( KVtEngMediaInitFailure ); - } - } - - __VTPRINTEXIT( "LocVid.vsProviderSwitchDone" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::vsViewFinderFrameReady -// View finder image can be set. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::vsViewFinderFrameReady( CFbsBitmap& aFrame ) - { - __VTPRINTENTER( "LocVid.vsViewFinderFrameReady" ) - if ( iActiveProvider && - iActiveProvider->iType != KVtEngProviderNone ) - { - TRAP_IGNORE( iOptions.iObserver->vtHandleFrameL( - MVtEngFrameObserver::ELocalVideoFrame, &aFrame ) ); - } - __VTPRINTEXIT( "LocVid.vsViewFinderFrameReady" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::vsProvidersChanged -// Provider state has changed. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::vsProvidersChanged( TBool aAttached ) - { - __VTPRINTENTER( "LocVid.vsProvidersChanged" ) - - __VTPRINT2( DEBUG_MEDIA, " vsProvidersChanged attached=%d", aAttached ) - __VTPRINT2( DEBUG_MEDIA, " vsProvidersChanged state=%d",iState ) - if ( iAudioSource == NULL ) - { - // If this is called from ConstructL (indirectly) return immediately - if ( aAttached || iCurrentCamera == MVtEngMedia::EPrimaryCamera ) - { - SetFlag( EFlagCamera1Available ); - iObserver.SetSelectedCameraId( MVtEngMedia::EPrimaryCamera, ETrue ); - } - else - { - ClearFlag( EFlagCamera1Available ); - iObserver.SetSelectedCameraId( - MVtEngMedia::ESecondaryCamera, ETrue ); - } - __VTPRINTEXIT( "LocVid.vsProvidersChanged" ) - return; - } - - // If primary camera was not available and state is not "open" - // UI should be requested for answer. Precondition is also that - // primary camera is now available. - TBool notifyAnswer( EFalse ); - TInt activeMedia( 0 ); - - const MVtEngSessionInfo::TSessionState state( - CVtEngUtility::StateManager()->SessionState() ); - - __VTPRINT2( DEBUG_MEDIA, " vsProvidersChanged, call state=%d", state ) - if ( state == MVtEngSessionInfo::EReceiving ) - { - __VTPRINT2( DEBUG_MEDIA, " vsProvidersChanged attached=%d", aAttached ) - if ( !IsFlag( EFlagCamera1Available ) && aAttached ) - { - notifyAnswer = ETrue; - } - } - - __VTPRINT2( DEBUG_MEDIA, - " vsProvidersChanged answer=%d", notifyAnswer ) - CVtEngLocalVideo::TVtEngProviderType providerToSelect( KVtEngProviderNone ); - TRAPD( err, providerToSelect = UpdateAvailableProvidersL() ); - if ( err == KErrNone ) - { - // Now get the state to check if video has been disabled - GetMediaState( activeMedia ); - __VTPRINT2( DEBUG_MEDIA, - " vsProvidersChanged mediastate=%d", activeMedia ) - __VTPRINT2( DEBUG_MEDIA, - " vsProvidersChanged iState=%d", iState ) - - // values for checking if switch is allowed - TBool activeIsStillOrBlank ( EFalse ); - TBool activeIsBlankAndNewCam1( EFalse ); - if ( iActiveProvider ) - { - __VTPRINT2( DEBUG_MEDIA, - " vsProvidersChanged iActivePType=%d", iActiveProvider->iType ) - if ( iActiveProvider->iType == KVtEngProviderImage || - iActiveProvider->iType == KVtEngProviderNone ) - { - activeIsStillOrBlank = ETrue; - if ( providerToSelect == KVtEngProviderCam1 && - iActiveProvider->iType == KVtEngProviderNone ) - { - activeIsBlankAndNewCam1 = ETrue; - } - } - } - __VTPRINT2( DEBUG_MEDIA, - " vsProvidersChanged blank active new cam1=%d", - activeIsBlankAndNewCam1 ) - - __VTPRINT2( DEBUG_MEDIA, - " vsProvidersChanged provider=%d", providerToSelect ) - - if ( providerToSelect == KVtEngProviderCam1 ) - { - iObserver.SetSelectedCameraId( MVtEngMedia::EPrimaryCamera ); - } - else if ( providerToSelect == KVtEngProviderCam2 ) - { - // delete provider that became unavailable - iObserver.SetSelectedCameraId( MVtEngMedia::ESecondaryCamera ); - } - - // Check if SelectSource should be called - if ( !notifyAnswer && // for incoming calls automatic switch not allowed - ( iState == ELocNone || iState == ELocReady ) && - IsFlag( EFlagInitialized ) ) - { - __VTPRINT( DEBUG_MEDIA, " vsProvidersChanged ok to select" ) - // Allow switch if video disabled (still/blank active) - // and cam1 available. - ClearFlag( EFlagInitializeOnly ); - ClearFlag( EFlagCheckRevertToPrevious ); - if ( activeIsStillOrBlank && - providerToSelect == KVtEngProviderCam2 ) - { - SetFlag( EFlagInitializeOnly ); - } - else if ( activeIsBlankAndNewCam1 ) - { - iObserver.AutoEnableVideo(); - } - else if ( providerToSelect == KVtEngProviderNone ) - { - iObserver.AutoEnableVideo( EFalse ); - } - SetFlag( EFlagAutomaticSwitchCallback ); - TRAP( err, SelectSourceL( providerToSelect ) ); - ClearFlag( EFlagAutomaticSwitchCallback ); - - if ( err != KErrNone ) - { - __VTPRINT2( DEBUG_MEDIA, - " vsProvidersChanged,select failed=%d", err ) - if ( providerToSelect == KVtEngProviderCam1 && - iNumSupportedCameras > 1 ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.vsProvidersChanged 2 2" ) - SetFlag( EFlagCamera2Available ); - ClearFlag( EFlagCamera1Available ); - TRAP( err, SelectSourceL( KVtEngProviderCam2 ) ); - } - else if ( providerToSelect == KVtEngProviderCam2 ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.vsProvidersChanged 2 still") - ClearFlag( EFlagCamera2Available ); - TRAP( err, SelectSourceL( KVtEngProviderImage ) ); - } - } - } - else - { - __VTPRINT( DEBUG_MEDIA, " vsProvidersChanged Not Changed" ) - if ( iState == ELocInitializing && - iSelectedProvider && - iSelectedProvider->iType != providerToSelect ) - { - SetFlag( EFlagCheckRevertToPrevious ); - } - } - - CVtEngStateManager* states = CVtEngUtility::StateManager(); - states->Update(); - - if ( IsFlag( EFlagCamera1Available ) || - IsFlag( EFlagCamera2Available ) ) - { - if ( notifyAnswer ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.vsProvidersChanged KVtEngSessionAnswerPossible") - CVtEngEventManager::NotifyEvent( KVtEngSessionAnswerPossible ); - } - else if ( !notifyAnswer && - // Don't notify before selection is done. - ( iState == ELocReady || - iState == ELocNone ) ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.vsProvidersChanged KVtEngSourceCapsChanged" ) - CVtEngEventManager::NotifyEvent( KVtEngSourceCapsChanged ); - } - } - else if ( !IsFlag( EFlagCamera1Available ) && - !IsFlag( EFlagCamera2Available ) ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.vsProvidersChanged NO CAMS" ) - CVtEngEventManager::NotifyEvent( KVtEngSourceCapsChanged ); - } - } - else - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.vsProvidersChanged KVtEngResourceMemAllocFailure" ) - CVtEngEventManager::NotifyEvent( KVtEngResourceMemAllocFailure ); - } - __VTPRINTEXITR( "LocVid.vsProvidersChanged err=%d", err ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetViewFinderParameters -// Configures parameters for rendering via window server. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SetViewFinderParameters( - const TVtEngRenderingOptions& aParams ) - { - __VTPRINTENTER( "LocVid.SetViewFinderParameters" ) - - // Before setting the params, stop VF - if( ViewFinderStarted() ) - { - StopViewFinder(); - } - - iOptions.iSize = aParams.iSize; - __VTPRINT2( DEBUG_MEDIA, - " width = %d", iOptions.iSize.iWidth ); - __VTPRINT2( DEBUG_MEDIA, - " height = %d", iOptions.iSize.iHeight ); - - iOptions.iObserver = aParams.iObserver; - iRenderingMethod = EWindowServer; - __VTPRINTEXIT( "LocVid.SetViewFinderParameters" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetViewFinderParameters -// Configures parameters for rendering with direct screen access. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SetViewFinderParameters( - const TVtEngRenderingOptionsDSA& aDSA ) - { - __VTPRINTENTER( "LocVid.SetVFParamsDSA" ) - - // Before setting the params, stop VF - if( ViewFinderStarted() ) - { - StopViewFinder(); - } - - iRenderingMethod = EDSA; - iDsaOptions.iClipRect = aDSA.iClipRect; - iDsaOptions.iRect = aDSA.iRect; - iDsaOptions.iWindow = &aDSA.iWindow; - iDsaOptions.iWs = &aDSA.iWs; - iDsaOptions.iWsSD = &aDSA.iWsSD; - __VTPRINTEXIT( "LocVid.SetVFParamsDSA" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetViewFinderParameters -// Configures parameters for rendering with display posting. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SetViewFinderParameters( - const TVtEngRenderingOptionsDP& aDP ) - { - __VTPRINTENTER( "LocVid.SetVFParamsDP" ) - - // Before setting the params, stop VF - if( ViewFinderStarted() ) - { - StopViewFinder(); - } - - iRenderingMethod = EDP; - iDsaOptions.iClipRect = aDP.iClipRect; - iDsaOptions.iRect = aDP.iRect; - iDsaOptions.iWindow = &aDP.iWindow; - iDsaOptions.iWs = &aDP.iWs; - iDsaOptions.iWsSD = &aDP.iWsSD; - __VTPRINTEXIT( "LocVid.SetVFParamsDP" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetDefaultStillImageL -// Sets default still image. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SetDefaultStillImageL() - { - __VTPRINTENTER( "LocVid.SetDefaultStillImageL" ) - - TProviderItem* item = NULL; - GetProviderByType( KVtEngProviderDefaultStillImage, item ); - if ( item ) - { - CVSDataProvider* provider = item->iProvider; - - if ( provider && item->iType == KVtEngProviderDefaultStillImage ) - { - if ( item->iInitialized ) - { - StopViewFinder(); - - TInt providerIndex = - ProviderIndex( KVtEngProviderDefaultStillImage ); - - TProviderItem* defaultStillProviderItem = - &( *iVideoProviders )[providerIndex]; - SwitchProvider( defaultStillProviderItem ); - } - else - { - InitializeProviderL( *item ); - iSelectedProvider = item; - } - } - } - __VTPRINTEXIT( "LocVid.SetDefaultStillImageL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetStillImageL -// Sets still image. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SetStillImageL( TBool aSetAsActive ) - { - __VTPRINTENTER( "LocVid.SetStillImageL" ) - - CVtEngSettings& settings = CVtEngUtility::Settings(); - const CVtEngSettings::TVtEngVideoCallConfig& config = - settings.Config(); - const TBool stillImageValid( config.iVideo.iImageIsValid ); - if ( iState == ELocInitializing && stillImageValid ) - { - __VTPRINT( DEBUG_MEDIA, " setStill failed" ) - User::Leave( KErrNotReady ); - } - - TInt count( iVideoProviders->Count() ); - TBool done( EFalse ); - while ( count-- ) - { - TProviderItem& item = ( *iVideoProviders )[count]; - CVSDataProvider* provider = item.iProvider; - - if ( item.iType == KVtEngProviderImage ) - { - if ( provider && item.iInitialized ) - { - // If still image provider is active change to temp provider - if ( iActiveProvider && - ( iActiveProvider->iType == KVtEngProviderImage ) ) - { - __VTPRINT( DEBUG_MEDIA, "Act.prov. must be deleted" ) - StopViewFinder(); - iActiveProvider->iProviderState = ERefreshing; - TInt providerIndex = ProviderIndex( KVtEngProviderNone ); - TProviderItem* blankProviderItem = - &( *iVideoProviders )[providerIndex]; - SwitchProvider( blankProviderItem ); - __VTPRINTEXIT( "LocVideo.SetStillImageL" ) - return; - } - - //Only way to change image is first delete the provider - delete provider; - item.iProvider = NULL; - - // Create it again. - // If there is a provider info for still. - if ( iProviderInfoIndexStill != KErrNotFound ) - { - item.iProvider = iSourceController->CreateDataProviderL( - iProviderInfoIndexStill, - this, iSource ); - item.iType = KVtEngProviderImage; - item.iInitialized = EFalse; - } - } - // Do initialization only if valid image (still not - // cleared in settings). - if ( stillImageValid ) - { - InitializeProviderL( item ); - if ( aSetAsActive ) - { - iSelectedProvider = &item; - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, - " selected provider set" ) - } - } - done = ETrue; - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, - "LocVideo.SetStillImageL ok" ) - } - } - if ( !done ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.SetStillImageL fail") - User::Leave( KErrGeneral ); - } - __VTPRINTEXIT( "LocVid.SetStillImageL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::InitializeL -// Initializes default blank provider. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::InitializeL() - { - __VTPRINTENTER( "LocVid.InitializeL" ) - const TInt index( ProviderIndex( KVtEngProviderNone ) ); - TProviderItem* item = &(*iVideoProviders)[index]; - if ( iActiveProvider && - iActiveProvider->iType == KVtEngProviderImage ) - { - // Blank provider is set to active only - // if there is not valid still image. - SetFlag( EFlagInitializeOnly ); - iSelectedProvider = item; - } - else - { - iActiveProvider = item; - } - InitializeProviderL( *item ); - SetFlag( EFlagSignalSourceSelection ); - SetFlag( EFlagInitialized ); - __VTPRINTEXIT( "LocVid.InitializeL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SelectSourceL -// Selects source. -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::SelectSourceL( TVtEngProviderType aSource ) - { - __VTPRINTENTER( "LocVid.SelectSourceL" ) - - __VTPRINT2( DEBUG_MEDIA, " source=%d", aSource ) - - if ( iDelayedSelect.IsDelayedSelectPending() && - ( aSource != KVtEngProviderShareImage ) && - ( aSource == KVtEngProviderCam1 || - aSource == KVtEngProviderCam2 || - aSource == KVtEngProviderImage ) ) - { - aSource = iDelayedSelect.DelayedSelectTarget(); - } - - if( IsProviderWaiting( aSource ) ) - { - // If waiting for provide switch and a provider initialization - // don't allow selection. - __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSourceL already waiting" ) - User::Leave( KErrNotReady ); - } - - // To be selected source is already active - if ( IsActiveProvider( aSource ) ) - { - Cancel(); - TRequestStatus* status = &iStatus; - SetActive(); - User::RequestComplete( status, KVtEngAlreadyActive ); - SetFlag( EFlagSignalSourceSelection ); - __VTPRINT2( DEBUG_MEDIA, "LocVideo.SelectSourceL start AO=%d", - KVtEngAlreadyActive ) - if ( iActiveProvider ) - { - __VTPRINT2( DEBUG_MEDIA, "LocVideo. activeProv type=%d", - iActiveProvider->iType ) - } - // In case there were errors, NULL the selected provider - // to be able to initialize it when needed - if( iSelectedProvider ) - { - if( iSelectedProvider->iErrorCode ) - { - iSelectedProvider->iInitialized = EFalse; - iSelectedProvider->iProviderState = - (CVtEngLocalVideo::TProviderState) - iSelectedProvider->iErrorCode; - iSelectedProvider = NULL; - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " selprovider nulled" ) - } - } - // Not actually switching but virtually doing it because - // async callback will be made. - __VTPRINTEXITR( "LocVid.SelectSourceL %d", ETrue ) - return ETrue; - } - __VTPRINT2( DEBUG_MEDIA, "LocVideo.Selectsource iState=%d", iState ) - if ( iState == ELocInitializing && - aSource == KVtEngProviderImage && - iActiveProvider && - iActiveProvider->iType != KVtEngProviderNone ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.SelectSource initialization pending" ) - User::Leave( KErrNotReady ); - } - // We have switch pending - else if ( iState == ELocSwichingProvider ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.SelectSource switching -> set delayed select" ) - iDelayedSelect.NotifyDelayedSelect( aSource ); - __VTPRINTEXITR( "LocVid.SelectSourceL %d", ETrue ) - return ETrue; - } - - TBool initialized( EFalse ); - TProviderItem item; - TInt providerIndex( GetProviderByType( aSource, item ) ); - - if ( providerIndex != KErrNotFound ) - { - // requested provider found, set initialization status - __VTPRINT2( DEBUG_MEDIA, "LocVideo.SelectSource index=%d", providerIndex ) - initialized = item.iInitialized; - } - else - { // requested provider not found - __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSource create provider" ) - // Try to create provider - TInt index = KErrNotFound; - switch ( aSource ) - { - case KVtEngProviderCam2: - index = iProviderInfoIndexCam2; - break; - case KVtEngProviderNone: - case KVtEngProviderImage: - case KVtEngProviderDefaultStillImage: - // Image sharing - case KVtEngProviderShareImage: - index = iProviderInfoIndexStill; - break; - case KVtEngProviderCam1: - index = iProviderInfoIndexCam1; - default: - break; - } - - __VTPRINT2( DEBUG_MEDIA, - "LocVideo.SelectSource create provider ID=%d", index ) - if ( index != KErrNotFound ) - { - TProviderItem newItem; - newItem.iProvider = - iSourceController->CreateDataProviderL( - index, this, iSource ); - newItem.iType = aSource; - CleanupStack::PushL( newItem.iProvider ); - iVideoProviders->AppendL( newItem ); - CleanupStack::Pop(); - providerIndex = iVideoProviders->Count() - 1; - __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, - "LocVideo.SelectSource create provider ok=%d", - newItem.iProvider != NULL ) - } - } - - TBool initOrSwitch = EFalse; - - // Initialize provider - if ( providerIndex != KErrNotFound && !initialized ) - { - if ( iActiveProvider->iProviderState != EPermanent ) - { - // Active provider must be destroyed and new one initialized - __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSource del Act.prov" ) - (*iVideoProviders)[providerIndex].iProviderState = EWaiting; - iActiveProvider->iProviderState = EFading; - StopViewFinder(); - providerIndex = ProviderIndex( KVtEngProviderNone ); - __VTPRINT2( DEBUG_MEDIA, "LocVideo.SelectSource index for none=%d", - providerIndex ) - } - else - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSource do init" ) - UninitializeProviderL(); - TProviderItem& initItem = ( *iVideoProviders )[providerIndex]; - InitializeProviderL( initItem ); - // This item is stored, make it initialized only when callback - // received. - iSelectedProvider = &initItem; - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " selected provider set" ) - initOrSwitch = InitializingOrSwitching(); - __VTPRINTEXITR( "LocVid.SelectSourceL %d", initOrSwitch ) - return initOrSwitch; - } - } - - // Switch provider - if ( providerIndex != KErrNotFound ) - { - if ( !IsFlag( EFlagInitializeOnly ) ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSource ready for switch") - StopViewFinder(); - TProviderItem* switchItem = &(*iVideoProviders)[providerIndex]; - __VTPRINT2( DEBUG_MEDIA, - "LocVideo.SelectSource switchItem %d", switchItem->iType ) - SwitchProvider( switchItem ); - } - else if ( initialized && IsFlag( EFlagInitializeOnly ) ) - { - __VTPRINT2( DEBUG_MEDIA, - "LocVideo.SelectSource already initialized start AO %d", - KVtEngAlreadySelected ) - TProviderItem* switchItem = &( *iVideoProviders )[providerIndex]; - iActiveProvider = switchItem; - Cancel(); - TRequestStatus* status = &iStatus; - SetActive(); - User::RequestComplete( status, KVtEngAlreadySelected ); - } - else - { - __VTPRINT3( DEBUG_MEDIA, " initialized=%d,flags=%d", - initialized, iFlags ) - } - } - - // Error - if ( iActiveProvider == NULL ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.SelectSource leave" ) - User::Leave( KErrNotFound ); - } - - initOrSwitch = InitializingOrSwitching(); - __VTPRINTEXITR( "LocVid.SelectSourceL %d", initOrSwitch ) - return initOrSwitch; - } - -// ---------------------------------------------------------------------------- -// CVtEngLocalVideo::InitializeProviderL -// Initializes a provider. -// ---------------------------------------------------------------------------- -// -void CVtEngLocalVideo::InitializeProviderL( - TProviderItem& aProviderItem ) - { - __VTPRINTENTER( "LocVid.InitializeProviderL" ) - - __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv type=%d", aProviderItem.iType ) - - if ( iInitializingProvider ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.InitProv ERROR, already initializing" ) - User::Leave( KErrNotReady ); - } - - iInitializingProvider = &aProviderItem; - - CVtEngSettings& settings = CVtEngUtility::Settings(); - const CVtEngSettings::TVtEngVideoCallConfig& config = - settings.Config(); - TPckgBuf< TVSStillImageDataProviderParams > pckg; - - __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv type=%d", aProviderItem.iType ) - CVSDataProvider* provider = aProviderItem.iProvider; - if ( provider == NULL ) - { - aProviderItem.iInitialized = EFalse; - aProviderItem.iProvider = CreateDataProviderL( aProviderItem.iType ); - provider = aProviderItem.iProvider; - } - else if ( aProviderItem.iInitialized ) - { - __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv AO start %d", KErrNone ) - Cancel(); - TRequestStatus* status = &iStatus; - SetActive(); - User::RequestComplete( status, KErrNone ); - __VTPRINTEXIT( "LocVid.InitializeProviderL" ) - return; - } - User::LeaveIfNull( provider ); - switch ( aProviderItem.iType ) - { - case KVtEngProviderCam1: - case KVtEngProviderCam2: - provider->InitializeL( KNullDesC8 ); - iState = ELocInitializing; - __VTPRINT( DEBUG_MEDIA, " STATE TO INITIALIZING" ) - __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv type=%d", - aProviderItem.iType ) - break; - case KVtEngProviderNone: - // Blank provider. - pckg().iInitialize = - TVSStillImageDataProviderParams::EInitializeAsBlankImage; - provider->InitializeL( pckg ); - iState = ELocInitializing; - __VTPRINT( DEBUG_MEDIA, " STATE TO INITIALIZING" ) - __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv type=%d", - aProviderItem.iType ) - break; - case KVtEngProviderImage: - { - if ( config.iVideo.iImageIsValid ) - { - pckg().iInitialize = - TVSStillImageDataProviderParams::EInitializeFromGeneralSettings; - provider->InitializeL( pckg ); - iState = ELocInitializing; - __VTPRINT( DEBUG_MEDIA, " STATE TO INITIALIZING" ) - __VTPRINT( DEBUG_MEDIA, "LocVideo.InitProv Still image") - } - else - { - User::Leave( KErrPathNotFound ); - } - } - break; - case KVtEngProviderDefaultStillImage: - pckg().iInitialize = - TVSStillImageDataProviderParams::EInitializeAsDefaultStillImage; - - provider->InitializeL( pckg ); - iState = ELocInitializing; - __VTPRINT( DEBUG_MEDIA, " STATE TO INITIALIZING" ) - __VTPRINT2( DEBUG_MEDIA, "LocVideo.InitProv type=%d", - aProviderItem.iType ) - break; - default: - Panic( EVtEngPanicNoVideoProvider ); - break; - } - //aProviderItem.iInitialized = ETrue; - __VTPRINTEXIT( "LocVid.InitializeProviderL" ) - } - -// ---------------------------------------------------------------------------- -// CVtEngLocalVideo::InitializeShareProviderL -// Initializes a provider that is used for sharing. -// ---------------------------------------------------------------------------- -// -void CVtEngLocalVideo::InitializeShareProviderL( - TProviderItem& aProviderItem, const TDesC8& aParams ) - { - __VTPRINTENTER( "LocVid.InitializeShareProviderL" ) - aProviderItem.iProvider->InitializeL( aParams ); - aProviderItem.iInitialized = ETrue; - iState = ELocInitializing; - SetFlag( EFlagSignalSourceSelection | EFlagInitializeOnly ); - __VTPRINTEXIT( "LocVid.InitializeShareProviderL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ReCreateProviderL -// ----------------------------------------------------------------------------- -void CVtEngLocalVideo::ReCreateProviderL( - TProviderItem& aProviderItem, const TVtEngProviderType aType ) - { - __VTPRINTENTER( "LocVid.ReCreateProviderL" ) - - TInt index( KErrNotFound ); - - switch ( aType ) - { - case KVtEngProviderShareImage: - index = iProviderInfoIndexStill; - break; - - default: - User::Leave( KErrNotSupported ); - } - - // Delete old instance - DeleteProvider( aProviderItem ); - - // Create new instance - aProviderItem.iProvider = iSourceController->CreateDataProviderL( - index, this, iSource ); - aProviderItem.iType = aType; - - __VTPRINTEXIT( "LocVid.ReCreateProviderL" ) - } - -// ---------------------------------------------------------------------------- -// CVtEngLocalVideo::CameraIdToType -// Camera ID to type mapping. -// ---------------------------------------------------------------------------- -// -CVtEngLocalVideo::TVtEngProviderType CVtEngLocalVideo::CameraIdToType( - MVtEngMedia::TCameraId aId ) - { - TVtEngProviderType type( KVtEngProviderCam2 ); - switch ( aId ) - { - case MVtEngMedia::EPrimaryCamera: - type = KVtEngProviderCam1; - break; - case MVtEngMedia::ESecondaryCamera: - type = KVtEngProviderCam2; - break; - default: - type = KVtEngProviderNone; - break; - } - return type; - } - -// ---------------------------------------------------------------------------- -// CVtEngLocalVideo::RunL -// CActive heir, acts according to status. -// ---------------------------------------------------------------------------- -// -void CVtEngLocalVideo::RunL() - { - __VTPRINTENTER( "LocVid.RunL" ) - - const TInt status( iStatus.Int() ); - TVtEngProviderType providerType = KVtEngProviderNone; - __VTPRINT2( DEBUG_MEDIA, "LocVideo.RunL %d", status ) - switch ( status ) - { - case KVtEngAlreadySelected: - SetFlag( EFlagSignalSourceSelection ); - vsProviderReady(); - break; - case KVtEngAlreadyActive: - TRAP_IGNORE( - iObserver.HandleLocalVideoOperationCompleteL( KErrNone ) ); - break; - case KErrNone: - vsProviderSwitchDone( NULL ); - UpdateState(); - break; - // Camera has been lost during VT - case KVsErrCameraNoLongerReserved: - __VTPRINT2( DEBUG_MEDIA, "LocVideo.status =%d", - status ) - //delete provider here and null pointer - if ( iSelectedProvider ) - { - DeleteProvider( *iSelectedProvider ); - iSelectedProvider = NULL; - } - - // Check if still is in use - providerType = KVtEngProviderImage; - GetHighestSelectableProvider( providerType ); - - __VTPRINT2( DEBUG_MEDIA, "LocVideo.providerType=%d", - providerType ) - - iObserver.AutoEnableVideo( EFalse ); - SetFlag( EFlagAutomaticSwitchCallback ); - TRAPD( err, SelectSourceL( providerType ) ); - ClearFlag( EFlagAutomaticSwitchCallback ); - - if ( err != KErrNone ) - { - TRAP( err, iObserver.HandleLocalVideoOperationCompleteL( err) ); - } - break; - default: - // error - { - switch( iSelectedProvider->iType ) - { - case KVtEngProviderCam1: - ClearFlag( EFlagCamera1Available ); - break; - case KVtEngProviderCam2: - ClearFlag( EFlagCamera2Available ); - break; - default: - break; - } - DeleteProvider( *iSelectedProvider ); - iSelectedProvider = NULL; - MVtEngMedia::TCameraId currentCam( MVtEngMedia::EPrimaryCamera ); - iObserver.GetCurrentCameraId( currentCam ); - TVtEngProviderType providerType( CameraIdToType( currentCam ) ); - GetHighestSelectableProvider( providerType ); - TRAPD( err, SelectSourceL( providerType ) ); - if ( err != KErrNone ) - { - TRAP( err, iObserver.HandleLocalVideoOperationCompleteL( err) ); - } - } - } - __VTPRINTEXIT( "LocVid.RunL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::IsActiveProvider -// Returns ETrue if given provider is already active. -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::IsActiveProvider( TVtEngProviderType aType ) const - { - __VTPRINTENTER( "LocVid.IsActiveProvider" ) - const TBool active( - ( iActiveProvider && iActiveProvider->iType == aType ) || - ( iSelectedProvider && iSelectedProvider->iType == aType ) ); - __VTPRINTEXITR( "LocVid.IsActiveProvider %d", active ) - return active; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::DoCancel -// Does nothing. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::DoCancel() - { - __VTPRINTENTER( "LocVid.DoCancel" ) - __VTPRINTEXIT( "LocVid.DoCancel" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ActiveProvider -// Returns active provider. -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::TVtEngProviderType CVtEngLocalVideo::ActiveProvider() const - { - if ( iActiveProvider ) - { - return iActiveProvider->iType; - } - return KVtEngProviderNone; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::StartViewFinderIfWasStartedL -// View finder image can be set. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::StartViewFinderIfWasStartedL() - { - __VTPRINTENTER( "LocVid.StartViewFinderIfWasStartedL" ) - if ( IsFlag( EFlagUIForeground ) && IsFlag( EFlagVFEnabled ) && - iState == ELocReady ) - { - StartViewFinderL(); - } - __VTPRINTEXIT( "LocVid.StartViewFinderIfWasStartedL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::StartViewFinderL -// Starts view finder. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::StartViewFinderL( TBool aClientRequest ) - { - __VTPRINTENTER( "LocVid.StartViewFinderL" ) - __ASSERT_ALWAYS( iVideoProviders->Count(), - Panic ( EVtEngPanicNoVideoProvider ) ); - - if ( aClientRequest ) - { - SetFlag( EFlagVFEnabled ); - } - if ( iRenderingMethod == EUnspecified || !iActiveProvider ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.startVF error") - User::Leave( KErrNotReady ); - } - CVSDataProvider* provider = iActiveProvider->iProvider; - if ( !provider ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.startVF error no provider") - User::Leave( KErrNotReady ); - } - else if ( provider->ViewFinderActive() ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.startVF already started") - iViewFinderState = ( iRenderingMethod == EWindowServer ) ? - EVFReceivingBitmaps : EVFRenderingDsa; - __VTPRINTEXIT( "LocVid.StartViewFinderL" ) - return; - } - else if ( !IsFlag( EFlagInitialized ) ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.startVF not initialized") - __VTPRINTEXIT( "LocVid.StartViewFinderL" ) - return; - } - else if ( iState != ELocReady ) - { - __VTPRINT2( DEBUG_MEDIA | DEBUG_RETURN, - "LocVideo.startVF incorrect iState=%d", iState ) - } - else - { - // Lint requires this one - __VTPRINT( DEBUG_MEDIA, - "LocVideo.startVF unsupported clause" ) - } - - CheckOthersStopped( *provider ); - if ( iRenderingMethod == EWindowServer ) - { - TSize size( iOptions.iSize ); - provider->StartViewFinderBitmapsL( size ); - iViewFinderState = EVFReceivingBitmaps; - __VTPRINT( DEBUG_MEDIA | DEBUG_RETURN, " started" ) - } - else - { - provider->StartViewFinderDirectL( - *(iDsaOptions.iWs), - *(iDsaOptions.iWsSD), - *(iDsaOptions.iWindow), - iDsaOptions.iRect, - iDsaOptions.iClipRect ); - iViewFinderState = EVFRenderingDsa; - } - - if( iActiveProvider->iType == CVtEngLocalVideo::KVtEngProviderCam1 && - !provider->ViewFinderMirror() ) - { - provider->SetViewFinderMirrorL( ETrue ); - } - - __VTPRINTEXIT( "LocVid.StartViewFinderL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::StopViewFinder -// Stops view finder. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::StopViewFinder( TBool aClientRequest ) - { - __VTPRINTENTER( "LocVid.StopViewFinder" ) - if ( aClientRequest ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.stopVF clearing EFlagVFEnabled" ) - ClearFlag( EFlagVFEnabled ); - } - if ( iActiveProvider && - iViewFinderState != EVFNone && - iActiveProvider->iProvider && - iActiveProvider->iProvider->ViewFinderActive() ) - { - TRAP_IGNORE( iOptions.iObserver->vtHandleFrameL( - MVtEngFrameObserver::ELocalVideoFrame, NULL ) ); - iActiveProvider->iProvider->StopViewFinder(); - __VTPRINT( DEBUG_MEDIA, "LocVideo.stopVF Stopped" ) - if ( IsFlag( EFlagAutomaticSwitchCallback ) || - IsFlag( EFlagUIBackground ) ) - { - // UI needs to be notified if stop done due to automatic - // source switch (from vsProvidersChanged). - ClearFlag( EFlagAutomaticSwitchCallback ); - CVtEngEventManager::NotifyEvent( KVtEngViewFinderStopped ); - __VTPRINT( DEBUG_MEDIA, "LocVideo.stopVF Notified" ) - } - } - iViewFinderState = EVFNone; - __VTPRINTEXIT( "LocVid.StopViewFinder" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::FreezeL -// Freezes provider. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::FreezeL() - { - __VTPRINTENTER( "LocVid.FreezeL" ) - if( OkToFreeze() ) - { - iActiveProvider->iProvider->FreezeL(); - SetFlag( EFlagFrozen ); - } - __VTPRINTEXIT( "LocVid.FreezeL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::UnfreezeL -// Unfreezes provider. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::UnfreezeL() - { - __VTPRINTENTER( "LocVid.UnfreezeL" ) - if( OkToUnfreeze() ) - { - if ( !iLayoutChangeHandler.UnfreezeL() ) - { - iActiveProvider->iProvider->UnfreezeL(); - if ( iDelayedSelect.IsDelayedSelectPending() ) - { - TVtEngProviderType type( iDelayedSelect.DelayedSelectTarget() ); - __VTPRINT2( DEBUG_MEDIA, - "LocVideo.UnfreezeL delayed switch to %d", type ) - SelectSourceL( type ); - } - else - { - CompleteOperation( KErrNone ); - } - } - ClearFlag( EFlagFrozen ); - } - __VTPRINTEXIT( "LocVid.UnfreezeL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CheckOthersStopped -// Stops view finder of other providers than the one given as parameter. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CheckOthersStopped( const CVSDataProvider& aProvider ) - { - __VTPRINTENTER( "LocVid.CheckOthersStopped" ) - TInt count( iVideoProviders->Count() ); - while ( count-- ) - { - TProviderItem& item = ( *iVideoProviders )[count]; - if ( item.iProvider && - item.iProvider != &aProvider && - item.iProvider->ViewFinderActive() ) - { - item.iProvider->StopViewFinder(); - __VTPRINT( DEBUG_MEDIA | DEBUG_RETURN, "LocVideo.OtherStop" ) - } - } - __VTPRINTEXIT( "LocVid.CheckOthersStopped" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::Source -// Returns video source. -// ----------------------------------------------------------------------------- -// -MVTVideoSource* CVtEngLocalVideo::Source() const - { - return iSource; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::AudioSource -// Returns audio source. -// ----------------------------------------------------------------------------- -// -MVTAudioSource* CVtEngLocalVideo::AudioSource() const - { - return iAudioSource; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetMediaState -// Returns media state. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::GetMediaState( TInt& aActiveMedia ) - { - aActiveMedia = 0; - if ( !IsFlag( EFlagAudioMuted ) ) - { - aActiveMedia |= MVtEngMedia::EMediaAudio; - // Check if the thing is muted - } - - if ( iActiveProvider ) - { - __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetMediaState provider type=%d", - iActiveProvider->iType ) - switch ( iActiveProvider->iType ) - { - case KVtEngProviderCam1: - case KVtEngProviderCam2: - case KVtEngProviderImage: - case KVtEngProviderShareImage: - aActiveMedia |= MVtEngMedia::EMediaVideo; - break; - default: - break; - } - } - __VTPRINT2( DEBUG_MEDIA | DEBUG_RETURN, - "LocVideo.GetMediaState media state=%d", aActiveMedia ) - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetMediaSource -// Returns media source. -// ----------------------------------------------------------------------------- -// -MVtEngMedia::TMediaSource CVtEngLocalVideo::GetMediaSource() - { - MVtEngMedia::TMediaSource source( MVtEngMedia::EMediaNone ); - if ( iActiveProvider ) - { - switch ( iActiveProvider->iType ) - { - case KVtEngProviderCam1: - case KVtEngProviderCam2: - source = MVtEngMedia::EMediaCamera; - break; - case KVtEngProviderShareImage: - source = MVtEngMedia::EMediaShare; - break; - case KVtEngProviderImage: - case KVtEngProviderDefaultStillImage: - source = MVtEngMedia::EMediaStillImage; - break; - default: - source = MVtEngMedia::EMediaNone; - break; - } - } - __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetMediaSource src=%d", (TInt) source ) - return source; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetSourceCaps -// Returns capability of providers . -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::GetSourceCaps( TInt& aCaps ) - { - aCaps = 0; - TInt count( iVideoProviders->Count() ); - __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetSourceCaps count=%d", count ) - while ( count-- ) - { - switch ( iVideoProviders->At(count).iType ) - { - case KVtEngProviderCam1: - __VTPRINT( DEBUG_MEDIA, - "LocVideo.GetSourceCaps cam1" ) - if ( IsFlag( EFlagCamera1Available ) ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.GetSourceCaps cam1 flagged" ) - aCaps |= MVtEngMedia::ESourceCapsPrimaryCamera; - } - break; - case KVtEngProviderCam2: - __VTPRINT( DEBUG_MEDIA, "LocVideo.GetSourceCaps cam2" ) - if ( IsFlag( EFlagCamera2Available ) ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.GetSourceCaps cam2 flagged" ) - aCaps |= MVtEngMedia::ESourceCapsSecondaryCamera; - } - break; - case KVtEngProviderImage: - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.GetSourceCaps image" ) - // Make sure that image is valid - CVtEngSettings& settings = CVtEngUtility::Settings(); - const CVtEngSettings::TVtEngVideoCallConfig& config = - settings.Config(); - if( config.iVideo.iImageIsValid ) - { - aCaps |= MVtEngMedia::ESourceCapsStillImage; - } - } - break; - default: - break; - } - } - __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetSourceCaps caps=%d", aCaps ) - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::InitializeOnly -// Sets boolean to indicate if the provider is to be initialized only. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::InitializeOnly( TBool aInitOnly ) - { - InitializeOnlyEx( GetMediaSource() != MVtEngMedia::EMediaCamera && - aInitOnly ); - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::InitializeOnlyEx -// Sets boolean to indicate if the provider is to be initialized only. Does -// not check current media source. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::InitializeOnlyEx( TBool aInitOnly ) - { - SetFlag( EFlagSignalSourceSelection ); - ClearFlag( EFlagInitializeOnly ); - if ( aInitOnly ) - { - SetFlag( EFlagInitializeOnly ); - } -#ifdef VTDEBUG - if ( IsFlag( EFlagInitializeOnly ) ) - { - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " initOnly SET" ) - } - else - { - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, " initOnly CLEARED" ) - } -#endif - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetProviderByType -// Return provider of particular type. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::GetProviderByType( - TVtEngProviderType aType, - TProviderItem& aItem ) - { - TInt ret( KErrNotFound ); - TInt count( iVideoProviders->Count() ); - while ( count-- ) - { - if ( ( *iVideoProviders )[count].iType == aType ) - { - aItem = ( *iVideoProviders )[count]; - ret = count; - count = 0; - } - } - __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetProviderByType idx=%d", ret ) - return ret; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetProviderByType -// Return provider of particular type. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::GetProviderByType( - TVtEngProviderType aType, - TProviderItem*& aItem ) - { - TInt ret( KErrNotFound ); - TInt count( iVideoProviders->Count() ); - while ( count-- ) - { - if ( ( *iVideoProviders )[count].iType == aType ) - { - aItem = &( *iVideoProviders )[count]; - ret = count; - count = 0; - } - } - __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetProviderByType* idx=%d", ret ) - return ret; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetProviderByInstance -// Return provider with particular provider instance. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::GetProviderByInstance( - const CVSDataProvider* aInstance, - TProviderItem*& aItem ) const - { - TInt indexI( ProviderIndexByInstance( aInstance ) ); - if ( indexI != KErrNotFound ) - { - aItem = &( *iVideoProviders )[ indexI ]; - } - else - { - aItem = NULL; - } - __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetProviderByType* idx=%d", indexI ) - return indexI; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ProviderIndex -// Returns provider index by type. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::ProviderIndex( TVtEngProviderType aType ) const - { - for( TInt count = iVideoProviders->Count() - 1; count >= 0; count-- ) - { - if ( ( *iVideoProviders )[ count ].iType == aType ) - { - return count; - } - } - return KErrNotFound; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ProviderIndexByState -// Gets a provider index by state. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::ProviderIndexByState( TProviderState aState ) const - { - for( TInt count = iVideoProviders->Count() - 1; count >= 0; count-- ) - { - if ( ( *iVideoProviders )[ count ].iProviderState == aState ) - { - return count; - } - } - return KErrNotFound; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ProviderIndexByInstance -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::ProviderIndexByInstance( - const CVSDataProvider* aInstance) const - { - for( TInt count = iVideoProviders->Count() - 1; count >= 0; count-- ) - { - if ( ( *iVideoProviders )[ count ].iProvider == aInstance ) - { - return count; - } - } - return KErrNotFound; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CreateDataProviderL -// Creates VideoSource provider by type. -// ----------------------------------------------------------------------------- -// -CVSDataProvider* CVtEngLocalVideo::CreateDataProviderL( - TVtEngProviderType aType ) - { - __VTPRINTENTER( "LocVid.CreateDataProviderL" ) - __VTPRINT2( DEBUG_MEDIA, " provider type=%d", aType ) - TInt index = KErrNotFound; - switch ( aType ) - { - case KVtEngProviderNone: - case KVtEngProviderImage: - case KVtEngProviderShareImage: - case KVtEngProviderDefaultStillImage: - __VTPRINT( DEBUG_MEDIA, "LocVideo.CreateDataProviderL Still" ) - index = iProviderInfoIndexStill; - break; - case KVtEngProviderCam1: - __VTPRINT( DEBUG_MEDIA, "LocVideo.CreateDataProviderL Cam1" ) - index = iProviderInfoIndexCam1; - break; - case KVtEngProviderCam2: - __VTPRINT( DEBUG_MEDIA, "LocVideo.CreateDataProviderL Cam2" ) - index = iProviderInfoIndexCam2; - break; - default: - __VTPRINT( DEBUG_MEDIA, "LocVideo.CreateDataProviderL Mobile" ) - break; - } - - CVSDataProvider* provider = NULL; - if ( index != KErrNotFound ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.CreateDataProviderL provider is" ) - provider = - iSourceController->CreateDataProviderL( - index, this, iSource ); - } - - __VTPRINT2( DEBUG_MEDIA, " provider created=%d", - ( TInt ) ( provider != NULL ) ) - __VTPRINTEXIT( "LocVid.CreateDataProviderL" ) - return provider; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CreateBlankProvider -// Creates blank provider. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CreateBlankProviderL( const TInt aIndex ) - { - __VTPRINTENTER( "LocVid.CreateBlankProviderL" ) - __VTPRINT2( DEBUG_MEDIA, "LocVideo.CreateBlankProviderL idx=%d", aIndex ) - CVSDataProvider* provider = NULL; - TRAP_IGNORE( provider = iSourceController->CreateDataProviderL( - aIndex, this, iSource ) ); - CleanupStack::PushL( provider ); - TProviderItem item; - item.iProvider = provider; - item.iType = KVtEngProviderNone; - item.iInitialized = EFalse; - item.iProviderState = EPermanent; - iVideoProviders->AppendL( item ); - CleanupStack::Pop(); - __VTPRINTEXIT( "LocVid.CreateBlankProviderL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CreateDefaultStillImageProviderL -// Creates default still image provider. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CreateDefaultStillImageProviderL( const TInt aIndex ) - { - __VTPRINTENTER( "LocVid.CreateDefaultStillImageProviderL" ) - __VTPRINT2( DEBUG_MEDIA, "LocVideo.CreateDefaultStillImageProviderL idx=%d", aIndex ) - CVSDataProvider* provider = NULL; - TRAP_IGNORE( provider = iSourceController->CreateDataProviderL( - aIndex, this, iSource ) ); - CleanupStack::PushL( provider ); - TProviderItem item; - item.iProvider = provider; - item.iType = KVtEngProviderDefaultStillImage; - item.iInitialized = EFalse; - item.iProviderState = EPermanent; - iVideoProviders->AppendL( item ); - CleanupStack::Pop(); - __VTPRINTEXIT( "LocVid.CreateDefaultStillImageProviderL" ) - } - - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::UpdateAvailableProvidersL -// Updates current providers and their information. -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::TVtEngProviderType - CVtEngLocalVideo::UpdateAvailableProvidersL() - { - __VTPRINTENTER( "LocVid.UpdateAvailableProvidersL" ) - TVtEngProviderType type( KVtEngProviderNone ); - TInt count( iSourceController->ProvidersAvailable() ); - iNumSupportedCameras = count - 1; - TVSDataProviderInfo providerInfo; - TBool primaryAvailable( EFalse ); - TBool secondaryAvailable( EFalse ); - TBool mobileAvailable( EFalse ); - TInt indexMobile( KErrNotFound ); - ClearFlag( EFlagCamera1Available ); - ClearFlag( EFlagCamera2Available ); - ResetIndices(); - while ( count-- ) - { - iSourceController->ProviderInfoL( count, providerInfo ); - if ( providerInfo.iOrientation == TCameraInfo::EOrientationInwards || - // treat outwards camera as primary when only 1 cam in the system - ( providerInfo.iOrientation == TCameraInfo::EOrientationOutwards && - iNumSupportedCameras == 1 ) ) - { - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP inw" ) - type = KVtEngProviderCam1; - primaryAvailable = ETrue; - SetFlag( EFlagCamera1Available ); - iProviderInfoIndexCam1 = count; - } - else if ( - providerInfo.iOrientation == TCameraInfo::EOrientationOutwards ) - { - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP outw" ) - secondaryAvailable = ETrue; - SetFlag( EFlagCamera2Available ); - iProviderInfoIndexCam2 = count; - } - else if ( providerInfo.iOrientation == TCameraInfo::EOrientationMobile ) - { - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP mobile" ) - mobileAvailable = ETrue; - indexMobile = count; - } - else if ( providerInfo.iOrientation == TCameraInfo::EOrientationUnknown ) - { - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP still" ) - CVtEngSettings& settings = CVtEngUtility::Settings(); - const CVtEngSettings::TVtEngVideoCallConfig& config = - settings.Config(); - if ( config.iVideo.iImageIsValid ) - { - iProviderInfoIndexStill = count; - } - } - } - if ( !primaryAvailable && mobileAvailable ) - { - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP 1 upd" ) - type = KVtEngProviderCam1; - iProviderInfoIndexCam1 = indexMobile; - primaryAvailable = ETrue; - SetFlag( EFlagCamera1Available ); - } - else if ( primaryAvailable && mobileAvailable ) - { - // No 1, 2 and mobile. - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP 2 upd" ) - DeleteProvider( KVtEngProviderCam2 ); - secondaryAvailable = ETrue; - iProviderInfoIndexCam2 = indexMobile; - SetFlag( EFlagCamera2Available ); - } - else if ( !primaryAvailable && secondaryAvailable ) - { - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP !1 & 2" ) - type = KVtEngProviderCam2; - } - else if ( type == KVtEngProviderNone ) - { - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP none" ) - CVtEngSettings& settings = CVtEngUtility::Settings(); - const CVtEngSettings::TVtEngVideoCallConfig& config = - settings.Config(); - if ( config.iVideo.iImageIsValid ) - { - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.UAP valid image" ) - type = KVtEngProviderImage; - } - } - - __VTPRINTEXITR( "LocVid.UpdateAvailableProvidersL %d", type ) - return type; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SwitchProvider -// Switches to active provider. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SwitchProvider( TProviderItem* aSwitchToItem ) - { - __VTPRINTENTER( "LocVid.SwitchProvider" ) - - iState = ELocSwichingProvider; - __VTPRINT( DEBUG_MEDIA, " STATE TO SWITCHING" ) - iFadingProvider = iActiveProvider; - iActiveProvider = aSwitchToItem; - TRAPD( err, iSource->SwitchDataProviderL( iActiveProvider->iProvider ) ); - if ( err != KErrNone ) - { - iState = ELocReady; // go to AO - __VTPRINT( DEBUG_MEDIA, " STATE TO READY" ) - } - switch ( iState ) - { - case ELocReady: // Switch done. Sync. - { - // Entered here if SwitchDataProviderL causes direct call to - // vsProviderSwitchDone. Since provider switch should be async - // from client point of view now start AO and signal in RunL. - Cancel(); - TRequestStatus* status = &iStatus; - SetActive(); - User::RequestComplete( status, err ); - __VTPRINT2( DEBUG_MEDIA, - "LocVideo.SwitchProvider AO start %d", err ) - } - // fall through - case ELocSwichingProvider: // Async. - case ELocNone: - SetFlag( EFlagSignalSourceSelection ); - break; - default: - break; - } - __VTPRINTEXIT( "LocVid.SwitchProvider" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SwitchProvider -// Overloaded method that takes new active provider as a parameter. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SwitchProvider( TProviderItem& aProviderItem ) - { - __VTPRINTENTER( "LocVid.SwitchProvider by aProviderItem" ) - StopViewFinder( EFalse ); - SwitchProvider( &aProviderItem ); - __VTPRINTEXIT( "LocVid.SwitchProvider by aProviderItem" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::IsInitialized -// Checks if a provider with given id is initialized. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::IsInitialized( - MVtEngMedia::TCameraId aId, - TBool& aInitialized ) - { - __VTPRINT2( DEBUG_MEDIA, "LocVideo.IsInitialized ID:%d", aId ) - TInt count( iVideoProviders->Count() ); - TVtEngProviderType type = CameraIdToType( aId ); - aInitialized = EFalse; - TInt err( KErrNotFound ); - while ( count-- ) - { - TProviderItem& item = ( *iVideoProviders )[count]; - if ( item.iType == type ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.IsInitialized found" ) - aInitialized = item.iInitialized; - if ( ( !aInitialized && item.iProviderState < KErrNone ) || - item.iErrorCode < KErrNone ) - { - __VTPRINT( DEBUG_MEDIA, "LocVideo.IsInitialized problems" ) - err = item.iErrorCode; - } - else - { - err = KErrNone; - } - count = 0; // break - } - } - __VTPRINT3( DEBUG_MEDIA | DEBUG_RETURN, - "LocVideo.IsInitialized isInitialized=%d,err=%d", aInitialized, err ) - return err; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::UpdateState -// Updates view finder state. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::UpdateState() - { - __VTPRINTENTER( "LocVid.UpdateState" ) - - if ( iActiveProvider ) - { - CVSDataProvider* provider = iActiveProvider->iProvider; - __VTPRINT2 ( DEBUG_MEDIA, "LocVideo.UpdateState, provider active", - provider->ViewFinderActive() ) - if ( provider && provider->ViewFinderActive()) - { - iViewFinderState = ( iRenderingMethod == EWindowServer ) ? - EVFReceivingBitmaps : EVFRenderingDsa; - } - } - ClearFlag( EFlagInitializeOnly ); - __VTPRINT2( DEBUG_MEDIA | DEBUG_RETURN, - "LocVideo.UpdateState iViewFinderState %d", iViewFinderState ) - __VTPRINTEXIT( "LocVid.UpdateState" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::InitializingOrSwitching -// Is either initializing or doing a provider switch. -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::InitializingOrSwitching() const - { - return ( iState == ELocInitializing || - iState == ELocSwichingProvider ); - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::UninitializeProviderL -// Uninitializes initialized non-permanent provider. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::UninitializeProviderL() - { - __VTPRINTENTER( "LocVid.UninitializeProviderL" ) - TInt count( iVideoProviders->Count() ); - while ( count-- ) - { - TProviderItem& item = ( *iVideoProviders )[count]; - if ( item.iProviderState == EUndefined && item.iInitialized ) - { - DeleteProvider( item ); - item.iProvider = CreateDataProviderL( item.iType ); - } - } - __VTPRINTEXIT( "LocVid.UninitializeProviderL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetCameraInfo -// Gets camera info. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::GetCameraInfo( MVtEngMedia::TCameraId aId, - MVtEngMedia::TCameraInfo& aInfo ) - { - TBool initialized( EFalse ); - TInt err( IsInitialized( aId, initialized ) ); - TVSDataProviderInfo info; - if ( initialized && err == KErrNone ) - { - TVtEngProviderType type = CameraIdToType( aId ); - TProviderItem item; - GetProviderByType( type, item ); - item.iProvider->ProviderInfo( info ); - aInfo.iMaxDigitalZoom = info.iMaxDigitalZoom; - aInfo.iMaxZoom = info.iMaxZoom; - aInfo.iMinZoom = info.iMinZoom; - aInfo.iMajorZoomStepCount = - CalculateMajorDigitalZoomStepCount( item.iProvider ); - } - return initialized ? err : KErrNotReady; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetDigitalZoomFactor -// Gets current zoom step. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::GetDigitalZoomFactor( TInt& aCurrentStep ) - { - if ( !iActiveProvider || - !iActiveProvider->iProvider ) - { - return KErrNotReady; - } - aCurrentStep = iActiveProvider->iProvider->DigitalZoomFactor(); - __VTPRINT2( DEBUG_MEDIA, "LocVideo.GetZ %d", aCurrentStep ) - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetMaxDigitalZoomStep -// Gets max. digital zoom step. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::GetMaxDigitalZoomStep( TInt& aMaxZoomStep ) - { - if ( !iActiveProvider || - !iActiveProvider->iProvider ) - { - return KErrNotReady; - } - aMaxZoomStep = iProviderInfo.iMaxDigitalZoom; - __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, - "LocVideo.MaxZStep %d", aMaxZoomStep ) - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetMajorDigitalZoomStepCount -// Gets number of major zoom level leaps. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo:: - GetMajorDigitalZoomStepCount( TInt& aCount, TBool /*aProviderSupplied*/ ) - { - /*__VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, - "LocVideo.GetMajZStepCount %d", aProviderSupplied )*/ - if ( !iActiveProvider || !iActiveProvider->iProvider ) - { - return KErrNotReady; - } - aCount = CalculateMajorDigitalZoomStepCount( iProviderInfo ); - __VTPRINT2( DEBUG_MEDIA | DEBUG_DETAIL, - "LocVideo.GetMajZStepCount %d", aCount ) - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetMajorDigitalZoomStep -// Maps major step to zoom step. Note: aIndex is given in range -// [0 .. CalculateMajorDigitalZoomStepCount() - 1] -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::GetMajorDigitalZoomStep( const TInt aIndex, TInt& aStep ) - { - if ( !iActiveProvider || !iActiveProvider->iProvider ) - { - // No active provider. - __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL, "LocVideo.GetMajZStep NO active") - return; - } - if ( iProviderInfo.iMaxDigitalZoom > KVtMaxZoomStep ) - { - aStep = iProviderInfo.iMaxDigitalZoom * - Min( KVtMaxZoomStep, Max( 0, aIndex ) ) / KVtMaxZoomStep; - } - else - { - aStep = Min( iProviderInfo.iMaxDigitalZoom, Max( 0, aIndex ) ); - } - __VTPRINT3( DEBUG_MEDIA | DEBUG_DETAIL, - "LocVideo.GetMajZStep idx=%d,step=%d", aIndex, aStep ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetFreezeSupported -// Gets freeze supported value from provider. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::GetFreezeSupported( TBool& aFreezeSupported ) const - { - __VTPRINTENTER( "LocVideo.GetFreezeSupported" ) - if ( !iActiveProvider || - !iActiveProvider->iProvider ) - { - __VTPRINTEXIT( "LocVideo.GetFreezeSupported KErrNotReady") - return KErrNotReady; - } - aFreezeSupported = iProviderInfo.iFreezeSupported; - __VTPRINTEXITR( "LocVideo.GetFreezeSupported %d", aFreezeSupported ) - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::OkToFreeze -// Returns ETrue if it is ok to freeze provider (i.e. freeze is supported AND -// provider is not currently frozen) -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::OkToFreeze() const - { - __VTPRINTENTER( "LocVideo.OkToFreeze" ) - TBool isOk( EFalse ); - if ( iActiveProvider && - iActiveProvider->iProvider ) - { - isOk = ( iProviderInfo.iFreezeSupported && !IsFlag( EFlagFrozen ) ); - } - __VTPRINTEXITR( "LocVideo.OkToFreeze %d", isOk ) - return isOk; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::OkToUnfreeze -// Returns ETrue if it is ok to unfreeze provider (i.e. freeze is supported AND -// provider is currently frozen) -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::OkToUnfreeze() const - { - __VTPRINTENTER( "LocVideo.OkToUnfreeze" ) - TBool isOk( EFalse ); - if ( iActiveProvider && - iActiveProvider->iProvider ) - { - isOk = ( iProviderInfo.iFreezeSupported && IsFlag( EFlagFrozen ) ); - } - __VTPRINTEXITR( "LocVideo.OkToUnfreeze %d", isOk ) - return isOk; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::Mute -// Sets the audio state as muted. -// ----------------------------------------------------------------------------- -void CVtEngLocalVideo::Mute() - { - SetFlag( EFlagAudioMuted ); - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::UnMute -// Sets the audio state on again. -// ----------------------------------------------------------------------------- -void CVtEngLocalVideo::UnMute() - { - ClearFlag( EFlagAudioMuted ); - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetUIForeground -// Sets UI foreground state. -// ----------------------------------------------------------------------------- -void CVtEngLocalVideo::SetUIForeground( TBool aForeground ) - { - __VTPRINTENTER( "LocVideo.SetUIForeground" ) - __VTPRINT2( DEBUG_GEN, " foreground=%d", aForeground ) - - //Error indicator - TInt err = KErrNone; - if ( aForeground ) - { - if ( iDelayedSelect.IsDelayedSelectPending() ) - { - TVtEngProviderType type( iDelayedSelect.DelayedSelectTarget() ); - __VTPRINT2( DEBUG_MEDIA, - "LocVideo.SetUIForeground delayed switch to %d", type ) - SelectSourceL( type ); - } - - SetFlag( EFlagUIForeground ); - ClearFlag( EFlagUIBackground ); - if ( IsFlag( EFlagVFEnabled ) ) - { - //Ignore error - TRAP (err, StartViewFinderL( EFalse )); - } - else - { - MVtEngMedia::TShareObjectState sharingState; - GetObjectSharingState( sharingState ); - if ( sharingState == MVtEngMedia::ESharingImage ) - { - //Ignore error - TRAP (err, StartViewFinderL( ETrue )); - } - } - } - else - { - ClearFlag( EFlagUIForeground ); - SetFlag( EFlagUIBackground ); - StopViewFinder( EFalse ); - ClearFlag( EFlagUIBackground ); - } - __VTPRINTEXIT( "LocVideo.SetUIForeground" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetObjectSharingState -// Get current media object sharing state. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::GetObjectSharingState( - MVtEngMedia::TShareObjectState& aObjectSharingState ) const - { - __VTPRINTENTER( "LocVid.GetObjectSharingState" ) - if( iActiveProvider && iActiveProvider->iProvider ) - { - iShareImage->GetObjectSharingState( aObjectSharingState ); - } - else - { - aObjectSharingState = MVtEngMedia::ENotAbleToShare; - } - __VTPRINTEXITR( "LocVid.GetObjectSharingState %d", aObjectSharingState ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::InitializeShareImageL -// Start Image sharing initialization. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::InitializeShareImageL( - const MVtEngMedia::TShareObjectImageParameters& aParameters, - TBool& aFirstTime ) - { - __VTPRINTENTER( "LocVid.InitializeShareImageL" ) - - iShareImage->InitializeL( aParameters, - iActiveProvider->iType, aFirstTime ); - - __VTPRINTEXIT( "LocVid.InitializeShareImageL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::StartShareImageL -// Stop sharing Image. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::StartShareImageL() - { - __VTPRINTENTER( "LocVid.StartShareImageL" ) - const TBool delayed( iDelayedSelect.IsDelayedSelectPending() ); - const TVtEngProviderType type( iDelayedSelect.DelayedSelectTarget() ); - iShareImage->ShareL(); - if ( delayed ) - { - __VTPRINT2( DEBUG_MEDIA, - "LocVid.StartShareImageL IsDelayedSelectPending type = %d", - type ) - iShareImage->NotifyCameraChanged( type ); - } - __VTPRINTEXIT( "LocVid.StartShareImageL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::StopShareImageL -// Stop sharing Image. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::StopShareImageL() - { - __VTPRINTENTER( "LocVid.StopShareImageL" ) - iShareImage->StopL(); - __VTPRINTEXIT( "LocVid.StopShareImageL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ShareError -// Report error to image sharer. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::ShareError( TInt aError ) - { - __VTPRINTENTER( "LocVid.ShareError" ) - iShareImage->Error( aError ); - __VTPRINTEXIT( "LocVid.ShareError" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ShareStoredSource -// -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::TVtEngProviderType CVtEngLocalVideo::ShareStoredSource() const - { - __VTPRINTENTER( "LocVid.ShareStoredSource" ) - const TVtEngProviderType stored( iShareImage->StoredSource() ); - __VTPRINTEXITR( "LocVid.ShareStoredSource = %d", stored ) - return stored; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SettingsChanged -// Called when GS settings changed. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SettingsChanged() - { - __VTPRINTENTER( "LocVid.SettingsChanged" ) - iShareImage->SettingsChanged(); - __VTPRINTEXIT( "LocVid.SettingsChanged" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetIsPrepareCameraCalled -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SetIsPrepareCameraCalled( TBool aCalled ) - { - __VTPRINTENTER( "LocVid.SetIsPrepareCameraCalled" ) - iPrepareCameraCalled = aCalled; - __VTPRINTEXITR( "LocVid.SetIsPrepareCameraCalled %d", iPrepareCameraCalled ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::IsPrepareCameraCalled -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::IsPrepareCameraCalled() const - { - __VTPRINTENTER( "LocVid.IsPrepareCameraCalled" ) - __VTPRINTEXITR( "LocVid.IsPrepareCameraCalled %d", iPrepareCameraCalled ) - return iPrepareCameraCalled; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::HandleLayoutChangeL -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::HandleLayoutChangeL() - { - __VTPRINTENTER( "LocVid.HandleLayoutChangeL" ) - iLayoutChangeHandler.HandleLayoutChangeL(); - __VTPRINTEXIT( "LocVid.HandleLayoutChangeL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::IsDelayedSelectPending -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::IsDelayedSelectPending() const - { - return iDelayedSelect.IsDelayedSelectPending(); - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::DeleteProvider -// Deletes provider. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::DeleteProvider( - TProviderItem& aItem ) - { - __VTPRINTENTER( "LocVid.DeleteProvider" ) - aItem.iProviderState = EUndefined; - if ( aItem.iProvider && - aItem.iInitialized && - aItem.iProvider->ViewFinderActive() ) - { - aItem.iProvider->StopViewFinder(); - } - delete aItem.iProvider; - aItem.iInitialized = EFalse; - aItem.iProvider = NULL; - __VTPRINTEXIT( "LocVid.DeleteProvider" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::DeleteProvider -// Deletes provider. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::DeleteProvider( const TVtEngProviderType aType ) - { - TProviderItem dummy; - const TInt pos( GetProviderByType( aType, dummy ) ); - if ( pos >= 0 ) // valid index - { - TProviderItem& item = ( *iVideoProviders )[pos]; - DeleteProvider( item ); - } - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::Reset -// Resets local video handler. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::Reset() - { - __VTPRINTENTER( "LocVid.Reset" ) - - __VTPRINT( DEBUG_MEDIA, "LocVideo.Reset" ) - DeleteProvider( KVtEngProviderCam1 ); - DeleteProvider( KVtEngProviderCam2 ); - DeleteAudioSource(); - - ClearFlag( EFlagAudioMuted | - EFlagSignalSourceSelection | - EFlagInitialized | - EFlagVFEnabled | - EFlagFrozen ); - - __VTPRINT( DEBUG_MEDIA, "LocVideo.Reset clearing EFlagVFEnabled and other" ) - - StopViewFinder(); - __VTPRINTEXIT( "LocVid.Reset" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetDigitalZoomFactorL -// Sets video provider's digital zoom step. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SetDigitalZoomFactorL( TInt aDigitalZoomFactor ) - { - __VTPRINTENTER( "LocVid.SetDigitalZoomFactorL" ) - __VTPRINT2( DEBUG_MEDIA, "LocVideo.SetZoom %d", aDigitalZoomFactor ) - if ( !iActiveProvider || - !iActiveProvider->iProvider ) - { - User::Leave( KErrNotReady ); - } - CVSDataProvider* provider( iActiveProvider->iProvider ); - provider->SetDigitalZoomFactorL( aDigitalZoomFactor ); - iActiveProvider->iStoredZoomFactor = provider->DigitalZoomFactor(); - __VTPRINTEXIT( "LocVid.SetDigitalZoomFactorL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetFlag -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SetFlag( const TInt aFlag ) - { - iFlags |= aFlag; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ClearFlag -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::ClearFlag( const TInt aFlag ) - { - iFlags &= ~aFlag; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::IsFlag -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::IsFlag( const TInt aFlag ) const - { - return ( ( iFlags & aFlag ) != 0 ); - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CalculateMajorDigitalZoomStepCount -// Utility function to calculate amount of major zoom steps. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::CalculateMajorDigitalZoomStepCount( - CVSDataProvider* aProvider ) - { - TVSDataProviderInfo info; - aProvider->ProviderInfo( info ); - return CalculateMajorDigitalZoomStepCount( info ); - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CalculateMajorDigitalZoomStepCount -// Utility function to calculate amount of major zoom steps. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::CalculateMajorDigitalZoomStepCount( - const TVSDataProviderInfo& aInfo ) const - { - TInt zStepCount( aInfo.iMaxDigitalZoom ? - aInfo.iMaxDigitalZoom + 1 : 0 ); - TInt maxZStepCount( KVtMaxZoomStep + 1 ); - return zStepCount > maxZStepCount ? maxZStepCount : zStepCount; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::TProviderItem -// Constructor. -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::TProviderItem::TProviderItem() : - iProvider( NULL ), - iType( KVtEngProviderUndefined ), - iInitialized( EFalse ), - iErrorCode( 0 ), - iProviderState( EUndefined ), - iStoredZoomFactor( 0 ), - iZFErr( KErrNone ), - iCamPrefs( NULL ), - iFirstTime( ETrue ) - { - __VTPRINTENTER( "LocVid.TProviderItem.ctor" ) - ResetStoredValues(); - __VTPRINTEXITR( "LocVid.TProviderItem.ctor $%x", TInt( this ) ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::~TProviderItem -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::TProviderItem::~TProviderItem() - { - __VTPRINTENTER( "LocVid.TProviderItem.~" ) - DetachFromCameraPreferences(); - __VTPRINTEXITR( "LocVid.TProviderItem.~ $%x", TInt( this ) ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::ResetStoredValues -// Resets stored values. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TProviderItem::ResetStoredValues() - { - __VTPRINTENTER( "LocVid.ResetStoredValues" ) - DetachFromCameraPreferences(); - __VTPRINTEXIT( "LocVid.ResetStoredValues" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::RestoreZoomFactor -// Tries to restore zoom factor. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::TProviderItem::RestoreZoomFactor() - { - __VTPRINTENTER( "LocVid.RestoreZoomFactor" ) - TRAP( iZFErr, - { - if ( iProvider && !iZFErr ) - { - iProvider->SetDigitalZoomFactorL( iStoredZoomFactor ); - iStoredZoomFactor = iProvider->DigitalZoomFactor(); - __VTPRINT2( DEBUG_GEN, "LocVideo.RestoreZoomFactor ZF now = %d", - iStoredZoomFactor ) - } - } ); - __VTPRINTEXITR( "LocVid.RestoreZoomFactor %d", iZFErr ) - return iZFErr; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::RestorePreferences -// Tries to restore preferences. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::TProviderItem::RestorePreferences() - { - __VTPRINTENTER( "LocVid.RestorePreferences" ) - TRAPD( error, - { - if ( iCamPrefs && iProvider && !iFirstTime ) - { - if ( !iCtErr ) - { - iProvider->SetColorToneL( - CCamera::CCameraImageProcessing::TEffect( iColorTone ) ); - } - if ( !iWbErr ) - { - iProvider->SetWhiteBalanceL( - CCamera::TWhiteBalance( iWhiteBalance ) ); - } - if ( !iBrErr ) - { - iProvider->SetBrightnessL( iBrightness ); - } - if ( !iCrErr ) - { - iProvider->SetContrastL( iContrast ); - } - } - } ); - __VTPRINTEXITR( "LocVid.RestorePreferences %d", error ) - return error; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::Attach -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TProviderItem::Attach( MVtEngCameraPreferences& - aCamPrefs ) - { - __VTPRINTENTER( "LocVid.Attach" ) - iCamPrefs = &aCamPrefs; - if ( iFirstTime ) - { - iCtErr = iCamPrefs->GetColorTone( iColorTone ); - iWbErr = iCamPrefs->GetWhiteBalance( iWhiteBalance ); - iBrErr = iCamPrefs->GetBrightness( iBrightness ); - iCrErr = iCamPrefs->GetContrast( iContrast ); - iFirstTime = EFalse; - } - __VTPRINTEXITR( "LocVid.Attach $%x", TInt( iCamPrefs ) ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::ColorToneUpdated -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TProviderItem::ColorToneUpdated( - MVtEngCameraPreferences::TColorTone aColorTone ) - { - __VTPRINTENTER( "LocVid.ColorToneUpdated" ) - iCtErr = KErrNone; - iColorTone = aColorTone; - __VTPRINTEXITR( "LocVid.ColorToneUpdated %d", aColorTone ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::WhiteBalanceUpdated -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TProviderItem::WhiteBalanceUpdated( - MVtEngCameraPreferences::TWhiteBalance aWhiteBalance ) - { - __VTPRINTENTER( "LocVid.WhiteBalanceUpdated" ) - iWbErr = KErrNone; - iWhiteBalance = aWhiteBalance; - __VTPRINTEXITR( "LocVid.WhiteBalanceUpdated %d", aWhiteBalance ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::BrightnessUpdated -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TProviderItem::BrightnessUpdated( TInt aBrightness ) - { - __VTPRINTENTER( "LocVid.BrightnessUpdated" ) - iBrErr = KErrNone; - iBrightness = aBrightness; - __VTPRINTEXITR( "LocVid.BrightnessUpdated %d", aBrightness ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::ContrastUpdated -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TProviderItem::ContrastUpdated( TInt aContrast ) - { - __VTPRINTENTER( "LocVid.ContrastUpdated" ) - iCrErr = KErrNone; - iContrast = aContrast; - __VTPRINTEXITR( "LocVid.ContrastUpdated %d", aContrast ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::Detach -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TProviderItem::Detach( MVtEngCameraPreferences& ) - { - __VTPRINTENTER( "LocVid.Detach" ) - iCamPrefs = NULL; - __VTPRINTEXIT( "LocVid.Detach" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TProviderItem::DetachFromCameraPreferences -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TProviderItem::DetachFromCameraPreferences() - { - __VTPRINTENTER( "LocVid.DetachFromCameraPreferences" ) - if ( iCamPrefs ) - { - static_cast< CVtEngCameraPreferences* >( iCamPrefs )->Detach( *this ); - iCamPrefs = NULL; - } - __VTPRINTEXIT( "LocVid.DetachFromCameraPreferences" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CreateAudioSource -// Creates audio source. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::CreateAudioSource() - { - __VTPRINTENTER( "LocVid.CreateAudioSource" ) - TInt err = KErrNone; - // Check if this really a target compilation -#if !defined( __WINS__ ) - iAudioSource = VTProtocolFactory::CreateAudioSource(); - if ( !iAudioSource ) - { - err = KErrNoMemory; - } -#endif // !(__WINS__) - __VTPRINTEXITR( "LocVid.CreateAudioSource %d", err ) - return err; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::DeleteAudioSource -// Deletes audio source. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::DeleteAudioSource() - { - __VTPRINTENTER( "LocVid.DeleteAudioSource" ) - if( iAudioSource ) - { - VTProtocolFactory::DeletAudioSource(iAudioSource); - iAudioSource = NULL; - } - __VTPRINTEXIT( "LocVid.DeleteAudioSource" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::PauseVideoSending -// Pause video sending. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::PauseVideoSending() - { - __VTPRINTENTER( "LocVid.PauseVideoSending" ) - if ( iSource ) - { - iSource->PauseSending(); - } - __VTPRINTEXIT( "LocVid.PauseVideoSending" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ResumeVideoSending -// Resume video sending. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::ResumeVideoSending() - { - __VTPRINTENTER( "LocVid.ResumeVideoSending" ) - if ( iSource ) - { - iSource->ResumeSending(); - } - __VTPRINTEXIT( "LocVid.ResumeVideoSending" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ViewFinderStarted -// Is view finder started. -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::ViewFinderStarted() const - { - CVSDataProvider* provider = NULL; - if( iActiveProvider ) - { - provider = iActiveProvider->iProvider; - } - if ( !provider ) - { - return EFalse; - } - return provider->ViewFinderActive(); - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ViewFinderStarted -// Is view finder started. -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::IsFrozen() const - { - TBool result = IsFlag( EFlagFrozen ); - return result; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::ResetIndices -// Resets the provider info indices. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::ResetIndices() - { - iProviderInfoIndexCam1 = KErrNotFound; - iProviderInfoIndexCam2 = KErrNotFound; - iProviderInfoIndexStill = KErrNotFound; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetCameraTracking -// Sets a listener for camera P & S data. -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::SetCameraTrackingL( TInt& aProviderIndex ) - { - __VTPRINTENTER( "LocVideo.SetCameraTracking" ) - iCameraListener = CVtEngPubSubsListener::NewL( KPSUidVTMediaConfiguration, - KPSPreferredCamera, this ); - - __VTPRINTEXIT( "LocVideo.SetCameraTracking" ) - return iCameraListener->Get( aProviderIndex ); - } - -// ----------------------------------------------------------------------------- -// CVtEngInitializer::HandleNotifyPSL -// Notification of changed port value. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::HandleNotifyPSL( - const TUid /*aUid */, const TInt& /* aKey */, - const TRequestStatus& aStatus ) - { - __VTPRINTENTER( "LocVideo.handleNotifyPSL " ) - if ( aStatus.Int() == KErrNone ) - { - // Get the new camera value. - TInt cameraId( EPSPreferredCameraUnknown ); - iCameraListener->Get( cameraId ); - // No need to check error, since MapCameraInternally will return - // current camera, and no actions will be taken. - MVtEngMedia::TCameraId camId( MapCameraInternally( cameraId ) ); - - TVtEngProviderType providerType( KVtEngProviderUndefined ); - TInt result( KErrNone ); - switch( camId ) - { - case MVtEngMedia::EPrimaryCamera: - if( IsFlag( EFlagCamera1Available ) ) - { - providerType = KVtEngProviderCam1; - } - else - { - result = KErrNotFound; - } - break; - - case MVtEngMedia::ESecondaryCamera: - if( IsFlag( EFlagCamera2Available ) ) - { - providerType = KVtEngProviderCam2; - } - else - { - result = KErrNotFound; - } - break; - - default: - result = KErrNotSupported; - break; - } - - User::LeaveIfError( result ); - - // If we're sharing, then notify camera change to image sharer - if ( GetMediaSource() == MVtEngMedia::EMediaShare || - iShareImage->IsInitializingShare() ) - { - iShareImage->NotifyCameraChanged( providerType ); - } - // If current provider is camera - else if ( GetMediaSource() == MVtEngMedia::EMediaCamera ) - { - // If current camera is different than new - if ( iCurrentCamera != camId ) - { - // If VT is in the foreground and Provider is unfrozen - if ( IsFlag( EFlagUIForeground ) && !IsFrozen() && !iObserver.IsVideoChannelClosed() ) - { - // select camera.. - SelectSourceL( providerType ); - } - else - { - iObserver.SetSelectedCameraId( camId ); - // ..else notify delayed select - iLayoutChangeHandler.CancelHandleLayoutChange(); - iDelayedSelect.NotifyDelayedSelect( providerType ); - } - } - else - { - // else ignore - } - } - // Else store camera type and on next SelectSourceL() use this instead - else - { - iObserver.SetSelectedCameraId( camId ); - // If prepare camera has not been called, then just - // update preferred camera - if ( GetMediaSource()!= MVtEngMedia::EMediaNone && - ( IsPrepareCameraCalled() || iObserver.IsVideoChannelClosed() ) ) - { - iLayoutChangeHandler.CancelHandleLayoutChange(); - iDelayedSelect.NotifyDelayedSelect( providerType ); - } - else - { - iCurrentCamera = camId; - } - } - } - __VTPRINTEXIT( "LocVideo.HandleNotifyPSL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::SetCurrentCameraId -// -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::SetCurrentCameraId( MVtEngMedia::TCameraId aCamId ) - { - __VTPRINTENTER( "LocVideo.SetCurrentCameraId" ) - iCurrentCamera = aCamId; - iObserver.SetSelectedCameraId( aCamId ); - __VTPRINTEXITR( "LocVideo.SetCurrentCameraId camId = %d", aCamId ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::MapCameraInternally -// Maps camera id to internal data structures. -// ----------------------------------------------------------------------------- -// -MVtEngMedia::TCameraId CVtEngLocalVideo::MapCameraInternally( TInt aCameraId ) - { - __VTPRINT2( DEBUG_GEN, "LocVideo.MapCameraInternally cameraId=%d", - aCameraId ) - if ( aCameraId == EPSPreferredCameraInwards || - iNumSupportedCameras == 1 ) - { - return MVtEngMedia::EPrimaryCamera; - } - else if ( aCameraId == EPSPreferredCameraOutwards ) - { - return MVtEngMedia::ESecondaryCamera; - } - __VTPRINT2( DEBUG_GEN, "LocVideo.MapCameraInternally curCam=%d", iCurrentCamera ) - return iCurrentCamera; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CameraAvailable -// Checks camera availabitility. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo:: - CameraAvailable( CVtEngLocalVideo::TVtEngProviderType &aType ) - { - __VTPRINT2( DEBUG_GEN, "LocVideo.CameraAvailable In.type=%d ", aType ) - if ( iCurrentCamera == MVtEngMedia::EPrimaryCamera ) - { - if ( IsFlag( EFlagCamera1Available ) ) - { - aType = KVtEngProviderCam1; - } - } - else if ( iCurrentCamera == MVtEngMedia::ESecondaryCamera ) - { - if ( IsFlag( EFlagCamera2Available ) ) - { - aType = KVtEngProviderCam2; - } - } - __VTPRINT2( DEBUG_GEN, "LocVideo.CameraAvailable Out.type=%d", aType ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::IsProviderWaiting -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::IsProviderWaiting( TVtEngProviderType aType ) const - { - __VTPRINTENTER( "LocVid.IsProviderWaiting" ) - TBool isWaiting( EFalse ); - TInt indexWaiting( ProviderIndexByState( EWaiting ) ); - if ( indexWaiting != KErrNotFound ) - { - TProviderItem& item = ( *iVideoProviders )[ indexWaiting ]; - isWaiting = ( item.iType == aType ); - } - __VTPRINTEXITR( "LocVid.IsProviderWaiting %d", isWaiting ) - return isWaiting; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::GetHighestSelectableProvider -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::GetHighestSelectableProvider( - CVtEngLocalVideo::TVtEngProviderType& aPreferred ) const - { - __VTPRINTENTER( "LocVid.GetHighestSelectableProvider" ) - const TVtEngProviderType preferred = aPreferred; - switch ( preferred ) - { - case KVtEngProviderCam1: - if ( IsFlag( EFlagCamera1Available ) ) - { - // cam1 is selectable, jump out - break; - } - // othwerwise fall through to next in priority order - case KVtEngProviderCam2: - if ( IsFlag( EFlagCamera2Available ) && - // Do not allow change to another camera without user permission, - // i.e. test preferred was cam1 but it wasn't available. - preferred != KVtEngProviderCam1 ) - { - // cam2 is selectable - aPreferred = KVtEngProviderCam2; - break; - } - // othwerwise fall through to next in priority order - case KVtEngProviderImage: - if ( CVtEngUtility::Settings().Config().iVideo.iImageIsValid ) - { - aPreferred = KVtEngProviderImage; - break; - } - // othwerwise fall through to next in priority order - case KVtEngProviderNone: - default: - // always available - aPreferred = KVtEngProviderNone; - break; - } - __VTPRINTEXITR( "LocVid.GetHighestSelectableProvider %d", aPreferred ) - return ( preferred == aPreferred ); - } - -// Implementation of CVtEngLocalVideo::CVtEngShareImage - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::NewL -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::CVtEngShareImage* CVtEngLocalVideo::CVtEngShareImage::NewL( - CVtEngLocalVideo& aLocalVideo ) - { - CVtEngShareImage* self = new ( ELeave ) CVtEngShareImage( aLocalVideo ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); // self - return self; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::~CVtEngShareImage -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::CVtEngShareImage::~CVtEngShareImage() - { - DeleteProviders(); - iBuffered.ResetAndDestroy(); - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::InitializeL -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::InitializeL( - const MVtEngMedia::TShareObjectImageParameters& aParameters, - TVtEngProviderType aCurrent, - TBool& aFirstTime ) - { - __VTPRINTENTER( "LocVid.ShareImage.InitializeL" ) - if ( IsInitializing() ) - { - // Already initializing. - User::Leave( KErrNotReady ); - } - - - CVtEngLocalVideo::TProviderItem* freeProviderItem = FetchProviderItem(); - if ( !freeProviderItem ) - { - User::Leave( KErrInUse ); - } - - iParameters = aParameters; - CreateProviderL( *freeProviderItem ); - InitializeProviderL( *freeProviderItem ); - - // Only set stored type when sharing is started, if resharing (i.e. sharing - // new image when already sharing other image), then don't change stored - // type. - if ( iStoredType == KVtEngProviderUndefined ) - { - iSettingsChanged = EFalse; - iOriginalStoredType = iStoredType = aCurrent; - aFirstTime = ETrue; - } - else - { - aFirstTime = EFalse; - } - iInitializingProvider = freeProviderItem; - SetState( EInitializing ); - __VTPRINTEXIT( "LocVid.ShareImage.InitializeL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::ShareL -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::ShareL() - { - __VTPRINTENTER( "LocVid.ShareImage.ShareL" ) - if ( !IsInitializing() && iInitializingProvider ) - { - User::Leave( KErrNotReady ); - } - iActiveProvider = iInitializingProvider; - iInitializingProvider = NULL; - iLocalVideo->SwitchProvider( *iActiveProvider ); - SetState( ESharing ); - __VTPRINTEXIT( "LocVid.ShareImage.ShareL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::StopL -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::StopL() - { - __VTPRINTENTER( "LocVid.ShareImage.StopL" ) - iLocalVideo->InitializeOnly( EFalse ); - - CVtEngLocalVideo::TVtEngProviderType target( StoredSource() ); - if ( iOriginalStoredType != target ) - { - TProviderItem* item = NULL; - if ( iLocalVideo->GetProviderByType( iOriginalStoredType, item ) - != KErrNotFound ) - { - if ( item->iProviderState != EPermanent ) - { - iLocalVideo->DeleteProvider( *item ); - } - } - } - - if ( iSettingsChanged ) - { - if ( target == KVtEngProviderDefaultStillImage ) - { - DeleteProvider( target ); - } - DeleteProvider( KVtEngProviderImage ); - } - - __VTPRINT2( DEBUG_MEDIA, "LocVid.ShareImage.StopL select %d", - target ) - iLocalVideo->SelectSourceL( target ); - - if ( iStoredType == KVtEngProviderCam1 || - iStoredType == KVtEngProviderCam2 ) - { - MVtEngMedia::TCameraId camId( - iStoredType == KVtEngProviderCam1 ? - MVtEngMedia::EPrimaryCamera : - MVtEngMedia::ESecondaryCamera ); - iLocalVideo->SetCurrentCameraId( camId ); - __VTPRINT2( DEBUG_MEDIA, "LocVid.ShareImage.StopL set camId %d", - camId ) - } - SetState( EStopped ); - __VTPRINTEXIT( "LocVid.ShareImage.StopL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::Error -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::Error( TInt -#ifdef _DEBUG - aError -#endif // _DEBUG - ) - { - TState stateAfter( EStopped ); - __VTPRINTENTER( "LocVid.ShareImage.Error" ) - if ( IsInitializing() ) - { - iInitializingProvider = NULL; - stateAfter = iPreviousState; - } - else if ( iState == ESharing ) - { - if ( iLocalVideo->iObserver.GetPendingCommand() != KVtEngInitializeShareImage ) - { - CVtEngEventManager::NotifyEvent( KVtEngShareImageDecodingError ); - } - stateAfter = ESharing; - //iActiveProvider = NULL; - } - SetState( stateAfter ); -#ifdef _DEBUG - __VTPRINTEXITR( "LocVid.ShareImage.Error %d", aError ) -#endif // _DEBUG - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::StoredSource -// -// Returns stored source for this share session. Stored source may have changed -// during share (e.g. when GS still image is being sent but during share -// GS still image is disabled => still image cannot be used anymore and thus -// None provider must be activated). All these conditions are checked by this -// method. -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::TVtEngProviderType - CVtEngLocalVideo::CVtEngShareImage::StoredSource() const - { - __VTPRINTENTER( "LocVid.ShareImage.StoredSource" ) - CVtEngLocalVideo::TVtEngProviderType stored( iStoredType ); - - if ( iOriginalStoredType == KVtEngProviderNone || - iOriginalStoredType == KVtEngProviderImage || - iOriginalStoredType == KVtEngProviderDefaultStillImage ) - { - if ( CVtEngUtility::Settings().Config().iVideo.iImageIsValid ) - { - stored = KVtEngProviderImage; - } - else if ( CVtEngUtility::Settings().IsDefaultStillImageDefined() ) - { - stored = KVtEngProviderDefaultStillImage; - } - else - { - stored = KVtEngProviderNone; - } - } - __VTPRINTEXITR( "LocVid.ShareImage.StoredSource = %d", stored ) - return stored; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::CVtEngShareImage -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::CVtEngShareImage::CVtEngShareImage( - CVtEngLocalVideo& aLocalVideo ) - : iLocalVideo( &aLocalVideo ), iState( EStopped ), - iStoredType( KVtEngProviderUndefined ), - iOriginalStoredType( KVtEngProviderUndefined ), - iBuffered( 2 ), iSettingsChanged( EFalse ) - { - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::ConstructL -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::ConstructL() - { - __VTPRINTENTER( "LocVid.ShareImage.ConstructL" ) - for ( TInt i = 0; i < KVtEngNumProvidersBuffered; i++ ) - { - TProviderItem* item = new (ELeave) TProviderItem(); - CleanupStack::PushL( item ); - User::LeaveIfError( iBuffered.Append( item ) ); - CleanupStack::Pop(); // item - } - __VTPRINTEXIT( "LocVid.ShareImage.ConstructL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::Parameters -// ----------------------------------------------------------------------------- -// -const MVtEngMedia::TShareObjectImageParameters& - CVtEngLocalVideo::CVtEngShareImage::Parameters() const - { - __VTPRINTENTER( "LocVid.ShareImage.Parameters" ) - __VTPRINTEXIT( "LocVid.ShareImage.Parameters" ) - return iParameters; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::IsInitializing -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::CVtEngShareImage::IsInitializing() const - { - TBool isInitializing( iState == EInitializing ); - __VTPRINTENTER( "LocVid.ShareImage.IsInitializing" ) - __VTPRINTEXITR( "LocVid.ShareImage.IsInitializing %d", isInitializing ) - return isInitializing; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::SetState -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::SetState( const TState aNewState ) - { - __VTPRINTENTER( "LocVid.ShareImage.SetState" ) - // Signal UI when entering or leaving initializing state - if ( aNewState == EInitializing ) - { - CVtEngEventManager::NotifyEvent( KVtEngShareImageInitializeBegin ); - } - else if ( iState == EInitializing ) - { - CVtEngEventManager::NotifyEvent( KVtEngShareImageInitializeEnd ); - } - // Reset stored type when stopping - if( aNewState == EStopped ) - { - iOriginalStoredType = iStoredType = KVtEngProviderUndefined; - iSettingsChanged = EFalse; - } - iPreviousState = iState; - iState = aNewState; - __VTPRINTEXITR( "LocVid.ShareImage.SetState iState = %d", iState ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::GetProviderItemL -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::TProviderItem* - CVtEngLocalVideo::CVtEngShareImage::FetchProviderItem() const - { - __VTPRINTENTER( "LocVid.ShareImage.FetchProviderItem" ) - for( TInt i = 0; i < iBuffered.Count(); i++ ) - { - if( ( iBuffered[ i ] != iActiveProvider ) && - ( iBuffered[ i ] != iInitializingProvider ) ) - { - __VTPRINTEXIT( "LocVid.ShareImage.FetchProviderItem" ) - return iBuffered[ i ]; - } - } - __VTPRINTEXIT( "LocVid.ShareImage.FetchProviderItem" ) - return NULL; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::CreateProviderL -// ----------------------------------------------------------------------------- -void CVtEngLocalVideo::CVtEngShareImage::CreateProviderL( - TProviderItem& aProviderItem ) - { - __VTPRINTENTER( "LocVid.ShareImage.CreateProviderL" ) - iLocalVideo->ReCreateProviderL( aProviderItem, KVtEngProviderShareImage ); - __VTPRINTEXIT( "LocVid.ShareImage.CreateProviderL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::InitializeProviderL -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::InitializeProviderL( - TProviderItem& aProviderItem ) - { - __VTPRINTENTER( "LocVid.ShareImage.InitializeProviderL" ) - if( IsInitializing() ) - { - User::Leave( KErrNotReady ); - } - TPckgBuf< TVSStillImageDataProviderParams > pckg( Parameters() ); -#ifdef _DEBUG - RDebug::Print( _L( "LocVid.ShareImage.InitializeProviderL: %S" ), - &( pckg().iFileName ) ); -#endif // _DEBUG - iLocalVideo->InitializeShareProviderL( aProviderItem, pckg ); - __VTPRINTEXIT( "LocVid.ShareImage.InitializeProviderL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::DeleteProvider -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::DeleteProvider( - TVtEngProviderType aProviderType ) - { - __VTPRINTENTER( "LocVid.ShareImage.DeleteProvider" ) - TProviderItem* pItem; - if ( iLocalVideo->GetProviderByType( aProviderType, pItem ) - != KErrNotFound ) - { - iLocalVideo->DeleteProvider( *pItem ); - } - __VTPRINTEXIT( "LocVid.ShareImage.DeleteProvider" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::GetObjectSharingState -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::GetObjectSharingState( - MVtEngMedia::TShareObjectState& aObjectSharingState ) const - { - __VTPRINTENTER( "LocVid.ShareImage.GetObjectSharingState" ) - switch ( iState ) - { - case EStopped: - aObjectSharingState = MVtEngMedia::ENotSharing; - break; - - case EInitializing: - aObjectSharingState = MVtEngMedia::EInitializingShareImage; - break; - - case ESharing: - aObjectSharingState = MVtEngMedia::ESharingImage; - break; - - default: - aObjectSharingState = MVtEngMedia::ENotAbleToShare; - break; - } - __VTPRINTEXIT( "LocVid.ShareImage.GetObjectSharingState" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::IsInitializingShare -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::CVtEngShareImage::IsInitializingShare() const - { - __VTPRINTENTER( "LocVid.ShareImage.IsInitializingShare" ) - const TBool result( iState == EInitializing ); - __VTPRINTEXITR( "LocVid.ShareImage.IsInitializingShare %d", result ) - return result; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::SettingsChanged -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::SettingsChanged() - { - __VTPRINTENTER( "LocVid.ShareImage.SettingsChanged" ) - iSettingsChanged = ETrue; - __VTPRINTEXIT( "LocVid.ShareImage.SettingsChanged" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::ProviderSwitchDone -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::ProviderSwitchDone( - CVSDataProvider* aOldProvider ) - { - __VTPRINTENTER( "LocVid.ShareImage.ProviderSwitchDone" ) - //if ( iState == EStopped ) - { - for ( TInt i = iBuffered.Count() - 1; i >= 0; i-- ) - { - if ( iBuffered[ i ]->iProvider == aOldProvider ) - { - iLocalVideo->DeleteProvider( *iBuffered[ i ] ); - break; - } - } - } - __VTPRINTEXIT( "LocVid.ShareImage.ProviderSwitchDone" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::NotifyCameraChanged -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::NotifyCameraChanged( - const TVtEngProviderType& aProviderType ) - { - __VTPRINTENTER( "LocVid.ShareImage.NotifyCameraChanged" ) - if ( ( iState == EInitializing ) || ( iState == ESharing ) ) - { - iStoredType = aProviderType; - } - __VTPRINTEXIT( "LocVid.ShareImage.NotifyCameraChanged" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::DeleteProviders -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::DeleteProviders() - { - __VTPRINTENTER( "LocVid.ShareImage.DeleteProviders" ) - for ( TInt i = 0; i < iBuffered.Count(); i++ ) - { - iLocalVideo->DeleteProvider( *iBuffered[ i ] ); - } - __VTPRINTEXIT( "LocVid.ShareImage.DeleteProviders" ) - } - - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CVtEngShareImage::CancelInitialize -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CVtEngShareImage::CancelInitialize() - { - __VTPRINTENTER( "CVtEngLocalVideo.CVtEngShareImage.CancelInitialize"); - if( iInitializingProvider ) - { - if(iInitializingProvider->iProvider) - { - __VTPRINT( DEBUG_MEDIA,"iInitializingProvider->iProvider->CancelInitializing()"); - iInitializingProvider->iProvider->CancelInitializing(); - } - } - __VTPRINTEXIT( "CVtEngLocalVideo.CVtEngShareImage.CancelInitialize"); - } -// Implementation of CVtEngLocalVideo::TVtEngDelayedSelect - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngDelayedSelect::TVtEngDelayedSelect -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::TVtEngDelayedSelect::TVtEngDelayedSelect() - : iDelayedProviderType( KVtEngProviderUndefined ) - { - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngDelayedSelect::NotifyDelayedSelect -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TVtEngDelayedSelect::NotifyDelayedSelect( - const TVtEngProviderType& aProviderType ) - { - __VTPRINTENTER( "LocVid.DelSel.NotifyDelayedSelect" ) - iDelayedProviderType = aProviderType; - __VTPRINTEXIT( "LocVid.DelSel.NotifyDelayedSelect" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngDelayedSelect::IsDelayedSelectPending -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::TVtEngDelayedSelect::IsDelayedSelectPending() const - { - __VTPRINTENTER( "LocVid.DelSel.IsDelayedSelectPending" ) - const TBool result( iDelayedProviderType != KVtEngProviderUndefined ); - __VTPRINTEXITR( "LocVid.DelSel.IsDelayedSelectPending %d", result ) - return result; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngDelayedSelect::DelayedSelectTarget -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::TVtEngProviderType -CVtEngLocalVideo::TVtEngDelayedSelect::DelayedSelectTarget() - { - __VTPRINTENTER( "LocVid.DelSel.DelayedSelectTarget" ) - TVtEngProviderType current( iDelayedProviderType ); - iDelayedProviderType = KVtEngProviderUndefined; - __VTPRINTEXITR( "LocVid.DelSel.DelayedSelectTarget %d", current ) - return current; - } - -// Implementation of CVtEngLocalVideo::TVtEngLayoutChangeHandler - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngLayoutChangeHandler::TVtEngLayoutChangeHandler -// ----------------------------------------------------------------------------- -// -CVtEngLocalVideo::TVtEngLayoutChangeHandler::TVtEngLayoutChangeHandler( - CVtEngLocalVideo& aLocalVideo ) - : iLocalVideo( &aLocalVideo ), iState( EIdle ), - iStored( KVtEngProviderUndefined ) - { - __VTPRINTEXIT( "LocVid.LayoutCH.Ctor" ) - __VTPRINTEXIT( "LocVid.LayoutCH.Ctor" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngLayoutChangeHandler::UnfreezeL -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::TVtEngLayoutChangeHandler::UnfreezeL() - { - TBool result( EFalse ); - __VTPRINTENTER( "LocVid.LayoutCH.UnfreezeL" ) - if ( iState == ELayoutChangePending ) - { - result = ETrue; - DoHandleLayoutChangeL(); - } - __VTPRINTEXITR( "LocVid.LayoutCH.UnfreezeL %d", result ) - return result; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngLayoutChangeHandler::HandleLayoutChangeL -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TVtEngLayoutChangeHandler::HandleLayoutChangeL() - { - __VTPRINTENTER( "LocVid.LayoutCH.HandleLayoutChangeL" ) - TInt error( KErrNone ); - if ( iState != EIdle ) - { - if ( iState == ELayoutChangePending ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVid.LayoutCH.HandleLayoutChangeL PENDING" ) - } - else - { - __VTPRINT( DEBUG_MEDIA, - "LocVid.LayoutCH.HandleLayoutChangeL NOT ready" ) - error = KErrNotReady; - } - CompleteOperation( error ); - } - else - { - // Only do reinitialize if camera is active source - if ( iLocalVideo->GetMediaSource() == MVtEngMedia::EMediaCamera && - !iLocalVideo->IsDelayedSelectPending() ) - { - if ( !iLocalVideo->IsFrozen() ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVid.LayoutCH.HandleLayoutChangeL camera active, reinitialize" ) - DoHandleLayoutChangeL(); - } - else - { - iState = ELayoutChangePending; - __VTPRINT( DEBUG_MEDIA, - "LocVid.LayoutCH.HandleLayoutChangeL flag set, frozen" ) - CompleteOperation( error ); - } - } - else - { - __VTPRINT( DEBUG_MEDIA, - "LocVid.LayoutCH.HandleLayoutChangeL no op, camera is not active" ) - CompleteL( error ); - } - } - __VTPRINTEXITR( "LocVid.LayoutCH.HandleLayoutChangeL %d", error ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngLayoutChangeHandler::CancelHandleLayoutChange -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TVtEngLayoutChangeHandler::CancelHandleLayoutChange() - { - __VTPRINTENTER( "LocVid.LayoutCH.CancelHandleLayoutChange" ) - if ( iState == ELayoutChangePending ) - { - iState = EIdle; - } - __VTPRINTEXITR( "LocVid.LayoutCH.CancelHandleLayoutChange iState = %d", - iState ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngLayoutChangeHandler::DoHandleLayoutChangeL -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TVtEngLayoutChangeHandler::DoHandleLayoutChangeL() - { - __VTPRINTENTER( "LocVid.LayoutCH.DoHandleLayoutChangeL" ) - iStored = iLocalVideo->ActiveProvider(); - iState = ESwitchingBlank; - TVtEngProviderType providerType( KVtEngProviderNone ); - // Use user defined image, if available - if ( CVtEngUtility::Settings().IsDefaultStillImageDefined() ) - { - providerType = KVtEngProviderDefaultStillImage; - } - iLocalVideo->SelectSourceL( providerType ); - __VTPRINTEXIT( "LocVid.LayoutCH.DoHandleLayoutChangeL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngLayoutChangeHandler::Complete -// ----------------------------------------------------------------------------- -// -TInt CVtEngLocalVideo::TVtEngLayoutChangeHandler::Complete( const TInt aError ) - { - __VTPRINTENTER( "LocVid.LayoutCH.Complete" ) - TRAPD( error, CompleteL( aError ) ); - __VTPRINTEXITR( "LocVid.LayoutCH.Complete %d", error ) - return error; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngLayoutChangeHandler::CompleteL -// Resets internal state and completes asynchronous operation. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TVtEngLayoutChangeHandler::CompleteL( const TInt aError ) - { - __VTPRINTENTER( "LocVid.LayoutCH.CompleteL" ) - iStored = KVtEngProviderUndefined; - iState = EIdle; - CompleteOperation( aError ); - __VTPRINTEXIT( "LocVid.LayoutCH.CompleteL" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngLayoutChangeHandler::CompleteOperation -// Completes asynchronous operation. -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::TVtEngLayoutChangeHandler::CompleteOperation( - const TInt aError ) - { - __VTPRINTENTER( "LocVid.LayoutCH.CompleteOperation" ) - iLocalVideo->CompleteOperation( aError ); - __VTPRINTEXIT( "LocVid.LayoutCH.CompleteOperation" ) - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderError -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderError( TInt aError ) - { - TBool handled( EFalse ); - __VTPRINTENTER( "LocVid.LayoutCH.ProviderError" ) - if ( iState != EIdle && iState != ELayoutChangePending ) - { - handled = ETrue; - Complete( aError ); - } - __VTPRINTEXITR( "LocVid.LayoutCH.ProviderError %d", handled ) - return handled; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderReady -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderReady() - { - TBool handled( EFalse ); - __VTPRINTENTER( "LocVid.LayoutCH.ProviderReady" ) - switch ( iState ) - { - case ESwitchingCamera: - case EIdle: - break; - - case EInitializingCamera: - handled = ETrue; - iState = ESwitchingCamera; - TRAPD( error, iLocalVideo->SelectSourceL( iStored ) ); - if ( error ) - { - Complete( error ); - } - break; - - case ESwitchingBlank: - handled = ETrue; - break; - } - __VTPRINTEXITR( "LocVid.LayoutCH.ProviderReady %d", handled ) - return handled; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderSwitchDone -// ----------------------------------------------------------------------------- -// -TBool CVtEngLocalVideo::TVtEngLayoutChangeHandler::ProviderSwitchDone( - CVSDataProvider* aOldProvider ) - { - TBool handled( EFalse ); - __VTPRINTENTER( "LocVid.LayoutCH.ProviderSwitchDone" ) - switch ( iState ) - { - case EIdle: - // nothing to do - break; - - case ESwitchingBlank: - { - __VTPRINT( DEBUG_MEDIA, - "LocVid.LayoutCH.ProviderSwitchDone ESwitchingBlank" ) - handled = ETrue; - iState = EInitializingCamera; - TProviderItem* providerItem; - const TInt result( - iLocalVideo->GetProviderByInstance( aOldProvider, providerItem ) ); - if ( result != KErrNotFound ) - { - iLocalVideo->DeleteProvider( *providerItem ); - iLocalVideo->iCameraPref->SetProvider( NULL, - *iLocalVideo->iActiveProvider ); - - __VTPRINT( DEBUG_MEDIA, - "LocVid.LayoutCH.ProviderSwitchDone initializing provider" ) - - TRAPD( error, iLocalVideo->InitializeProviderL( *providerItem ) ); - - if ( error ) - { - __VTPRINT2( DEBUG_MEDIA, - "LocVid.LayoutCH.ProviderSwitchDone ERROR %d in initialize", - error ) - Complete( error ); - } - } - else - { - __VTPRINT( DEBUG_MEDIA, - "LocVid.LayoutCH.ProviderSwitchDone provider NOT found" ) - Complete( result ); - } - } - break; - - case EInitializingCamera: - handled = ETrue; - break; - - case ESwitchingCamera: - __VTPRINT( DEBUG_MEDIA, - "LocVid.LayoutCH.ProviderSwitchDone ESwitchingCamera" ) - TRAP_IGNORE( iLocalVideo->StartViewFinderIfWasStartedL() ); - //Re-Set provider to camera preference. Otherwise, after layout change, the provider in camera preference will be invalid - iLocalVideo->iCameraPref->SetProvider( iLocalVideo->iActiveProvider->iProvider, - *iLocalVideo->iActiveProvider ); - handled = ETrue; - __VTPRINT( DEBUG_MEDIA, - "LocVid.LayoutCH.ProviderSwitchDone reinit done" ) - Complete( KErrNone ); - break; - } - __VTPRINTEXITR( "LocVid.LayoutCH.ProviderSwitchDone %d", handled ) - return handled; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CreateCameraPreferencesL -// ----------------------------------------------------------------------------- -// -CVtEngCameraPreferences* CVtEngLocalVideo::CreateCameraPreferencesL() - { - __VTPRINTENTER( "LocVid.CreateCameraPreferencesL" ) - iCameraPref = CVtEngCameraPreferences::NewL(); - - // Check if provider exist and set it - // as provider to camera preferences - if ( iActiveProvider ) - { - __VTPRINT( DEBUG_MEDIA, - "LocVideo.CreateCameraPreferencesL SetProvider" ) - iCameraPref->SetProvider( iActiveProvider->iProvider, - *iActiveProvider ); - } - - __VTPRINTEXIT( "LocVid.CreateCameraPreferencesL" ) - return iCameraPref; - } - -// ----------------------------------------------------------------------------- -// CVtEngLocalVideo::CancelInitializeShareImage -// ----------------------------------------------------------------------------- -// -void CVtEngLocalVideo::CancelInitializeShareImage() - { - __VTPRINTENTER( "CVtEngLocalVideo.CancelInitializeShareImage"); - iShareImage->CancelInitialize(); - __VTPRINTEXIT( "CVtEngLocalVideo.CancelInitializeShareImage"); - } - -// End of File