camerauis/cameraxui/cxengine/src/cxevideocapturecontroldesktop.cpp
branchRCL_3
changeset 54 bac7acad7cb3
parent 53 61bc0f252b2b
child 57 2c87b2808fd7
--- a/camerauis/cameraxui/cxengine/src/cxevideocapturecontroldesktop.cpp	Tue Aug 31 15:03:46 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,550 +0,0 @@
-/*
-* 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 <QTime>
-#include <QPixmap>
-
-#include "cxevideocapturecontroldesktop.h"
-#include "cxeviewfindercontrol.h"
-#include "cxutils.h"
-#include "cxestate.h"
-#include "cxenamespace.h"
-#include "cxefilenamegeneratordesktop.h"
-#include "cxecameradevicedesktop.h"
-#include "cxeexception.h"
-
-namespace
-{
-    // Unit is milliseconds
-    static const int CXENGINE_ELAPSED_TIME_TIMEOUT = 1000; // 1 second
-
-    // Unit is seconds
-    static const int CXENGINE_MAXIMUM_VIDEO_TIME = 90*60; // 90 minutes
-}
-
-
-/*!
-* Constructor
-*/
-CxeVideoCaptureControlDesktop::CxeVideoCaptureControlDesktop(CxeCameraDeviceDesktop &cameraDevice,
-                                                             CxeViewfinderControl &viewfinderControl,
-                                                             CxeCameraDeviceControl &cameraDeviceControl,
-                                                             CxeFilenameGenerator &nameGenerator,
-                                                             CxeQualityPresets &qualityPresets) :
-    mCameraDevice(cameraDevice),
-    mCameraDeviceControl(cameraDeviceControl),
-    mViewfinderControl(viewfinderControl),
-    mFilenameGenerator(nameGenerator),
-    mQualityPresets(qualityPresets),
-    mSnapshot(),
-    mNewFileName(""),
-    mCurrentFilename(""),
-    mState(Idle),
-    mElapsedTime(0)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    qRegisterMetaType<CxeVideoCaptureControl::State> ();
-    initializeStates();
-    setupElapseTimer();
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* Destructor
-*/
-CxeVideoCaptureControlDesktop::~CxeVideoCaptureControlDesktop()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    releaseResources();
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* Initializes resources for video recording.
-*/
-void CxeVideoCaptureControlDesktop::init()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() == Idle) {
-        // start initializing resources for video capture
-        initVideoRecorder();
-    } else if (state() == Initialized) {
-        // video recorder already initalized. Continue to prepare video reocording.
-        open();
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* Releases all resources
-*/
-void CxeVideoCaptureControlDesktop::deinit()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() == Idle) {
-        // nothing to do
-        CX_DEBUG_EXIT_FUNCTION();
-        return;
-    }
-    // stop video-recording in-case if its ongoing.
-    stop();
-
-    setState(Idle);
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* Intializes VideoRecorder for recording.
-*/
-void CxeVideoCaptureControlDesktop::initVideoRecorder()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() != Idle) {
-        // not valid state to start "open" operation
-        CX_DEBUG_EXIT_FUNCTION();
-        return;
-    }
-
-    // update current video quality details from icm
-    CxeError::Id err = CxeError::None;
-
-    setState(Initialized);
-    open();
-
-    if (err) {
-        // In case of error
-        emit videoPrepareComplete(err);
-        deinit();
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* Setup the timer for elapsed time
-*/
-void CxeVideoCaptureControlDesktop::setupElapseTimer()
-{
-    mRecordElapseTimer.setSingleShot(false);
-    mRecordElapseTimer.setInterval(CXENGINE_ELAPSED_TIME_TIMEOUT);
-    connect(&mRecordElapseTimer, SIGNAL(timeout()), this, SLOT(handleElapseTimeout()));
-}
-
-
-/*!
-* Opens file for video recording.
-*/
-void CxeVideoCaptureControlDesktop::open()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() != Initialized) {
-        // not valid state to start "open" operation
-        CX_DEBUG_EXIT_FUNCTION();
-        return;
-    }
-
-    CxeError::Id err = CxeError::None;
-
-    // generate video file name, if necessary
-    if (mNewFileName.isEmpty()) {
-        QString fileExt = ".mp4";
-
-        // Generate new filename and open the file for writing video data
-        err = mFilenameGenerator.generateFilename(mNewFileName, fileExt);
-        if (err == CxeError::None) {
-            mCurrentFilename = mNewFileName;
-        } else {
-            // file name is not valid, re-initialize the value of current string
-            // back to empty string
-            mCurrentFilename = QString("");
-        }
-    }
-
-    if (err) {
-        // error occured.
-        deinit();
-        emit videoPrepareComplete(err);
-    } else {
-        setState(Preparing);
-        prepare();
-    }
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-
-/*!
-* Prepare Video Recorder with necessary settings for video capture.
-*/
-void CxeVideoCaptureControlDesktop::prepare()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() != Preparing) {
-        // not valid state to continue prepare.
-        CX_DEBUG_EXIT_FUNCTION();
-        return;
-    }
-
-    int err = CxeError::None;
-
-    if (!err) {
-        // prepare snapshot
-        err = prepareVideoSnapshot();
-    }
-
-    if (!err) {
-        // prepare zoom only when there are no errors during prepare.
-        emit prepareZoomForVideo();
-    }
-
-    mViewfinderControl.start();
-    setState(Ready);
-
-    // emit video prepare status
-    emit videoPrepareComplete(CxeError::None);
-
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
- Prepare snapshot
-@Return symbian error code.
- */
-int CxeVideoCaptureControlDesktop::prepareVideoSnapshot()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-
-    int err = 0;
-    // Whether or not we have postcapture on, we need the snapshot for Thumbnail Manager.
-
-    mSnapshot = mCameraDevice.currentSnaphot();
-    handleSnapshotEvent(CxeError::None);
-
-    CX_DEBUG_EXIT_FUNCTION();
-
-    return err;
-}
-
-/*!
-* Camera events coming from ecam.
-*/
-void CxeVideoCaptureControlDesktop::handleCameraEvent(int eventUid, int error)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    Q_UNUSED(eventUid);
-    Q_UNUSED(error);
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* Handle Snapshot event from ecam
-*/
-void CxeVideoCaptureControlDesktop::handleSnapshotEvent(CxeError::Id error)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() == Idle) {
-        // we ignore this event, when we are not in active state(s)
-        CX_DEBUG(( "wrong state, ignoring snapshot" ));
-        CX_DEBUG_EXIT_FUNCTION();
-        return;
-    }
-    emit snapshotReady(error, QImage(), filename());
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* Resets the video snapshot and current video filename
-*/
-void CxeVideoCaptureControlDesktop::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();
-}
-
-
-/*!
-*@Return current video filename
-*/
-QString CxeVideoCaptureControlDesktop::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;
-}
-
-
-/*!
-* @Return current video snapshot
-*/
-QPixmap CxeVideoCaptureControlDesktop::snapshot() const
-{    
-    return mSnapshot;
-}
-
-/*!
-* @Return QList of all supported video quality details based on the camera index
-*  (primary/secondary).
-*/
-QList<CxeVideoDetails> CxeVideoCaptureControlDesktop::supportedVideoQualities()
-{
-    return QList<CxeVideoDetails>();
-}
-
-/*!
-* Starts video recording if we are in appropriate state.
-*/
-void CxeVideoCaptureControlDesktop::record()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() == Ready || state() == Paused) {
-        //we skip the playing of the sound in the desktop state for now
-        setState(Recording);        
-        mRecordElapseTimer.start();
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* Pauses video recording.
-*/
-void CxeVideoCaptureControlDesktop::pause()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    mRecordElapseTimer.stop();
-
-    setState(Paused);
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* Stops video recording.
-*/
-void CxeVideoCaptureControlDesktop::stop()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    if (state() == Recording || state() == Paused) {
-        mFilenameGenerator.raiseCounterValue();
-    }
-
-    mViewfinderControl.stop();
-    mRecordElapseTimer.stop();
-    mElapsedTime = 0;
-
-    setState(Stopping);
-    setState(Initialized);
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* camera reference changing, release resources
-*/
-void CxeVideoCaptureControlDesktop::prepareForCameraDelete()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    releaseResources();
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-/*!
-* prepare for camera release.
-*/
-void CxeVideoCaptureControlDesktop::prepareForRelease()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    deinit();
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* new camera available,
-*/
-void CxeVideoCaptureControlDesktop::handleCameraAllocated(CxeError::Id error)
-{
-    Q_UNUSED(error);
-    CX_DEBUG_IN_FUNCTION();
-}
-
-
-/*!
-* Initializes video recorder.
-*/
-void CxeVideoCaptureControlDesktop::createVideoRecorder()
-{
-    CX_DEBUG_IN_FUNCTION();
-}
-
-
-/*!
-* releases resources used by videocapture
-*/
-void CxeVideoCaptureControlDesktop::releaseResources()
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    // first de-init videocapture control
-    deinit();
-    reset();
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-@Returns current state of videocapture
-*/
-CxeVideoCaptureControl::State CxeVideoCaptureControlDesktop::state() const
-{
-    return mState;
-}
-
-/*!
-* Initialize states for videocapturecontrol
-*/
-void CxeVideoCaptureControlDesktop::initializeStates()
-{
-    CX_DEBUG_IN_FUNCTION();
-}
-
-/*!
-* calculates remaining video recording time.
-*/
-void CxeVideoCaptureControlDesktop::remainingTime(int &time)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    time = CXENGINE_MAXIMUM_VIDEO_TIME - mElapsedTime;
-    if (time < 0) {
-        time = 0;
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-/*!
-* Calculates elapsed recording time during video recording
-* @return Did fetching elapsed time succeed.
-*/
-bool CxeVideoCaptureControlDesktop::elapsedTime(int &time)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    time = mElapsedTime;
-
-    CX_DEBUG_EXIT_FUNCTION();
-
-    return true;
-}
-
-/*!
-* slot called when playing a sound has finished.
-*/
-void CxeVideoCaptureControlDesktop::handleSoundPlayed()
-{
-    // 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_IN_FUNCTION();
-}
-
-
-/*!
-* setting has changed, check if we are interested.
-*/
-void CxeVideoCaptureControlDesktop::handleSettingValueChanged(const QString& settingId,
-                                                              QVariant newValue)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-
-    Q_UNUSED(newValue);
-
-    if (settingId == CxeSettingIds::VIDEO_QUALITY) {
-        // re-prepare for video
-       deinit();
-       init();
-    } else if (settingId == CxeSettingIds::VIDEO_MUTE_SETTING) {
-        // mute setting changed, apply the new setting and re-prepare.
-        prepare();
-    }
-
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-
-
-/*!
-* Video Scene mode changed, needs updated
-*/
-void CxeVideoCaptureControlDesktop::handleSceneChanged(CxeScene &scene)
-{
-    CX_DEBUG_ENTER_FUNCTION();
-    Q_UNUSED(scene);
-    CX_DEBUG_EXIT_FUNCTION();
-}
-
-void CxeVideoCaptureControlDesktop::handleElapseTimeout()
-{
-    mElapsedTime++;
-
-    CX_DEBUG( ("CxeVideoCaptureControlDesktop::handleElapseTimeout() <> mElapsedTime: %d", mElapsedTime ) );
-}
-
-void CxeVideoCaptureControlDesktop::setState(CxeVideoCaptureControl::State stateId, CxeError::Id error)
-{
-    mState = stateId;
-    CX_DEBUG( ("CxeVideoCaptureControlDesktop::setState <> mState: %d", mState ) );
-    emit stateChanged(mState, error);
-}
-// End of file