diff -r 73a1feb507fb -r bc78a40cd63c mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/mccscreen.cpp --- a/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/mccscreen.cpp Tue Aug 31 15:12:07 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,921 +0,0 @@ -/* -* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "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: -* -*/ - -#include -#include -#include -#include -#include -#include -#include "MccScreen.h" -#include "svptimer.h" -#include "musenglogger.h" - -// EXTERNAL DATA STRUCTURES - -// EXTERNAL FUNCTION PROTOTYPES - -// CONSTANTS - -_LIT(KMccWindowGroupName,"MccVideoWindow"); - -// MACROS - -// LOCAL CONSTANTS AND MACROS - -// MODULE DATA STRUCTURES - -// LOCAL FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// ============================= LOCAL FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CMccScreen::NewL -// ----------------------------------------------------------------------------- -// -CMccScreen* CMccScreen::NewL( CCamera* aCamera, - TPoint aPos, - TSize aArea, - TInt aIndex, - TInt aWindowOrdinalPosition, - TInt aWindowOrdinalPriority, - TBool aSecondary, - RDrawableWindow* aParentWindow ) - { - // Resolve screen type based on ecam capabilities, asssume direct vf - // to be available if camera not present yet. - CMccScreen* screen = NULL; - TBool useDirectVf = EFalse; - - if ( aCamera ) - { - TCameraInfo info; - aCamera->CameraInfo( info ); - useDirectVf = ( info.iOptionsSupported & TCameraInfo::EViewFinderDirectSupported ); - } - - if ( useDirectVf ) - { - TRAPD( err, screen = CMccScreenDirect::NewL( - aCamera, aPos, aArea, aIndex, - aWindowOrdinalPosition, aWindowOrdinalPriority ) ); - // If creation failes for some reason, bitmap vf is tried to be - // created as a fallback - if ( err == KErrNoMemory ) - { - User::Leave( err ); - } - if ( err ) - { - } - } - - if ( !screen ) - { - screen = CMccScreenBitmap::NewL( - aCamera, aPos, aArea, aIndex, - aWindowOrdinalPosition, aWindowOrdinalPriority, aSecondary, aParentWindow ); - } - return screen; - } - -// ----------------------------------------------------------------------------- -// CMccScreen::~CMccScreen -// ----------------------------------------------------------------------------- -// -CMccScreen::~CMccScreen() - { - - StopCamera(); - - delete iGraphicsContext; - delete iDev; - delete iRw; - delete iRwGroup; - iRwSession.Close(); - - } - -// ----------------------------------------------------------------------------- -// CMccScreen::StartL -// ----------------------------------------------------------------------------- -// -void CMccScreen::StartL() - { - - } - -// ----------------------------------------------------------------------------- -// CMccScreen::Stop -// ----------------------------------------------------------------------------- -// -void CMccScreen::Stop() - { - - } - -// ----------------------------------------------------------------------------- -// CMccScreen::Draw -// ----------------------------------------------------------------------------- -// -void CMccScreen::Draw( CFbsBitmap& /*aFrame*/ ) - { - - } - -// ----------------------------------------------------------------------------- -// CMccScreen::SetCamera -// ----------------------------------------------------------------------------- -// -TInt CMccScreen::SetCamera( CCamera* aCamera ) - { - if ( !aCamera ) - { - StopCamera(); - } - - iCamera = aCamera; - - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// CMccScreen::StopCamera -// ----------------------------------------------------------------------------- -// -void CMccScreen::StopCamera() - { - - if ( iCamera ) - { - iCamera->StopViewFinder(); - } - - } - -// ----------------------------------------------------------------------------- -// CMccScreen::VfStartPossible -// ----------------------------------------------------------------------------- -// -TBool CMccScreen::VfStartPossible() - { - return ( iCamera && !iCamera->ViewFinderActive() && - iArea.iWidth > 0 && - iArea.iHeight > 0 ); - } - -void CMccScreen::SetPrimaryRectL(TRect aRect) - { - MUS_LOG2( "mus: [ENGINE] -> CMccScreen::SetPrimaryRectL() (%dx%d)", - aRect.Width(), aRect.Height() ); - MUS_LOG2( "mus: [ENGINE] -> CMccScreen::SetPrimaryRectL() (%d,%d)", - aRect.iTl.iX, aRect.iTl.iY ); - iPrimaryRect = aRect; - } -void CMccScreen::SetSecondaryRectL(TRect aRect) - { - MUS_LOG2( "mus: [ENGINE] -> CMccScreen::SetSecondaryRectL() (%dx%d)", - aRect.Width(), aRect.Height() ); - MUS_LOG2( "mus: [ENGINE] -> CMccScreen::SetSecondaryRectL() (%d,%d)", - aRect.iTl.iX, aRect.iTl.iY ); - iSecondaryRect = aRect; - } - -void CMccScreen::Update(TBool aIsForeground) - { - if ( aIsForeground ){ - - iRwGroup->SetOrdinalPosition( iWindowOrdinalPosition, iWindowOrdinalPriority ); - iRw->SetOrdinalPosition( iWindowOrdinalPosition, iWindowOrdinalPriority ); - iRw->HandleTransparencyUpdate(); - iRwSession.Flush(); - } else { - - } - - } - - -// ----------------------------------------------------------------------------- -// CMccScreen::ConstructL -// ----------------------------------------------------------------------------- -// -void CMccScreen::ConstructL() - { - User::LeaveIfError( iRwSession.Connect() ); - - // Create window group - - iRwGroup = new (ELeave) RWindowGroup( iRwSession ) ; - - RWindowGroup& rootWin = CCoeEnv::Static()->RootWin(); - rootWin.AllowProcessToCreateChildWindowGroups(TUid::Uid( 0x101F8681 )); - TUint32 groupId = rootWin.WindowGroupId(); //iRwSession.GetFocusWindowGroup(); - TUint32 focusGroupId = iRwSession.GetFocusWindowGroup(); - //User::LeaveIfError( iRwGroup->ConstructChildApp( groupId, (TUint32)iRwGroup, EFalse ) ); - User::LeaveIfError( iRwGroup->Construct( (TUint32)iRwGroup, EFalse ) ); - - TBuf<100> name; - name.Append(KMccWindowGroupName); - iRwGroup->SetName( name ); - - iRwGroup->SetOrdinalPosition( iWindowOrdinalPosition, iWindowOrdinalPriority ); - //iRwGroup->SetOrdinalPriorityAdjust(1); - iRwGroup->AutoForeground(EFalse); - - // Create screen device - iDev = new (ELeave) CWsScreenDevice( iRwSession ); - iDev->Construct( iDeviceIndex ); - - TInt currMode = iDev->CurrentScreenMode(); - MUS_LOG1( "mus: [ENGINE] -> CMccScreen::ConstructL() mode: %d", currMode ); - TPixelsTwipsAndRotation sizeAndRotation; - iDev->GetScreenModeSizeAndRotation( currMode, sizeAndRotation ); - - MUS_LOG3( "mus: [ENGINE] -> CMccScreen::ConstructL() (%dx%d) %d", - sizeAndRotation.iPixelSize.iWidth, sizeAndRotation.iPixelSize.iHeight, sizeAndRotation.iRotation ); - - // Create window - iRw = new (ELeave) RWindow( iRwSession ); - - User::LeaveIfError( iRw->Construct( *iRwGroup, (TUint32)iRw ) ); - - - iRw->SetPosition( iPosition ); - - iRw->SetSize( iArea ); - iRw->SetOrdinalPosition( iWindowOrdinalPosition, iWindowOrdinalPriority ); - iRw->EnableVisibilityChangeEvents(); - - User::LeaveIfError( iDev->CreateContext( iGraphicsContext ) ); - - iRw->Activate(); - iRwSession.Flush(); - } - -// ----------------------------------------------------------------------------- -// CMccScreen::CMccScreen -// ----------------------------------------------------------------------------- -// -CMccScreen::CMccScreen( - TMccScreenType aScreenType, - CCamera* aCamera, - TPoint aPos, - TSize aArea, - TInt aIndex, - TInt aWindowOrdinalPosition, - TInt aWindowOrdinalPriority, - TBool aSecondary, - RDrawableWindow* aParentWindow ) : - iCamera( aCamera ), - iDeviceIndex( aIndex ), - iPosition( aPos ), - iArea( aArea ), - iWindowOrdinalPosition( aWindowOrdinalPosition ), - iWindowOrdinalPriority( aWindowOrdinalPriority ), - iScreenType( aScreenType ), - iSecondary(aSecondary), - iParentWindow(aParentWindow)/*, - iRwSession(CCoeEnv::Static()->WsSession()), - iRwGroup(&CCoeEnv::Static()->RootWin()), - iDev(CCoeEnv::Static()->ScreenDevice())*/ - { - - } - - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::CMccScreenBitmap -// ----------------------------------------------------------------------------- -// -CMccScreenBitmap* CMccScreenBitmap::NewL( - CCamera* aCamera, - TPoint aPos, - TSize aArea, - TInt aIndex, - TInt aWindowOrdinalPosition, - TInt aWindowOrdinalPriority, - TBool aSecondary, - RDrawableWindow* aParentWindow) - { - CMccScreenBitmap* self = new ( ELeave ) CMccScreenBitmap( aCamera, - aPos, - aArea, - aIndex, - aWindowOrdinalPosition, - aWindowOrdinalPriority, - aSecondary, - aParentWindow); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::CMccScreenBitmap -// ----------------------------------------------------------------------------- -// -CMccScreenBitmap::CMccScreenBitmap( - CCamera* aCamera, - TPoint aPos, - TSize aArea, - TInt aIndex, - TInt aWindowOrdinalPosition, - TInt aWindowOrdinalPriority, - TBool aSecondary, - RDrawableWindow* aParentWindow) : - CMccScreen( EBitmapScreen, aCamera, aPos, aArea, aIndex, - aWindowOrdinalPosition, aWindowOrdinalPriority, aSecondary, aParentWindow ), - iAborted( ETrue ) - { - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::CMccScreenBitmap -// ----------------------------------------------------------------------------- -// -CMccScreenBitmap::~CMccScreenBitmap() - { - - DetachFrame(); // Must do bitmap detach before releasing window resources - delete iDirectScreenAccess; - - delete iPausedFrameData; - delete iTimer; - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::ConstructL -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::ConstructL() - { - iTimer = CSVPTimer::NewL( *this, 1 ); - - CMccScreen::ConstructL(); - - // Create direct screen access - //iDirectScreenAccess = CDirectScreenAccess::NewL( iRwSession, *iDev, *iRw, *this ); - - UpdateViewFinderArea( iArea ); - - StartL(); // Simu HACK - iTimer->SetTime(500, 1); - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::StartL -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::StartL() - { - iStopped = EFalse; - - if ( iCamera ) - { - StartCameraL(); - } - else if ( iPausedFrameData ) - { - - CFbsBitmap* frame = RestoreFrameLC(); - AttachFrameL( frame ); - CleanupStack::Pop( frame ); - } - else - { - // NOP - } - - StartDsaL(); - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::StartCameraL -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::StartCameraL() - { - - __ASSERT_ALWAYS( iCamera, User::Leave( KErrNotReady ) ); - - // Camera may modify the size - TSize vfBitmapSize = iArea; - - if ( VfStartPossible() ) - { - iCamera->StartViewFinderBitmapsL( vfBitmapSize ); - } - - - UpdateViewFinderArea( vfBitmapSize ); - - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::StartDsaL -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::StartDsaL() - { - /* - iAborted = EFalse; - iDirectScreenAccess->Cancel(); - iDirectScreenAccess->StartL(); - iGc = iDirectScreenAccess->Gc(); - iFbsDev = iDirectScreenAccess->ScreenDevice(); - iRegion = iDirectScreenAccess->DrawingRegion(); - - iGc->SetClippingRegion( iRegion ); - */ - // Fill with black areas which are not covered by viewfinder image. - // If viewfinder image has not been yet received and drawn, fill whole area. - // - - /* if ( !iFirstImageDrawn ) - { - // Whole area - iGc->SetBrushColor( KRgbBlue ); - iGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); - TPoint pointTl( 0, 0 ); - TRect rect( pointTl, iArea ); - iGc->DrawRect( rect ); - } - else - { - DrawBlackBorders(); - } - - if ( iAttachedFrame ) - { - - TSize viewFinderImageSize = iAttachedFrame->SizeInPixels(); - - TPoint corner = UpdateViewFinderArea( viewFinderImageSize ); - - iGc->BitBlt( corner, iAttachedFrame ); - } - - DoScreenDeviceUpdate(); - */ - //iGc->SetBrushStyle( CGraphicsContext::ENullBrush ); - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::Stop -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::Stop() - { - // Don't do anything yet, wait for next frame and then stop camera - iStopped = ETrue; - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::Restart -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::Restart( RDirectScreenAccess::TTerminationReasons /*aReason*/ ) - { - - TRAP_IGNORE( StartDsaL() ); - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::AbortNow -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::AbortNow( RDirectScreenAccess::TTerminationReasons /*aReason*/ ) - { - iDirectScreenAccess->Cancel(); - - iAborted = ETrue; - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::Draw -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::Draw( CFbsBitmap& aFrame ) - { - if ( iStopped ) - { - - // Screen was waiting for freeze frame from camera, inform observer - // that camera is not needed anymore - StoreFrameDataL( aFrame ); - CFbsBitmap* frame = RestoreFrameLC(); - AttachFrameL( frame ); - CleanupStack::Pop( frame ); - - StopCamera(); - } - else - { - // When normal frame draw is requested, attached frame is not anymore drawn - DetachFrame(); - - DoDraw( aFrame ); - } - } - -void CMccScreenBitmap::TimedOut( TInt aTimerId ) - { - iGraphicsContext->Activate(*iRw); - iRw->Invalidate(); - iRw->BeginRedraw(); - TRgb color1(0,0,255,255); - iGraphicsContext->Clear(); - iGraphicsContext->SetBrushColor( color1 ); - iGraphicsContext->SetBrushStyle( CGraphicsContext::ESolidBrush ); - iGraphicsContext->DrawRect( iPrimaryRect ); - TRgb color2(0,255,0,255); - iGraphicsContext->SetBrushColor( color2 ); - iGraphicsContext->DrawRect( iSecondaryRect ); - iRw->EndRedraw(); - iGraphicsContext->Deactivate(); - iRwSession.Flush(); - - /* - if ( !iAborted && iGc ){ - iGc->SetBrushColor( KRgbBlue ); - iGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); - iGc->DrawRect( iPrimaryRect ); - iGc->SetBrushColor( KRgbGreen ); - iGc->DrawRect( iSecondaryRect ); - DoScreenDeviceUpdate(); - } - */ - iTimer->SetTime(500, 1); - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::AttachFrameL -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::AttachFrameL( CFbsBitmap* aFrame ) - { - - __ASSERT_ALWAYS( aFrame, User::Leave( KErrArgument ) ); - - DetachFrame(); - - iAttachedFrame = aFrame; - - DoDraw( *iAttachedFrame ); - - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::DetachFrame -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::DetachFrame() - { - if ( iAttachedFrame ) - { - iAttachedFrame->Reset(); - delete iAttachedFrame; - } - - iAttachedFrame = NULL; - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::UpdateViewFinderArea -// ----------------------------------------------------------------------------- -// -TPoint CMccScreenBitmap::UpdateViewFinderArea( TSize aViewFinderImageSize ) - { - TPoint corner( 0, 0 ); - if ( aViewFinderImageSize.iWidth < iArea.iWidth ) - { - // Divide the subtraction by two (i.e. do centering) - corner.iX = ( iArea.iWidth - aViewFinderImageSize.iWidth ) >> 1; - } - - if ( aViewFinderImageSize.iHeight < iArea.iHeight ) - { - // Divide the subtraction by two (i.e. do centering) - corner.iY = ( iArea.iHeight - aViewFinderImageSize.iHeight ) >> 1; - } - - iViewFinderImageRect = TRect( corner, aViewFinderImageSize ); - - return corner; - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::DoDraw -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::DoDraw( CFbsBitmap& aFrame ) - { - if ( !iAborted && iGc ) - { - iFirstImageDrawn = ETrue; - - TSize viewFinderImageSize = aFrame.SizeInPixels(); - - TBool imageSizeChanged = ( viewFinderImageSize != iViewFinderImageRect.Size() ); - - TPoint corner = UpdateViewFinderArea( viewFinderImageSize ); - - if ( imageSizeChanged ) - { - // Size of bitmap changed suddenly, borders need to be redrawn - DrawBlackBorders(); - } - - iGc->BitBlt( corner, &aFrame ); - - DoScreenDeviceUpdate(); - } - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::DoScreenDeviceUpdate -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::DoScreenDeviceUpdate() - { - if ( iFbsDev ) - { - iFbsDev->Update(); - } - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::StoreFrameDataL -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::StoreFrameDataL( CFbsBitmap& aFrame ) - { - - iPausedFrameSize = aFrame.SizeInPixels(); - iPausedFrameDisplayMode = aFrame.DisplayMode(); - TInt bitmapSizeInBytes = - CFbsBitmap::ScanLineLength( iPausedFrameSize.iWidth, iPausedFrameDisplayMode ) * - iPausedFrameSize.iHeight; - HBufC8* pausedFrameData = HBufC8::NewLC( bitmapSizeInBytes ); - aFrame.LockHeap(); - pausedFrameData->Des().Copy( (TUint8*)aFrame.DataAddress(), bitmapSizeInBytes ); - aFrame.UnlockHeap(); - delete iPausedFrameData; - iPausedFrameData = pausedFrameData; - CleanupStack::Pop( pausedFrameData ); - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::RestoreFrameLC -// ----------------------------------------------------------------------------- -// -CFbsBitmap* CMccScreenBitmap::RestoreFrameLC() - { - - __ASSERT_ALWAYS( iPausedFrameData, User::Leave( KErrNotReady ) ); - - CFbsBitmap* tempFrame = new ( ELeave ) CFbsBitmap; - CleanupStack::PushL( tempFrame ); - - User::LeaveIfError( tempFrame->Create( iPausedFrameSize, iPausedFrameDisplayMode ) ); - TInt bitmapSizeInBytes = - CFbsBitmap::ScanLineLength( iPausedFrameSize.iWidth, iPausedFrameDisplayMode ) * - iPausedFrameSize.iHeight; - - tempFrame->LockHeap(); - Mem::Copy( tempFrame->DataAddress(), - iPausedFrameData->Des().Ptr(), - bitmapSizeInBytes ); - tempFrame->UnlockHeap(); - - - return tempFrame; - } - -// ----------------------------------------------------------------------------- -// CMccScreenBitmap::DrawBlackBorders -// ----------------------------------------------------------------------------- -// -void CMccScreenBitmap::DrawBlackBorders() - { - iGc->SetBrushColor( KRgbBlue ); - iGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); - - // Upper area - TPoint pointTl( 0, 0 ); - TPoint pointBr( iArea.iWidth, iViewFinderImageRect.iTl.iY ); - TRect rect( pointTl, pointBr ); - iGc->DrawRect( rect ); - - // Lower area - pointTl.SetXY( 0, iViewFinderImageRect.iBr.iY ); - pointBr.SetXY( iArea.iWidth, iArea.iHeight ); - rect.SetRect( pointTl, pointBr ); - iGc->DrawRect( rect ); - - // Left area - pointTl.SetXY( 0, iViewFinderImageRect.iTl.iY ); - pointBr.SetXY( iViewFinderImageRect.iTl.iX, iViewFinderImageRect.iBr.iY ); - rect.SetRect( pointTl, pointBr ); - iGc->DrawRect( rect ); - - // Right area - pointTl.SetXY( iViewFinderImageRect.iBr.iX, iViewFinderImageRect.iTl.iY ); - pointBr.SetXY( iArea.iWidth, iViewFinderImageRect.iBr.iY ); - rect.SetRect( pointTl, pointBr ); - iGc->DrawRect( rect ); - } - -// ----------------------------------------------------------------------------- -// CMccScreenDirect::NewL -// ----------------------------------------------------------------------------- -// -CMccScreenDirect* CMccScreenDirect::NewL( CCamera* aCamera, - TPoint aPos, - TSize aArea, - TInt aIndex, - TInt aWindowOrdinalPosition, - TInt aWindowOrdinalPriority ) - { - - CMccScreenDirect* self = new ( ELeave ) CMccScreenDirect( aCamera, - aPos, - aArea, - aIndex, - aWindowOrdinalPosition, - aWindowOrdinalPriority ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// ----------------------------------------------------------------------------- -// CMccScreenDirect::~CMccScreenDirect -// ----------------------------------------------------------------------------- -// -CMccScreenDirect::~CMccScreenDirect() - { - - if ( iDirectViewFinder ) - { - iDirectViewFinder->Release(); - iDirectViewFinder = NULL; - } - - } - -// ----------------------------------------------------------------------------- -// CMccScreenDirect::StartL -// ----------------------------------------------------------------------------- -// -void CMccScreenDirect::StartL() - { - - - if ( iDirectViewFinder && iDirectViewFinder->ViewFinderState() == - CCamera::CCameraDirectViewFinder::EViewFinderPause ) - { - - iDirectViewFinder->ResumeViewFinderDirectL(); - } - else if ( VfStartPossible() ) - { - - StartDirectViewFinderL(); - } - else - { - // NOP - } - } - -// ----------------------------------------------------------------------------- -// CMccScreenDirect::Stop -// ----------------------------------------------------------------------------- -// -void CMccScreenDirect::Stop() - { - - if ( iDirectViewFinder ) - { - // TBD: pausing disabled temporarily due problems in it - //TRAP_IGNORE( iDirectViewFinder->PauseViewFinderDirectL() ) - } - - } - -// ----------------------------------------------------------------------------- -// CMccScreenDirect::SetCamera -// ----------------------------------------------------------------------------- -// -TInt CMccScreenDirect::SetCamera( CCamera* aCamera ) - { - CMccScreen::SetCamera( aCamera ); - - return HandleDirectViewFinder(); - } - -// ----------------------------------------------------------------------------- -// CMccScreenDirect::ConstructL -// ----------------------------------------------------------------------------- -// -void CMccScreenDirect::ConstructL() - { - - CMccScreen::ConstructL(); - - User::LeaveIfError( HandleDirectViewFinder() ); - - } - -// ----------------------------------------------------------------------------- -// CMccScreenDirect::CMccScreenDirect -// ----------------------------------------------------------------------------- -// -CMccScreenDirect::CMccScreenDirect( - CCamera* aCamera, - TPoint aPos, - TSize aArea, - TInt aIndex, - TInt aWindowOrdinalPosition, - TInt aWindowOrdinalPriority ) : - CMccScreen( EDirectScreen, aCamera, aPos, aArea, aIndex, - aWindowOrdinalPosition, aWindowOrdinalPriority ) - { - - } - -// ----------------------------------------------------------------------------- -// CMccScreenDirect::StartDirectViewFinderL -// ----------------------------------------------------------------------------- -// -void CMccScreenDirect::StartDirectViewFinderL() - { - if ( VfStartPossible() ) - { - // Camera may modify the size - TSize vfBitmapSize = iArea; - - TPoint point( 0, 0 ); - TRect vfRect( point, vfBitmapSize ); - iCamera->StartViewFinderDirectL( iRwSession, *iDev, *iRw, vfRect ); - } - } - -// ----------------------------------------------------------------------------- -// CMccScreenDirect::HandleDirectViewFinder -// ----------------------------------------------------------------------------- -// -TInt CMccScreenDirect::HandleDirectViewFinder() - { - TInt err( KErrNone ); - if ( iCamera ) - { - if ( !iDirectViewFinder ) - { - - iDirectViewFinder = static_cast( - iCamera->CustomInterface( TUid::Uid( KECamMCameraDirectViewFinderUidValue ) ) ); - - if ( !iDirectViewFinder ) - { - err = KErrNotSupported; - } - } - } - else if ( iDirectViewFinder ) - { - iDirectViewFinder->Release(); - iDirectViewFinder = NULL; - } - else - { - // NOP - } - return err; - } - - -// End of file -