diff -r 0e652f8f1fbd -r 24fd82631616 camerauis/cameraxui/cxengine/src/cxeenginedesktop.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraxui/cxengine/src/cxeenginedesktop.cpp Fri Jul 23 11:35:41 2010 +0300 @@ -0,0 +1,356 @@ +/* +* Copyright (c) 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 "cxeenginedesktop.h" +#include "cxecameradevicecontroldesktop.h" +#include "cxestillcapturecontroldesktop.h" +#include "cxevideocapturecontroldesktop.h" +#include "cxeviewfindercontroldesktop.h" +#include "cxefilenamegeneratordesktop.h" +#include "cxeautofocuscontroldesktop.h" +#include "cxezoomcontroldesktop.h" +#include "cxequalitypresetsdesktop.h" +#include "cxutils.h" +#include "cxesettingsimp.h" +#include "cxefeaturemanagerimp.h" +#include "cxesettingsstoredesktop.h" +#include "cxesensoreventhandlerdesktop.h" +#include "cxefilesavethreaddesktop.h" +#include "cxecameradevicedesktop.h" +#include "cxememorymonitor.h" +#include "cxegeotaggingtrail.h" + + +// Member Functions + +CxeEngineDesktop::CxeEngineDesktop() + : mCameraDeviceControl(NULL), + mViewfinderControl(NULL), + mSnapshotControl(NULL), + mStillCaptureControl(NULL), + mVideoCaptureControl(NULL), + mAutoFocusControl(NULL), + mZoomControl(NULL), + mImageDataQueue(NULL), + mSettings(NULL), + mFeatureManager(NULL), + mFilenameGenerator(NULL), + mSensorEventHandler(NULL), + mQualityPresets(NULL), + mFileSaveThread(NULL), + mCameraDevice(NULL), + mDiskMonitor(NULL), + mMemoryMonitor(NULL), + mGeoTaggingTrail(NULL) +{ + CX_DEBUG_IN_FUNCTION(); +} + + +/*! + Create all control classes and connect relevant signals +*/ +void CxeEngineDesktop::construct() +{ + CX_DEBUG_ENTER_FUNCTION(); + + createControls(); + connectSignals(); + + CX_DEBUG_EXIT_FUNCTION(); +} + + +/*! + Create all control classes +*/ +void CxeEngineDesktop::createControls() +{ + CX_DEBUG_ENTER_FUNCTION(); + + if (!mVideoCaptureControl) { + CxeCameraDeviceControlDesktop *deviceControl = + new CxeCameraDeviceControlDesktop(); + + mCameraDeviceControl = deviceControl; + + mQualityPresets = new CxeQualityPresetsDesktop(); + CX_DEBUG_ASSERT(mQualityPresets); + + CxeSettingsStoreDesktop *settingsStore = new CxeSettingsStoreDesktop(); + + //ownership of settings store transferred to the settings. + mSettings = new CxeSettingsImp(settingsStore); + + // Loading current camera mode value from settings store and updating + // devicecontrol + Cxe::CameraMode cameraMode = mSettings->get(CxeSettingIds::CAMERA_MODE, Cxe::ImageMode); + // set current camera mode to devicecontrol. + mCameraDeviceControl->setMode(cameraMode); + + static_cast(mSettings)->loadSettings(mode()); + + mFeatureManager = new CxeFeatureManagerImp(*mSettings); + + mMemoryMonitor = new CxeMemoryMonitor(*mFeatureManager); + + // sensor event handler initialization + mSensorEventHandler = new CxeSensorEventHandlerDesktop(); + + mFilenameGenerator = new CxeFilenameGeneratorDesktop(); + + mFileSaveThread = new CxeFileSaveThreadDesktop(this); + + mCameraDevice = new CxeCameraDeviceDesktop(); + + mViewfinderControl = new CxeViewfinderControlDesktop(*mCameraDevice); + + mAutoFocusControl = new CxeAutoFocusControlDesktop(); + + mStillCaptureControl = new CxeStillCaptureControlDesktop( + *mCameraDevice, *mViewfinderControl, + *mCameraDeviceControl, *mFilenameGenerator, + *mAutoFocusControl, *mFileSaveThread); + + mZoomControl = new CxeZoomControlDesktop(*mCameraDeviceControl); + + mVideoCaptureControl = new CxeVideoCaptureControlDesktop( + *mCameraDevice,*mViewfinderControl, + *mCameraDeviceControl, *mFilenameGenerator, + *mQualityPresets); + + mGeoTaggingTrail = new CxeGeoTaggingTrail(*mStillCaptureControl, + *mVideoCaptureControl, *mSettings); + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! + Connect internal signals for control classes +*/ + +void CxeEngineDesktop::connectSignals() +{ + CX_DEBUG_ENTER_FUNCTION(); + + // connecting scene setting change callbacks to ViewfinderControl + connect(mSettings, + SIGNAL(settingValueChanged(const QString&,QVariant)), + mViewfinderControl, + SLOT(handleSettingValueChanged(const QString&,QVariant))); + + connect(mSettings, + SIGNAL(sceneChanged(CxeScene&)), + mViewfinderControl, + SLOT(handleSceneChanged(CxeScene&))); + + // enabling scene setting change callbacks to Autofocus control + connect(mSettings, + SIGNAL(sceneChanged(CxeScene&)), + mAutoFocusControl, + SLOT(handleSceneChanged(CxeScene&))); + + // connecting Autofocus state change callbacks to stillcapturecontrol + connect(mAutoFocusControl, + SIGNAL(stateChanged(CxeAutoFocusControl::State, CxeError::Id)), + mStillCaptureControl, + SLOT(handleAutofocusStateChanged(CxeAutoFocusControl::State,CxeError::Id))); + + // Connect signals for ECam events + connect(mCameraDeviceControl, + SIGNAL(cameraEvent(int,int)), + mVideoCaptureControl, + SLOT(handleCameraEvent(int,int))); + + connect(mCameraDeviceControl, + SIGNAL(cameraEvent(int,int)), + mAutoFocusControl, + SLOT(handleCameraEvent(int,int))); + + // Connect signal for device ready events + connect(mCameraDeviceControl, + SIGNAL(deviceReady()), + this, + SLOT(doInit())); + + // Connect image and video init complete signals to + // CameraDeviceControl initModeComplete + connect(mStillCaptureControl, + SIGNAL(imagePrepareComplete(CxeError::Id)), + mCameraDeviceControl, + SIGNAL(initModeComplete(CxeError::Id))); + + connect(mVideoCaptureControl, + SIGNAL(videoPrepareComplete(CxeError::Id)), + mCameraDeviceControl, + SIGNAL(initModeComplete(CxeError::Id))); + + // Zoom is prepared once the image/video emits prepare zoom signals + connect(mStillCaptureControl, + SIGNAL(prepareZoomForStill(int)), + mZoomControl, + SLOT(prepareZoomForStill(int))); + + connect(mVideoCaptureControl, + SIGNAL(prepareZoomForVideo()), + mZoomControl, + SLOT(prepareZoomForVideo())); + + // connect camera device control prepare for release signal to stop location trail slot + connect(mCameraDevice, + SIGNAL(prepareForRelease()), + mGeoTaggingTrail, + SLOT(stop()), Qt::UniqueConnection); + + // init camera device control. We init the camera device control + // when all necessary engine classes are constructed. + mCameraDeviceControl->init(); + + CX_DEBUG_EXIT_FUNCTION(); +} + +CxeEngineDesktop::~CxeEngineDesktop() +{ + CX_DEBUG_ENTER_FUNCTION(); + + delete mGeoTaggingTrail; + delete mAutoFocusControl; + delete mZoomControl; + delete mStillCaptureControl; + delete mVideoCaptureControl; + delete mViewfinderControl; + delete mFilenameGenerator; + delete mMemoryMonitor; + delete mFeatureManager; + delete mSettings; + delete mCameraDeviceControl; + delete mQualityPresets; + delete mCameraDevice; + CX_DEBUG_EXIT_FUNCTION(); +} + +CxeCameraDeviceControl &CxeEngineDesktop::cameraDeviceControl() +{ + return *mCameraDeviceControl; +} + +CxeViewfinderControl &CxeEngineDesktop::viewfinderControl() +{ + return *mViewfinderControl; +} + +CxeSnapshotControl &CxeEngineDesktop::snapshotControl() +{ + return *mSnapshotControl; +} + +CxeStillCaptureControl &CxeEngineDesktop::stillCaptureControl() +{ + return *mStillCaptureControl; +} + +CxeVideoCaptureControl &CxeEngineDesktop::videoCaptureControl() +{ + return *mVideoCaptureControl; +} + +CxeAutoFocusControl &CxeEngineDesktop::autoFocusControl() +{ + return *mAutoFocusControl; +} + +CxeZoomControl &CxeEngineDesktop::zoomControl() +{ + return *mZoomControl; +} + +// Get the settings handle +CxeSettings &CxeEngineDesktop::settings() +{ + return *mSettings; +} + +CxeFeatureManager& CxeEngineDesktop::featureManager() +{ + return *mFeatureManager; +} + +/* +* Returns true, if the engine is ready or else false. +*/ +bool CxeEngineDesktop::isEngineReady() +{ + bool ready = true; + return ready; +} + +/*! +* Get memory monitor utility handle. +*/ +CxeMemoryMonitor &CxeEngineDesktop::memoryMonitor() +{ + return *mMemoryMonitor; +} + +/*! + * Get geotaggingtrail handle + */ +CxeGeoTaggingTrail &CxeEngineDesktop::geoTaggingTrail() +{ + return *mGeoTaggingTrail; +} + +Cxe::CameraMode CxeEngineDesktop::mode() const +{ + return mCameraDeviceControl->mode(); +} + +/*! + * Set camera mode. + */ +void CxeEngineDesktop::setMode(Cxe::CameraMode mode) +{ + CX_DEBUG_ENTER_FUNCTION(); + mCameraDeviceControl->setMode(mode); + CX_DEBUG_EXIT_FUNCTION(); +} + +void CxeEngineDesktop::initMode(Cxe::CameraMode cameraMode) +{ + CX_DEBUG_ENTER_FUNCTION(); + + mCameraDeviceControl->setMode(cameraMode); + + // load settings whenever we change mode or start camera or switch camera + CxeSettingsImp *settingsImp = qobject_cast(mSettings); + if (settingsImp) { + settingsImp->loadSettings(mode()); + } + + if (cameraMode == Cxe::ImageMode) { + mVideoCaptureControl->deinit(); + mStillCaptureControl->init(); + } else { + mStillCaptureControl->deinit(); + mVideoCaptureControl->init(); + } + mFilenameGenerator->init(cameraMode); + + CX_DEBUG_EXIT_FUNCTION(); +} + +// End of file