camerauis/cameraxui/cxengine/src/cxevideocapturecontrolsymbian.cpp
branchRCL_3
changeset 24 bac7acad7cb3
parent 23 61bc0f252b2b
child 25 2c87b2808fd7
--- a/camerauis/cameraxui/cxengine/src/cxevideocapturecontrolsymbian.cpp	Tue Aug 31 15:03:46 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1002 +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 <algorithm>
-#include <exception>
-#include <QTime>
-#include <QPixmap>
-#include <coemain.h>
-#include <QStringList>
-
-#include "cxeexception.h"
-#include "cxevideocapturecontrolsymbian.h"
-#include "cxevideorecorderutilitysymbian.h"
-#include "cxecameradevicecontrolsymbian.h"
-#include "cxefilenamegeneratorsymbian.h"
-#include "cxeerrormappingsymbian.h"
-#include "cxeviewfindercontrol.h"
-#include "cxesnapshotcontrol.h"
-#include "cxestillimagesymbian.h"
-#include "cxecameradevice.h"
-#include "cxutils.h"
-#include "cxestate.h"
-#include "cxesettings.h"
-#include "cxenamespace.h"
-#include "cxesoundplayersymbian.h"
-#include "cxequalitypresetssymbian.h"
-#include "cxeviewfindercontrolsymbian.h"
-#include "cxediskmonitor.h"
-#include "cxesettingsmappersymbian.h"
-
-#include "OstTraceDefinitions.h"
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include "cxevideocapturecontrolsymbianTraces.h"
-#endif
-
-
-// constants
-namespace
-{
-    // TMMFEvent UIDs for Async stop
-    const TUid KCamCControllerCCVideoRecordStopped = {0x2000E546};
-    const TUid KCamCControllerCCVideoFileComposed = {0x2000E547};
-
-    const TInt64  KMinRequiredSpaceVideo      = 4000000;
-}
-
-
-/*!
-* CxeVideoCaptureControlSymbian::CxeVideoCaptureControlSymbian
-*/
-CxeVideoCaptureControlSymbian::CxeVideoCaptureControlSymbian(
-    CxeCameraDevice &cameraDevice,
-    CxeViewfinderControl &viewfinderControl,
-    CxeSnapshotControl &snapshotControl,
-    CxeCameraDeviceControl &cameraDeviceControl,
-    CxeFilenameGenerator &nameGenerator,
-    CxeSettings &settings,
-    CxeQualityPresets &qualityPresets,
-    CxeDiskMonitor &diskMonitor)
-    : CxeStateMachine("CxeVideoCaptureControlSymbian"),
-      mVideoRecorder(NULL),
-      mCameraDevice(cameraDevice),
-      mCameraDeviceControl(cameraDeviceControl),
-      mViewfinderControl(viewfinderControl),
-      mSnapshotControl(snapshotControl),
-      mFilenameGenerator(nameGenerator),
-      mSettings(settings),
-      mQualityPresets(qualityPresets),
-      mDiskMonitor(diskMonitor),
-      mSnapshot(),
-      mVideoStartSoundPlayer(NULL),
-      mVideoStopSoundPlayer(NULL),
-      mCurrentFilename("")
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_CREATE_IN, "msg: e_CX_VIDEOCAPTURECONTROL_NEW 1");
-
-    qRegisterMetaType<CxeVideoCaptureControl::State> ();
-    initializeStates();
-
-    mVideoStopSoundPlayer = new
-             CxeSoundPlayerSymbian(CxeSoundPlayerSymbian::VideoCaptureStop,
-                                   mSettings);
-    mVideoStartSoundPlayer = new
-             CxeSoundPlayerSymbian(CxeSoundPlayerSymbian::VideoCaptureStart,
-                                   mSettings);
-
-    // If camera is already allocated, call the slot ourselves.
-    if (mCameraDevice.camera()) {
-        handleCameraAllocated(CxeError::None);
-    }
-
-    OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_CREATE_M1, "msg: e_CX_ENGINE_CONNECT_SIGNALS 1");
-    // connect signals from cameraDevice, so we recieve events when camera reference changes
-    connect(&cameraDevice, SIGNAL(prepareForCameraDelete()),
-            this, SLOT(prepareForCameraDelete()));
-    connect(&cameraDevice, SIGNAL(prepareForRelease()),
-            this, SLOT(prepareForRelease()) );
-    connect(&cameraDevice, SIGNAL(cameraAllocated(CxeError::Id)),
-            this, SLOT(handleCameraAllocated(CxeError::Id)));
-
-    // connect playing sound signals
-    connect(mVideoStartSoundPlayer, SIGNAL(playComplete(int)),
-            this, SLOT(handleSoundPlayed()));
-
-    // connect snapshot ready signal
-    connect(&mSnapshotControl, SIGNAL(snapshotReady(CxeError::Id, const QImage&)),
-            this, SLOT(handleSnapshotReady(CxeError::Id, const QImage&)));
-
-    // enabling setting change callbacks to videocapturecontrol
-    connect(&mSettings, SIGNAL(settingValueChanged(const QString&,QVariant)),
-            this, SLOT(handleSettingValueChanged(const QString&,QVariant)));
-
-    mSettings.listenForSetting(CxeSettingIds::VIDEO_SCENE, this, SLOT(handleSceneChanged(const QVariant&)));
-
-    OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_CREATE_M2, "msg: e_CX_ENGINE_CONNECT_SIGNALS 0");
-
-    OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_CREATE_OUT, "msg: e_CX_VIDEOCAPTURECONTROL_NEW 0");
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* CxeVideoCaptureControlSymbian::~CxeVideoCaptureControlSymbian()
-*/
-CxeVideoCaptureControlSymbian::~CxeVideoCaptureControlSymbian()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    releaseResources();
-    mIcmSupportedVideoResolutions.clear();
-    delete mVideoStartSoundPlayer;
-    delete mVideoStopSoundPlayer;
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Initializes resources for video recording.
-*/
-void CxeVideoCaptureControlSymbian::init()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    OstTrace0( camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_INIT, "msg: e_CX_VIDEO_CAPCONT_INIT 1" );
-
-    if (state() == Idle) {
-        // start initializing resources for video capture
-        initVideoRecorder();
-    } else if (state() == Initialized) {
-        // video recorder already initalized. Continue to prepare video reocording.
-        open();
-    }
-
-    OstTrace0( camerax_performance, DUP1_CXEVIDEOCAPTURECONTROLSYMBIAN_INIT, "msg: e_CX_VIDEO_CAPCONT_INIT 0" );
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Releases all resources
-*/
-void CxeVideoCaptureControlSymbian::deinit()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // Nothing to do if already idle.
-    if(state() != Idle) {
-        OstTrace0( camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_DEINIT, "msg: e_CX_VIDEO_CAPCONT_DEINIT 1" );
-
-        // first stop viewfinder
-        mViewfinderControl.stop();
-
-        // stop video-recording in-case if its ongoing.
-        stop();
-
-        // Check if state is stopping, in which case we have to inform the
-        // file harvester that a file is to be completed. We would not
-        // call harvestFile otherwise in this case.
-        // Otherwise the video will not be found from videos app.
-        if (state() == Stopping) {
-            emit videoComposed(CxeError::None, mCurrentFilename);
-        }
-
-        mSnapshotControl.stop();
-
-        if (mVideoRecorder) {
-            mVideoRecorder->close();
-        }
-
-        setState(Idle);
-
-        OstTrace0( camerax_performance, DUP1_CXEVIDEOCAPTURECONTROLSYMBIAN_DEINIT, "msg: e_CX_VIDEO_CAPCONT_DEINIT 0" );
-    }
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Intializes VideoRecorder for recording.
-*/
-void CxeVideoCaptureControlSymbian::initVideoRecorder()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // Init needed only in Idle state
-    if (state() == Idle) {
-        try {
-            // If video recorder is not yet created, do it now.
-            createVideoRecorder();
-
-            // Update current video quality details from ICM.
-            // Throws an error if unable to get the quality.
-            updateVideoCaptureParameters();
-
-            // Video recorder is ready to open video file for recording.
-            setState(Initialized);
-            open();
-        } catch (const std::exception &e) {
-            // Handle error
-            handlePrepareFailed();
-        }
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Opens file for video recording.
-*/
-void CxeVideoCaptureControlSymbian::open()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // Check valid state to start "open" operation
-    if (state() == Initialized) {
-        try {
-            // generate video file name, if necessary
-            generateFilename();
-            CX_DEBUG(( "Next video file path: %s", mCurrentFilename.toAscii().constData() ));
-
-            // Start preparing..
-            setState(CxeVideoCaptureControl::Preparing);
-
-            // Exception thrown if open fails.
-            mVideoRecorder->open(mCameraDevice.camera()->Handle(),
-                                 mCurrentFilename,
-                                 mCurrentVideoDetails.mVideoFileMimeType,
-                                 mCurrentVideoDetails.mPreferredSupplier,
-                                 mCurrentVideoDetails.mVideoCodecMimeType,
-                                 mCurrentVideoDetails.mAudioType);
-        } catch (const std::exception &e) {
-            handlePrepareFailed();
-        }
-    }
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Helper method for generating filename.
-* Throws exception, if file type mime is formatted wrong or
-* filename generation fails.
-*/
-void CxeVideoCaptureControlSymbian::generateFilename()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    mCurrentFilename = QString("");
-
-    QStringList list = mCurrentVideoDetails.mVideoFileMimeType.split("/");
-    // Throw exception if mime string is formatted wrong.
-    if (list.count() != 2) {
-        throw new CxeException(CxeError::General);
-    }
-    QString fileExt = "." + list[1];
-
-    // Generate new filename and open the file for writing video data
-    CxeException::throwIfError(mFilenameGenerator.generateFilename(mCurrentFilename, fileExt));
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Prepare Video Recorder with necessary settings for video capture.
-*/
-void CxeVideoCaptureControlSymbian::prepare()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() != Preparing) {
-        // not valid state to continue prepare.
-        return;
-    }
-
-    OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROL_PREPARE_1, "msg: e_CX_VIDCAPCONT_PREPARE 1");
-    QSize frameSize(mCurrentVideoDetails.mWidth, mCurrentVideoDetails.mHeight);
-
-    bool muteSetting = mSettings.get<bool>(CxeSettingIds::VIDEO_MUTE_SETTING, false);
-
-    // Check if scene defines frame rate.
-    // Use generic frame rate defined in video details, if no value is set in scene.
-    int frameRate = mSettings.get<int>(CxeSettingIds::FRAME_RATE, 0);
-    if (frameRate <= 0) {
-        frameRate = mCurrentVideoDetails.mVideoFrameRate;
-    }
-
-    CX_DEBUG(("Video resolution (%d,%d)", mCurrentVideoDetails.mWidth,
-                                           mCurrentVideoDetails.mHeight));
-    CX_DEBUG(("Video bitrate = %d)", mCurrentVideoDetails.mVideoBitRate));
-    CX_DEBUG(("Video frame rate = %d)", frameRate));
-
-    try {
-        mVideoRecorder->setVideoFrameSize(frameSize);
-        mVideoRecorder->setVideoFrameRate(frameRate);
-        mVideoRecorder->setVideoBitRate(mCurrentVideoDetails.mVideoBitRate);
-        mVideoRecorder->setAudioEnabled(!muteSetting);
-        // "No limit" value is handled in video recorder wrapper.
-        mVideoRecorder->setVideoMaxSize(mCurrentVideoDetails.mMaximumSizeInBytes);
-
-        // Settings have been applied successfully, start to prepare.
-        mVideoRecorder->prepare();
-
-        // Prepare zoom only when there are no errors during prepare.
-        emit prepareZoomForVideo();
-        emit videoPrepareComplete(CxeError::None);
-    } catch (const std::exception &e) {
-        // Handle error.
-        handlePrepareFailed();
-    }
-
-    OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROL_PREPARE_2, "msg: e_CX_VIDCAPCONT_PREPARE 0");
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Prepare video snapshot.
-* Throws exception on error.
-*/
-void CxeVideoCaptureControlSymbian::prepareSnapshot()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    OstTrace0( camerax_performance, CXEVIDEOCAPTURECONTROL_PREPARESNAP_1, "msg: e_CX_PREPARE_SNAPSHOT 1" );
-
-    // Prepare snapshot. Snapshot control throws error if problems.
-    QSize snapshotSize = mSnapshotControl.calculateSnapshotSize(
-                            mViewfinderControl.deviceDisplayResolution(),
-                            mCurrentVideoDetails.mAspectRatio);
-    mSnapshotControl.start(snapshotSize);
-
-    OstTrace0( camerax_performance, CXEVIDEOCAPTURECONTROL_PREPARESNAP_2, "msg: e_CX_PREPARE_SNAPSHOT 0" );
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-  Fetch video quality details based on current video quality setting.
-*/
-void CxeVideoCaptureControlSymbian::updateVideoCaptureParameters()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROL_UPDATEVIDEOCAPTUREPARAMETERS_1, "msg: e_CX_UPDATE_VIDEO_CAPTURE_PARAMETERS 1");
-
-    int quality = 0;
-
-    // Get quality index for primary camera. Only one quality for secondary camera.
-    if (mCameraDeviceControl.cameraIndex() == Cxe::PrimaryCameraIndex) {
-        quality = mSettings.get<int>(CxeSettingIds::VIDEO_QUALITY);
-    }
-
-    if (quality < 0 || quality >= mIcmSupportedVideoResolutions.count()) {
-       throw new CxeException(CxeError::NotFound);
-    }
-
-    // Get video quality details
-    mCurrentVideoDetails = mIcmSupportedVideoResolutions.at(quality);
-
-    OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROL_UPDATEVIDEOCAPTUREPARAMETERS_2, "msg: e_CX_UPDATE_VIDEO_CAPTURE_PARAMETERS 0");
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Resets the video snapshot and current video filename
-*/
-void CxeVideoCaptureControlSymbian::reset()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // Snapshot will consume considerably memory.
-    // Replace it with null pixmap to have it freed.
-    mSnapshot = QPixmap();
-    // reset the current file name.
-    mCurrentFilename = QString("");
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Returns current video filename
-*/
-QString CxeVideoCaptureControlSymbian::filename() const
-{
-    // Simply return the current contents of mCurrentFilename.
-    // If video recording was started then it returns proper filename
-    // otherwise an empty string is returned.
-    return mCurrentFilename;
-}
-
-/*!
-* Returns current video snapshot
-*/
-QPixmap CxeVideoCaptureControlSymbian::snapshot() const
-{
-    return mSnapshot;
-}
-
-/*!
-* Starts video recording if we are in appropriate state.
-*/
-void CxeVideoCaptureControlSymbian::record()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() == Ready || state() == Paused) {
-        // ask the player to play the sound
-        // recording will start once start sound is played
-        setState(CxeVideoCaptureControl::PlayingStartSound);
-        mVideoStartSoundPlayer->play();
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Pauses video recording.
-*/
-void CxeVideoCaptureControlSymbian::pause()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    try {
-        mVideoRecorder->pause();
-        setState(CxeVideoCaptureControl::Paused);
-        // play the sound, but not changing the state
-        mVideoStopSoundPlayer->play();
-    } catch (const std::exception &e) {
-        handleComposeFailed(qt_symbian_exception2Error(e));
-    }
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Stops video recording.
-*/
-void CxeVideoCaptureControlSymbian::stop()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() == Recording || state() == Paused) {
-        // first stop viewfinder
-        mViewfinderControl.stop();
-
-        try {
-            // Try asynchronous stopping first.
-            mVideoRecorder->stop(true);
-            // No error from asynchronous stop -> wait for stop event
-            if (state() != Ready) {
-                setState(Stopping);
-            }
-        } catch (const std::exception &e) {
-            CX_DEBUG(("CxeVideoCaptureControlSymbian - async stop failed, try sync.."));
-            try {
-                mVideoRecorder->stop(false);
-                // stopping went ok
-                emulateNormalStopping();
-            } catch (const std::exception &e) {
-                // Even synchronous stopping failed -> release resources.
-                CX_DEBUG(("CxeVideoCaptureControlSymbian - sync stop failed, too!"));
-                handleComposeFailed(qt_symbian_exception2Error(e));
-            }
-        }
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Callback when "Open" operation is complete.
-*/
-void CxeVideoCaptureControlSymbian::MvruoOpenComplete(TInt aError)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    CX_DEBUG(("CxeVideoCaptureControlSymbian::MvruoOpenComplete, err=%d", aError));
-
-    if (state() == Preparing) {
-        if (!aError) {
-            prepare();
-        } else {
-            handlePrepareFailed();
-        }
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Callback when "Prepare" request is complete.
-*/
-void CxeVideoCaptureControlSymbian::MvruoPrepareComplete(TInt aError)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    CX_DEBUG(("CxeVideoCaptureControlSymbian::MvruoPrepareComplete, err=%d", aError));
-
-    if (state() == Preparing) {
-        try {
-            // Check that no error coming in.
-            CxeException::throwIfError(aError);
-            // Start viewfinder
-            mViewfinderControl.start();
-            // Prepare snapshot (throws exception if fails).
-            prepareSnapshot();
-            // Ready for recording now.
-            setState(CxeVideoCaptureControl::Ready);
-            OstTrace0( camerax_performance, CXEVIDEOCAPTURECONTROLSYMBIAN_GOTOVIDEO, "msg: e_CX_GO_TO_VIDEO_MODE 0" );
-        } catch (const std::exception &e) {
-            handlePrepareFailed();
-        }
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Callback when "Record" operation is complete.
-*/
-void CxeVideoCaptureControlSymbian::MvruoRecordComplete(TInt aError)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    CX_DEBUG(("CxeVideoCaptureControlSymbian::MvruoRecordComplete, err=%d", aError));
-
-    //! async stop customcommand stuff
-    if (aError == KErrNone) {
-        setState(CxeVideoCaptureControl::Ready);
-    } else if (aError == KErrCompletion) {
-        // KErrCompletion is received when video recording stops
-        // because of maximum clip size is reached. Emulate
-        // normal stopping.
-        emulateNormalStopping();
-    }
-    else {
-        // error during recording, report to client
-        handleComposeFailed(aError);
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Callback from MVideoRecorderUtilityObserver
-*/
-void CxeVideoCaptureControlSymbian::MvruoEvent(const TMMFEvent& aEvent)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (aEvent.iEventType.iUid == KCamCControllerCCVideoRecordStopped.iUid) {
-        CX_DEBUG(("KCamCControllerCCVideoRecordStopped"));
-        // play the sound, but not changing the state
-        mVideoStopSoundPlayer->play();
-    } else if (aEvent.iEventType.iUid == KCamCControllerCCVideoFileComposed.iUid) {
-        CX_DEBUG(("KCamCControllerCCVideoFileComposed"));
-        if (state() == Stopping) {
-            // stop operation went fine, set back the state to intialized.
-            setState(Initialized);
-        }
-        mFilenameGenerator.raiseCounterValue();
-        // video file has composed, everything went well, inform the client
-        emit videoComposed(CxeError::None, filename());
-    } else {
-        CX_DEBUG(("ignoring unknown MvruoEvent 0x%08x", aEvent.iEventType.iUid ));
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* camera reference changing, release resources
-*/
-void CxeVideoCaptureControlSymbian::prepareForCameraDelete()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    releaseResources();
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* prepare for camera release.
-*/
-void CxeVideoCaptureControlSymbian::prepareForRelease()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    deinit();
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* new camera available
-*/
-void CxeVideoCaptureControlSymbian::handleCameraAllocated(CxeError::Id error)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (!error) {
-        try {
-            // Create the video recorder utility
-            createVideoRecorder();
-        } catch (...) {
-            // We are just trying to create the recorder early.
-            // Retry later when preparing, and fail then if
-            // error still persists.
-        }
-        // new camera available, read supported video qualities from icm
-        // load all video qualities supported by icm
-        mIcmSupportedVideoResolutions.clear();
-        Cxe::CameraIndex cameraIndex = mCameraDeviceControl.cameraIndex();
-        // get list of supported image qualities based on camera index
-        mIcmSupportedVideoResolutions =
-                mQualityPresets.videoQualityPresets(cameraIndex);
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Initializes video recorder.
-* May throw exception.
-*/
-void CxeVideoCaptureControlSymbian::createVideoRecorder()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    if (mVideoRecorder == NULL) {
-        mVideoRecorder = new CxeVideoRecorderUtilitySymbian(*this);
-    }
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* releases resources used by video capture control
-*/
-void CxeVideoCaptureControlSymbian::releaseResources()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // first de-init videocapture control
-    deinit();
-    reset();
-
-    delete mVideoRecorder;
-    mVideoRecorder = NULL;
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Returns current state of video capture control
-*/
-CxeVideoCaptureControl::State CxeVideoCaptureControlSymbian::state() const
-{
-    return static_cast<CxeVideoCaptureControl::State> (stateId());
-}
-
-/*!
-* Called when state is changed.
-*/
-void CxeVideoCaptureControlSymbian::handleStateChanged(int newStateId, CxeError::Id error)
-{
-    switch (newStateId) {
-    case Ready:
-        if (error == CxeError::None && !mDiskMonitor.isMonitoring()) {
-            mDiskMonitor.start();
-            connect(&mDiskMonitor, SIGNAL(diskSpaceChanged()), this, SLOT(handleDiskSpaceChanged()));
-        }
-        break;
-    default:
-        // Stop monitoring when video mode is released.
-        // Same goes during recording, as video times come from recorder.
-        if (mDiskMonitor.isMonitoring()) {
-            mDiskMonitor.stop();
-            disconnect(&mDiskMonitor, SIGNAL(diskSpaceChanged()), this, SLOT(handleDiskSpaceChanged()));
-        }
-        break;
-    }
-    emit stateChanged(static_cast<State> (newStateId), error);
-}
-
-/*!
-* Initialize states for videocapturecontrol
-*/
-void CxeVideoCaptureControlSymbian::initializeStates()
-{
-    // addState( id, name, allowed next states )
-    addState(new CxeState(Idle, "Idle", Initialized));
-    addState(new CxeState(Initialized, "Initialized", Preparing | Idle));
-    addState(new CxeState(Preparing, "Preparing", Ready | Idle));
-    addState(new CxeState(Ready, "Ready", Recording | PlayingStartSound | Preparing | Idle));
-    addState(new CxeState(Recording, "Recording", Recording | Paused | Stopping | Idle | Ready));
-    addState(new CxeState(Paused, "Paused", Recording | Stopping | PlayingStartSound | Idle));
-    addState(new CxeState(Stopping, "Stopping", Initialized | Idle | Ready));
-    addState(new CxeState(PlayingStartSound, "PlayingStartSound", Recording | Idle));
-
-    setInitialState(Idle);
-}
-
-/*!
-* Updates remaining video recordng time counter to all the video qualities supported by ICM
-* this should be done whenever storage location setting changes and when values are
-* read from ICM for the first time
-*/
-void CxeVideoCaptureControlSymbian::updateRemainingRecordingTimeCounter()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    for( int index = 0; index < mIcmSupportedVideoResolutions.count(); index++) {
-        CxeVideoDetails &qualityDetails = mIcmSupportedVideoResolutions[index];
-        qualityDetails.mRemainingTime = calculateRemainingTime(qualityDetails);
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* calculates remaining video recording time.
-*/
-void CxeVideoCaptureControlSymbian::remainingTime(int &time)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() == CxeVideoCaptureControl::Recording ||
-        state() == CxeVideoCaptureControl::Paused) {
-        time = mVideoRecorder->availableRecordingTime();
-        CX_DEBUG(("CxeVideoCaptureControlSymbian - time remaining: %d", time));
-    } else {
-        // Check if we need to recalculate the remaining time.
-        if (mCurrentVideoDetails.mRemainingTime == CxeVideoDetails::UNKNOWN) {
-            mCurrentVideoDetails.mRemainingTime = calculateRemainingTime(mCurrentVideoDetails);
-        }
-        time = mCurrentVideoDetails.mRemainingTime;
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Get the remaining recording time
-* @param videoDetails Contains the current video resolution that is in use.
-* @return The remaining recording time
-*/
-int CxeVideoCaptureControlSymbian::calculateRemainingTime(const CxeVideoDetails& videoDetails)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    qint64 availableSpace = mDiskMonitor.free() - KMinRequiredSpaceVideo;
-    int time = mQualityPresets.recordingTimeAvailable(videoDetails, availableSpace);
-    CX_DEBUG_EXIT_FUNCTION();
-    return time;
-}
-
-/*!
-* Calculates elapsed recording time during video recording
-* @return Did fetching elapsed time succeed.
-*/
-bool CxeVideoCaptureControlSymbian::elapsedTime(int &time)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    bool ok = false;
-    if (state() == CxeVideoCaptureControl::Recording ||
-        state() == CxeVideoCaptureControl::Paused) {
-        try {
-            time = mVideoRecorder->duration();
-            CX_DEBUG(("CxeVideoCaptureControlSymbian - elapsed: %d", time));
-            ok = true;
-        } catch (const std::exception &e) {
-            // Returning false.
-        }
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-    return ok;
-}
-
-/*!
-* slot called when playing a sound has finished.
-*/
-void CxeVideoCaptureControlSymbian::handleSoundPlayed()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // start recording, if we were playing capture sound
-    if (state() == CxeVideoCaptureControl::PlayingStartSound) {
-        setState(CxeVideoCaptureControl::Recording);
-        mVideoRecorder->record();
-    }
-
-    // in case of video capture stop sound playing, nothing needs to be done
-    // meaning the state set elsewhere, and the video capture has been stopped already
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Handle new snapshot.
-* @param status Status code for getting the snapshot.
-* @param snapshot Snapshot pixmap. Empty if error code reported.
-*/
-void CxeVideoCaptureControlSymbian::handleSnapshotReady(CxeError::Id status, const QImage &snapshot)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (mCameraDeviceControl.mode() == Cxe::VideoMode) {
-        OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROL_HANDLESNAPSHOT_1, "msg: e_CX_HANDLE_SNAPSHOT 1");
-
-        // Need to store snapshot for ui to be able to get it also later.
-        mSnapshot = QPixmap::fromImage(snapshot);
-        emit snapshotReady(status, snapshot, filename());
-
-        OstTrace0(camerax_performance, CXEVIDEOCAPTURECONTROL_HANDLESNAPSHOT_2, "msg: e_CX_HANDLE_SNAPSHOT 0");
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* setting has changed, check if we are interested.
-*/
-void CxeVideoCaptureControlSymbian::handleSettingValueChanged(const QString& settingId,
-                                                              QVariant newValue)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    Q_UNUSED(newValue);
-
-    if (mCameraDeviceControl.mode() == Cxe::VideoMode) {
-        if (settingId == CxeSettingIds::VIDEO_QUALITY) {
-            // re-prepare for video
-            if (state() == Ready) {
-                // release resources
-                deinit();
-                // initialize video recording again
-                init();
-            }
-        } else if (settingId == CxeSettingIds::VIDEO_MUTE_SETTING) {
-            // mute setting changed, apply the new setting and re-prepare.
-            setState(Preparing);
-            prepare();
-        } else if (settingId == CxeSettingIds::FRAME_RATE) {
-            // Frame rate setting changed. Need to re-prepare if we are prepared already.
-            // Otherwise can wait for next init call.
-            if (state() == Ready) {
-                setState(Preparing);
-                prepare();
-            }
-        } else {
-            // Setting not relevant to video mode
-        }
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
- * Scene mode changed. We need to know about it because frame rate
- * might have changed.
- */
-void CxeVideoCaptureControlSymbian::handleSceneChanged(const QVariant& scene)
-{
-    Q_UNUSED(scene)
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // make sure we are in video mode
-    if (mCameraDeviceControl.mode() == Cxe::VideoMode) {
-        // Frame rate setting might have changed so re-prepare.
-        if (state() == Ready) {
-            setState(Preparing);
-            prepare();
-        }
-
-    }
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Disk space changed.
-* Emit remaining time changed signal, if space change affects it.
-*/
-void CxeVideoCaptureControlSymbian::handleDiskSpaceChanged()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // Ignore updates on preparing phase.
-    if (state() == CxeVideoCaptureControl::Ready) {
-
-        int time(calculateRemainingTime(mCurrentVideoDetails));
-
-        if (time !=  mCurrentVideoDetails.mRemainingTime) {
-            mCurrentVideoDetails.mRemainingTime = time;
-            emit remainingTimeChanged();
-        }
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-    Use ECam Use Case Hint Custom API to inform ECam of our intended use case
-    before calling Reserve().
-*/
-void CxeVideoCaptureControlSymbian::hintUseCase()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // Make sure ECam knows we're doing video recording so it can prepare
-    // for the correct use case.
-    if (mCameraDeviceControl.mode() == Cxe::VideoMode) {
-        MCameraUseCaseHint *useCaseHintApi = mCameraDevice.useCaseHintApi();
-        if (useCaseHintApi) {
-            MCameraUseCaseHint::TVideoCodec codec =
-                    MCameraUseCaseHint::ECodecUnknown;
-            MCameraUseCaseHint::TVideoProfile profile =
-                    MCameraUseCaseHint::EProfileUnknown;
-
-            updateVideoCaptureParameters();
-            CxeSettingsMapperSymbian::Map2UseCaseHintVideoParameters(
-                    mCurrentVideoDetails, codec, profile);
-
-            TSize resolution(mCurrentVideoDetails.mWidth,
-                             mCurrentVideoDetails.mHeight);
-            TRAP_IGNORE(useCaseHintApi->HintDirectVideoCaptureL(codec, profile,
-                                                                resolution));
-        }
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Returns QList of all supported video quality details based on the camera index
-* (primary/secondary).
-*/
-QList<CxeVideoDetails> CxeVideoCaptureControlSymbian::supportedVideoQualities()
-{
-    // update the remaining time counters for each quality setting
-    updateRemainingRecordingTimeCounter();
-    return mIcmSupportedVideoResolutions;
-}
-
-/*!
-* Helper method to handle error during preparing phase.
-*/
-void CxeVideoCaptureControlSymbian::handlePrepareFailed()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    CX_DEBUG(("[ERROR] Preparing video failed!"));
-    // Cleanup
-    deinit();
-    // Inform client
-    emit videoPrepareComplete(CxeError::InitializationFailed);
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Helper method to handle error from video composing.
-* @param error Symbian error code.
-*/
-void CxeVideoCaptureControlSymbian::handleComposeFailed(int error)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    CX_DEBUG(("[ERROR] Composing video failed!"));
-    // Inform client
-    emit videoComposed(CxeErrorHandlingSymbian::map(error), filename());
-    // Cleanup
-    deinit();
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
- * Helper method to emulate video stopping events.
- */
-void CxeVideoCaptureControlSymbian::emulateNormalStopping()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    setState(Stopping);
-    MvruoEvent(TMMFEvent(KCamCControllerCCVideoRecordStopped, KErrNone));
-    MvruoEvent(TMMFEvent(KCamCControllerCCVideoFileComposed, KErrNone));
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-// End of file