--- 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 <bitstd.h>
-#include <ecam.h>
-#include <ecam/mcameradirectviewfinder.h>
-#include <coecntrl.h>
-#include <eikenv.h>
-#include <eikappui.h>
-#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<MCameraDirectViewFinder*>(
- iCamera->CustomInterface( TUid::Uid( KECamMCameraDirectViewFinderUidValue ) ) );
-
- if ( !iDirectViewFinder )
- {
- err = KErrNotSupported;
- }
- }
- }
- else if ( iDirectViewFinder )
- {
- iDirectViewFinder->Release();
- iDirectViewFinder = NULL;
- }
- else
- {
- // NOP
- }
- return err;
- }
-
-
-// End of file
-