diff -r a289dde0a1d6 -r 415ff50d2eca camerauis/cameraxui/cxengine/src/cxestillcapturecontrolsymbian.cpp --- a/camerauis/cameraxui/cxengine/src/cxestillcapturecontrolsymbian.cpp Fri Sep 17 08:27:13 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxestillcapturecontrolsymbian.cpp Mon Oct 04 00:05:08 2010 +0300 @@ -187,21 +187,22 @@ void CxeStillCaptureControlSymbian::init() { CX_DEBUG_ENTER_FUNCTION(); - OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_INIT_IN, "msg: e_CX_STILL_CAPCONT_INIT 1"); if (state() == Uninitialized) { - + OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_INIT_IN, "msg: e_CX_STILL_CAPCONT_INIT 1"); + // prepare for still capture. prepare(); // Initialize orientation sensor and other sensors mSensorEventHandler.init(); - + // inform zoom control to prepare zoom emit prepareZoomForStill(mSizeIndex); + + OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_INIT_OUT, "msg: e_CX_STILL_CAPCONT_INIT 0"); } - OstTrace0(camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_INIT_OUT, "msg: e_CX_STILL_CAPCONT_INIT 0"); CX_DEBUG_EXIT_FUNCTION(); } @@ -212,32 +213,30 @@ { CX_DEBUG_ENTER_FUNCTION(); - if (state() == Uninitialized) { - // nothing to do - return; + if (state() != Uninitialized) { + OstTrace0( camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_DEINIT_IN, "msg: e_CX_STILLCAPCONT_DEINIT 1" ); + + // Stop monitoring disk space. + mDiskMonitor.stop(); + disconnect(&mDiskMonitor, SIGNAL(diskSpaceChanged()), this, SLOT(handleDiskSpaceChanged())); + + //stop viewfinder + mViewfinderControl.stop(); + + if (state() == Capturing) { + mCameraDevice.camera()->CancelCaptureImage(); + } + + // disable sensor event handler. + mSensorEventHandler.deinit(); + + mSnapshotControl.stop(); + + setState(Uninitialized); + + OstTrace0( camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_DEINIT_OUT, "msg: e_CX_STILLCAPCONT_DEINIT 0" ); } - OstTrace0( camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_DEINIT_IN, "msg: e_CX_STILLCAPCONT_DEINIT 1" ); - - // Stop monitoring disk space. - mDiskMonitor.stop(); - disconnect(&mDiskMonitor, SIGNAL(diskSpaceChanged()), this, SLOT(handleDiskSpaceChanged())); - - //stop viewfinder - mViewfinderControl.stop(); - - if (state() == Capturing) { - mCameraDevice.camera()->CancelCaptureImage(); - } - - // disable sensor event handler. - mSensorEventHandler.deinit(); - - mSnapshotControl.stop(); - - setState(Uninitialized); - - OstTrace0( camerax_performance, CXESTILLCAPTURECONTROLSYMBIAN_DEINIT_OUT, "msg: e_CX_STILLCAPCONT_DEINIT 0" ); CX_DEBUG_EXIT_FUNCTION(); } @@ -248,12 +247,6 @@ void CxeStillCaptureControlSymbian::prepare() { CX_DEBUG_ENTER_FUNCTION(); - - if (state() != Uninitialized) { - // wrong state and we return - return; - } - OstTrace0(camerax_performance, CXESTILLCAPTURECONTROL_PREPARE_IN, "msg: e_CX_STILLCAPCONT_PREPARE 1"); CxeError::Id status(CxeError::None); @@ -279,7 +272,7 @@ // Start monitoring disk space. mDiskMonitor.start(); - connect(&mDiskMonitor, SIGNAL(diskSpaceChanged()), this, SLOT(handleDiskSpaceChanged())); + connect(&mDiskMonitor, SIGNAL(diskSpaceChanged()), this, SLOT(handleDiskSpaceChanged()), Qt::UniqueConnection); // Enable AF reticule drawing by adaptation MCameraFaceTracking *faceTracking = mCameraDevice.faceTracking(); @@ -470,12 +463,6 @@ // Emit snapshotReady signal in all cases (error or not) emit snapshotReady(status, snapshot, stillImage->id()); - // When the snapshot ready event is handled, prepare new filename. - if (stillImage->filename().isEmpty()) { - // Error ignored at this point, try again when image data arrives. - prepareFilename(stillImage); - } - OstTrace0(camerax_performance, CXESTILLCAPTURECONTROL_HANDLESNAPSHOT_2, "msg: e_CX_HANDLE_SNAPSHOT 0"); } @@ -578,7 +565,7 @@ /*! - * Settings changed, needs updated + * Settings changed, needs updated. */ void CxeStillCaptureControlSymbian::handleSettingValueChanged(const QString& settingId, QVariant newValue) { @@ -587,10 +574,21 @@ Q_UNUSED(newValue); if (settingId == CxeSettingIds::IMAGE_QUALITY) { - // re-prepare for still + // Re-prepare for still, if already prepared. if (state() == Ready) { - deinit(); - init(); + // Avoid problems with AF status overlays. + mAutoFocusControl.cancel(); + + // Viewfinder and snapshot need to be re-prepared if active. + // Stop them now to get proper re-prepare done. + mSnapshotControl.stop(); + mViewfinderControl.stop(); + + // Re-prepare image capture for the new quality. + prepare(); + + // Inform zoom control to prepare zoom for new quality. + emit prepareZoomForStill(mSizeIndex); } }