camerauis/cameraxui/cxengine/src/cxecameradevicecontrolsymbian.cpp
branchRCL_3
changeset 24 bac7acad7cb3
parent 23 61bc0f252b2b
child 25 2c87b2808fd7
--- a/camerauis/cameraxui/cxengine/src/cxecameradevicecontrolsymbian.cpp	Tue Aug 31 15:03:46 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,345 +0,0 @@
-/*
-* Copyright (c) 2009-2010 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 "cxecameradevicecontrolsymbian.h"
-#include "cxesettingsimp.h"
-#include "cxefeaturemanagerimp.h"
-#include "cxutils.h"
-#include "cxenamespace.h"
-#include "cxeerrormappingsymbian.h"
-#include "cxestate.h"
-
-#include "OstTraceDefinitions.h"
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include "cxecameradevicecontrolsymbianTraces.h"
-#endif
-
-
-
-CxeCameraDeviceControlSymbian::CxeCameraDeviceControlSymbian()
-    : CxeStateMachine("CxeCameraDeviceControlSymbian"),
-    mCameraDevice(NULL),
-    mCameraIndex(Cxe::PrimaryCameraIndex),
-    mCameraMode(Cxe::ImageMode)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-#ifdef FORCE_SECONDARY_CAMERA
-    mCameraIndex = Cxe::SecondaryCameraIndex;
-#endif
-    qRegisterMetaType<CxeCameraDeviceControl::State>();
-    initializeStates();
-
-    mCameraDevice = new CxeCameraDevice();
-
-    //!@todo Temporary delay before reserving camera to avoid timing issues
-    connect(&mReserveTimer, SIGNAL(timeout()), this, SLOT(doReserve()));
-    mReserveTimer.setSingleShot(true);
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-CxeCameraDeviceControlSymbian::~CxeCameraDeviceControlSymbian()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // release current camera
-    releaseCurrentCamera();
-
-    delete mCameraDevice;
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxeCameraDeviceControlSymbian::init()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    CxeError::Id err = mCameraDevice->newCamera(mCameraIndex, this);
-
-    if (err) {
-        emit initModeComplete(err);
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxeCameraDeviceControlSymbian::reserve()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    CX_ASSERT_ALWAYS(mCameraDevice);
-
-    if (state() == Idle) {
-        setState(Initializing);
-        //!@todo Temporary delay before reserving camera to avoid timing issues
-        mReserveTimer.start(2000);
-        OstTrace0(camerax_performance, CXECAMERADEVICECONTROLSYMBIAN_RESERVE, "msg: e_CX_RESERVE 1");
-        CX_DEBUG(("HACK: Waiting for 2000ms before really doing reserve()"));
-    } else if (state() == PendingRelease) {
-        // if we get a reserve request and if there is a pending release
-        // it is just fine to continue the init operation.
-        setState(Initializing);
-    } else {
-        // nothing to do
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxeCameraDeviceControlSymbian::doReserve()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    CX_ASSERT_ALWAYS(mCameraDevice);
-    mCameraDevice->reserveCamera();
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-void CxeCameraDeviceControlSymbian::powerOn()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    CX_DEBUG_ASSERT(mCameraDevice && mCameraDevice->camera());
-    if (state() == Initializing) {
-        mCameraDevice->camera()->PowerOn();
-        OstTrace0(camerax_performance, CXECAMERADEVICECONTROLSYMBIAN_POWERON, "msg: e_CX_POWER_ON 1");
-    }
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxeCameraDeviceControlSymbian::HandleEvent(const TECAMEvent &aEvent)
-{
-    doHandleEvent( aEvent );
-    emit cameraEvent( aEvent.iEventType.iUid, aEvent.iErrorCode );
-}
-
-void CxeCameraDeviceControlSymbian::doHandleEvent(const TECAMEvent &aEvent)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    CX_DEBUG(("Cxe: event 0x%08x, %d", aEvent.iEventType.iUid, aEvent.iErrorCode));
-
-    if(aEvent.iEventType == KUidECamEventReserveComplete) {
-        handleReserveComplete(aEvent.iErrorCode);
-    }
-    else if(aEvent.iEventType == KUidECamEventPowerOnComplete) {
-        handlePowerOnComplete(aEvent.iErrorCode);
-    }
-    else if(aEvent.iEventType == KUidECamEventCameraNoLongerReserved)
-        {
-        handleNoLongerReserved(aEvent.iErrorCode);
-        }
-    else
-        {
-        // We don't care about this event -- ignore
-        }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxeCameraDeviceControlSymbian::handleReserveComplete(int error)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    OstTrace0( camerax_performance, CXECAMERADEVICECONTROLSYMBIAN_HANDLERESERVECOMPLETE, "msg: e_CX_RESERVE 0" );
-
-    if(state() == PendingRelease) {
-        release();
-    } else {
-        if (!error) {
-            powerOn();
-        } else {
-            emit initModeComplete(CxeErrorHandlingSymbian::map(error));
-            setState(Idle);
-        }
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxeCameraDeviceControlSymbian::handlePowerOnComplete(int error)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    OstTrace0(camerax_performance, CXECAMERADEVICECONTROLSYMBIAN_HANDLEPOWERONCOMPLETE, "msg: e_CX_POWER_ON 0");
-
-    if(state() == PendingRelease) {
-        release();
-    } else {
-        if (!error) {
-            setState(Ready);
-            emit deviceReady(); // this will trigger prepare for either still or video mode
-        } else {
-            setState(PendingRelease);
-            release();
-            emit initModeComplete(CxeErrorHandlingSymbian::map(error));
-        }
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxeCameraDeviceControlSymbian::handleNoLongerReserved(int /* error */)
-{
-    setState( Idle );
-    //! @todo: handle cases where camera is lost
-}
-
-
-/*
-* switch between camera <-> primary <-> secondary
-*/
-
-CxeError::Id CxeCameraDeviceControlSymbian::switchCamera(Cxe::CameraIndex cameraIndex)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-#ifdef FORCE_SECONDARY_CAMERA
-    // 2nd camera forced use, make us believe camera never needs to be swithed.
-    CX_DEBUG(("CxeCameraDeviceControlSymbian::switchCamera() second camera forced, skip switch"));
-    cameraIndex = mCameraIndex;
-#endif
-
-    // during mode change, we have to re-create camera reference and release resources.
-    // in all other cases if the camera indexes are same, it means that camera reference
-    // is already created and hence we can return immediately.
-    if (cameraIndex == mCameraIndex) {
-        CX_DEBUG_EXIT_FUNCTION();
-        return CxeError::None;
-    }
-
-    releaseCurrentCamera();
-
-    CxeError::Id err = mCameraDevice->newCamera(cameraIndex, this);
-
-    if (err == CxeError::None){
-        // CCamera object created, so make sure that appropriate index is used
-        mCameraIndex = cameraIndex;
-    }
-
-    if (!err) { // if there is no error creating new camera, then start Reserve
-        reserve();
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-    return err;
-}
-
-void CxeCameraDeviceControlSymbian::release()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    //!@todo Temporary delay before reserving camera to avoid timing issues
-    if (mReserveTimer.isActive()) {
-        // release() was called when the timer was active
-        mReserveTimer.stop();
-        mCameraDevice->releaseCamera();
-        setState(Idle);
-        CX_DEBUG_EXIT_FUNCTION();
-        return;
-    }
-
-    if (state() == Idle) {
-        // nothing to do
-        return;
-    }
-
-    if (state() == Initializing) {
-        setState(PendingRelease);
-    } else {
-        mCameraDevice->releaseCamera();
-        setState(Idle);
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*
-* Release resources w.r.t current camera
-*/
-void CxeCameraDeviceControlSymbian::releaseCurrentCamera()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    release();
-    // delete old camera instance, this will inturn generates "prepareForCameraDelete" event
-    // across all interested classes which wants to do cleanup for new camera reference change
-    mCameraDevice->deleteCamera();
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxeCameraDeviceControlSymbian::ViewFinderReady(MCameraBuffer &aCameraBuffer, TInt aError)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    emit vfFrameReady(&aCameraBuffer, aError);
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxeCameraDeviceControlSymbian::ImageBufferReady(MCameraBuffer& aCameraBuffer, TInt aError)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    emit imageBufferReady( &aCameraBuffer, aError );
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxeCameraDeviceControlSymbian::VideoBufferReady(MCameraBuffer &/*aCameraBuffer*/, TInt /*aError*/)
-{
-    CX_DEBUG_IN_FUNCTION();
-}
-
-Cxe::CameraIndex CxeCameraDeviceControlSymbian::cameraIndex() const
-{
-    return mCameraIndex;
-}
-
-Cxe::CameraMode CxeCameraDeviceControlSymbian::mode() const
-{
-    return mCameraMode;
-}
-
-void CxeCameraDeviceControlSymbian::setMode(Cxe::CameraMode mode)
-{
-    mCameraMode = mode;
-}
-
-CxeCameraDeviceControl::State CxeCameraDeviceControlSymbian::state() const
-{
-    return static_cast<State>(stateId());
-}
-
-void CxeCameraDeviceControlSymbian::handleStateChanged(int newStateId, CxeError::Id error)
-{
-    emit stateChanged(static_cast<State>(newStateId), error);
-}
-
-void CxeCameraDeviceControlSymbian::initializeStates()
-{
-    // addState( id, name, allowed next states )
-    addState(new CxeState( Idle , "Idle", Initializing));
-    addState(new CxeState( Initializing, "Initializing", PendingRelease | Ready | Idle));
-    addState(new CxeState( Ready, "Ready", Idle));
-    addState(new CxeState( PendingRelease, "PendingRelease", Initializing | Idle));
-
-    setInitialState(Idle);
-}
-
-CxeCameraDevice *CxeCameraDeviceControlSymbian::cameraDevice()
-{
-    return mCameraDevice;
-}
-
-// end of file