--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/tsrc/cxuifakeengine.cpp Tue Aug 31 15:03:46 2010 +0300
@@ -0,0 +1,338 @@
+/*
+* 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 "cxuifakeengine.h" // CxeEngineSymbian
+#include "cxecameradevicecontrolsymbian.h" // CxeCameraDeviceControlSymbian
+#include "cxuifakestillcapturecontrol.h"
+#include "cxevideocapturecontrolsymbian.h"
+#include "cxestillcapturecontrolsymbian.h"
+#include "cxuifakeviewfindercontrol.h"
+#include "cxezoomcontrolsymbian.h"
+#include "cxutils.h"
+#include "cxesettingsimp.h"
+#include "cxefeaturemanagerimp.h"
+#include "cxesettingsmodel.h"
+#include "cxesoundplayersymbian.h"
+#include "cxuifakeautofocuscontrol.h"
+
+// Member Functions
+
+CxuiFakeEngine::CxuiFakeEngine()
+ : mViewfinderControl( NULL ),
+ mFakeStillCaptureControl( NULL ),
+ mVideoCaptureControl( NULL ),
+ mZoomControl( NULL ),
+ mSettings( NULL )
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ // Create all control classes
+ mFakeCameraDeviceControl = new CxuiFakeCameraDeviceControl();
+
+ CxeCameraDevice* cameraDevice = mFakeCameraDeviceControl->cameraDevice();
+
+ mSettingsModel = new CxeSettingsModel();
+ mSettings = new CxeSettingsImp(*mSettingsModel);
+ mFeatureManager = new CxeFeatureManagerImp(*mSettingsModel);
+ mSoundPlayer = new CxeSoundPlayerSymbian(*mFakeCameraDeviceControl);
+ mFilenameGenerator = new CxeFilenameGeneratorSymbian(*mSettings, mode());
+
+ mViewfinderControl = new CxuiFakeViewfinderControl(*cameraDevice, *mFakeCameraDeviceControl);
+
+ mFakeStillCaptureControl = new CxuiFakeStillCaptureControl(
+ *cameraDevice,
+ *mViewfinderControl,
+ *mFakeCameraDeviceControl,
+ *mSoundPlayer,
+ *mFilenameGenerator);
+
+ mFakeAutoFocusControl = new CxuiFakeAutoFocusControl(*cameraDevice);
+
+ mVideoCaptureControl = new CxeVideoCaptureControlSymbian(
+ *cameraDevice,
+ *mViewfinderControl,
+ *mFakeCameraDeviceControl,
+ *mSoundPlayer,
+ *mFilenameGenerator);
+
+ // connecting camera mode changes to updating capture sounds
+ connect(mFakeCameraDeviceControl, SIGNAL(initModeComplete(CxeError::Id)),
+ mSoundPlayer, SLOT(updateCaptureSound()));
+
+ // 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 stillcapturecontrol
+ connect(mSettings, SIGNAL(settingValueChanged(const QString&,QVariant)),
+ mFakeStillCaptureControl, SLOT(handleSettingValueChanged(const QString&,QVariant)));
+
+ connect(mSettings, SIGNAL(sceneChanged(CxeScene&)),
+ mFakeStillCaptureControl, SLOT(handleSceneChanged(CxeScene&)));
+
+ // enabling scene setting change callbacks to videocapturecontrol
+ connect(mSettings, SIGNAL(settingValueChanged(const QString&,QVariant)),
+ mVideoCaptureControl, SLOT(handleSettingValueChanged(const QString&,QVariant)));
+
+ connect(mSettings, SIGNAL(sceneChanged(CxeScene&)),
+ mVideoCaptureControl, SLOT(handleSceneChanged(CxeScene&)));
+
+
+ // enabling callbacks to Autofocus control
+ connect(mSettings, SIGNAL(sceneChanged(CxeScene&)),
+ mFakeAutoFocusControl, SLOT(handleSceneChanged(CxeScene&)) );
+
+ // Connect signals for ECam events
+ // TJ
+ connect( mFakeCameraDeviceControl, SIGNAL(cameraEvent(int,int)),
+ mFakeStillCaptureControl, SLOT(handleCameraEvent(int,int)) );
+ connect( mFakeCameraDeviceControl, SIGNAL(cameraEvent(int,int)),
+ mVideoCaptureControl, SLOT(handleCameraEvent(int,int)) );
+ connect( mFakeCameraDeviceControl, SIGNAL(cameraEvent(int,int)),
+ mFakeAutoFocusControl, SLOT(handleCameraEvent(int,int)) );
+
+ // Connect signal for device ready events
+ connect( mFakeCameraDeviceControl, SIGNAL(deviceReady()),
+ this, SLOT(doInit()) );
+
+ // Connect ECam image buffer ready event
+ connect( mFakeCameraDeviceControl, SIGNAL(imageBufferReady(MCameraBuffer*,int)),
+ mFakeStillCaptureControl, SLOT(handleImageData(MCameraBuffer*,int)) );
+
+ // Connect ECam VF frame ready event
+ connect( mFakeCameraDeviceControl, SIGNAL(vfFrameReady(MCameraBuffer*,int)),
+ mViewfinderControl, SLOT(handleVfFrame(MCameraBuffer*,int)) );
+
+ // Connect image and video init complete signals to CameraDeviceControl initModeComplete
+ connect(mFakeStillCaptureControl, SIGNAL(imagePrepareComplete(CxeError::Id)),
+ mFakeCameraDeviceControl, SIGNAL(initModeComplete(CxeError::Id)) );
+
+ connect(mVideoCaptureControl, SIGNAL(videoPrepareComplete(CxeError::Id)),
+ mFakeCameraDeviceControl, SIGNAL(initModeComplete(CxeError::Id)) );
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+CxuiFakeEngine::~CxuiFakeEngine()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ delete mViewfinderControl;
+ delete mZoomControl;
+ delete mVideoCaptureControl;
+ delete mSoundPlayer;
+ delete mFilenameGenerator;
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+CxeCameraDeviceControl &CxuiFakeEngine::cameraDeviceControl()
+{
+ return *mFakeCameraDeviceControl;
+}
+
+CxeViewfinderControl &CxuiFakeEngine::viewfinderControl()
+{
+ return *mViewfinderControl;
+}
+
+CxeStillCaptureControlSymbian &CxuiFakeEngine::stillCaptureControl()
+{
+ return *mFakeStillCaptureControl;
+}
+
+CxeVideoCaptureControlSymbian &CxuiFakeEngine::videoCaptureControl()
+{
+ return *mVideoCaptureControl;
+}
+
+CxeAutoFocusControlSymbian &CxuiFakeEngine::autoFocusControl()
+{
+ return *mFakeAutoFocusControl;
+}
+
+CxeZoomControlSymbian &CxuiFakeEngine::zoomControl()
+{
+ return *mZoomControl;
+}
+
+// Get the settings handle
+CxeSettings &CxuiFakeEngine::settings()
+{
+ return *mSettings;
+}
+
+CxeFeatureManager& CxuiFakeEngine::featureManager()
+{
+ return *mFeatureManager;
+}
+
+void CxuiFakeEngine::doInit()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ // load settings whenever we change mode or start camera or switch camera
+ //static_cast<CxeSettingsImp*>(mSettings)->loadSettings(mode());
+ mFilenameGenerator->init(mode());
+
+ if ( mode() == Cxe::ImageMode ) {
+ mFakeStillCaptureControl->init();
+ } else if ( mode() == Cxe::VideoMode ) {
+ mFakeStillCaptureControl->deinit();
+ mVideoCaptureControl->init();
+ }
+}
+
+Cxe::CameraMode CxuiFakeEngine::mode() const
+{
+ return mFakeCameraDeviceControl->mode();
+}
+
+void CxuiFakeEngine::initModeFake(Cxe::CameraMode cameraMode)
+{
+ mFakeCameraDeviceControl->setMode( cameraMode );
+ if( cameraMode == Cxe::ImageMode) {
+ mFakeStillCaptureControl->setFakeState(CxeStillCaptureControl::Ready);
+ }
+
+}
+
+void CxuiFakeEngine::initMode(Cxe::CameraMode cameraMode)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mode() == cameraMode) {
+ CX_DEBUG(("initMode() called for current mode"));
+
+ // We're already in the requested mode. However, it is possible
+ // that we need to reserve and power on camera and/or prepare
+ // the capture control.
+ if (reserveNeeded()) {
+ // Camera needs to be reserved. Initialization will continue
+ // when we get the deviceReady() signal.
+ CX_DEBUG(("initMode() - calling reserve()"));
+ mFakeCameraDeviceControl->reserve();
+ } else if (initNeeded()) {
+ // Camera is reserved and ready, but we need to prepare still image control or
+ // video capture control
+ CX_DEBUG(("initMode() - calling doInit()"));
+ doInit();
+ } else if (startViewfinderNeeded()) {
+ // Everything is ready and prepared, but we viewfinder is not yet running
+ CX_DEBUG(("initMode() - calling viewfinder start()"));
+ mViewfinderControl->start();
+ } else {
+ CX_DEBUG(("initMode() - no actions needed"));
+ // Do nothing.
+ // We are either already ready to capture or the we're pending
+ // on prepare complete callback.
+ }
+ } else {
+ CX_DEBUG(("initMode() called for mode switch"));
+
+ // Mode switch
+ mFakeCameraDeviceControl->setMode(cameraMode);
+
+ if (reserveNeeded()) {
+ CX_DEBUG(("initMode() - calling reserve()"));
+ mFakeCameraDeviceControl->reserve();
+ } else if ( mFakeCameraDeviceControl->state() == CxeCameraDeviceControl::Ready ) {
+ CX_DEBUG(("initMode() - calling doInit()"));
+ // Camera device is ready... we only need to prepare video or still
+ // capture control, depending on current mode.
+ doInit();
+ } else {
+ CX_DEBUG(("initMode() - no actions needed"));
+ // Do nothing.
+ // Camera device control is in Initializing state. Initialization will continue
+ // when we get the deviceReady() callback.
+ }
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+bool CxuiFakeEngine::initNeeded()
+{
+ bool result = false;
+
+ if (mode() == Cxe::ImageMode &&
+ mFakeCameraDeviceControl->state() == CxeCameraDeviceControl::Ready &&
+ mFakeStillCaptureControl->state() == CxeStillCaptureControl::Uninitialized) {
+ // We're in still image mode, camera is reserved and ready, but
+ // we need to prepare still image control
+ result = true;
+ } else if (mode() == Cxe::VideoMode &&
+ mFakeCameraDeviceControl->state() == CxeCameraDeviceControl::Ready) {
+ if (mVideoCaptureControl->state() == CxeVideoCaptureControl::Open ||
+ mVideoCaptureControl->state() == CxeVideoCaptureControl::Idle) {
+ // We're in video mode, camera is reserved and ready, but
+ // we need to open and prepare video recorder.
+ result = true;
+ }
+ }
+
+ return result;
+}
+
+bool CxuiFakeEngine::startViewfinderNeeded()
+{
+ bool result = false;
+
+ if (mViewfinderControl->state() != CxeViewfinderControl::Running) {
+ if (mode() == Cxe::ImageMode &&
+ mFakeStillCaptureControl->state() == CxeStillCaptureControl::Ready) {
+ // We're in still image mode and ready for capturing... we just need to
+ // start viewfinder.
+ result = true;
+ } else if (mode() == Cxe::VideoMode &&
+ mVideoCaptureControl->state() == CxeVideoCaptureControl::Ready) {
+ // We're in video mode and ready for capturing... we just need to
+ // start viewfinder.
+ result = true;
+ }
+ }
+
+ return result;
+}
+
+bool CxuiFakeEngine::reserveNeeded()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ // If camera device control is in Idle state, we need to call reserve()
+ return (mFakeCameraDeviceControl->state() == CxeCameraDeviceControl::Idle);
+}
+
+// This should be the only exported method
+CxuiFakeEngine *CxuiFakeEngine::createFakeEngine()
+ {
+ CX_DEBUG_ENTER_FUNCTION();
+
+ CxuiFakeEngine* res = new CxuiFakeEngine();
+
+ CX_DEBUG_EXIT_FUNCTION();
+ return res;
+ }
+
+
+CxuiFakeStillCaptureControl &CxuiFakeEngine::fakeStillCaptureControl()
+{
+ return *mFakeStillCaptureControl;
+}
+
+// End of file