--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingandcamerafws/camerafw/source/ecamcapturecontrol.cpp Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,2182 @@
+// Copyright (c) 2005-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:
+//
+
+#include <ecam/ecamcapturecontrolintf.h>
+#include <ecam/implementationfactoryintf.h>
+#include <ecamimageprocessing.h>
+#include <ecam/camerahistogram.h>
+#include "ecamversion.h"
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <ecamcapturecontrolconst.h>
+#endif
+const TInt KECamVideoCaptureBit0 = 0x00;
+const TInt KECamClientVideoCaptureBit1 = 0x01;
+const TInt KECamDirectVideoCaptureBit2 = 0x02;
+
+/**
+Factory function for creating the CCameraPreImageCaptureControl object.
+
+@param aCamera
+ a reference to a CCamera object providing the settings.
+
+@param aPreImageCaptureControlObserver
+ Reference to the pre image capture control observer.
+
+@return a pointer to a fully constructed CCameraPreImageCaptureControl object.
+
+@leave KErrNoMemory Out of memory Or any other system-wide error code.
+
+@leave KErrExtensionNotSupported When NewL/NewDuplicateL used instead of New2L/NewDuplicate2L.
+*/
+EXPORT_C CCamera::CCameraPreImageCaptureControl* CCamera::CCameraPreImageCaptureControl::NewL(CCamera& aCamera, MPreImageCaptureControlObserver& aPreImageCaptureControlObserver)
+ {
+ if(aCamera.CameraVersion() == KCameraDefaultVersion)
+ {
+ User::Leave(KErrExtensionNotSupported);
+ }
+
+ CCamera::CCameraPreImageCaptureControl* self = new (ELeave)CCamera::CCameraPreImageCaptureControl(aCamera);
+ CleanupStack::PushL(self);
+ self->ConstructL(aPreImageCaptureControlObserver);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+/**
+CCameraPreImageCaptureControl Constructor.
+
+@param aOwner
+ a reference to a CCamera object.
+*/
+CCamera::CCameraPreImageCaptureControl::CCameraPreImageCaptureControl(CCamera& aOwner):iOwner(aOwner), iImpl(NULL)
+ {
+ }
+
+/**
+CCameraPreImageCaptureControl second phase constructor.
+
+Function used to initialise internal state of the object. Uses reference to the camera to retrieve
+PreImageCaptureControl interface pointer.
+
+@param aPreImageCaptureControlObserver
+ Reference to the pre image capture control observer.
+
+@leave KErrNoMemory Out of memory Or any other system-wide error code.
+*/
+void CCamera::CCameraPreImageCaptureControl::ConstructL(MPreImageCaptureControlObserver& aPreImageCaptureControlObserver)
+ {
+ iImpl = static_cast<MCameraPreImageCaptureControl*>(iOwner.CustomInterface(KECamMCameraPreImageCaptureControlUid));
+
+ if (iImpl == NULL)
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ iImpl->SetPreImageCaptureControlObserver(aPreImageCaptureControlObserver);
+ }
+
+/**
+Destructor
+*/
+EXPORT_C CCamera::CCameraPreImageCaptureControl::~CCameraPreImageCaptureControl()
+ {
+ if (iImpl != NULL)
+ {
+ iImpl->Release();
+ }
+ }
+
+/**
+Retrieves information regarding the direct snapshot feature support. Direct Snapshot, if supported, can be created
+out of version2 direct viewfinder object only.
+
+@param aDirectSnapshotSupportInfo
+ This is a bit field providing supported direct snapshot of type TDirectSnapshotType
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::GetDirectSnapshotSupportInfoL(TUint& aDirectSnapshotSupportInfo) const
+ {
+ iImpl->GetDirectSnapshotSupportInfoL(aDirectSnapshotSupportInfo);
+ }
+
+/**
+Retrieves the settings supported for embedded still captures. Possibilty exists that not all the settings supported for
+normal still image captures are supported for embedded still captures as well.
+
+@param aSupportedEmbeddedStillCaptureSettings
+ Array of TUid which retrieves the supported embedded still captures. Empty list indicated that no settings are
+ supported for embedded still captures.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::GetSupportedEmbeddedStillCaptureSettingsL(RArray<TUid>& aSupportedEmbeddedStillCaptureSettings) const
+ {
+ iImpl->GetSupportedEmbeddedStillCaptureSettingsL(aSupportedEmbeddedStillCaptureSettings);
+ }
+
+/**
+Retrieves information regarding the supported direct saving state. If used, still images are saved in files rather than
+providing clients the MCameraImageBuffer. Direct saving to file will continue even if the client application gets closed
+for any reasons.
+
+@param aSupportedDirectSavingType
+ Retrieves the enum specifying supported TDirectSavingType.
+ If EDirectSavingNotUsed, direct saving not supported. Images will be received in buffer MCameraImageBuffer.
+
+ If EDirectSavingHighResolutionFileOnly, direct saving to file is supported. But no cut down version of the image
+ will be saved to file. Callback used is MCaptureImageObserver::ImageDirectSavingCompleted().
+
+ If EDirectSavingWithLowerResolutionFile, Direct saving to file is supported. Also, a cut down version of the image
+ will be saved to another specified file. Callbacks used are MCaptureImageObserver::ImageDirectSavingCompleted() for
+ actual image and MCaptureImageObserver::CutDownImageDirectSavingCompleted() for lower resolution image.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::GetSupportedDirectSavingTypeL(CCamera::CCameraPreImageCaptureControl
+ ::TDirectSavingType& aSupportedDirectSavingType) const
+ {
+ iImpl->GetSupportedDirectSavingTypeL(aSupportedDirectSavingType);
+ }
+
+/**
+Provides the base name for file used to save images. If there are sequential images, files will be created by
+implementation with names appearing as base name and appended by increasing integers which would start from
+aStartingSequenceNumber. This is used for the original image only, but not for the cut down version of the original
+image.
+
+@param aFilename
+ A const TDesC8&: Base name for files which ECam implementation needs to create in order to collect every sequential
+ image.
+
+@param aStartingSequenceNumber
+ The starting sequence number which will be appended to the base name 'aFilename'. The sequence number will keep
+ on increasing for every individual still image capture.
+
+@leave May leave with any error code.
+
+@note It is upto the implementation how many digits it uses for sequence number. Accordingly, padding will be done with
+ zeroes.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::SetSequentialImageFilenameL(const TDesC8& aFilename, TInt aStartingSequenceNumber)
+ {
+ iImpl->SetSequentialImageFilenameL(aFilename, aStartingSequenceNumber);
+ }
+
+/**
+Provides the base name for file used to save cut down version of the original images. If there are sequential images,
+files will be created by implementation with names appearing as base name and appended by increasing integers which would
+start from aStartingSequenceNumber. This is used for the cut down version of the original image.
+
+@param aLowerResolutionFilename
+ A const TDesC8&: Base name for files which ECam implementation needs to create in order to collect the cut down version
+ of every sequential image.
+
+@param aStartingSequenceNumber
+ The starting sequence number which will be appended to the base name 'aFilename'. The sequence number will keep
+ on increasing for every individual still image capture.
+
+@leave May leave with any error code.
+
+@note It is upto the implementation how many digits it uses for sequence number. Accordingly, padding will be done with
+ zeroes.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::SetLowerResolutionSequentialImageFilenameL(const TDesC8& aLowerResolutionFilename,
+ TInt aStartingSequenceNumber)
+ {
+ iImpl->SetLowerResolutionSequentialImageFilenameL(aLowerResolutionFilename, aStartingSequenceNumber);
+ }
+
+/**
+Retrieves the type of direct saving currently used. This will be represented as a direct saving state as given by
+TDirectSavingType.
+
+Whether or not the direct saving option is used, client will receive the MCaptureImageObserver::ImageCaptureComplete()
+callback to mark the completion of the image capture operation.
+
+@param aDirectSavingType
+ Current type of the direct saving.
+
+ If EDirectSavingNotUsed, direct saving is not used. Images will be received in buffer MCameraImageBuffer through
+ callback MCaptureImageObserver::ImageBufferReady().
+
+ If EDirectSavingHighResolutionFileOnly, direct saving to file option is currently used. But no cut down version of
+ the image will be saved to file. Callback used is MCaptureImageObserver::ImageDirectSavingCompleted().
+
+ If EDirectSavingWithLowerResolutionFile, apart from direct saving to file option for the actual image, a cut down
+ version of the image will be saved to another specified file. Callbacks used are MCaptureImageObserver::
+ ImageDirectSavingCompleted() for actual image and MCaptureImageObserver::CutDownImageDirectSavingCompleted() for
+ lower resolution image.
+
+@leave May leave with any error code.
+
+@note Direct saving to file will continue even if the client application gets closed for any reasons.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::GetDirectSavingTypeL(CCamera::CCameraPreImageCaptureControl::
+ TDirectSavingType& aDirectSavingType) const
+ {
+ iImpl->GetDirectSavingTypeL(aDirectSavingType);
+ }
+
+/**
+Instructs the ECam implementation to use the desired type of direct saving option as specifed by its state.
+
+Whether or not the direct saving option is used, client will receive the MCaptureImageObserver::ImageCaptureComplete()
+callback to mark the completion of the image capture operation.
+
+@param aDirectSavingType
+ The desired type of the direct saving.
+
+ If EDirectSavingNotUsed, direct saving will not be used. Images will be received in buffer MCameraImageBuffer
+ through callback MCaptureImageObserver::ImageBufferReady().
+
+ If EDirectSavingHighResolutionFileOnly, direct saving to file option will be used. But no cut down version of
+ the image will be saved to file. Callback to be used is MCaptureImageObserver::ImageDirectSavingCompleted().
+
+ If EDirectSavingWithLowerResolutionFile, apart from direct saving to file option for the actual image, a cut down
+ version of the image will be saved to another specified file. Callbacks to be used are MCaptureImageObserver::
+ ImageDirectSavingCompleted() for actual image and MCaptureImageObserver::CutDownImageDirectSavingCompleted() for
+ lower resolution image.
+
+@leave May leave with any error code.
+
+@note Clients need to provide the filename before capturing still images under direct saving option. Callback
+ MCaptureImageObserver::ImageDirectSavingCompleted() may provide error KErrNotReady if filenames are not
+ provided before images are captured for direct saving. Similarly, if cut down version of image is also to be saved
+ to file, MCaptureImageObserver::CutDownImageDirectSavingCompleted() may provide error KErrNotReady if filenames are
+ not provided before hand.
+
+@note Direct saving to file will continue even if the client application gets closed for any reasons.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::SetDirectSavingTypeL(CCamera::CCameraPreImageCaptureControl::
+ TDirectSavingType aDirectSavingType)
+ {
+ iImpl->SetDirectSavingTypeL(aDirectSavingType);
+ }
+
+/**
+Retrieves whether the camera device is capable of providing capture event notification to the client. Client may take
+the responsibility of playing the capture sound after receiving the notification.
+
+@param aSupportedDriveModes
+ A reference to bit-field of TUint which indicates the drive modes in which the capture event notification is
+ supported. If aSupportedDriveModes =0, capture event notification is not supported.
+
+@note If capture event notification is supported, ECam implementation will use KUidECamEventImageCaptureEvent to notify
+ clients that the image has been exposed to the camera sensor. Clients may play capture sound if they desire to do so.
+
+@leave May leave with any error code.
+
+@see CCamera::CCameraAdvancedSettings::TDriveMode
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::GetCaptureEventSupportInfoL(TUint& aSupportedDriveModes) const
+ {
+ iImpl->GetCaptureEventSupportInfoL(aSupportedDriveModes);
+ }
+
+/**
+Retrieves the supported image formats for a given resolution.
+
+@param aImageFormatsSupported
+ A bit field which retrieves the supported image formats for a given resolution.
+ Formats have been defined as CCamera::TFormat
+
+@param aSize
+ The resolution (or size) for which the total number of supported image formats have to be retrieved.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::GetImageFormatsSupportedL(TUint& aImageFormatsSupported, const TSize& aSize) const
+ {
+ iImpl->GetImageFormatsSupportedL(aImageFormatsSupported, aSize);
+ }
+
+/**
+Retrieves the supported pixel aspect ratio for a given resolution in case of still image.
+
+@param aPixelAspectsSupported
+ A bit field which retrieves the supported pixel aspect ratio for a given resolution.
+ Pixel aspect ratio have been defined as CCamera::CCameraAdvancedSettings::TPixelAspectRatio
+
+@param aImageFormat
+ The image format for which the supported pixel aspect ratio have to be retrieved.
+
+@param aSize
+ The resolution (or size) for which the supported pixel aspect ratio have to be retrieved.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::GetPixelAspectsSupportedL(TUint& aPixelAspectsSupported, CCamera::TFormat aImageFormat, const TSize& aSize) const
+ {
+ iImpl->GetPixelAspectsSupportedL(aPixelAspectsSupported, aImageFormat, aSize);
+ }
+
+/**
+Performs setup and allocation of memory for image capture operation. Implementation creates a new CCameraImageCapture*
+object which reflects the prepare image parameters passed by the client. The callback MPreImageCaptureControlObserver::
+PrepareImageComplete() passes the ownership of the CCameraImageCapture* object to the client.
+
+This needs to be called every time client wishes to change prepare image parameters or if the client wishes to create
+a new CCameraImageCapture* object.
+
+@param aPrepareImageParameters
+ The desired image parameters to be used for capturing still images using the CCameraImageCapture instance
+ which would be passed by the implementation.
+
+@param aCaptureImageObserver
+ The Capture image observer which is needed by the implementation in order to pass it to the CCameraImageCapture
+ while creating it.
+
+@note Next PrepareImageCapture can be called only after receiving the notification KUidECamEventReadyForNextPrepare.
+
+@note If drive mode is EDriveModeTimeNudgeCapture, when the client initiates image capture the total amount of images
+ requested by the client (specified in TDriveModeDependentAttributes) will be returned to the client
+ (via MCaptureImageObserver::ImageBufferReady()) or saved to file. No other instance of CCameraImageCapture can be
+ created whilst using this drive mode until the first instance is destroyed.
+
+@see CCamera::PrepareImageCaptureL(TFormat aImageFormat,TInt aSizeIndex)
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::PrepareImageCapture(const CCamera::CCameraPreImageCaptureControl::
+ TPrepareImageParameters& aPrepareImageParameters, MCaptureImageObserver& aCaptureImageObserver)
+ {
+ // MCameraPreImageCaptureControl concrete implementation will call CCameraImageCapture::CreateL(CCamera& aCamera,
+ // MCaptureImageObserver& aCaptureImageObserver) method and pass the CCameraImageCapture* to the client through
+ // the MPreImageCaptureControlObserver::PrepareImageComplete() callback.
+ iImpl->PrepareImageCapture(aPrepareImageParameters, aCaptureImageObserver);
+ }
+
+/**
+Informs whether or not the setting of maximum memory size when encoding to the current format is supported.
+
+@param aIsImageMaxMemorySizeSettingSupported
+ ETrue indicates that setting of maximum memory size is supported.
+ EFalse indicates that setting of maximum memory size is not supported.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::GetImageMaxMemorySizeSettingSupportInfoL(TBool& aIsImageMaxMemorySizeSettingSupported) const
+ {
+ iImpl->GetImageMaxMemorySizeSettingSupportInfoL(aIsImageMaxMemorySizeSettingSupported);
+ }
+
+/**
+Get the maximum memory size in kilo bytes when encoding to the current format.
+
+@param aMemorySize
+ Retrieves the maximum memory size in kilo bytes.
+
+@note In case of JPEG, the maximum memory size will take preference over JPEG quality if the maximum memory size is
+ not sufficient to achieve the desired quality. Refer CCamera::JpegQuality()
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::GetImageMaxMemorySizeL(TUint& aMemorySize) const
+ {
+ iImpl->GetImageMaxMemorySizeL(aMemorySize);
+ }
+
+/**
+Retrieves the supported processing options.
+
+@param aEcamProcessingOptionsSupported
+ Bitfield containing the available processing options.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::GetSupportedProcessingOptionsL(TUint& aECamProcessingOptionsSupported) const
+ {
+ iImpl->GetSupportedProcessingOptionsL(aECamProcessingOptionsSupported);
+ }
+
+/**
+Constructor for the TPrepareImageParameters class.
+Sets the size and version of this class.
+*/
+EXPORT_C CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters::TPrepareImageParameters()
+ {
+ iSize = sizeof(CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters);
+ iVersion = KECamPrepareImageParametersCurrentVersion;
+
+ iImageMaxMemorySize = KECamNoSpecificMaxMemorySize;
+ iImageProcessingOptions = 0;
+ }
+
+/**
+Returns the size of the class. Used for extensibility by deriving from this base class and adding new member variables.
+Intended to be used for implementation of methods where this class reference is passed as function arguments.
+Implementation of such methods can find out the whether the actual class passed is base or the derived one. So, if a new application
+is made to run on an old implementation, an error may occur in such cases after the old implementation detects this by getting
+the size information of the T class passed. Also, if old application is made to run on a new implementation, this could be
+properly handled if the derived class variables handling is done in a proper 'if-else' statement.
+
+@return The size of this class.
+
+@note The size will be modified when the T-class gets updated.
+*/
+EXPORT_C TUint CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters::Size() const
+ {
+ return iSize;
+ }
+
+/**
+Returns the version of the class. Used for extensibility specially when the class members are not added but the Reserved
+members get used at a later stage.
+
+@return The version of this class.
+
+@note The version will be modified when the T-class gets updated.
+*/
+EXPORT_C TUint CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters::Version() const
+ {
+ return iVersion;
+ }
+
+/**
+Sets the image processing options to be used during image capture.
+
+@param aImageProcessingOptions
+ Bitfield of image processing options to be used during image capture.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters::SetImageProcessingOptions(TUint aImageProcessingOptions)
+ {
+ iImageProcessingOptions = aImageProcessingOptions;
+ }
+
+/**
+Gets the current image processing options to be used during image capture.
+
+@param aImageProcessingOptions
+ Bitfield of current image processing options to be used during image capture.
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters::GetImageProcessingOptions(TUint& aImageProcessingOptions) const
+ {
+ aImageProcessingOptions = iImageProcessingOptions;
+ }
+
+/**
+Constructor for the TDriveModeDependentAttributes class.
+Sets the size and version of this class.
+*/
+EXPORT_C CCamera::CCameraPreImageCaptureControl::TDriveModeDependentAttributes::TDriveModeDependentAttributes()
+ {
+ iSize = sizeof(CCamera::CCameraPreImageCaptureControl::TDriveModeDependentAttributes);
+ iVersion = KECamDriveModeDependentAttributesCurrentVersion;
+ iParam1 = -1;
+ iParam2 = -1;
+ }
+
+/**
+Returns the size of the class. Used for extensibility by deriving from this base class and adding new member variables.
+Intended to be used for implementation of methods where this class reference is passed as function arguments.
+Implementation of such methods can find out the whether the actual class passed is base or the derived one. So, if a new application
+is made to run on an old implementation, an error may occur in such cases after the old implementation detects this by getting
+the size information of the T class passed. Also, if old application is made to run on a new implementation, this could be
+properly handled if the derived class variables handling is done in a proper 'if-else' statement.
+
+@return The size of this class.
+
+@note The size will be modified when the T-class gets updated.
+*/
+EXPORT_C TUint CCamera::CCameraPreImageCaptureControl::TDriveModeDependentAttributes::Size() const
+ {
+ return iSize;
+ }
+
+/**
+Returns the version of the class. Used for extensibility specially when the class members are not added but the Reserved
+members get used at a later stage.
+
+@return The version of this class.
+
+@note The version will be modified when the T-class gets updated.
+*/
+EXPORT_C TUint CCamera::CCameraPreImageCaptureControl::TDriveModeDependentAttributes::Version() const
+ {
+ return iVersion;
+ }
+
+/**
+Constructor for the TImageBufferInfo class.
+Sets the size and version of this class.
+*/
+EXPORT_C CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::TImageBufferInfo()
+ {
+ iSize = sizeof(CCamera::CCameraPreImageCaptureControl::TImageBufferInfo);
+ iVersion = KECamImageBufferInfoCurrentVersion;
+ }
+
+/**
+Returns the size of the class. Used for extensibility by deriving from this base class and adding new member variables.
+Intended to be used for implementation of methods where this class reference is passed as function arguments.
+Implementation of such methods can find out the whether the actual class passed is base or the derived one. So, if a new application
+is made to run on an old implementation, an error may occur in such cases after the old implementation detects this by getting
+the size information of the T class passed. Also, if old application is made to run on a new implementation, this could be
+properly handled if the derived class variables handling is done in a proper 'if-else' statement.
+
+@return The size of this class.
+
+@note The size will be modified when the T-class gets updated.
+*/
+EXPORT_C TUint CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::Size() const
+ {
+ return iSize;
+ }
+
+/**
+Returns the version of the class. Used for extensibility specially when the class members are not added but the Reserved
+members get used at a later stage.
+
+@return The version of this class.
+
+@note The version will be modified when the T-class gets updated.
+*/
+EXPORT_C TUint CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::Version() const
+ {
+ return iVersion;
+ }
+
+/**
+Indicates whether the streamed image scheme or sub-frame scheme is being used.
+
+@return Whether the sub-frame scheme is being used or not.
+
+@see CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::iIsSubFrameUsed
+*/
+EXPORT_C TBool CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::IsSubFrameUsed() const
+ {
+ if (iIsSubFrameUsed)
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+/**
+Sets the state to inform whether the streamed image scheme or sub-frame scheme is being used.
+
+@param aIsSubFrameUsed
+ ETrue implies sub-frame scheme is being used.
+ EFalse implies sub-frame scheme is not being used.
+
+@note The set method will be used by the ECAM implementation in order to provide necessary information to the
+ clients when they receive the image buffers.
+
+@see CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::iIsSubFrameUsed
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::SetSubFrameState(TBool aIsSubFrameUsed)
+ {
+ iIsSubFrameUsed = static_cast<TUint>(aIsSubFrameUsed);
+ }
+
+/**
+Indicates whether the parallel buffering is being used by the implementation in order to speed up the streamed
+image operation, as a whole.
+
+@return Whether the parallel buffer option is being used by the implementation under the sub-frame scheme.
+
+@note Parallel buffering indicates that implementation is using more than one buffer to handle the various
+ sub-frames; hence speeding up the operation.
+
+@see CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::iIsParallelBufferUsed
+*/
+EXPORT_C TBool CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::IsParallelStreamedBufferUsed() const
+ {
+ if (iIsParallelBufferUsed)
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+/**
+Sets the state to inform whether the parallel buffering is being used by the implementation in order to speed up
+the streamed image operation, as a whole.
+
+@param aParallelStreamedBufferUsed
+ ETrue implies sub-frame scheme is being used.
+ EFalse implies sub-frame scheme is not being used.
+
+@note The set method will be used by the ECAM implementation in order to provide necessary information to the
+ clients when they receive the image buffers.
+
+@see CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::iIsParallelBufferUsed
+*/
+EXPORT_C void CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::SetParallelStreamedBufferState(TBool aParallelStreamedBufferUsed)
+ {
+ iIsParallelBufferUsed = static_cast<TUint>(aParallelStreamedBufferUsed);
+ }
+
+/**
+Sequence number of the sub-frame.
+
+@return Sequence number of the sub-frame.
+
+@see CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::iSubFrameSequenceNumber
+*/
+EXPORT_C TUint CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::SubFrameSequenceNumber() const
+ {
+ return iSubFrameSequenceNumber;
+ }
+
+/**
+Sets the sequence number of the sub-frame.
+
+@param aSubFrameSequenceNumber
+ The sequence number of the sub-frame.
+
+@return The error code
+
+@note 9 bits used for sequence no. assuming that KECamMaxTotalSubFrames sub-frames would be used at max. Sequence number for sub-frames
+ lies between 0 to KECamMaxTotalSubFrames-1 inclusive.
+
+@note The set method will be used by the ECAM implementation in order to provide necessary information to the
+ clients when they receive the image buffers.
+
+@see CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::iSubFrameSequenceNumber
+*/
+EXPORT_C TInt CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::SetSubFrameSequenceNumber(TUint aSubFrameSequenceNumber)
+ {
+ if (aSubFrameSequenceNumber > (KECamMaxTotalSubFrames-1) )
+ {
+ return KErrOverflow;
+ }
+ else
+ {
+ iSubFrameSequenceNumber = aSubFrameSequenceNumber;
+ return KErrNone;
+ }
+ }
+
+/**
+Total number of sub-frames needed in order to properly reconstruct the actual image.
+
+@return Total number of sub-frames which can reconstruct the actual image.
+
+@note It does not give the number of outstanding sub-frames needed to reconstruct the image.
+ This value will be same for every sub-frames needed to re-construct the actual image.
+ Maximum no. of total sub-frames is KECamMaxTotalSubFrames.
+
+@see CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::iTotalSubFrames
+*/
+EXPORT_C TUint CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::TotalSubFrames() const
+ {
+ return iTotalSubFrames;
+ }
+
+/**
+Sets the total number of sub-frames needed in order to properly reconstruct the actual image.
+
+@param aTotalSubFrames
+ Total number of sub-frames which can reconstruct the actual image.
+
+@return error code
+
+@note It does not give the number of outstanding sub-frames needed to reconstruct the image.
+ This value will be same for every sub-frames needed to re-construct the actual image.
+ Maximum no. of total sub-frames is KECamMaxTotalSubFrames.
+
+@note The set method will be used by the ECAM implementation in order to provide necessary information to the
+ clients when they receive the image buffers.
+
+@see CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::iTotalSubFrames
+*/
+EXPORT_C TInt CCamera::CCameraPreImageCaptureControl::TImageBufferInfo::SetTotalSubFrames(TUint aTotalSubFrames)
+ {
+ if (aTotalSubFrames > KECamMaxTotalSubFrames)
+ {
+ return KErrOverflow;
+ }
+ else
+ {
+ iTotalSubFrames = aTotalSubFrames;
+ return KErrNone;
+ }
+ }
+
+/**
+Retrieves the maximum number of spots present from where the camera hardware collects the focussing information.
+
+@param aFocusMode
+ The focus mode for which the number of spots have to be retrieved.
+
+@param aMaximumSpots
+ Retrieves the maximum number of spots for the given focus mode.
+
+@leave May leave with any error code.
+
+@note The maximum number of spots is supposed to be less than or equal to KMaxNumberOfFocusSpots.
+
+@see CCameraViewFinder::GetSpotsPositionL
+*/
+void CCamera::CCameraPreImageCaptureControl::GetMaximumSpotsL(CCamera::CCameraAdvancedSettings::TFocusMode /*aFocusMode*/, TInt& /*aMaximumSpots*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Retrieves the supported spot combinations for the given focus mode.
+
+@param aFocusMode
+ The focus mode for which the supported spot combinations have to be retrieved.
+
+@param aPossibleSpotCombinations
+ Each member of this array is of type TUint and is a bit field where every bit represents presence or absence of
+ a particular spot.
+
+@leave May leave with any error code.
+
+@note Since maximum number of spots can go up to KMaxNumberOfFocusSpots, it can be easily known which spots are present
+ in a particular array entry (every array entry is a bit field and every bit represents presence or absence of a
+ particular spot). For example,if KMaxNumberOfFocusSpots is 32 and if a particular array entry is 0x07001000. This
+ means that spot number 13,25,26 and 27 are being represented.
+
+@see CCameraViewFinder::GetSpotsPositionL
+*/
+void CCamera::CCameraPreImageCaptureControl::GetSupportedSpotsCombinationL(CCamera::CCameraAdvancedSettings::TFocusMode /*aFocusMode*/, RArray<TUint>& /*aPossibleSpotCombinations*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Retrieves the focussing spot combination which is used to provide focussing feedback in a particular focussing mode.
+
+@param aFocusMode
+ The focussing mode in which the spot combination has to be used for retrieving feedback.
+
+@param aSpotsCombination
+ The retrieved spot combination. It is a bitfield marking the presence or absence of spots.
+ This is dependent on the focusssing mode.
+
+@leave May leave with any error code.
+
+@see CCameraViewFinder::GetSpotsPositionL
+*/
+void CCamera::CCameraPreImageCaptureControl::GetSpotsCombinationL(CCamera::CCameraAdvancedSettings::TFocusMode /*aFocusMode*/, TUint& /*aSpotsCombination*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Sets a particular spot combination which can be used to provide focussing feedback in a particular focussing mode.
+
+@param aFocusMode
+ The focussing mode in which the spot combination has to be used for retrieving feedback.
+
+@param aSpotsCombination
+ The spot combination to be set. It is a bitfield marking the presence or absence of spots.
+
+@note Event KUidECamEvent2ImageCaptureControlSpotCombination is used to notify the requesting client about setting of a particular
+ spot combination.
+
+@note Event KUidECamEvent2ImageCaptureControlFocussingInformation is used to provide the focussing feedback, whenever applicable.
+
+@see CCameraViewFinder::GetSpotsPositionL
+*/
+void CCamera::CCameraPreImageCaptureControl::SetSpotsCombination(CCamera::CCameraAdvancedSettings::TFocusMode /*aFocusMode*/, TUint /*aSpotsCombination*/)
+ {
+ return;
+ }
+
+/**
+Retrieves whether the streamed image is supported or not. Sub-frames are used if streamed image output is used.
+
+@param aIsStreamedImageSupported
+ ETrue indicates that streamed image is supported.
+ EFalse indicates that streamed image is not supported.
+
+@leave May leave with any error code.
+*/
+void CCamera::CCameraPreImageCaptureControl::GetStreamedImageSupportInfoL(TBool& /*aIsStreamedImageSupported*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Enables the streamed image output and hence the use of sub-frames to collect image data. MCameraImageBuffer will be
+used in place of MCameraBuffer in order to provide sub-frames details. Every MCaptureImageObserver::ImageBufferReady()
+will retrieve only one sub-frame. Full image will be reconstructed after receiving all the sub-frames.
+
+@leave May leave with any error code.
+
+@note The corresponding image capture call is considered to be complete only when every sub-frame has been received.
+*/
+void CCamera::CCameraPreImageCaptureControl::EnableSubFramesL()
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Disable the streamed image output and hence the use of sub-frames to collect image data. Every
+MCaptureImageObserver::ImageBufferReady() will retrieve one full still image.
+
+@leave May leave with any error code.
+*/
+void CCamera::CCameraPreImageCaptureControl::DisableSubFramesL()
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Retrieves the current state about streamed image option or sub-frame usage.
+
+@param iIsSubFrameEnabled
+ ETrue indicates that streamed image option is currently being used.
+ EFalse indicates that streamed image option is currently not being used.
+
+@leave May leave with any error code.
+*/
+void CCamera::CCameraPreImageCaptureControl::GetSubFramesStateL(TBool& /*aIsSubFrameEnabled*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Retrieves the list of transformations (image processing) available in case streamed image is used.
+
+@param aStreamedImageSupportedTransformations
+ Retrieves an array of uids which represents those image processing attributes which are supported for streamed
+ image.
+
+@leave May leave with any error code.
+*/
+void CCamera::CCameraPreImageCaptureControl::GetStreamedImageSupportedTransformationsL(RArray<TUid>& /*aStreamedImageSupportedTransformations*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Retrieves the panorama mode support.
+
+@param aIsPanoModeSupported
+ Informs whether the pano mode is supported or not.
+
+@param aSupportedStitchingOption
+ Retrieves the supported image stitching option available with the ECAM implementation for the images captured
+ under panorama mode. It is a TInt represepesting bitfield for supported TStitchingOption
+ If pano mode is not supported, this has to be 0.
+
+@leave May leave with any error code.
+*/
+void CCamera::CCameraPreImageCaptureControl::GetPanoModeSupportInfoL(TBool& /*aIsPanoModeSupported*/, TInt& /*aSupportedStitchingOption*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Starts panning the viewfinder. Any image captured under pano mode gets overlaid on top of viewfinder and in a
+particular direction.
+
+This method starts panorama mode for every viewfinder screen.
+
+@param aStitchingOption
+ Enum value EStitchingOptionEnable instructs implementation to perform stitching of images captured under pano mode.
+ So only one completion feedback will be given to the client regarding image being ready.(either through
+ MCaptureImageObserver::ImageBufferReady() or through MCaptureImageObserver::ImageDirectSavingCompleted())
+
+ Enum value EStitchingOptionDisable instructs implemenation to provide the images unstitched.
+
+ Enum value EStitchingOptionNone should be passed only when stitching option is not supported by the
+ implementation.
+
+@note Event KUidECamEventImageCaptureControlStartPanoMode is used to notify clients about the start of panorama mode.
+
+@note Calling the StartPanoMode twice and without stopping it will result in an error.
+*/
+void CCamera::CCameraPreImageCaptureControl::StartPanoMode(CCamera::CCameraPreImageCaptureControl::TStitchingOption /*aStitchingOption*/)
+ {
+ return;
+ }
+
+/**
+Starts panning the viewfinder. Any image captured under pano mode gets overlaid on top of viewfinder and in a
+particular direction.
+
+This method starts panorama mode only on few specified viewfinder screens.
+
+@param aStitchingOption
+ Enum value EStitchingOptionEnable instructs implementation to perform stitching of images captured under pano mode. So
+ only one completion feedback will be given to the client regarding image being ready.(either through
+ MCaptureImageObserver::ImageBufferReady() or through MCaptureImageObserver::ImageDirectSavingCompleted())
+
+ Enum value EStitchingOptionDisable instructs implemenation to provide the images unstitched.
+
+ Enum value EStitchingOptionNone should be passed only when stitching option is not supported by the
+ implementation.
+
+@param aVFHandles
+ The array of viewfinder handles on which the panorama will run. Every member of this array is a valid viewfinder
+ handle.
+
+@note Event KUidECamEventImageCaptureControlStartPanoMode is used to notify clients about the start of panorama mode.
+
+@note Calling the StartPanoMode twice and without stopping it will result in an error.
+*/
+void CCamera::CCameraPreImageCaptureControl::StartPanoMode(CCamera::CCameraPreImageCaptureControl::TStitchingOption /*aStitchingOption*/, const RArray<TInt>& /*aVFHandles*/)
+ {
+ return;
+ }
+
+/**
+Retrieves the direction of panning.
+
+@param aPanoDirection
+ The currently used panning direction.
+
+@leave May leave with any error code.
+
+@note When the image is captured, the cropped version of the captured image covering a full rectangle is overlaid at
+ the left hand side of the display screen (if TPanoDirection is EPanoRight) and viewfinder runs below that.
+
+@note If the method leaves, the reference to CCamera::CCameraPreImageCaptureControl::TPanoDirection i.e. aPanoDirection is
+ not guaranteed to be valid.
+*/
+void CCamera::CCameraPreImageCaptureControl::GetPanoDirectionL(CCamera::CCameraPreImageCaptureControl::TPanoDirection& /*aPanoDirection*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Sets the direction of panning
+
+@param aPanoDirection
+ The desired panning direction.
+
+@note Event KUidECamEventImageCaptureControlPanoDirection is used to notify the requesting client about setting of the
+ panning direction.
+*/
+void CCamera::CCameraPreImageCaptureControl::SetPanoDirection(CCamera::CCameraPreImageCaptureControl::TPanoDirection /*aPanoDirection*/)
+ {
+ return;
+ }
+
+/**
+Stop the panorama mode.
+
+@param aStitchedImageRetrieval
+ Enum value EStitchedImageRetrieve indicates that images has to be stitched if initially image stitching was
+ enabled.
+
+ Enum value EStitchedImageDiscard indicates that images should not be stitched (discarded) if initially image
+ stitching was enabled. No image ready notification returned to the client in this case. This may happen when
+ client is not happy with the panned images captured so far.
+
+@leave May leave with any error code.
+
+@note If image stitching option was not enabled while starting the pano mode, the 'aStitchedImageRetrieval' parameter is
+ ignored by the implementation.
+*/
+void CCamera::CCameraPreImageCaptureControl::StopPanoModeL(CCamera::CCameraPreImageCaptureControl::TStitchedImageRetrieval /*aStitchedImageRetrieval*/)
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Retrieves the supported color space.
+
+@param aSupportedColorSpace
+ A bitfield representing the supported TColorSpace
+
+@leave May leave with any error code.
+*/
+void CCamera::CCameraPreImageCaptureControl::GetSupportedColorSpaceL(TUint& /*aSupportedColorSpace*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Get the current color space being used.
+
+@param aColorSpace
+ Currently used color space.
+
+@leave May leave with any error code.
+*/
+void CCamera::CCameraPreImageCaptureControl::GetColorSpaceL(CCamera::CCameraPreImageCaptureControl::TColorSpace& /*aColorSpace*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Set a particular color space.
+
+@param aColorSpace
+ The color space value to be set.
+
+@note Event KUidECamEventImageCaptureControlColorSpace is used to notify clients about setting the color space.
+*/
+void CCamera::CCameraPreImageCaptureControl::SetColorSpace(CCamera::CCameraPreImageCaptureControl::TColorSpace /*aColorSpace*/)
+ {
+ return;
+ }
+
+/**
+Synchronous marker method in order to provide selective settings for embedded still captures only (not to video capture)
+
+@note Any feature setting issued after calling this method gets saved on the implementation side and the actual
+ setting performed before still images (embedded still captures) are taken.
+
+@note Any getter method issued after calling this method gives feature value which would be used for still images
+ (embedded still captures). For example, if WhiteBalance set for 'Auto' for EmbeddedStillCapture but 'Cloudy' otherwise, then
+ under the marker method, white balance will show 'Cloudy'.
+
+@note Event KUidECamEventFailedEmbeddedStillCaptureSetting notified to the client if in case any embedded still capture
+ setting gets failed during the time they are actually set. After this notification, client can issue
+ GetFailedEmbeddedStillCaptureSettingsL to retrieve the list of failed settings.
+
+@leave May leave with any error code.
+*/
+void CCamera::CCameraPreImageCaptureControl::StartEmbeddedStillCaptureSettingsL()
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Marker method to mark end of providing selective settings for embedded still captures only (not to video capture)
+
+@note Any feature setting issued after calling this method is treated as a normal setting operation.
+
+@note Any getter method issued after calling this method gives feature value which would be used normally.
+
+@leave May leave with any error code.
+*/
+void CCamera::CCameraPreImageCaptureControl::EndEmbeddedStillCaptureSettingsL()
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Retrieves the list of failed embedded still capture settings.
+
+@param aFailedEmbeddedStillCaptureSettings
+ Array of uids which reflects the failed embedded still capture settings.
+
+@note This method may be issued after receiving the notification KUidECamEventFailedEmbeddedStillCaptureSetting.
+*/
+void CCamera::CCameraPreImageCaptureControl::GetFailedEmbeddedStillCaptureSettingsL(RArray<TUid>& /*aFailedEmbeddedStillCaptureSettings*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+@publishedPartner
+Factory function for creating the CCameraImageCapture object. This will be called only by the concrete implementation
+of MCameraPreImageCaptureControl::PrepareImageCapture(const TPrepareImageParameters& aPrepareImageParameters,
+MCaptureImageObserver& aCaptureImageObserver).
+
+@param aCamera
+ a reference to a CCamera object providing the settings.
+
+@param aPrepareImageParameters
+ TPrepareImageParameters tied with this image capture class object.
+
+@param aCaptureImageObserver
+ Reference to the capture image observer.
+
+@return a pointer to a fully constructed CCameraImageCapture object.
+
+@leave KErrNoMemory Out of memory Or any other system-wide error code.
+*/
+EXPORT_C CCamera::CCameraImageCapture* CCamera::CCameraImageCapture::CreateL(CCamera& aCamera, const CCamera::CCameraPreImageCaptureControl
+ ::TPrepareImageParameters& aPrepareImageParameters, MCaptureImageObserver& aCaptureImageObserver)
+ {
+ CCamera::CCameraImageCapture* self = new (ELeave)CCamera::CCameraImageCapture(aCamera);
+ CleanupStack::PushL(self);
+ self->ConstructL(aPrepareImageParameters, aCaptureImageObserver);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+/**
+CCameraImageCapture Constructor.
+
+@param aOwner
+ a reference to a CCamera object.
+*/
+CCamera::CCameraImageCapture::CCameraImageCapture(CCamera& aOwner):
+ iOwner(aOwner),
+ iImpl(NULL)
+ {
+ }
+
+/**
+CCameraImageCapture second phase constructor.
+
+Function used to initialise internal state of the object. Uses reference to the camera to retrieve
+CameraImageCapture interface pointer.
+
+@param aPrepareImageParameters
+ TPrepareImageParameters tied with this image capture class object.
+
+@param aCaptureImageObserver
+ Reference to the capture image observer.
+
+@leave KErrNoMemory Out of memory or any other system-wide error code
+*/
+void CCamera::CCameraImageCapture::ConstructL(const CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters&
+ aPrepareImageParameters, MCaptureImageObserver& aCaptureImageObserver)
+ {
+ iImpl = static_cast<MCameraImageCapture*>(iOwner.CustomInterface(KECamMCameraImageCaptureUid));
+
+ if (iImpl == NULL)
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ iImpl->SetPrepareImageParameters(aPrepareImageParameters);
+ iImpl->SetCaptureImageObserver(aCaptureImageObserver);
+ }
+
+/**
+Returns the MCameraImageCapture* which will be used by the CCameraPostImageCaptureControl for the concrete
+implementation. Both CCameraImageCapture and CCameraPostImageCaptureControl are made to use the same interface
+for implementation.
+
+@return Pointer to the MCameraImageCapture class.
+*/
+MCameraImageCapture* CCamera::CCameraImageCapture::Impl() const
+ {
+ return iImpl;
+ }
+
+/**
+Destructor
+Destruction of this class is equivalent to releasing the resources owned in order to prepare and allocate memory for
+capturing images.
+
+@note The child objects created out of this image capture class object shall be delete beforehand. Various child objects
+ are snapshot, image processing and histograms.
+*/
+EXPORT_C CCamera::CCameraImageCapture::~CCameraImageCapture()
+ {
+ if (iImpl != NULL)
+ {
+ //cancel any outstanding capture image operation at implementation level.
+ //destory every CCameraPostImageCaptureControl object created by the implementation.
+ iImpl->Release(this);
+ }
+ }
+
+/**
+Retrieve pointer to histogram API in order to use it specifically for a specific still image capture.
+
+@return Pointer to use histogram API specifically for the given still image capture.
+
+@leave May leave with any error code.
+
+@note Different types of histogram may be used for a specific still image capture. Every time this method will be called
+ on the CCameraImageCapture class object, a new type of histogram will be created.
+*/
+EXPORT_C CCamera::CCameraV2Histogram* CCamera::CCameraImageCapture::CreateHistogramHandleL() const
+ {
+ MImplementationFactory* implFactory = NULL;
+
+ iImpl->CreateHistogramImplFactoryL(implFactory);
+
+ CleanupReleasePushL(*implFactory);
+ CCamera::CCameraV2Histogram* histogram = CCamera::CCameraV2Histogram::CreateL(iOwner, *implFactory);
+ CleanupStack::Pop(implFactory);
+
+ implFactory->Release();
+ return histogram;
+ }
+
+/**
+Retrieve pointer to snapshot API in order to use it specifically for a specific still image capture.
+
+@param aClientViewFinderId
+ The client viewfinder on which this client snapshot will be displayed.
+
+@return Pointer to use snapshot API specifically for the given still image capture.
+
+@leave May leave with any error code.
+*/
+EXPORT_C CCamera::CCameraSnapshot* CCamera::CCameraImageCapture::GetSnapshotHandleL(TInt aClientViewFinderId) const
+ {
+ MImplementationFactory* implFactory = NULL;
+
+ iImpl->GetSnapshotImplFactoryL(implFactory);
+
+ CleanupReleasePushL(*implFactory);
+ CCamera::CCameraSnapshot* snapshot = CCamera::CCameraSnapshot::CreateL(iOwner, *implFactory, aClientViewFinderId);
+ CleanupStack::Pop(implFactory);
+
+ implFactory->Release();
+
+ return snapshot;
+ }
+
+/**
+Retrieve pointer to image processing API in order to use it specifically for tha specific still image capture.
+
+@return Pointer to use image processing API specifically for the given still image capture.
+
+@leave May leave with any error code.
+*/
+EXPORT_C CCamera::CCameraImageProcessing* CCamera::CCameraImageCapture::GetTransformationHandleL() const
+ {
+ MImplementationFactory* implFactory = NULL;
+
+ iImpl->GetImageProcessingImplFactoryL(implFactory);
+
+ CleanupReleasePushL(*implFactory);
+ CCamera::CCameraImageProcessing* imgProc = CCamera::CCameraImageProcessing::CreateL(iOwner, *implFactory);
+ CleanupStack::Pop(implFactory);
+
+ implFactory->Release();
+ return imgProc;
+ }
+
+/**
+Retrieves the prepare image parameters tied with this image capture class object.
+
+@param aPrepareImageParameters
+ TPrepareImageParameters tied with this image capture class object.
+
+@leave May leave with any error code
+*/
+EXPORT_C void CCamera::CCameraImageCapture::GetPrepareImageParametersL(CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters& aPrepareImageParameters) const
+ {
+ iImpl->GetPrepareImageParametersL(aPrepareImageParameters);
+ }
+
+/**
+Performant image capture. This postpones the processing options involved with current image captured in order to
+capture/prepare for next images.
+
+Previously created CCameraPostImageCaptureControl objects for this CCameraImageCapture object will become unavailable
+after this call.
+
+@note Further images (either still or video) can be captured only after receiving the notification
+ KUidECamEventReadyForNextCapture. Current image may be outstanding in order to undergo any processing options.
+
+@note Callback MCaptureImageObserver::ImageCaptureComplete() informs the client that the image capture operation has
+ been completed. The CCameraImageCapture& can be further used for next image captures.
+ In case of continuous drive modes, this callback will be received by the client only once in order to provide the
+ result of the whole image capture operation.
+
+@note Callback MCaptureImageObserver::ImageBufferReady() provides client the link to CCameraPostImageCaptureControl&
+ which helps retrieving the image buffer. In case of continuous drive modes, this callback will be received by the
+ client for every individual image. In case of single shots, this will be received by the client only once in
+ order to retrieve the image buffer.
+*/
+EXPORT_C void CCamera::CCameraImageCapture::CaptureImage()
+ {
+ // MCameraImageCapture concrete implementation will use CCameraImageCapture& to pass in callbacks and to create
+ // CCameraPostImageCaptureControl object for every image and pass it to the client.
+ // Previously created CCameraPostImageCaptureControl objects will become unavailable after this call.
+ iImpl->CaptureImage(this);
+ }
+
+/**
+Cancels the outstanding Capture Image operation. This will also cancel any outstanding processing options associated with
+the concerned Capture Image operation. This method is synchronous. Hence, no callback shall be received with respect
+to concerned capture image operation.
+*/
+EXPORT_C void CCamera::CCameraImageCapture::CancelCaptureImage()
+ {
+ iImpl->CancelCaptureImage();
+ }
+
+/**
+Retrieves the number of images exposed to sensor with respect to a specific image capture command. Any processing options
+associated with these images may be pending.
+
+@param aNumImagesExposed
+ Retrieves the number of images exposed to sensor till now. For single shot type of drive modes, this value will be
+ one after the image gets exposed to sensor. For multiple shot type of drive modes, this value will be the number of
+ images exposed till now.
+
+@note May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraImageCapture::GetNumImagesExposedL(TUint& aNumImagesExposed) const
+ {
+ iImpl->GetNumImagesExposedL(aNumImagesExposed);
+ }
+
+/**
+Retrieves the total number of images which is supposed to be captured with respect to a specific image capture command.
+
+@param aNumTotalImages
+ Retrieves the total number of images supposed to be captured. For single shot type of drive modes, this value will be
+ always be one. For multiple shot type of drive modes, this value will be greater than one.
+
+@note May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraImageCapture::GetNumTotalImagesL(TUint& aNumTotalImages) const
+ {
+ iImpl->GetNumTotalImagesL(aNumTotalImages);
+ }
+
+/**
+Retrieves the post capture control handle based on the ID passed to it. Client may use this handle for post capture
+operations of the image identified by the ID. The ID is received by the clients through MCaptureImageObserver callbacks.
+
+@param aPostCaptureControlHandle
+ Retrieves pointer to the post capture control class object.
+
+@param aPostCaptureControlId
+ The ID used to retrieve the post capture control handle of the captured image.
+
+@note May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraImageCapture::GetPostCaptureControlHandleL(CCamera::CCameraPostImageCaptureControl*&
+ aPostCaptureControlHandle, TPostCaptureControlId aPostCaptureControlId) const
+ {
+ iImpl->GetPostCaptureControlHandleL(aPostCaptureControlHandle, aPostCaptureControlId);
+ }
+
+/**
+Prioritises the Capture Image operation. This implies that any processing options associated with the concerned Capture
+Image operation will be prioritised over other pending processing options.
+
+@param aCaptureImagePriority
+ The desired level of priority.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraImageCapture::SetCaptureImagePriorityL(TECamImagePriority aCaptureImagePriority)
+ {
+ iImpl->SetCaptureImagePriorityL(aCaptureImagePriority);
+ }
+
+/**
+Retrieves the priority of the Capture Image operation.
+
+@param aCaptureImagePriority
+ Retrieves the current level of priority.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraImageCapture::GetCaptureImagePriorityL(TECamImagePriority& aCaptureImagePriority) const
+ {
+ iImpl->GetCaptureImagePriorityL(aCaptureImagePriority);
+ }
+
+/**
+Pauses processing options associated with the concerned Capture Image operation.
+
+@param aProcessingTypes
+ The processing options which need to be paused.
+*/
+EXPORT_C void CCamera::CCameraImageCapture::PauseProcessing(TUint aProcessingTypes)
+ {
+ iImpl->PauseProcessing(aProcessingTypes);
+ }
+
+/**
+Resumes processing options associated with the concerned Capture Image operation.
+
+@param aProcessingTypes
+ The processing options which need to be resumed.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraImageCapture::ResumeProcessingL(TUint aProcessingTypes)
+ {
+ iImpl->ResumeProcessingL(aProcessingTypes);
+ }
+
+/**
+@publishedPartner
+
+Factory function for creating the CCameraPostImageCaptureControl object for every individual image to be captured.
+This method is supposed to be called only by concrete implementation of MCameraImageCapture. It will be the client's
+responsibility to destroy it whenever it does not need it any more. (Possible milestone for deletion: Individual image cancellation completed,
+individual image saved). Previously created CCameraPostImageCaptureControl objects for the CCameraImageCapture object will
+become unavailable if CaptureImage() is called while previous call on the same object is still outstanding.
+
+@param aCameraImageCapture
+ A pointer to the CCameraImageCapture which was used to issue the Capture Image call.
+
+@param aPostCaptureControlId
+ The ID used for identification of the post capture control class object by the clients. The ID is passed by the
+ implementation while creating this object.
+
+@return a pointer to a fully constructed CCameraPostImageCaptureControl object.
+
+@leave KErrNoMemory Out of memory Or any other system-wide error code.
+*/
+EXPORT_C CCamera::CCameraPostImageCaptureControl* CCamera::CCameraPostImageCaptureControl::CreateL(CCameraImageCapture* aCameraImageCapture, TPostCaptureControlId aPostCaptureControlId)
+ {
+ CCamera::CCameraPostImageCaptureControl* self = new (ELeave)CCamera::CCameraPostImageCaptureControl(aCameraImageCapture, aPostCaptureControlId);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+/**
+CCameraPostImageCaptureControl Constructor.
+
+@param aOwner
+ a reference to a CCamera object.
+
+@param aPostCaptureControlId
+ The ID used for identification of the post capture control class object by the clients. The ID is passed by the
+ implementation while creating this object.
+*/
+CCamera::CCameraPostImageCaptureControl::CCameraPostImageCaptureControl(CCamera::CCameraImageCapture* aCameraImageCapture, TInt aPostCaptureControlId):
+ iPostCaptureControlId(aPostCaptureControlId),
+ iCameraImageCapture(aCameraImageCapture),
+ iImpl(NULL)
+ {
+ }
+
+/**
+CCameraPostImageCaptureControl second phase constructor.
+
+Function used to initialise internal state of the object. Uses CCameraImageCapture* to retrieve
+CCameraPostImageCaptureControl interface pointer. This interface pointer is provided by 'CCameraImageCapture interface'.
+
+@leave KErrNoMemory Out of memory or any other system-wide error code
+*/
+void CCamera::CCameraPostImageCaptureControl::ConstructL()
+ {
+ iImpl = static_cast<MCameraPostImageCaptureControl*>(iCameraImageCapture->Impl()->CreatePostImageCaptureControlImpl(KECamMCameraPostImageCaptureControlUid, iPostCaptureControlId));
+
+ if (iImpl == NULL)
+ {
+ User::Leave(KErrNotSupported);
+ }
+ }
+
+/**
+Destructor
+*/
+EXPORT_C CCamera::CCameraPostImageCaptureControl::~CCameraPostImageCaptureControl()
+ {
+ iCameraImageCapture = NULL;
+ if(iImpl != NULL)
+ {
+ //cancel any outstanding image at implementation level.
+ iImpl->Release(iPostCaptureControlId);
+ }
+ }
+
+/**
+Retrieves the ID which this class object represents. The ID is unique for this class object and is used for identification
+purpose.
+
+@param aPostCaptureControlId
+ Reference to the post capture control ID.
+*/
+EXPORT_C void CCamera::CCameraPostImageCaptureControl::GetPostCaptureControlId(TPostCaptureControlId& aPostCaptureControlId) const
+ {
+ aPostCaptureControlId = iPostCaptureControlId;
+ }
+
+/**
+Retrieves the CCameraImageCapture* associated with the object of this class. This implies that the individual image, which
+the object of this class is referring to, belongs to the CaptureImage operation issued by CCameraImageCapture* object.
+
+@return Pointer to CCameraImageCapture associated with the object of this class.
+*/
+EXPORT_C CCamera::CCameraImageCapture* CCamera::CCameraPostImageCaptureControl::ImageCaptureHandle() const
+ {
+ return iCameraImageCapture;
+ }
+
+/**
+Retrieves the sequence number of the image being represented by this post capture control object. The sequence number
+specifies the index of the individual image if, in case, the multiple shot type of drive mode is being used. The first
+individual image which is exposed to the sensor has a sequence number of zero. In case of single shot type of drive mode,
+the sequence number will be zero.
+
+@param aSequenceNumber
+ Retrieves the sequence number of the image.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPostImageCaptureControl::GetImageSequenceNumberL(TUint& aSequenceNumber) const
+ {
+ iImpl->GetImageSequenceNumberL(aSequenceNumber);
+ }
+
+/**
+Cancels the outstanding individual image which the object of this class is referring to. This will also cancel any outstanding
+processing options associated with this individual image. This method is synchronous. Hence, no callback shall be received
+for this individual image.
+*/
+EXPORT_C void CCamera::CCameraPostImageCaptureControl::CancelImage()
+ {
+ iImpl->CancelImage();
+ }
+
+/**
+Prioritises the individual image which the object of this class is referring to. This implies that any processing
+options associated with this individual image will be prioritised over other pending processing options.
+
+@param aImagePriority
+ The desired level of priority.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPostImageCaptureControl::SetImagePriorityL(TECamImagePriority aImagePriority)
+ {
+ iImpl->SetImagePriorityL(aImagePriority);
+ }
+
+/**
+Retrieves the priority of the individual image which the object of this class is referring to.
+
+@param aImagePriority
+ The current level of priority.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPostImageCaptureControl::GetImagePriorityL(TECamImagePriority& aImagePriority) const
+ {
+ iImpl->GetImagePriorityL(aImagePriority);
+ }
+
+/**
+Pauses processing options associated with the individual image which the object of this class is referring to.
+
+@param aProcessingTypes
+ The processing options which need to be paused.
+*/
+EXPORT_C void CCamera::CCameraPostImageCaptureControl::PauseProcessing(TUint aProcessingTypes)
+ {
+ iImpl->PauseProcessing(aProcessingTypes);
+ }
+
+/**
+Resumes processing options associated with the individual image which the object of this class is referring to.
+
+@param aProcessingTypes
+ The processing options which need to be resumed.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPostImageCaptureControl::ResumeProcessingL(TUint aProcessingTypes)
+ {
+ iImpl->ResumeProcessingL(aProcessingTypes);
+ }
+
+/**
+Retrieves the image buffer which contains the individual image captured. This method should be called by the client as a
+result of receiving the callback MCaptureImageObserver::ImageBufferReady(), if the error information received is
+satisfactory.
+
+@param aCameraImageBuffer
+ A reference to an MCameraImageBuffer if successful, or NULL if not successful.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPostImageCaptureControl::GetImageBufferL(MCameraImageBuffer& aCameraImageBuffer) const
+ {
+ iImpl->GetImageBufferL(aCameraImageBuffer);
+ }
+
+/**
+Retrieves the state of the individual image which the object of this class is referring to.
+
+@param aImageState
+ Retrieves the current state of the individual image.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPostImageCaptureControl::GetImageStateL(TImageState& aImageState) const
+ {
+ iImpl->GetImageStateL(aImageState);
+ }
+
+/**
+Retrieves the state of the individual image buffer.
+
+@param aBufferState
+ Retrieves the current state of the individual image buffer.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraPostImageCaptureControl::GetBufferStateL(TBufferState& aBufferState) const
+ {
+ iImpl->GetBufferStateL(aBufferState);
+ }
+
+/**
+Factory function for creating the CCameraVideoCaptureControl object.
+
+@param aCamera
+ A reference to a CCamera object providing the settings.
+
+@param aCaptureVideoObserver
+ Reference to the capture video observer.
+
+@return a pointer to a fully constructed CCameraVideoCaptureControl object.
+
+@leave KErrNoMemory Out of memory Or any other system-wide error code.
+
+@leave KErrExtensionNotSupported When NewL/NewDuplicateL used instead of New2L/NewDuplicate2L.
+*/
+EXPORT_C CCamera::CCameraVideoCaptureControl* CCamera::CCameraVideoCaptureControl::NewL(CCamera& aCamera, MCaptureVideoObserver& aCaptureVideoObserver)
+ {
+ if(aCamera.CameraVersion() == KCameraDefaultVersion)
+ {
+ User::Leave(KErrExtensionNotSupported);
+ }
+
+ CCamera::CCameraVideoCaptureControl* self = new (ELeave)CCamera::CCameraVideoCaptureControl(aCamera);
+ CleanupStack::PushL(self);
+ self->ConstructL(aCaptureVideoObserver);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+/**
+CCameraVideoCaptureControl Constructor.
+
+@param aOwner
+ a reference to a CCamera object.
+*/
+CCamera::CCameraVideoCaptureControl::CCameraVideoCaptureControl(CCamera& aOwner):iOwner(aOwner), iImpl(NULL)
+ {
+ }
+
+/**
+CCameraVideoCaptureControl second phase constructor.
+
+Function used to initialise internal state of the object. Uses reference to the camera to retrieve
+Camera Video Capture Control interface pointer.
+
+@param aCaptureVideoObserver
+ Reference to the capture video observer.
+
+@leave KErrNoMemory Out of memory.
+*/
+void CCamera::CCameraVideoCaptureControl::ConstructL(MCaptureVideoObserver& aCaptureVideoObserver)
+ {
+ iImpl = static_cast<MCameraVideoCaptureControl*>(iOwner.CustomInterface(KECamMCameraVideoCaptureControlUid));
+
+ if (iImpl == NULL)
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ iImpl->SetCaptureVideoObserver(aCaptureVideoObserver);
+ }
+
+/**
+Destructor
+
+@note The child objects created out of this video capture control class object shall be delete beforehand. Various child
+ objects are snapshot, image processing and histograms.
+*/
+EXPORT_C CCamera::CCameraVideoCaptureControl::~CCameraVideoCaptureControl()
+ {
+ if (iImpl != NULL)
+ {
+ iImpl->Release();
+ }
+ }
+
+/**
+Retrieve pointer to histogram API in order to use it specifically for the video capture.
+
+@return Pointer to use histogram API specifically for the video capture.
+
+@leave May leave with any error code.
+
+@note Different types of histogram may be used for video capture. Every time this method will be called
+ on the CCameraVideoCaptureControl class object, a new type of histogram will be created.
+*/
+EXPORT_C CCamera::CCameraV2Histogram* CCamera::CCameraVideoCaptureControl::CreateHistogramHandleL() const
+ {
+ MImplementationFactory* implFactory = NULL;
+
+ iImpl->CreateHistogramImplFactoryL(implFactory);
+
+ CleanupReleasePushL(*implFactory);
+ CCamera::CCameraV2Histogram* histogram = CCamera::CCameraV2Histogram::CreateL(iOwner, *implFactory);
+ CleanupStack::Pop(implFactory);
+
+ implFactory->Release();
+ return histogram;
+ }
+
+
+/**
+Retrieve pointer to snapshot API in order to use it specifically for the video capture.
+
+@param aClientViewFinderId
+ The client viewfinder on which this client snapshot will be displayed.
+
+@return Pointer to use snapshot API specifically for the video capture.
+
+@leave May leave with any error code.
+*/
+EXPORT_C CCamera::CCameraSnapshot* CCamera::CCameraVideoCaptureControl::GetSnapshotHandleL(TInt aClientViewFinderId) const
+ {
+ MImplementationFactory* implFactory = NULL;
+
+ iImpl->GetSnapshotImplFactoryL(implFactory);
+
+ CleanupReleasePushL(*implFactory);
+ CCamera::CCameraSnapshot* snapshot = CCamera::CCameraSnapshot::CreateL(iOwner, *implFactory, aClientViewFinderId);
+ CleanupStack::Pop(implFactory);
+
+ implFactory->Release();
+
+ return snapshot;
+ }
+
+/**
+Retrieve pointer to image processing API in order to use it specifically for the video capture.
+
+@return Pointer to use image processing API specifically for the video capture.
+
+@leave May leave with any error code.
+*/
+EXPORT_C CCamera::CCameraImageProcessing* CCamera::CCameraVideoCaptureControl::GetTransformationHandleL() const
+ {
+ MImplementationFactory* implFactory = NULL;
+
+ iImpl->GetImageProcessingImplFactoryL(implFactory);
+
+ CleanupReleasePushL(*implFactory);
+ CCamera::CCameraImageProcessing* imgProc = CCamera::CCameraImageProcessing::CreateL(iOwner, *implFactory);
+ CleanupStack::Pop(implFactory);
+
+ implFactory->Release();
+ return imgProc;
+ }
+
+/**
+Retrieves the supported video formats for a given resolution.
+
+@param aVideoFormatsSupported
+ A bit field which retrieves the supported video formats for a given resolution.
+ Formats have been defined as CCamera::TFormat
+
+@param aSize
+ The resolution (or size) for which the total number of supported video formats have to be retrieved.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::GetVideoFormatsSupportedL(TUint& aVideoFormatsSupported, const TSize& aSize) const
+ {
+ iImpl->GetVideoFormatsSupportedL(aVideoFormatsSupported, aSize);
+ }
+
+/**
+Retrieves the supported pixel aspect ratio for a given resolution in case of video.
+
+@param aPixelAspectsSupported
+ A bit field which retrieves the supported pixel aspect ratio for a given resolution.
+ Pixel aspect ratio have been defined as CCamera::CCameraAdvancedSettings::TPixelAspectRatio
+
+@param aVideoFormat
+ The video format for which the supported pixel aspect ratio have to be retrieved.
+
+@param aSize
+ The resolution (or size) for which the supported pixel aspect ratio have to be retrieved.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::GetPixelAspectsSupportedL(TUint& aPixelAspectsSupported, CCamera::TFormat aVideoFormat, const TSize& aSize) const
+ {
+ iImpl->GetPixelAspectsSupportedL(aPixelAspectsSupported, aVideoFormat, aSize);
+ }
+
+/**
+Informs whether or not the 'embedded still capture' feature is supported. Allowing still image capture in between on-going
+video capture is referred to as embedded still capture.
+
+@param aSupportedEmbeddedStillCaptureTypes
+ Retrieves the supported embedded still capture. The TInt is retrieved as a bit field of supported TEmbeddedStillCaptureTypes.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::GetEmbeddedStillCaptureSupportInfoL(TInt& aSupportedEmbeddedStillCaptureTypes) const
+ {
+ iImpl->GetEmbeddedStillCaptureSupportInfoL(aSupportedEmbeddedStillCaptureTypes);
+ }
+
+/**
+Asynchronous method to prepare for video capture.
+
+Performs setup and allocation of memory prior to calling StartVideoCapture() to keep the latency of that function to a
+minimum.
+
+@param aPrepareVideoParameters
+ Parameters necessary to prepare for video capture.
+
+@note Event KUidECamEventVideoCaptureControlPrepareComplete is used to notify clients about completing the preparation
+ for video capture.
+
+@note Next PrepareVideoCapture can be called only after receiving the notification KUidECamEventReadyForNextPrepare.
+
+@note If some camera settings get affected because of desired video settings such as frame rate/frame size,
+ specific notifications will be sent to the client about camera settings being affected.
+
+@note Event KUidECamEventVideoCaptureControlSettingsRangeChanged: informs that range of certain camera settings have been changed.
+ Client may call GetRangeAffectedSettingsL(RArray<TUid>& aRangeAffectedSettings) const to get the list of affected camera settings.
+
+@note Event KUidECamEventVideoCaptureControlSettingsValueChanged: informs that value of certain camera settings have been changed.
+ Client may call GetValueAffectedSettingsL(RArray<TUid>& aValueAffectedSettings) const to get the list of affected camera settings.
+
+@note Event KUidECamEventVideoCaptureControlSettingsDisabled: informs that certain camera settings have been disabled.
+ Client may call GetDisabledSettingsL(RArray<TUid>& aDisabledSettings) const to get the list of affected camera settings.
+
+@see CCamera::PrepareVideoCaptureL(TFormat aFormat,TInt aSizeIndex,TInt aRateIndex,TInt aBuffersToUse,TInt aFramesPerBuffer)
+
+@see ReleaseVideoResource()
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::PrepareVideoCapture(const CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters& aPrepareVideoParameters)
+ {
+ iImpl->PrepareVideoCapture(aPrepareVideoParameters);
+ }
+
+/**
+Retrieves the camera settings whose range got affected once the desired video settings (frame rate/frame size) are in place.
+This method may be called by the client after receiving the notification KUidECamEventVideoCaptureControlSettingsRangeChanged.
+
+@param aRangeAffectedSettings
+ Retrieves the list of range affected settings
+
+@leave May leave with any error code.
+
+@see PrepareVideoCapture(const TPrepareVideoParameters& aPrepareVideoParameters)
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::GetRangeAffectedSettingsL(RArray<TUid>& aRangeAffectedSettings) const
+ {
+ iImpl->GetRangeAffectedSettingsL(aRangeAffectedSettings);
+ }
+
+/**
+Retrieves the camera settings whose value got affected once the desired video settings (frame rate/frame size) are in place.
+This method may be called by the client after receiving the notification KUidECamEventVideoCaptureControlSettingsValueChanged.
+
+@param aValueAffectedSettings
+ Retrieves the list of value affected settings
+
+@leave May leave with any error code.
+
+@see PrepareVideoCapture(const TPrepareVideoParameters& aPrepareVideoParameters)
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::GetValueAffectedSettingsL(RArray<TUid>& aValueAffectedSettings) const
+ {
+ iImpl->GetValueAffectedSettingsL(aValueAffectedSettings);
+ }
+
+/**
+Retrieves the camera settings whose value got affected once the desired video settings (frame rate/frame size) are in place.
+This method may be called by the client after receiving the notification KUidECamEventVideoCaptureControlSettingsDisabled.
+
+@param aDisabledSettings
+ Retrieves the list of disabled settings
+
+@leave May leave with any error code.
+
+@see PrepareVideoCapture(const TPrepareVideoParameters& aPrepareVideoParameters)
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::GetDisabledSettingsL(RArray<TUid>& aDisabledSettings) const
+ {
+ iImpl->GetDisabledSettingsL(aDisabledSettings);
+ }
+
+/**
+Frees the video resources which were set up as a result of CCameraVideoCaptureControl::PrepareVideoCapture call.
+If this methid is called while PrepareVideoCapture call is outstanding, then this will be equivalent to cancelling the
+PrepareVideoCapture call and release any allocated resources.
+
+@see PrepareVideoCapture(const TPrepareVideoParameters& aPrepareVideoParameters)
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::ReleaseVideoResource()
+ {
+ iImpl->ReleaseVideoResource();
+ }
+
+/**
+Starts the video capture. This operation gives priority to the low latency aspects.
+
+Video frames are send to client via MCaptureVideoObserver::VideoBufferReady().
+
+@leave May leave with any error code.
+
+@note This method is recommended to be used rather than CCamera::StartVideoCaptureL().
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::StartVideoCaptureL()
+ {
+ iImpl->StartVideoCaptureL();
+ }
+
+/**
+Stops the video capture. This operation gives priority to the low latency aspects.
+
+@note This method is recommended to be used rather than CCamera::StopVideoCapture().
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::StopVideoCapture()
+ {
+ iImpl->StopVideoCapture();
+ }
+
+/**
+Pauses the on-going video capture. MCaptureVideoObserver::VideoBufferReady()
+callback will not be received by the client until the video capture is resumed.
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::PauseVideoCapture()
+ {
+ iImpl->PauseVideoCapture();
+ }
+
+/**
+Resumes the on-going video capture. MCaptureVideoObserver::VideoBufferReady()
+callback will again be received by the client.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::ResumeVideoCaptureL()
+ {
+ iImpl->ResumeVideoCaptureL();
+ }
+
+/**
+Retrieves the fading effect state for video capture.
+
+@param aFadingEffectState
+ Retrieves the current fading effect state for video capture.
+
+@leave May leave with any error code.
+
+@internalTechnology
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::GetFadingEffectStateL(CCamera::CCameraVideoCaptureControl::TFadingEffectState& aFadingEffectState) const
+ {
+ iImpl->GetFadingEffectStateL(aFadingEffectState);
+ }
+
+/**
+Sets the fading effect state for video capture.
+
+@param aFadingEffectState
+ The desired fading effect state for video capture.
+
+@note Triggers a KUidECamEventVideoCaptureControlFadingEffect event notification.
+
+@internalTechnology
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::SetFadingEffectState(CCamera::CCameraVideoCaptureControl::TFadingEffectState aFadingEffectState)
+ {
+ iImpl->SetFadingEffectState(aFadingEffectState);
+ }
+
+/**
+Retrieves the current video capture state.
+
+@param aVideoCaptureState
+ Retrieves the current video capture state.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::GetVideoCaptureStateL(CCamera::CCameraVideoCaptureControl::TVideoCaptureState& aVideoCaptureState) const
+ {
+ iImpl->GetVideoCaptureStateL(aVideoCaptureState);
+ }
+
+/**
+Retrieves the various types of video capture supported.
+@param aSupportedVideoCaptureTypes
+ Retrieves the supported video capture type. The TInt is retrieved as a bit field of supported
+ TVideoCaptureType.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::GetVideoCaptureSupportInfoL(TInt& aSupportedVideoCaptureTypes) const
+ {
+ iImpl->GetVideoCaptureSupportInfoL(aSupportedVideoCaptureTypes);
+ }
+
+/*
+Retrieves the current prepare video parameters.
+
+@param aPrepareVideoParameters
+ Retrieves the current prepare video parameters.
+
+@leave May leave with any error code.
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::GetPrepareVideoParametersL(CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters& aPrepareVideoParameters) const
+ {
+ iImpl->GetPrepareVideoParametersL(aPrepareVideoParameters);
+ }
+
+/**
+Constructor for the TPrepareVideoParameters class.
+Sets the size and version of this class.
+*/
+EXPORT_C CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters::TPrepareVideoParameters()
+ {
+ iSize = sizeof(CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters);
+ iVersion = KECamPrepareVideoParametersCurrentVersion;
+ }
+
+/**
+Returns the size of the class. Used for extensibility by deriving from this base class and adding new member variables.
+Intended to be used for implementation of methods where this class reference is passed as function arguments.
+Implementation of such methods can find out the whether the actual class passed is base or the derived one. So, if a new application
+is made to run on an old implementation, an error may occur in such cases after the old implementation detects this by getting
+the size information of the T class passed. Also, if old application is made to run on a new implementation, this could be
+properly handled if the derived class variables handling is done in a proper 'if-else' statement.
+
+@return The size of the class.
+
+@note The size will be modified when the T-class gets updated.
+*/
+EXPORT_C TUint CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters::Size() const
+ {
+ return iSize;
+ }
+
+/**
+Returns the version of the class. Used for extensibility specially when the class members are not added but the Reserved
+members get used at a later stage.
+
+@return The version of this class.
+
+@note The version will be modified when the T-class gets updated.
+*/
+EXPORT_C TUint CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters::Version() const
+ {
+ return iVersion;
+ }
+
+/**
+Indicates whether or not the embedded still image capture state is enabled.
+
+@return Whether or not the embedded still image capture state is enabled.
+
+@see CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters::iIsEmbeddedStillCaptureEnabled
+*/
+EXPORT_C TBool CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters::IsEmbeddedStillCaptureEnabled() const
+ {
+ if (iIsEmbeddedStillCaptureEnabled)
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+/**
+Sets the state to inform whether or not the embedded still image capture state is enabled.
+
+@param aIsEmbeddedStillCaptureEnabled
+ ETrue implies embedded still capture state is enabled.
+ EFalse implies embedded still capture state is disabled.
+
+@see CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters::iIsEmbeddedStillCaptureEnabled
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters::SetEmbeddedStillCaptureState(TBool aIsEmbeddedStillCaptureEnabled)
+ {
+ iIsEmbeddedStillCaptureEnabled = static_cast<TUint>(aIsEmbeddedStillCaptureEnabled);
+ }
+
+/**
+Retrieves the current video capture type used.
+
+@param aVideoCaptureType
+ Retrieves the current video capture type.
+
+@see CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters::iVideoCaptureType
+*/
+EXPORT_C CCamera::CCameraVideoCaptureControl::TVideoCaptureType CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters::VideoCaptureType() const
+ {
+ switch(iVideoCaptureType)
+ {
+ case KECamVideoCaptureBit0:
+ {
+ return CCamera::CCameraVideoCaptureControl::EVideoCaptureNotSupported;
+ }
+ case KECamClientVideoCaptureBit1:
+ {
+ return CCamera::CCameraVideoCaptureControl::EClientVideoCapture;
+ }
+ case KECamDirectVideoCaptureBit2:
+ {
+ return CCamera::CCameraVideoCaptureControl::EDirectVideoCapture;
+ }
+ default:
+ {
+ return CCamera::CCameraVideoCaptureControl::EVideoCaptureNotSupported;
+ }
+ }
+ }
+
+/**
+Sets the desired video capture type.
+
+@param aVideoCaptureType
+ The desired video capture type.
+
+@see CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters::iVideoCaptureType
+*/
+EXPORT_C void CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters::SetVideoCaptureType(CCamera::CCameraVideoCaptureControl::TVideoCaptureType aVideoCaptureType)
+ {
+ iVideoCaptureType = static_cast<TUint>(aVideoCaptureType);
+ }
+
+/**
+Retrieves the supported YUV conversion coefficient in case of video.
+
+@param aSupportedConversionCoefficients
+ A bit field which retrieves the supported YUV conversion coefficient.
+ YUV conversion coefficients have been defined as TYuvCoefficients
+
+@leave May leave with any error code.
+*/
+void CCamera::CCameraVideoCaptureControl::GetSupportedConversionCoefficientsL(TUint& /*aSupportedConversionCoefficients*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Retrieves the currently used YUV conversion coefficients.
+
+@param aConversionCoefficients
+ Currently used TYuvCoefficients
+
+@leave May leave with any error code.
+*/
+void CCamera::CCameraVideoCaptureControl::GetConversionCoefficientL(TYuvCoefficients& /*aConversionCoefficients*/) const
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+/**
+Asynchronous method which sets the desired YUV conversion coefficients.
+
+@param aConversionCoefficients
+ The desired TYuvCoefficients
+
+@note Event KUidECamEventVideoCaptureControlConversionCoefficient is used to notify clients about setting of desired YUV
+ conversion coefficients.
+*/
+void CCamera::CCameraVideoCaptureControl::SetConversionCoefficient(TYuvCoefficients /*aConversionCoefficients*/)
+ {
+ return;
+ }