camerauis/cameraxui/cxengine/inc/cxevideocapturecontroldesktop.h
author hgs
Fri, 06 Aug 2010 10:03:37 +0300
changeset 46 c826656d6714
child 55 0da2a5b56583
permissions -rw-r--r--
201031

/*
* 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:
*
*/

#ifndef CXEVIDEOCAPTURECONTROLDESKTOP_H_
#define CXEVIDEOCAPTURECONTROLDESKTOP_H_

#include <QTime>
#include <QPixmap>
#include <QTimer>

#include "cxesettings.h"
#include "cxevideocapturecontrol.h"
#include "cxestatemachine.h"
#include "cxenamespace.h"


// Custom command for setting a new filename without closing & reopening the controller
enum TCamCControllerCustomCommands
    {
    ECamCControllerCCNewFilename = 0,
    ECamCControllerCCVideoStopAsync
    };


// forward declarations
class CxeCameraDeviceDesktop;
class CxeQualityPresets;
class CxeFilenameGenerator;
class CxeViewfinderControl;
class CxeCameraDeviceControl;


class CxeVideoCaptureControlDesktop : public CxeVideoCaptureControl
{
    Q_OBJECT

public:  // constructors

    CxeVideoCaptureControlDesktop( CxeCameraDeviceDesktop &cameraDevice,
                                   CxeViewfinderControl &viewfinderControl,
                                   CxeCameraDeviceControl &cameraDeviceControl,
                                   CxeFilenameGenerator &nameGenerator,
                                   CxeQualityPresets &qualityPresets);

    virtual ~CxeVideoCaptureControlDesktop();

public:  // functions from CxeVideoCaptureControl
    CxeVideoCaptureControl::State state() const;
    void record();
    void pause();
    void stop();
    void remainingTime(int &time);
    bool elapsedTime(int &time);
    void reset();
    QString filename() const;
    QPixmap snapshot() const;
    QList<CxeVideoDetails> supportedVideoQualities();

public:  // public member functions, not in client API
    void handleSnapshotEvent(CxeError::Id error);

signals:
    void videoPrepareComplete(CxeError::Id error);
    void prepareZoomForVideo();

public slots:
    //! Notification for when camera device is ready and we're entering video mode
    void init();
    //! Notification for when we're exiting video mode
    void deinit();
    //! Notification that videocapture sound has been played
    void handleSoundPlayed();

protected slots:
    // notifications when ECam reference is changed
    void prepareForCameraDelete();
    void handleCameraAllocated(CxeError::Id error);
    void prepareForRelease();
    // ECam events
    void handleCameraEvent(int eventUid, int error);
    // settings call back
    void handleSettingValueChanged(const QString &settingId, QVariant newValue);
    void handleSceneChanged(CxeScene &scene);

private: // helper methods
    void releaseResources();
    void initializeStates();
    int prepareVideoSnapshot();
    void initVideoRecorder();
    void open();
    void prepare();
    void createVideoRecorder();
    void setupElapseTimer();
    void setState(CxeVideoCaptureControl::State stateId, CxeError::Id error = CxeError::None);

private slots:
    void handleElapseTimeout();

private: // private data

    CxeCameraDeviceDesktop &mCameraDevice;
    CxeCameraDeviceControl &mCameraDeviceControl;
    CxeViewfinderControl &mViewfinderControl;
    CxeFilenameGenerator &mFilenameGenerator;
    CxeQualityPresets &mQualityPresets;
    //! Snapshot image.
    QPixmap mSnapshot;
    //! New file name generated for the video prepare.
    QString mNewFileName;
    //! Current video file name
    QString mCurrentFilename;
    CxeVideoCaptureControl::State mState;
    //current video quality details in use
    CxeVideoDetails mCurrentVideoDetails;
    
    //timer for simulating elapsing time
    QTimer mRecordElapseTimer;
    
    //elapsed recording time in seconds
    int mElapsedTime;
};

#endif /* CXEVIDEOCAPTURECONTROLDESKTOP_H_ */