camerauis/cameraxui/cxengine/src/cxeviewfindercontrolsymbian.cpp
branchRCL_3
changeset 24 bac7acad7cb3
parent 23 61bc0f252b2b
child 25 2c87b2808fd7
--- a/camerauis/cameraxui/cxengine/src/cxeviewfindercontrolsymbian.cpp	Tue Aug 31 15:03:46 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,424 +0,0 @@
-/*
-* Copyright (c) 2009 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 <w32std.h> // RWindow, RWsSession.
-#include <coemain.h> // CCoeEnv
-#include <coecntrl.h>
-#include <ecam/ecamdirectviewfinder.h>
-#include "cxutils.h"
-#include "cxecameradevicecontrolsymbian.h" // CxeCameraDevice
-#include "cxeviewfindercontrolsymbian.h"
-#include "cxesettings.h"
-#include "cxesettingsmappersymbian.h"
-#include "cxeerrormappingsymbian.h"
-#include "cxestate.h"
-#include "cxevideocontainer.h"
-#include "OstTraceDefinitions.h"
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include "cxeviewfindercontrolsymbianTraces.h"
-#endif
-
-
-
-/**
-* CxeViewfinderControlSymbian::CxeViewfinderControlSymbian
-*/
-CxeViewfinderControlSymbian::CxeViewfinderControlSymbian( CxeCameraDevice &cameraDevice,
-        CxeCameraDeviceControl &cameraDeviceControl )
-    : CxeStateMachine("CxeViewfinderControlSymbian"),
-      mCameraDevice( cameraDevice ),
-      mCameraDeviceControl( cameraDeviceControl ),
-      mUiWindow(NULL),
-      mVideoWindow(NULL),
-      mVideoContainer(NULL),
-      mDirectViewfinder( NULL ),
-      mDirectViewfinderInUse( true )
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    qRegisterMetaType<CxeViewfinderControlSymbian::State>();
-    initializeStates();
-
-    // connect signals from cameraDevice, so we recieve events when camera reference changes
-    connect(&mCameraDevice, SIGNAL(prepareForCameraDelete()),
-            this,SLOT(prepareForCameraDelete()));
-
-    connect(&mCameraDevice, SIGNAL(prepareForRelease()),
-            this,SLOT(prepareForRelease()));
-
-    connect(&mCameraDevice, SIGNAL(cameraAllocated(CxeError::Id)),
-            this,SLOT(handleCameraAllocated(CxeError::Id)));
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-
-/**
-* CxeViewfinderControlSymbian::~CxeViewfinderControlSymbian()
-*/
-CxeViewfinderControlSymbian::~CxeViewfinderControlSymbian()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // do something
-    stop(); // stop the vf
-    releaseCurrentViewfinder(); // release resoruces
-
-    delete mVideoContainer;
-    mUiWindow = NULL;
-    mVideoWindow = NULL;
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-
-
-/**
-* CxeViewfinderControlSymbian::setWindow
-*/
-void CxeViewfinderControlSymbian::setWindow(WId windowId)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    mUiWindow = static_cast<CCoeControl*>(windowId)->DrawableWindow();
-
-    CX_DEBUG(("mUiWindow is 0x%08x", mUiWindow));
-    TSize windowSize = mUiWindow->Size();
-
-    CX_DEBUG(("mUiWindow size %dx%d", windowSize.iWidth, windowSize.iHeight));
-
-    // Set the window rect
-    TPoint point = TPoint(0,0);
-    mWindowRect = TRect(point, windowSize);
-
-    CX_DEBUG(("CxeViewfinderControlSymbian::setWindow() mWindowRect iTl=(%d, %d) iBr=(%d, %d)",
-              mWindowRect.iTl.iX, mWindowRect.iTl.iY, mWindowRect.iBr.iX, mWindowRect.iBr.iY));
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* Returns Device's Display resolution
-*/
-QSize CxeViewfinderControlSymbian::deviceDisplayResolution() const
-{
-    TSize windowSize(640, 360); // magic: default size if mUiWindow is NULL
-
-    if (mUiWindow) {
-        windowSize = mUiWindow->Size();
-    }
-
-    QSize displaySize = QSize(windowSize.iWidth, windowSize.iHeight);
-
-    if (displaySize.height() > displaySize.width()) {
-        // Window server orientation might differ from the Orbit UI orientation.
-        // Swap width and height if needed.
-        displaySize.transpose();
-    }
-
-    CX_DEBUG(("deviceDisplayResolution returning %dx%d", displaySize.width(),
-                                                         displaySize.height()));
-
-    return displaySize;
-}
-
-
-/**
-* Stop viewfinder
-*/
-void CxeViewfinderControlSymbian::stop()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() == Running) {
-        CX_DEBUG_ASSERT( mCameraDevice.camera() );
-        CX_DEBUG( ( "Viewfinder is running stopping it" ) );
-        mCameraDevice.camera()->StopViewFinder();
-        setState( Ready );
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/**!
-* Start the viewfinder
-*/
-CxeError::Id CxeViewfinderControlSymbian::start()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_START_1, "msg: e_CX_VIEWFINDER_START 1");
-
-    TInt err = KErrNone;
-
-    if ( state() == Running ) {
-        CX_DEBUG( ( "Viewfinder already running - ignored start()" ) );
-        CX_DEBUG_EXIT_FUNCTION();
-        return CxeError::None;
-    }
-
-    if (!mVideoWindow) {
-        TRAP(err, createViewfinderWindowL());
-        if (err != KErrNone) {
-            CX_DEBUG_EXIT_FUNCTION();
-            return CxeErrorHandlingSymbian::map(err);
-        }
-    }
-
-    if (state() == Uninitialized) {
-        err = initViewfinder();
-    }
-
-    // apply any settings here
-    if ( mDirectViewfinderInUse && !err && mDirectViewfinder && state() == Ready ) {
-
-        // for now only direct vf
-        switch( mDirectViewfinder->ViewFinderState() ) {
-        case CCamera::CCameraDirectViewFinder::EViewFinderInActive:
-            {
-            CX_DEBUG(("Calling StartViewFinderDirectL"));
-
-            // Make UI surface transparent so viewfinder is visible
-            if (mUiWindow) {
-                mUiWindow->SetSurfaceTransparency(ETrue);
-            }
-
-            // A local copy of the viewfinder coordinates (in WServ
-            // coordinates). Needed because calling StartViewFinderDirectL()
-            // will modify the rectangle and we don't want mWindowRect to be
-            // modified.
-            TRect activeViewfinderRect = mWindowRect;
-
-            CX_DEBUG(("activeViewfinderRect iTl=(%d, %d) iBr=(%d, %d)",
-                activeViewfinderRect.iTl.iX, activeViewfinderRect.iTl.iY,
-                activeViewfinderRect.iBr.iX, activeViewfinderRect.iBr.iY));
-
-            TRAP(err, mCameraDevice.camera()->StartViewFinderDirectL(
-                CCoeEnv::Static()->WsSession(),
-                *CCoeEnv::Static()->ScreenDevice(),
-                *mVideoWindow, activeViewfinderRect));
-            OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_STARTUP, "msg: e_CX_STARTUP 0");
-            setState(Running);
-            break;
-            }
-        case CCamera::CCameraDirectViewFinder::EViewFinderPause:
-            TRAP( err, mDirectViewfinder->ResumeViewFinderDirectL() );
-            if (!err) {
-                setState( Running );
-            }
-            break;
-        case CCamera::CCameraDirectViewFinder::EViewFinderActive:
-            // Already running. Not considered as error.
-            setState( Running );
-            break;
-        default:
-            err = KErrNotSupported;
-        }
-    }
-    else if ( !mDirectViewfinder ) {
-        // Start bmp vf
-        //TSize size(320, 240);
-        TSize size(mWindowRect.Width(), mWindowRect.Height());
-        CX_DEBUG(("Starting bitmap vf with size %d x %d", size.iWidth, size.iHeight));
-        TRAP( err, mCameraDevice.camera()->StartViewFinderBitmapsL( size ) );
-        CX_DEBUG(("Bitmap viewfinder modified to size %d x %d", size.iWidth, size.iHeight));
-        if ( err ) {
-            CX_DEBUG( ("StartViewfinderBitmapsL - err:%d", err) );
-        }
-        else {
-            setState( Running );
-            TRAP( err, mCameraDevice.camera()->SetViewFinderMirrorL(true) );
-        }
-    }
-    else {
-        // vf already running. nothing to do
-    }
-
-    OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_START_2, "msg: e_CX_VIEWFINDER_START 0");
-    CX_DEBUG_EXIT_FUNCTION();
-    return CxeErrorHandlingSymbian::map(err);
-}
-
-
-/**
-* Intialize the viewfinder based on the VF mode
-*/
-int CxeViewfinderControlSymbian::initViewfinder()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_INIT_1, "msg: e_CX_VIEWFINDER_INIT 1");
-
-    TInt err = KErrNone;
-    if (state() != Uninitialized) {
-        return err;
-    }
-
-    // For now only direct vf. If there is any need for supporting other VF modes, condition checks
-    // and handling of new states are needed here.
-
-    // release first, the prev/current view finder instance.
-    releaseCurrentViewfinder();
-
-    mDirectViewfinderInUse = true;
-    /*
-    if ( mCameraDeviceControl.cameraIndex() == Cxe::PrimaryCameraIndex ) {
-        mDirectViewfinderInUse = true;
-    }
-    else {
-        mDirectViewfinderInUse = false;
-    }*/
-
-    if ( mDirectViewfinderInUse ) {
-        // creating an new instance of vf
-        TRAP( err, mDirectViewfinder = CCamera::CCameraDirectViewFinder::NewL( *mCameraDevice.camera() ) );
-    }
-
-    if ( !err ) {
-        setState( Ready );
-    }
-    else {
-        CX_DEBUG( ("error: %d", err ) );
-    }
-
-#if defined(CXE_USE_DUMMY_CAMERA) || defined(__WINSCW__)
-    //! @todo Temporary code for WINSCW, because CCamera::CCameraDirectViewFinder is not yet supported by dummy engine
-    setState( Ready );
-#endif
-
-    OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_INIT_2, "msg: e_CX_VIEWFINDER_INIT 0");
-    CX_DEBUG_EXIT_FUNCTION();
-    return err;
-}
-
-
-/**
-* Create the window for viewfinder to render into.
-*/
-void CxeViewfinderControlSymbian::createViewfinderWindowL()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_CREATE_WINDOW_1, "msg: e_CX_VIEWFINDER_CREATE_WINDOW 1");
-
-    if (!mUiWindow) {
-        CX_DEBUG( ( "mUiWindow not set - cannot create VF window!" ) );
-        User::Leave(KErrNotReady);
-    }
-
-    // Make UI surface transparent so viewfinder is visible
-    if (mUiWindow) {
-        mUiWindow->SetSurfaceTransparency(ETrue);
-    }
-
-    delete mVideoContainer;
-    mVideoContainer = NULL;
-    mVideoContainer = new (ELeave) CxeVideoContainer();
-    mVideoContainer->ConstructL();
-    CX_DEBUG(("Viewfinder container created ok"));
-
-    mVideoContainer->SetRect(mWindowRect);
-    mVideoWindow = mVideoContainer->DrawableWindow();
-    CX_DEBUG(("mVideoWindow is 0x%08x", mVideoWindow));
-    CX_DEBUG(("mUiWindow ordinal position is: %d", mUiWindow->OrdinalPosition()));
-
-    // Make sure UI window is on top of viewfinder
-    CX_DEBUG(("Set viewfinder window ordinal.."));
-    mVideoWindow->SetOrdinalPosition(-1);
-    mUiWindow->SetOrdinalPosition(0);
-
-    CX_DEBUG(("mVideoWindow ordinal position is: %d", mVideoWindow->OrdinalPosition()));
-    CX_DEBUG(("mUiWindow ordinal position is: %d", mUiWindow->OrdinalPosition()));
-
-    OstTrace0(camerax_performance, CXEVIEWFINDERCONTROL_CREATE_WINDOW_2, "msg: e_CX_VIEWFINDER_CREATE_WINDOW 0");
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-void CxeViewfinderControlSymbian::prepareForRelease()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    stop();
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/**
-* Release Vf resources
-*/
-void CxeViewfinderControlSymbian::releaseCurrentViewfinder()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    delete mDirectViewfinder;
-    mDirectViewfinder = NULL;
-    setState( Uninitialized );
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/**
-* Ecam reference changing, release resources
-*/
-void CxeViewfinderControlSymbian::prepareForCameraDelete()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    stop(); // first stop the viewfinder
-    releaseCurrentViewfinder();
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/**
-* Handle new camera instance.
-*/
-void CxeViewfinderControlSymbian::handleCameraAllocated(CxeError::Id error)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    if (!error) {
-        initViewfinder();
-    }
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-CxeViewfinderControl::State CxeViewfinderControlSymbian::state() const
-{
-    return static_cast<State>( stateId() );
-}
-
-void CxeViewfinderControlSymbian::handleStateChanged( int newStateId, CxeError::Id error )
-{
-    emit stateChanged( static_cast<State>( newStateId ), error );
-}
-
-void CxeViewfinderControlSymbian::initializeStates()
-{
-    // addState( id, name, allowed next states )
-    addState( new CxeState( Uninitialized , "Uninitialized", Ready ) );
-    addState( new CxeState( Ready , "Ready", Uninitialized | Running ) );
-    addState( new CxeState( Running , "Running", Uninitialized | Ready ) );
-
-    setInitialState( Uninitialized );
-}
-
-void CxeViewfinderControlSymbian::handleVfFrame(MCameraBuffer* /*buffer*/, int /*error*/)
-{
-    CX_DEBUG_IN_FUNCTION();
-    CX_DEBUG( ( "Bitmap viewfinder not supported" ) );
-    CX_ASSERT_ALWAYS(false);
-}
-
-// end of file