/*
* 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:
*
*/
#ifndef CXESTILLCAPTURECONTROL_H
#define CXESTILLCAPTURECONTROL_H
#include <QObject>
#include <QMetaType>
#include <QPixmap>
#include "cxeerror.h"
#include "cxequalitydetails.h"
class CxeStillImage;
class CxeImageDataQueue;
/**
* Still capture control implements basic still image capture functionality. It
* automatically plays back the capture sound when capturing images (or a
* sequence of images) and it also provides snapshots of captured images.
* Still capture control also automatically makes sure that the images are
* saved in the file system in the background.
*
* The CxeStillImage is used to access information (snapshot image, filename)
* about captured images. The still capture control owns an array of CxeStillImage
* objects representing the images that were captured. The CxeStillCaptureControl::reset()
* function should be used to clear any data about previously captured images and to initialize
* the control for a new capture.
*
* The images will be saved to the file system by CxeImageDataQueue and CxeImageDataItem classes.
* @sa CxeStillImage
* @sa CxeImageDataQueue
* @sa CxeImageDataItem
*/
class CxeStillCaptureControl : public QObject
{
Q_OBJECT
public:
/**
* Image capture mode.
*/
enum CaptureMode
{
//! Single image mode
SingleImageCapture,
//! Burst capture mode. One capture operation captures images until
//! stopped or the maximum amount of images is reached.
BurstCapture
};
//! Still capture control states
enum State {
//! Not prepared
Uninitialized = 0x01,
//! Prepared and ready to capture images
Ready = 0x02,
//! Capture operation is in progress
Capturing = 0x04
};
/**
* Start capturing images.
*/
virtual void capture() = 0;
/**
* Current state.
*/
virtual State state() const = 0;
/**
* Get the number of images captured. The actual images can be accessed
* using the [] operator.
*
* @return Number of CxeStillImage object available
*/
virtual int imageCount() const = 0;
/**
* Clear the image array, destroy all CxeStillImage objects, including
* snapshot images. Items in the file save queue remain and are saved in
* the background.
*/
virtual void reset() = 0;
/**
* Clear the image array, destroy all CxeStillImage objects, including
* snapshot images. File save queue is cleared as well and all unsaved
* images will be lost.
*/
virtual void cancelAll() = 0;
/**
* Set current image capture mode.
*/
virtual void setMode(CaptureMode mode) = 0;
/**
* Get current image capture mode.
*/
virtual CaptureMode mode() const = 0;
/**
* Access images that were captured during this capture sequence.
*
* @param index Image index. Must be 0 <= index < imageCount.
* @return Reference to corresponding CxeStillImage
*/
virtual CxeStillImage &operator[]( int index ) = 0;
/**
* File save queue
*/
virtual CxeImageDataQueue& imageDataQueue() = 0;
/*
* supported list of image qualities, sorted in descending order based on image resolution
* i.e. the list has the highest resolution first and so on
* Internally, we check if we are using Primary/Secondary camera and return the list based on it
*/
virtual QList<CxeImageDetails> supportedImageQualities() = 0;
/*
* Returns the number of images left for the current image quality setting
*/
virtual int imagesLeft() = 0;
public slots:
virtual void init() = 0;
virtual void deinit() = 0;
signals:
void stateChanged(CxeStillCaptureControl::State newState, CxeError::Id error);
/**
* A signal indicating a snapshot image is available.
*
* @param error Status code for the snapshot.
* CxeError::None if snapshot successfully received.
* @param snapshot The snapshot image.
* @param id Id of the image this snapshot is for.
*/
void snapshotReady(CxeError::Id error, const QPixmap& snapshot, int id);
void imageCaptured(CxeError::Id error, int id);
/**
* Amount of images that can be captured has changed.
*/
void availableImagesChanged();
protected:
CxeStillCaptureControl() {} // protected empty contructor so that derived class construction works
private:
Q_DISABLE_COPY( CxeStillCaptureControl )
};
Q_DECLARE_METATYPE(CxeStillCaptureControl::State)
#endif // CXESTILLCAPTURECONTROL_H