os/mm/imagingandcamerafws/camerafw/Include/ecamcapturecontrol.h
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/mm/imagingandcamerafws/camerafw/Include/ecamcapturecontrol.h	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,1330 @@
     1.4 +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
     1.5 +// All rights reserved.
     1.6 +// This component and the accompanying materials are made available
     1.7 +// under the terms of "Eclipse Public License v1.0"
     1.8 +// which accompanies this distribution, and is available
     1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
    1.10 +//
    1.11 +// Initial Contributors:
    1.12 +// Nokia Corporation - initial contribution.
    1.13 +//
    1.14 +// Contributors:
    1.15 +//
    1.16 +// Description:
    1.17 +//
    1.18 +
    1.19 +/**
    1.20 + @file
    1.21 + @publishedPartner
    1.22 + @prototype
    1.23 +*/
    1.24 +#ifndef  ECAMCAPTURECONTROL_H
    1.25 +#define  ECAMCAPTURECONTROL_H
    1.26 +
    1.27 +#include <e32base.h>
    1.28 +#include <ecam.h>
    1.29 +#include <ecamadvsettings.h>
    1.30 +
    1.31 +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
    1.32 +#include <ecamconst.h>
    1.33 +#include <ecamadvsettingsconst.h>
    1.34 +#endif
    1.35 +
    1.36 +#include <mm/conversioncoefficient.h>
    1.37 +
    1.38 +#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
    1.39 +#include <ecamcapturecontrolconst.h>
    1.40 +#endif
    1.41 +
    1.42 +class MCameraPreImageCaptureControl;
    1.43 +class MCameraImageCapture;
    1.44 +class MCameraPostImageCaptureControl;
    1.45 +class MCameraVideoCaptureControl;
    1.46 +
    1.47 +class MHistogramV2Buffer;
    1.48 +
    1.49 +/** 
    1.50 +Special ImageMaxMemorySize when client does not have any specific preference. Also used when 
    1.51 +this setting of maximum memory size is not supported. 
    1.52 +*/
    1.53 +static const TInt KECamNoSpecificMaxMemorySize = -1;
    1.54 +
    1.55 +/** 
    1.56 +The current Version of the TPrepareImageParameters class.
    1.57 +*/
    1.58 +static const TUint KECamPrepareImageParametersCurrentVersion = 1;
    1.59 +
    1.60 +/** 
    1.61 +The current Version of the TPrepareVideoParameters class.
    1.62 +*/
    1.63 +static const TUint KECamPrepareVideoParametersCurrentVersion = 1;
    1.64 +
    1.65 +/**
    1.66 +The current Version of the TDriveModeDependentAttributes class. 
    1.67 +
    1.68 +@publishedPartner
    1.69 +@prototype
    1.70 +*/
    1.71 +static const TUint KECamDriveModeDependentAttributesCurrentVersion = 1;
    1.72 +
    1.73 +/**
    1.74 +	Uid used to identify the CCameraPreImageCaptureControl API.
    1.75 +	This API is used to control the pre-imagecapture operations.
    1.76 +	
    1.77 +	@see CCamera::CCameraPreImageCaptureControl
    1.78 +*/
    1.79 +static const TUid  KECamPreImageCaptureControlUid 	= {KECamPreImageCaptureControlUidValue};
    1.80 +
    1.81 +/**
    1.82 +	Uid used to identify the CCameraImageCapture API.
    1.83 +	This API is used to capture the image and perform other control operations after capture the image.
    1.84 +	
    1.85 +	@see CCamera::CCameraImageCapture
    1.86 +*/
    1.87 +static const TUid  KECamImageCaptureUid 	= {KECamImageCaptureUidValue};
    1.88 +
    1.89 +/**
    1.90 +	Uid used to identify the CCameraPostImageCaptureControl API.
    1.91 +	This API is used to control the post-imagecapture operations.
    1.92 +	
    1.93 +	@see CCamera::CCameraPostImageCaptureControl
    1.94 +*/
    1.95 +static const TUid  KECamPostImageCaptureControlUid 	= {KECamPostImageCaptureControlUidValue};
    1.96 +
    1.97 +/**
    1.98 +	Uid used to identify the CCamera Video Capture Control API.
    1.99 +	This API is used to control the video capture operations.
   1.100 +	
   1.101 +	@see CCamera::CCameraVideoCaptureControl
   1.102 +*/
   1.103 +static const TUid  KECamVideoCaptureControlUid 	= {KECamVideoCaptureControlUidValue};
   1.104 +
   1.105 +/** 
   1.106 +Notification that the camera is ready for next prepare. Next prepare can either be still or video.
   1.107 +@note  If drive mode is EDriveModeTimeNudgeCapture this callback will only be received when the client deletes the 
   1.108 +	   existing CCameraImageCapture object as more than one instance can not be created if this drive mode is used.
   1.109 +*/
   1.110 +static const TUid  KUidECamEventReadyForNextPrepare = {KUidECamEventReadyForNextPrepareUidValue};
   1.111 +
   1.112 +/** 
   1.113 +Notification that the camera is ready for next capture. Next capture can either be still or video.
   1.114 +@note  If drive mode is EDriveModeTimeNudgeCapture this callback will only be received once the total required amount
   1.115 +	   of images are captured (ie. pre-capture images + 1 + post-capture images) and the implementation is ready with
   1.116 +	   another set of pre-capture images (so implementation is prepared for next CaptureImage() call).
   1.117 +*/
   1.118 +static const TUid  KUidECamEventReadyForNextCapture = {KUidECamEventReadyForNextCaptureUidValue};
   1.119 +
   1.120 +/** 
   1.121 +Notification that the image has been exposed to the sensor.
   1.122 +ECam implementation will notify the client that the image has been exposed to the sensor.
   1.123 +@see CCamera::CCameraPreImageCaptureControl::GetCaptureEventSupportInfoL
   1.124 +*/
   1.125 +static const TUid  KUidECamEventImageCaptureEvent = {KUidECamEventImageCaptureEventUidValue};
   1.126 +
   1.127 +/**
   1.128 +Specifies the priority which may be assigned to the captured images which are still pending.
   1.129 +
   1.130 +The enumeration list may be extended in future.
   1.131 +*/
   1.132 +enum TECamImagePriority
   1.133 +	{
   1.134 +	/** Low Priority */
   1.135 +	EECamImagePriorityLow,
   1.136 +	/** Medium Priority */
   1.137 +	EECamImagePriorityMedium,
   1.138 +	/** Standard Priority */
   1.139 +	EECamImagePriorityStandard,
   1.140 +	/** High Priority */
   1.141 +	EECamImagePriorityHigh,
   1.142 +	/** Very High Priority */
   1.143 +	EECamImagePriorityVeryHigh
   1.144 +	};
   1.145 +
   1.146 +/**	
   1.147 +A mixin class to be implemented by the client in order to use the PreImageCaptureControl API. The derived class methods 
   1.148 +are called by the implementation when the pre image capture operations are ready to be notified accordingly.
   1.149 +
   1.150 +@see CCamera::CCameraPreImageCaptureControl
   1.151 +*/	
   1.152 +class MPreImageCaptureControlObserver
   1.153 +	{
   1.154 +public:
   1.155 +	/**
   1.156 +	Implementation sends this callback as a result of PrepareImageCapture completion. Every time client calls 
   1.157 +	CCameraPreImageCaptureControl::PrepareImageCapture, a new CCameraImageCapture* will be passed to the client for
   1.158 +	image capture operations. Implementation will create the CCameraImageCapture* object after allocating the memory 
   1.159 +	resources required. Ownership of CCameraImageCapture* object will be passed to the client.
   1.160 +	
   1.161 +	@param aCaptureImageHandle
   1.162 +		   Retrieves pointer to the CCameraImageCapture object created by the implementation.
   1.163 +		   
   1.164 +	@param aErrorCode
   1.165 +		   Appropriate error code. 
   1.166 +		   KErrECamImageResourceNotReleased when camera device is capable of preparing only still or video.
   1.167 +		   KErrECamVideoResourceNotReleased when camera device is capable of preparing only still or video.
   1.168 +	
   1.169 +	@note  Every time client needs to change the prepare image settings, a new instance of CCameraImageCapture will be 
   1.170 +		   provided to it by the implementation.
   1.171 +		   
   1.172 +	@note  If error is KErrECamImageResourceNotReleased and client wants to successfully call the Prepare method again, 
   1.173 +		   client needs to delete all CCameraImageCapture objects and any Snapshot and Histogram objects associated with
   1.174 +		   it as well.   
   1.175 +	
   1.176 +	@note  If error is KErrECamVideoResourceNotReleased and client wants to successfully call the Prepare method again,
   1.177 +		   client needs to call ReleaseVideoResource to unprepare video and then delete any Snapshot and Histogram 
   1.178 +		   objects associated with it as well.
   1.179 +	
   1.180 +	@note  If drive mode is set to EDriveModeTimeNudgeCapture the client will only receive this callback once the implementation
   1.181 +		   is ready with the number of pre-capture images specified in TDriveModeDependentAttributes.
   1.182 +	*/
   1.183 +	virtual void PrepareImageComplete(CCamera::CCameraImageCapture* aCaptureImageHandle, TInt aErrorCode)=0;
   1.184 +	
   1.185 +	/**
   1.186 +	Gets a custom interface for future callbacks. This method will be called by the implementation to get a new interface
   1.187 +	which would support future callbacks.
   1.188 +
   1.189 +	@param  aInterface
   1.190 +		    The Uid of the particular interface function required for callbacks.
   1.191 +		   
   1.192 +	@param  aPtrInterface
   1.193 +		    The implementation has to type-cast the retrieved custom interface pointer to the appropriate type.	
   1.194 +
   1.195 +	@return The error code.
   1.196 +	*/
   1.197 +	virtual TInt CustomInterface(TUid aInterface, TAny*& aPtrInterface)=0;
   1.198 +	}; 
   1.199 +
   1.200 +/**
   1.201 +A mixin class to be implemented by the client in order to use the Capture Image API. The derived class methods are 
   1.202 +called by the implementation when the image capture operations are ready to be notified accordingly.
   1.203 +Implementation shall keep track of CCameraImageCapture object deletion. It has to ensure that a callback is not send 
   1.204 +should the client destroy the CCameraImageCapture class object when the callback is queued to be send across. 
   1.205 +Ownership of CCameraImageCapture is retained by the client.
   1.206 +
   1.207 +@see CCamera::CCameraImageCapture
   1.208 +@see CCamera::CCameraPostImageCaptureControl
   1.209 +*/
   1.210 +class MCaptureImageObserver
   1.211 +	{
   1.212 +public:
   1.213 +	/**
   1.214 +	Implementation sends this callback to provide client the handle to control individual images to be captured. For
   1.215 +	example, client may want to destroy the image even before the completion for some reasons.
   1.216 +	This callback may be send to the client after the image is exposed to the sensor.
   1.217 +	
   1.218 +	@param  aCaptureImageHandle
   1.219 +			Reference to CCameraImageCapture class object which was used to issue the capture image operation.
   1.220 +			CCameraPostImageCaptureControl instances will be owned by CCameraImageCapture and would be available until 
   1.221 +			new capture command is issued using the owning CCameraImageCapture instance. If client wishes to initiate new 
   1.222 +			capture but preserve the CCameraPostImageCaptureControl instances from previous capture, it would have to 
   1.223 +			create a new CCameraImageCapture instance and use that for the new capture.
   1.224 +			
   1.225 +	@param  aPostCaptureControlId
   1.226 +			Id used to identify a particular CCameraPostImageCaptureControl object associated with the given 
   1.227 +			CCameraImageCapture class object. This will be used to control the individual image.
   1.228 +	
   1.229 +	@note   If, in case, there is some problem at implementation level while the image capture operation, for example, not
   1.230 +			enough memory to create the class object CCameraPostImageCaptureControl, this callback may not be send. In such
   1.231 +			cases, ImageCaptureComplete callback can be send with appropriate error code.
   1.232 +			
   1.233 +	@note   Whether direct saving option is used or buffers are used for images, this callback will be received in both 
   1.234 +			the cases.
   1.235 +	*/
   1.236 +	virtual void IndividualImageControlHandle(CCamera::CCameraImageCapture& aCaptureImageHandle, TPostCaptureControlId aPostCaptureControlId)=0;
   1.237 +																									  
   1.238 +	/**
   1.239 +	Implementation sends this callback when the individual image is ready and direct saving option is not used.
   1.240 +	
   1.241 +	@param  aCaptureImageHandle
   1.242 +			Reference to CCameraImageCapture class object which was used to issue the capture image operation.
   1.243 +			CCameraPostImageCaptureControl instances will be owned by CCameraImageCapture and would be available until 
   1.244 +			new capture command is issued using the owning CCameraImageCapture instance. If client wishes to initiate new 
   1.245 +			capture but preserve the CCameraPostImageCaptureControl instances from previous capture, it would have to 
   1.246 +			create a new CCameraImageCapture instance and use that for the new capture.
   1.247 +	
   1.248 +	@param  aPostCaptureControlId
   1.249 +			Id used to identify a particular CCameraPostImageCaptureControl object associated with the given 
   1.250 +			CCameraImageCapture class object. This will be used to retrieve the individual image buffer.
   1.251 +	
   1.252 +	@param  aErrorCode
   1.253 +			Appropriate error code. 
   1.254 +	
   1.255 +	@note	If direct saving option is not used, this callback will be received by the client. 
   1.256 +	*/
   1.257 +	virtual void ImageBufferReady(CCamera::CCameraImageCapture& aCaptureImageHandle, TPostCaptureControlId aPostCaptureControlId, TInt aErrorCode)=0;
   1.258 +	
   1.259 +	/** 
   1.260 +	Implementation sends this callback when a particular client snapshot data is available. The snapshot data represents
   1.261 +	the individual image which may be in any drive mode. 
   1.262 +
   1.263 +	If a call to CCameraSnapshot::EnableSnapshotL() (on the CCameraImageCapture instance) is made without a successful call 
   1.264 +	to CCameraSnapshot::PrepareSnapshotL(const TSnapshotParameters& aSnapshotParameters) (on the CCameraImageCapture 
   1.265 +	instance), then the callback returns KErrBadHandle.
   1.266 +
   1.267 +	@param  aCaptureImageHandle
   1.268 +			Reference to CCameraImageCapture class object which was used to issue the capture image operation.
   1.269 +	
   1.270 +	@param  aPostCaptureControlId
   1.271 +			Id used to identify a particular CCameraPostImageCaptureControl object associated with the given 
   1.272 +			CCameraImageCapture class object. This is needed to identify the image which is represented by this snapshot.
   1.273 +	
   1.274 +	@param  aSnapshotBuffer
   1.275 +			Pointer to MCameraBuffer2 which retrieves the snapshot data for the individual image. The ownership will be 
   1.276 +			retained by the implementation. Client needs to call Release in order to indicate the implementation
   1.277 +			that the buffer can be re-used. Client shall never try to delete the pointer. NULL, if error.
   1.278 +	
   1.279 +	@param  aErrorCode
   1.280 +			Appropriate error code.
   1.281 +	*/
   1.282 +	virtual void ClientSnapshotForImageReady(CCamera::CCameraImageCapture& aCaptureImageHandle, TPostCaptureControlId aPostCaptureControlId, MCameraBuffer2* aSnapshotBuffer, TInt aErrorCode)=0;
   1.283 +	
   1.284 +	/** 
   1.285 +	Implementation sends this callback when the cut down version(lower resolution) of the individual image has
   1.286 +	been directly saved to the file.
   1.287 +	Client may use the cut down version of the actual image to view the image beforehand and may cancel the actual
   1.288 +	individual image.
   1.289 +	
   1.290 +	@param  aCaptureImageHandle
   1.291 +			Reference to CCameraImageCapture class object which was used to issue the capture image operation.
   1.292 +	
   1.293 +	@param  aPostCaptureControlId
   1.294 +			Id used to identify a particular CCameraPostImageCaptureControl object associated with the given 
   1.295 +			CCameraImageCapture class object. This may be used to cancel the actual image which might be currently 
   1.296 +			undergoing any processing options or even pause/resume ongoing processing options.
   1.297 +	
   1.298 +	@param  aErrorCode
   1.299 +			Appropriate error code.
   1.300 +	
   1.301 +	@note	If direct saving option is being used, this callback may be received by the client.
   1.302 +	*/
   1.303 +	virtual void CutDownImageDirectSavingCompleted(CCamera::CCameraImageCapture& aCaptureImageHandle, TPostCaptureControlId aPostCaptureControlId, TInt aErrorCode)=0;
   1.304 +	
   1.305 +	/** 
   1.306 +	Implementation sends this callback when the individual image has been directly saved to the file.
   1.307 +	This implies that the processing options associated with the image has been finally completed.
   1.308 +
   1.309 +	@param  aCaptureImageHandle
   1.310 +			Reference to CCameraImageCapture class object which was used to issue the capture image operation.
   1.311 +			CCameraPostImageCaptureControl instances will be owned by CCameraImageCapture and would be available until 
   1.312 +			new capture command is issued using the owning CCameraImageCapture instance. If client wishes to initiate new 
   1.313 +			capture but preserve the CCameraPostImageCaptureControl instances from previous capture, it would have to 
   1.314 +			create a new CCameraImageCapture instance and use that for the new capture.
   1.315 +	
   1.316 +	@param  aPostCaptureControlId
   1.317 +			Id used to identify a particular CCameraPostImageCaptureControl object associated with the given 
   1.318 +			CCameraImageCapture class object.
   1.319 +	
   1.320 +	@param  aErrorCode
   1.321 +			Appropriate error code.
   1.322 +	
   1.323 +	@note	If direct saving option is being used, this callback will be received by the client.
   1.324 +	*/
   1.325 +	virtual void ImageDirectSavingCompleted(CCamera::CCameraImageCapture& aCaptureImageHandle, TPostCaptureControlId aPostCaptureControlId, TInt aErrorCode)=0;
   1.326 +
   1.327 +	/**
   1.328 +	Implementation sends this callback when the Capture Image operation has been completed. This will be send to mark the 
   1.329 +	completion of the image capture even if direct saving option is being used.
   1.330 +	
   1.331 +	@param  aCaptureImageHandle
   1.332 +			Reference to CCameraImageCapture class object which was used to issue the capture image operation.
   1.333 +			CCameraPostImageCaptureControl instances will be owned by CCameraImageCapture and would be available until 
   1.334 +			new capture command is issued using the owning CCameraImageCapture instance. If client wishes to initiate new 
   1.335 +			capture but preserve the CCameraPostImageCaptureControl instances from previous capture, it would have to 
   1.336 +			create a new CCameraImageCapture instance and use that for the new capture. 
   1.337 +			
   1.338 +	@param  aErrorCode
   1.339 +			Appropriate error code. 
   1.340 +			
   1.341 +	@note	This callback marks the completion of image capture operation. So, whether direct saving option is used or 
   1.342 +			buffers are used for images, this callback will be received in both the cases.
   1.343 +			
   1.344 +	@note  If drive mode is EDriveModeTimeNudgeCapture this callback will only be received once the total required amount
   1.345 +		   of images are captured (ie. pre-capture images + 1 + post-capture images) and the implementation is ready with
   1.346 +		   another set of pre-capture images (so implementation is prepared for next CaptureImage() call).
   1.347 +	*/
   1.348 +	virtual void ImageCaptureComplete(CCamera::CCameraImageCapture& aCaptureImageHandle, TInt aErrorCode)=0;
   1.349 +	
   1.350 +	/**
   1.351 +	Implementation sends this callback in order to notify the client about availability of the histogram data for the
   1.352 +	individual image. If a call to CCameraV2Histogram::StartHistogram() (on the CCameraImageCapture instance) is made 
   1.353 +	without	a previous successful call to CCameraV2Histogram::PrepareClientHistogramL() (on the CCameraImageCapture 
   1.354 +	instance) then the callback returns KErrBadHandle.
   1.355 +	
   1.356 +	@param  aCaptureImageHandle
   1.357 +			Reference to CCameraImageCapture class object which was used to issue the capture image operation.
   1.358 +	
   1.359 +	@param  aPostCaptureControlId
   1.360 +			Id used to identify a particular CCameraPostImageCaptureControl object associated with the given 
   1.361 +			CCameraImageCapture class object. This provides the individual image for which the client histogram data 
   1.362 +			is available.
   1.363 +	
   1.364 +	@param  aClientHistogramBuffer
   1.365 +			Pointer to MHistogramV2Buffer which retrieves a single histogram for the individual image alongwith 
   1.366 +			relevant information about it. The ownership will be retained by the implementation. Client needs to call 
   1.367 +			Release in order to indicate the implementation that the buffer can be re-used. Client shall never try to 
   1.368 +			delete the pointer. NULL, if error.
   1.369 +	
   1.370 +	@param  aErrorCode
   1.371 +			Appropriate error code.
   1.372 +	*/
   1.373 +	virtual void ClientHistogramForImageReady(CCamera::CCameraImageCapture& aCaptureImageHandle, TPostCaptureControlId aPostCaptureControlId, MHistogramV2Buffer* aClientHistogramBuffer, TInt aErrorCode)=0;
   1.374 +	
   1.375 +	/**
   1.376 +	Implementation sends this callback in order to notify the client about availability of the histogram data for the
   1.377 +	snapshot of the individual image. If a call to CCameraV2Histogram::StartHistogram() (on the snapshot) is made without
   1.378 +	a previous successful call to CCameraV2Histogram::PrepareClientHistogramL() (on the snapshot) then the callback 
   1.379 +	returns KErrBadHandle.
   1.380 +	
   1.381 +	@param  aCaptureImageHandle
   1.382 +			Reference to CCameraImageCapture class object which was used to issue the capture image operation. This 
   1.383 +			provides handle to the snapshot(CCameraImageCapture::GetSnapshotHandleL()) for which the histogram data 
   1.384 +			is available.
   1.385 +	
   1.386 +	@param  aPostCaptureControlId
   1.387 +			Id used to identify a particular CCameraPostImageCaptureControl object associated with the given 
   1.388 +			CCameraImageCapture class object. This provides a mapping between the individual image and the snapshot for 
   1.389 +			which the client histogram data is available.
   1.390 +	
   1.391 +	@param  aClientHistogramBuffer
   1.392 +			Pointer to MHistogramV2Buffer which retrieves a single histogram for the snapshot of the individual image 
   1.393 +			alongwith relevant information about it. The ownership will be retained by the implementation. Client needs to call 
   1.394 +			Release in order to indicate the implementation that the buffer can be re-used. Client shall never try to 
   1.395 +			delete the pointer. NULL, if error.
   1.396 +	
   1.397 +	@param  aErrorCode
   1.398 +			Appropriate error code. 
   1.399 +	*/
   1.400 +	virtual void ClientHistogramForSnapshotReady(CCamera::CCameraImageCapture& aCaptureImageHandle, TPostCaptureControlId aPostCaptureControlId, MHistogramV2Buffer* aClientHistogramBuffer, TInt aErrorCode)=0;
   1.401 +
   1.402 +	/**
   1.403 +	Implementation sends this callback in order to notify the client about the failure of processing options for the 
   1.404 +	individual image.
   1.405 +	
   1.406 +	@param  aCaptureImageHandle
   1.407 +			Reference to CCameraImageCapture class object which was used to issue the capture image operation.
   1.408 +	
   1.409 +	@param  aPostCaptureControlId
   1.410 +			Id used to identify a particular CCameraPostImageCaptureControl object associated with the given
   1.411 +			CCameraImageCapture class object. This provides the individual image for which the processing options
   1.412 +			has failed.
   1.413 +
   1.414 +	@param  aProcessingTypes
   1.415 +			Bitfield of TEcamProcessingOptions associated with the image that have failed.
   1.416 +	
   1.417 +	@param  aErrorCode
   1.418 +			Appropriate error code.
   1.419 +	*/
   1.420 +	virtual void ProcessingFailed(CCamera::CCameraImageCapture& aCaptureImageHandle, TPostCaptureControlId aPostCaptureControlId, TUint aProcessingTypes, TInt aErrorCode) = 0;
   1.421 +	/**
   1.422 +	Gets a custom interface for future callbacks. This method will be called by the implementation to get a new interface
   1.423 +	which would support future callbacks.
   1.424 +
   1.425 +	@param  aInterface
   1.426 +		    The Uid of the particular interface function required for callbacks.
   1.427 +		   
   1.428 +	@param  aPtrInterface
   1.429 +		    The implementation has to type-cast the retrieved custom interface pointer to the appropriate type.	
   1.430 +
   1.431 +	@return The error code.
   1.432 +	*/
   1.433 +	virtual TInt CustomInterface(TUid aInterface, TAny*& aPtrInterface)=0;
   1.434 +	};
   1.435 +
   1.436 +/** 
   1.437 +CCameraPreImageCaptureControl class exposes an API for controlling image operations/settings prior to image capture. 
   1.438 +
   1.439 +@note  This class is not intended for sub-classing and used to standardise existing
   1.440 +       varieties of implementations.
   1.441 +       
   1.442 +@note  If the class methods leave, the output type parameter value is not guaranteed to be valid.
   1.443 +
   1.444 +@note  Client should not use old Capture methods present in class CCamera. Class CCameraImageCapture and class 
   1.445 +	   CCameraPostImageCaptureControl should be used rather.
   1.446 +
   1.447 +@publishedPartner
   1.448 +@prototype
   1.449 +*/
   1.450 +class CCamera::CCameraPreImageCaptureControl : public CBase
   1.451 +	{
   1.452 +	/* so can use internal factory functions etc. */
   1.453 +	friend class CCamera;
   1.454 +
   1.455 +public:
   1.456 +
   1.457 +	/**
   1.458 +	Specifies the type of direct saving.
   1.459 +	The enumeration list may be extended in future.
   1.460 +	*/
   1.461 +	enum TDirectSavingType
   1.462 +		{
   1.463 +		/** Image saved in buffers. Direct saving to file not being used. Callback used is 
   1.464 +		MCaptureImageObserver::ImageBufferReady. */
   1.465 +		EDirectSavingNotUsed					= 0x00,
   1.466 +		/** Image saved to file as per the format specified. Image saved after any processing options have completed. 
   1.467 +		Callback used is MCaptureImageObserver::ImageDirectSavingCompleted(). */
   1.468 +		EDirectSavingHighResolutionFileOnly		= 0x01,
   1.469 +		/** Image saved to file as per the format specified. Also, a lower resolution image gets saved in a separately 
   1.470 +		specified file. This helps in retrieving the lower resolution image sooner than the higher resolution
   1.471 +		image gets saved. Callback used for lower resolution image saving is MCaptureImageObserver::
   1.472 +		CutDownImageDirectSavingCompleted(). */
   1.473 +		EDirectSavingWithLowerResolutionFile	= 0x02
   1.474 +		};
   1.475 +	
   1.476 +	/**
   1.477 +	Specifies the various type of direct snapshot support.
   1.478 +	The enumeration list may be extended in future.
   1.479 +	*/	
   1.480 +	enum TDirectSnapshotType
   1.481 +		{
   1.482 +		/** Direct snapshot not supported. */
   1.483 +		EDirectSnapshotNotSupported			= 0x00,
   1.484 +		/** Direct Snapshot supported. It will be displayed on the same direct viewfinder screen, out of which it has 
   1.485 +		been created */
   1.486 +		EDirectSnapshotSupported			= 0x01
   1.487 +		};
   1.488 +
   1.489 +	/** Provides any extra drive mode dependent parameters to be used for image capture. */ 
   1.490 +	class TDriveModeDependentAttributes
   1.491 +		{
   1.492 +	public:
   1.493 +		IMPORT_C TDriveModeDependentAttributes();
   1.494 +
   1.495 +		IMPORT_C TUint Size() const;
   1.496 +		IMPORT_C TUint Version() const;
   1.497 +
   1.498 +	private:
   1.499 +		//for future expansion
   1.500 +		TUint iSize:24;
   1.501 +		TUint iVersion:8;
   1.502 +
   1.503 +		//for future use
   1.504 +		TInt iReserved1;
   1.505 +		TInt iReserved2;
   1.506 +		TInt iReserved3;
   1.507 +
   1.508 +	public:
   1.509 +		/** If drive mode is EDriveModeTimeNudgeCapture this represents the number of images to be captured
   1.510 +		(pre-capture images) before client initiates actual image capture operation. */
   1.511 +		TInt iParam1;
   1.512 +		/** If drive mode is EDriveModeTimeNudgeCapture this represents the number of images to be captured
   1.513 +		(post-capture images) after client initiates actual image capture operation. */
   1.514 +		TInt iParam2;
   1.515 +		};
   1.516 +
   1.517 +	/**
   1.518 +	Specifies the available processing options.
   1.519 +	The enumeration list may be extended in future.
   1.520 +	
   1.521 +	@publishedPartner
   1.522 +	@prototype
   1.523 +	*/	
   1.524 +	enum TEcamProcessingOptions
   1.525 +		{
   1.526 +		/** Processing options are not supported.*/
   1.527 +		EEcamProcessingNone 		= 0x00000000,
   1.528 +		/** Enable normal processing when image capture is initiated.*/
   1.529 +		EEcamNormalProcessing 		= 0x00000001,
   1.530 +		/** Enable background processing when image capture is initiated.*/
   1.531 +		EEcamBackgroundProcessing 	= 0x00000002
   1.532 +		};
   1.533 +		
   1.534 +	/** Provides the parameters necessary to perform set-up and allocation of memory for the images to be captured.	*/
   1.535 +	class TPrepareImageParameters
   1.536 +		{
   1.537 +	public:
   1.538 +		IMPORT_C TPrepareImageParameters();
   1.539 +		
   1.540 +		IMPORT_C TUint Size() const;
   1.541 +		IMPORT_C TUint Version() const;
   1.542 +		
   1.543 +		IMPORT_C void SetImageProcessingOptions(TUint aImageProcessingOptions);
   1.544 +		IMPORT_C void GetImageProcessingOptions(TUint& aImageProcessingOptions) const;
   1.545 +				
   1.546 +	private:
   1.547 +		//for future expansion
   1.548 +		TUint iSize:24;
   1.549 +		TUint iVersion:8;
   1.550 +		
   1.551 +		//for future use
   1.552 +		TInt iReserved1;
   1.553 +		TInt iReserved2;
   1.554 +		/** Bitfield of selected TEcamProcessingOptions which should be used after the images are captured from the sensor. */
   1.555 +		TUint iImageProcessingOptions;
   1.556 +		
   1.557 +	public:
   1.558 +		/** The image format. */
   1.559 +		CCamera::TFormat iImageFormat;
   1.560 +		/** The image size. */
   1.561 +		TSize iImageSize;
   1.562 +		/** Pixel aspect ratio to be used for the image. */
   1.563 +		CCamera::CCameraAdvancedSettings::TPixelAspectRatio iPixelAspectRatio;
   1.564 +		/** The drive mode in which the images will be captured. */
   1.565 +		CCamera::CCameraAdvancedSettings::TDriveMode iDriveMode;
   1.566 +		/** The number of images to be captured if the drive mode is burst. */
   1.567 +		TInt iBurstImages;
   1.568 +		/** The maximum memory size in kilo bytes when encoding to the image format. This shall be 
   1.569 +		KECamNoSpecificMaxMemorySize if client has no specific preference or if this setting is not supported.
   1.570 +		In case of JPEG, the maximum memory size will take preference over JPEG quality if the maximum memory size is 
   1.571 +		not sufficient to achieve the desired quality. Refer CCamera::JpegQuality(). */ 
   1.572 +		TInt iImageMaxMemorySize;
   1.573 +		/** Identifies the rectangle to which the image is to be clipped.
   1.574 +		If no specifc clipping rectangle desired by the client, the clipping region can be given by 
   1.575 +		origin as the top-left corner and size as iImageSize. */
   1.576 +		TRect iClipRect;
   1.577 +		/** The attributes dependent on the type of drive mode used. */
   1.578 +		TDriveModeDependentAttributes iDriveModeAttributes;
   1.579 +		};
   1.580 +	
   1.581 +private:
   1.582 +	/**
   1.583 +	Different types of color space. Camera will print or capture images in given color space.
   1.584 +	The enumeration list may be extended in future.
   1.585 +	
   1.586 +	@internalTechnology
   1.587 +	*/	
   1.588 +	enum TColorSpace
   1.589 +		{
   1.590 +		/** not known */
   1.591 +		EColorSpaceUnknown 				= 0x0000,
   1.592 +		/** sRGB color space */
   1.593 +		EColorSpacesRGB					= 0x0001,
   1.594 +		/** adobeRGB color space */
   1.595 +		EColorSpaceAdobeRGB				= 0x0002,
   1.596 +		/** adobeWideGamutRGB color space */
   1.597 +		EColorSpaceAdobeWideGamutRGB	= 0x0004,
   1.598 +		/** CMY(K) color space */
   1.599 +		EColorSpaceCMYK					= 0x0008,
   1.600 +		/** YIQ color space*/
   1.601 +		EColorSpaceYIQ					= 0x0010,
   1.602 +		/** YUV color space */
   1.603 +		EColorSpaceYUV					= 0x0020,
   1.604 +		/** YDbDr color space */
   1.605 +		EColorSpaceYDbDr				= 0x0040,
   1.606 +		/** YCbCr color space */
   1.607 +		EColorSpaceYCbCr				= 0x0080,
   1.608 +		/** HSB color space */
   1.609 +		EColorSpaceHSB					= 0x0100,
   1.610 +		/** HSL color space */
   1.611 +		EColorSpaceHSL					= 0x0200
   1.612 +		};
   1.613 +		
   1.614 +	/** 
   1.615 +	Specifies direction of panning. 
   1.616 +	The enumeration list may be extended in future.
   1.617 +	
   1.618 +	@internalTechnology
   1.619 +	*/
   1.620 +	enum TPanoDirection
   1.621 +		{
   1.622 +		/** Viewfinder displays towards the right of already captured images */
   1.623 +		EPanoRight,
   1.624 +		/** Viewfinder displays towards the left of already captured images */
   1.625 +		EPanoLeft,
   1.626 +		/** Viewfinder displays towards the top of already captured images */
   1.627 +		EPanoUp,
   1.628 +		/** Viewfinder displays towards the bottom of already captured images */
   1.629 +		EPanoDown  
   1.630 +		};
   1.631 +	
   1.632 +	/** 
   1.633 +	Specifies the stitching options when panning is started.
   1.634 +	The enumeration list may be extended in future.
   1.635 +	
   1.636 +	@internalTechnology
   1.637 +	*/
   1.638 +	enum TStitchingOption
   1.639 +		{
   1.640 +		/** Stitching of panned images is not supported by the ECAM Implementation.*/
   1.641 +		EStitchingOptionNone			= 0x00,
   1.642 +		/** Stitching of panned images can be done by the ECAM Implementation.*/
   1.643 +		EStitchingOptionEnable			= 0x01,
   1.644 +		/** Stitching of panned images can be disabled/discarded by the ECAM Implementation.*/
   1.645 +		EStitchingOptionDisable			= 0x02
   1.646 +		};
   1.647 +		
   1.648 +	/** 
   1.649 +	Specifies whether the panned images captured under 'stitching enabled option' would be discarded by the implementation.
   1.650 +	The enumeration list may be extended in future.
   1.651 +	
   1.652 +	@internalTechnology
   1.653 +	*/
   1.654 +	enum TStitchedImageRetrieval
   1.655 +		{
   1.656 +		/** allow ecam implementation to provide the stitched images. */
   1.657 +		EStitchedImageRetrieve,
   1.658 +		/** instruct ECAM Implementation to discard the stitched images. */
   1.659 +		EStitchedImageDiscard
   1.660 +		};
   1.661 +	
   1.662 +public:
   1.663 +	/** 
   1.664 +	Provides information regarding streamed image buffers or sub-frames. 
   1.665 +	@publishedPartner
   1.666 +	*/
   1.667 +	class TImageBufferInfo
   1.668 +		{
   1.669 +	public:
   1.670 +		IMPORT_C TImageBufferInfo(); 
   1.671 +		
   1.672 +		IMPORT_C TUint Size() const;
   1.673 +		IMPORT_C TUint Version() const;
   1.674 +
   1.675 +		IMPORT_C TBool IsSubFrameUsed() const ;
   1.676 +		
   1.677 +		IMPORT_C void SetSubFrameState(TBool aIsSubFrameUsed);
   1.678 +		
   1.679 +		IMPORT_C TBool IsParallelStreamedBufferUsed() const;
   1.680 +		
   1.681 +		IMPORT_C void SetParallelStreamedBufferState(TBool aIsParallelStreamedBufferUsed);
   1.682 +		
   1.683 +		IMPORT_C TUint SubFrameSequenceNumber() const;
   1.684 +		
   1.685 +		IMPORT_C TInt SetSubFrameSequenceNumber(TUint aSubFrameSequenceNumber);
   1.686 +		
   1.687 +		IMPORT_C TUint TotalSubFrames() const;
   1.688 +		
   1.689 +		IMPORT_C TInt SetTotalSubFrames(TUint aTotalSubFrames);
   1.690 +				
   1.691 +	private:
   1.692 +		//for future expansion
   1.693 +		TUint iSize:24;
   1.694 +		TUint iVersion:8; 
   1.695 +		
   1.696 +		//for future use
   1.697 +		TInt iReserved1;
   1.698 +		TInt iReserved2;
   1.699 +		TInt iReserved3;
   1.700 +		TInt iReserved4;
   1.701 +		TInt iReserved5;
   1.702 +		TInt iReserved6;
   1.703 +		TUint iReservedBits:11;
   1.704 +				
   1.705 +		/** Indicates whether the streamed image scheme or sub-frame scheme is being used. 
   1.706 +		One bit is enough to provide such information */
   1.707 +		TUint iIsSubFrameUsed:1;
   1.708 +		/** Indicates whether the parallel buffering is being used by the implementation in order to speed up the streamed
   1.709 +		image operation, as a whole. One bit is enough to provide such information. 
   1.710 +		Parallel buffering indicates that implementation is using more than one buffer to handle the various sub-frames;
   1.711 +		hence speeding up the operation.*/
   1.712 +		TUint iIsParallelBufferUsed:1;
   1.713 +		/** Sequence number of the sub-frame. 
   1.714 +		9 bits used for sequence no. assuming that KECamMaxTotalSubFrames sub-frames would be used at max */
   1.715 +		TUint iSubFrameSequenceNumber:9;
   1.716 +		/** Total number of sub-frames to be retrieved by the client in order to properly reconstruct the actual image.
   1.717 +		It does not give the number of outstanding sub-frames needed to reconstruct the image. 
   1.718 +		This value will be same for every sub-frames needed to re-construct the actual image. 
   1.719 +		Maximum no. of total sub-frames is KECamMaxTotalSubFrames.*/ 
   1.720 +		TUint iTotalSubFrames:10;
   1.721 +		
   1.722 +	public:
   1.723 +		/** The exact position of the sub-frame within the actual image frame. The actual image frame's bounding rectangle
   1.724 +		is defined by origin as top-left and TSize parameter used to prepare the image capture. */
   1.725 +		TRect iSubFramePosition;
   1.726 +		
   1.727 +		/** The parameters used for this image */
   1.728 +		TPrepareImageParameters iImageParameters;
   1.729 +		};
   1.730 +	
   1.731 +public:
   1.732 +	
   1.733 +    IMPORT_C static CCameraPreImageCaptureControl* NewL(CCamera& aCamera, MPreImageCaptureControlObserver& aPreImageCaptureControlObserver);
   1.734 +    
   1.735 +   	IMPORT_C void GetDirectSnapshotSupportInfoL(TUint& aIsDirectSnapshotSupported) const;
   1.736 +	
   1.737 +	IMPORT_C void GetSupportedEmbeddedStillCaptureSettingsL(RArray<TUid>& aSupportedEmbeddedStillCaptureSettings) const;
   1.738 +	
   1.739 +	IMPORT_C void GetSupportedDirectSavingTypeL(TDirectSavingType& aSupportedDirectSavingType) const;
   1.740 +	
   1.741 +	IMPORT_C void SetSequentialImageFilenameL(const TDesC8& aFilename, TInt aStartingSequenceNumber);
   1.742 +	
   1.743 +	IMPORT_C void SetLowerResolutionSequentialImageFilenameL(const TDesC8& aLowerResolutionFilename, TInt aStartingSequenceNumber);
   1.744 +
   1.745 +    IMPORT_C void GetDirectSavingTypeL(TDirectSavingType& aDirectSavingType) const;
   1.746 +    
   1.747 +    IMPORT_C void SetDirectSavingTypeL(TDirectSavingType aDirectSavingType);
   1.748 +    
   1.749 +    IMPORT_C void GetCaptureEventSupportInfoL(TUint& aSupportedDriveModes) const;
   1.750 +	
   1.751 +	IMPORT_C void GetImageFormatsSupportedL(TUint& aImageFormatsSupported, const TSize& aSize) const;
   1.752 +	
   1.753 +	IMPORT_C void GetPixelAspectsSupportedL(TUint& aPixelAspectsSupported, CCamera::TFormat aImageFormat, const TSize& aSize) const;
   1.754 +	
   1.755 +	IMPORT_C void PrepareImageCapture(const TPrepareImageParameters& aPrepareImageParameters, MCaptureImageObserver& aCaptureImageObserver);
   1.756 +	
   1.757 +	IMPORT_C void GetImageMaxMemorySizeSettingSupportInfoL(TBool& aIsImageMaxMemorySizeSettingSupported) const;
   1.758 +	
   1.759 +	IMPORT_C void GetImageMaxMemorySizeL(TUint& aMemorySize) const;
   1.760 +	
   1.761 +    IMPORT_C ~CCameraPreImageCaptureControl();
   1.762 +	
   1.763 +    IMPORT_C void GetSupportedProcessingOptionsL(TUint& aECamProcessingOptionsSupported) const;
   1.764 +	
   1.765 +private:
   1.766 +	CCameraPreImageCaptureControl(CCamera& aOwner);
   1.767 +	void ConstructL(MPreImageCaptureControlObserver& aPreImageCaptureControlObserver);
   1.768 +	
   1.769 +private:
   1.770 +	void GetMaximumSpotsL(CCamera::CCameraAdvancedSettings::TFocusMode aFocusMode, TInt& aMaximumSpots) const;
   1.771 +	void GetSupportedSpotsCombinationL(CCamera::CCameraAdvancedSettings::TFocusMode aFocusMode, RArray<TUint>& aPossibleSpotCombinations) const;
   1.772 +	void GetSpotsCombinationL(CCamera::CCameraAdvancedSettings::TFocusMode aFocusMode, TUint& aSpotsCombination) const;
   1.773 +	void SetSpotsCombination(CCamera::CCameraAdvancedSettings::TFocusMode aFocusMode, TUint aSpotsCombination);
   1.774 +
   1.775 +	void GetStreamedImageSupportInfoL(TBool& aIsStreamedImageSupported) const;
   1.776 +    void EnableSubFramesL();
   1.777 +    void DisableSubFramesL();
   1.778 +	void GetSubFramesStateL(TBool& aIsSubFrameEnabled) const;
   1.779 +	void GetStreamedImageSupportedTransformationsL(RArray<TUid>& aStreamedImageSupportedTransformations) const;
   1.780 +	
   1.781 +	void GetPanoModeSupportInfoL(TBool& aIsPanoModeSupported, TInt& aSupportedStitchingOption) const;
   1.782 +	void StartPanoMode(TStitchingOption aStitchingOption);
   1.783 +	void StartPanoMode(TStitchingOption aStitchingOption, const RArray<TInt>& aVFHandle);
   1.784 +	void GetPanoDirectionL(TPanoDirection& aPanoDirection) const;
   1.785 +	void SetPanoDirection(TPanoDirection aPanoDirection);
   1.786 +	void StopPanoModeL(TStitchedImageRetrieval aStitchedImageRetrieval);
   1.787 +	
   1.788 +	void GetSupportedColorSpaceL(TUint& aSupportedColorSpace) const;
   1.789 +	void GetColorSpaceL(TColorSpace& aColorSpace) const;
   1.790 +	void SetColorSpace(TColorSpace aColorSpace);
   1.791 +	
   1.792 +	void StartEmbeddedStillCaptureSettingsL();
   1.793 +	void EndEmbeddedStillCaptureSettingsL();
   1.794 +	void GetFailedEmbeddedStillCaptureSettingsL(RArray<TUid>& aFailedEmbeddedStillCaptureSettings) const;
   1.795 +	
   1.796 +private:
   1.797 +	CCamera& iOwner;
   1.798 +	MCameraPreImageCaptureControl* iImpl;  // not owned
   1.799 +	};
   1.800 +	
   1.801 +/** 
   1.802 +CCameraImageCapture class exposes an API for capturing the image and controlling the overall capture. This class gets 
   1.803 +created by the implementation of MCameraPreImageCaptureControl::PrepareImageCapture and passed to the client through 
   1.804 +callback MPreImageCaptureControlObserver::PrepareImageComplete.
   1.805 +Destruction of this class is equivalent to releasing the resources owned in order to prepare and allocate memory for 
   1.806 +capturing images.
   1.807 +
   1.808 +@note  This class is not intended for sub-classing and used to standardise existing
   1.809 +       varieties of implementations.
   1.810 +       
   1.811 +@note  If the class methods leave, the output type parameter value is not guaranteed to be valid.
   1.812 +
   1.813 +@note  The use of this class implies that client will be able to issue image capture call even if previous
   1.814 +	   captures are still outstanding. 
   1.815 +	   
   1.816 +@note  Clients must implement an MCaptureImageObserver in order to use this CCameraImageCapture API. 
   1.817 +	   MCameraObserver2::ImageBufferReady will not be used with this class.
   1.818 +
   1.819 +@publishedPartner
   1.820 +@prototype
   1.821 +*/
   1.822 +class CCamera::CCameraImageCapture : public CBase
   1.823 +	{
   1.824 +	/* so can use internal factory functions etc. */
   1.825 +	friend class CCamera;
   1.826 +	
   1.827 +	/* so can use the MCameraImageCapture* as well. */
   1.828 +	friend class CCameraPostImageCaptureControl;
   1.829 +	
   1.830 +public:
   1.831 +	IMPORT_C static CCameraImageCapture* CreateL(CCamera& aCamera, const CCamera::CCameraPreImageCaptureControl::
   1.832 +				        TPrepareImageParameters& aPrepareImageParameters, MCaptureImageObserver& aCaptureImageObserver);
   1.833 +
   1.834 +	IMPORT_C CCamera::CCameraV2Histogram* CreateHistogramHandleL() const;
   1.835 +	
   1.836 +	IMPORT_C CCamera::CCameraSnapshot* GetSnapshotHandleL(TInt aClientViewFinderId) const;
   1.837 +	
   1.838 +	IMPORT_C CCamera::CCameraImageProcessing* GetTransformationHandleL() const;
   1.839 +	
   1.840 +	IMPORT_C void GetPrepareImageParametersL(CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters& aPrepareImageParameters) const;
   1.841 +
   1.842 +	IMPORT_C void CaptureImage();
   1.843 +	
   1.844 +	IMPORT_C void CancelCaptureImage();
   1.845 +	
   1.846 +	IMPORT_C void GetNumImagesExposedL(TUint& aNumImagesExposed) const;
   1.847 +	
   1.848 +	IMPORT_C void GetNumTotalImagesL(TUint& aNumTotalImages) const;
   1.849 +	
   1.850 +	IMPORT_C void GetPostCaptureControlHandleL(CCamera::CCameraPostImageCaptureControl*& aPostCaptureControlHandle, TPostCaptureControlId aPostCaptureControlId) const;
   1.851 +
   1.852 +	IMPORT_C void SetCaptureImagePriorityL(TECamImagePriority aCaptureImagePriority);
   1.853 +	
   1.854 +	IMPORT_C void GetCaptureImagePriorityL(TECamImagePriority& aCaptureImagePriority) const;
   1.855 +	
   1.856 +	IMPORT_C void PauseProcessing(TUint aProcessingTypes);
   1.857 +	
   1.858 +	IMPORT_C void ResumeProcessingL(TUint aProcessingTypes);
   1.859 +	
   1.860 +	IMPORT_C ~CCameraImageCapture();
   1.861 +
   1.862 +private:
   1.863 +	CCameraImageCapture(CCamera& aOwner);
   1.864 +	void ConstructL(const CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters& aPrepareImageParameters, 
   1.865 +												MCaptureImageObserver& aCaptureImageObserver);
   1.866 +	
   1.867 +	MCameraImageCapture* Impl() const;
   1.868 +	
   1.869 +private:
   1.870 +	CCamera& iOwner;
   1.871 +	MCameraImageCapture* iImpl;  // not owned
   1.872 +	};
   1.873 +	
   1.874 +/** This class is used to provide further information about still image data.
   1.875 +
   1.876 +@see MCameraBuffer
   1.877 +@see MCameraBuffer2
   1.878 +
   1.879 +@publishedPartner
   1.880 +@prototype
   1.881 +*/
   1.882 +class MCameraImageBuffer : public MCameraBuffer2
   1.883 +	{
   1.884 +public:
   1.885 +	/**
   1.886 +	Retrieves information regarding the image data received.
   1.887 +	
   1.888 +	@param aImageBufferInfo
   1.889 +		   Retrieves the info regarding the image data received.
   1.890 +	
   1.891 +	@return KErrArgument if implementation finds a different extended version of the TImageBufferInfo class.
   1.892 +
   1.893 +	@return May leave with other error codes.
   1.894 +		    
   1.895 +	@note  When there is a sub-frame, each image buffer retrieved contains only one sub-frame. If any of the subframe 
   1.896 +		   delivery reports an error, then no further subframes of this image would be delivered to the client.
   1.897 +	
   1.898 +	@note  Also retrieves information in order to distinguish the retrieved image buffer when shot-to-shot reduced latency 
   1.899 +		   scheme is used.
   1.900 +	*/
   1.901 +	virtual TInt GetImageBufferInfo(CCamera::CCameraPreImageCaptureControl::TImageBufferInfo& aImageBufferInfo) const=0;
   1.902 +	};
   1.903 +	
   1.904 +/** 
   1.905 +CCameraPostImageCaptureControl class exposes an API for retrieving the image data from individual images (in case 
   1.906 +continuous drive mode is used for capturing the images) and also to apply control on the captured images individually.
   1.907 +
   1.908 +CCameraPostImageCaptureControl instances will be owned by CCameraImageCapture and would be available until new capture 
   1.909 +command is issued using the owning CCameraImageCapture instance. If client wishes to initiate new capture but preserve 
   1.910 +the CCameraPostImageCaptureControl instances from previous capture, it would have to create a new CCameraImageCapture 
   1.911 +instance and use that for the new capture.
   1.912 +
   1.913 +@note  This class is not intended for sub-classing and used to standardise existing
   1.914 +       varieties of implementations.
   1.915 +       
   1.916 +@note  If the class methods leave, the output type parameter value is not guaranteed to be valid.
   1.917 +
   1.918 +@note  The use of this class implies that client will be able to issue image capture call even if previous
   1.919 +	   captures are still outstanding. 
   1.920 +	   
   1.921 +@note  Clients must implement an MCaptureImageObserver in order to use this CCameraPostImageCaptureControl API. 
   1.922 +	   MCameraObserver2::ImageBufferReady will not be used with this class.
   1.923 +
   1.924 +@publishedPartner
   1.925 +@prototype
   1.926 +*/
   1.927 +class CCamera::CCameraPostImageCaptureControl : public CBase
   1.928 +	{
   1.929 +public:
   1.930 +	/**
   1.931 +	Specifies the various states in which the individual images could be.
   1.932 +	The enumeration list may be extended in future.
   1.933 +	*/
   1.934 +	enum TImageState
   1.935 +		{
   1.936 +		/** The image has been exposed to the sensor but still pending for any processing options. */
   1.937 +		EProcessingPending,
   1.938 +		/** The image is undergoing processing for the required processing options. */
   1.939 +		EProcessingOngoing,
   1.940 +		/** The processing options associated with the image has been cancelled. */
   1.941 +		EProcessingCancelled,
   1.942 +		/** The processing options associated with the image has been completed. This implies that either the
   1.943 +			image buffers are ready or the image is directly saved to the file. */
   1.944 +		EProcessingCompleted
   1.945 +		};
   1.946 +		
   1.947 +	/**
   1.948 +	Specifies the various states in which the individual image buffers could be.
   1.949 +	The enumeration list may be extended in future.
   1.950 +	*/
   1.951 +	enum TBufferState
   1.952 +		{
   1.953 +		/** If Direct Saving option used, then user accessible buffers are not present. Hence buffer state will always be EBufferNotPresent.
   1.954 +			If Direct Saving option not used, this buffer state implies that processing options have not been completed. */
   1.955 +		EBufferNotPresent,
   1.956 +		/** This buffer state implies that processing options have been completed. Client may retrieve the image buffers 
   1.957 +			once this state is reached. */
   1.958 +		EBufferReady,
   1.959 +		/** This buffer state implies that client has released the image buffers after retrieving the data. */
   1.960 +		EBufferReleased
   1.961 +		};
   1.962 +		
   1.963 +public:
   1.964 +	IMPORT_C static CCameraPostImageCaptureControl* CreateL(CCameraImageCapture* aCameraImageCapture, TPostCaptureControlId aPostCaptureControlId);
   1.965 +	
   1.966 +	IMPORT_C void GetPostCaptureControlId(TPostCaptureControlId& aPostCaptureControlId) const;
   1.967 +	
   1.968 +	IMPORT_C CCamera::CCameraImageCapture* ImageCaptureHandle() const;
   1.969 +	
   1.970 +	IMPORT_C void GetImageSequenceNumberL(TUint& aSequenceNumber) const;
   1.971 +	
   1.972 +	IMPORT_C void CancelImage();
   1.973 +
   1.974 +	IMPORT_C void SetImagePriorityL(TECamImagePriority aImagePriority);
   1.975 +	
   1.976 +	IMPORT_C void GetImagePriorityL(TECamImagePriority& aImagePriority) const;
   1.977 +	
   1.978 +	IMPORT_C void PauseProcessing(TUint aProcessingTypes);
   1.979 +	
   1.980 +	IMPORT_C void ResumeProcessingL(TUint aProcessingTypes);
   1.981 +
   1.982 +	IMPORT_C void GetImageBufferL(MCameraImageBuffer& aCameraImageBuffer) const;
   1.983 +	
   1.984 +	IMPORT_C void GetImageStateL(TImageState& aImageState) const;
   1.985 +	
   1.986 +	IMPORT_C void GetBufferStateL(TBufferState& aBufferState) const;
   1.987 +	
   1.988 +	IMPORT_C ~CCameraPostImageCaptureControl();
   1.989 +
   1.990 +private:
   1.991 +	CCameraPostImageCaptureControl(CCamera::CCameraImageCapture* aCameraImageCapture, TPostCaptureControlId aPostCaptureControlId);
   1.992 +	void ConstructL();
   1.993 +	
   1.994 +private:
   1.995 +	TPostCaptureControlId iPostCaptureControlId;
   1.996 +	CCamera::CCameraImageCapture* iCameraImageCapture;	// not owned
   1.997 +	MCameraPostImageCaptureControl* iImpl;  // not owned
   1.998 +	};
   1.999 +	
  1.1000 +/** 
  1.1001 +Notification of set-up completion before video capture.
  1.1002 +@note  If error is KErrECamImageResourceNotReleased and client wants to successfully call the Prepare method again, 
  1.1003 +	   client needs to delete all CCameraImageCapture objects and any Snapshot and Histogram objects associated with
  1.1004 +	   it as well.   
  1.1005 +	
  1.1006 +@note  If error is KErrECamVideoResourceNotReleased and client wants to successfully call the Prepare method again,
  1.1007 +	   client needs to call ReleaseVideoResource to unprepare video and then delete any Snapshot and Histogram 
  1.1008 +	   objects associated with it as well.
  1.1009 +*/
  1.1010 +static const TUid KUidECamEventVideoCaptureControlPrepareComplete = {KUidECamEventVideoCaptureControlPrepareCompleteUidValue};
  1.1011 +
  1.1012 +/**
  1.1013 +Notifies that range of certain camera settings have been changed because of desired video settings.
  1.1014 +Client may call GetRangeAffectedSettingsL(RArray<TUid>& aRangeAffectedSettings) const to get the list of affected camera settings.
  1.1015 +*/
  1.1016 +static const TUid KUidECamEventVideoCaptureControlSettingsRangeChanged = {KUidECamEventVideoCaptureControlSettingsRangeChangedUidValue};
  1.1017 +
  1.1018 +/**
  1.1019 +Notifies that value of certain camera settings have been changed because of desired video settings.
  1.1020 +Client may call GetValueAffectedSettingsL(RArray<TUid>& aValueAffectedSettings) const to get the list of affected camera settings.
  1.1021 +*/
  1.1022 +static const TUid KUidECamEventVideoCaptureControlSettingsValueChanged = {KUidECamEventVideoCaptureControlSettingsValueChangedUidValue};
  1.1023 +
  1.1024 +/**
  1.1025 +Notifies that value of certain camera settings have been disabled because of desired video settings.
  1.1026 +Client may call GetDisabledSettingsL(RArray<TUid>& aDisabledSettings) const to get the list of affected camera settings.
  1.1027 +*/
  1.1028 +static const TUid KUidECamEventVideoCaptureControlSettingsDisabled = {KUidECamEventVideoCaptureControlSettingsDisabledUidValue};
  1.1029 +
  1.1030 +/**
  1.1031 +A mixin class to be implemented by the client in order to use the video capture control API(CCameraVideoCaptureControl). 
  1.1032 +The derived class methods are called by the implementation when the video capture operations are ready to be notified 
  1.1033 +accordingly.
  1.1034 +
  1.1035 +@see CCamera::CCameraVideoCaptureControl
  1.1036 +*/
  1.1037 +class MCaptureVideoObserver
  1.1038 +	{
  1.1039 +public:
  1.1040 +	/**
  1.1041 +	Implementation sends this callback in order to notify the client about the availability of video frames.
  1.1042 +	
  1.1043 +	@param  aVideoBuffer
  1.1044 +			Pointer to MCameraBuffer2 class object which retrieves the video frames. The ownership will be retained by 
  1.1045 +			the implementation. Client needs to call Release in order to indicate the implementation that the buffer can 
  1.1046 +			be re-used. Client shall never try to delete the pointer. NULL, if error.
  1.1047 +						
  1.1048 +	@param  aErrorCode
  1.1049 +			Appropriate error code.
  1.1050 +	*/
  1.1051 +	virtual void VideoBufferReady(MCameraBuffer2* aVideoBuffer, TInt aErrorCode)=0;
  1.1052 +																									  
  1.1053 +	/**
  1.1054 +	Implementation sends this callback in order to notify the client about the availability of client snapshot data for the
  1.1055 +	video being captured.
  1.1056 +	
  1.1057 +	If a call to CCameraSnapshot::EnableSnapshotL() (on the CCameraVideoCaptureControl instance) is made without a 
  1.1058 +	successful call to CCameraSnapshot::PrepareSnapshotL(const TSnapshotParameters& aSnapshotParameters) (on the 
  1.1059 +	CCameraVideoCaptureControl instance), then the callback returns KErrBadHandle.
  1.1060 +	
  1.1061 +	@param  aSnapshotBuffer
  1.1062 +			Pointer to MCameraBuffer2 class object which retrieves the snapshot for the video being captured. The 
  1.1063 +			ownership will be retained by the implementation. Client needs to call Release in order to indicate the 
  1.1064 +			implementation that the buffer can be re-used. Client shall never try to delete the pointer. NULL, if error.
  1.1065 +	
  1.1066 +	@param  aErrorCode
  1.1067 +			Appropriate error code. 
  1.1068 +	*/
  1.1069 +	virtual void ClientSnapshotReady(MCameraBuffer2* aSnapshotBuffer, TInt aErrorCode)=0;
  1.1070 +	
  1.1071 +	/**
  1.1072 +	Implementation sends this callback in order to notify the client about availability of the histogram data. If a call 
  1.1073 +	to CCameraV2Histogram::StartHistogram() is made without a previous successful call to CCameraV2Histogram::
  1.1074 +	PrepareClientHistogramL() then the callback returns KErrBadHandle.
  1.1075 +	
  1.1076 +	@param  aClientHistogramBuffer
  1.1077 +			Pointer to MHistogramV2Buffer which retrieves a single histogram alongwith relevant information about it. The 
  1.1078 +			ownership will be retained by the implementation. Client needs to call Release in order to indicate the 
  1.1079 +			implementation that the buffer can be re-used. Client shall never try to delete the pointer. NULL, if error.
  1.1080 +			
  1.1081 +	@param  aErrorCode
  1.1082 +			Appropriate error code. 
  1.1083 +	
  1.1084 +	@note   Client shall use the currently available histogram for the video frames until a new histogram is available.
  1.1085 +	*/
  1.1086 +	virtual void ClientHistogramReady(MHistogramV2Buffer* aClientHistogramBuffer, TInt aErrorCode)=0;
  1.1087 +	
  1.1088 +	/**
  1.1089 +	Implementation sends this callback in order to notify the client about the failure of image processing for the video 
  1.1090 +	frames.
  1.1091 +	
  1.1092 +	@param  aErrorCode
  1.1093 +			The reason of failure of the image processing. 
  1.1094 +	*/
  1.1095 +	virtual void ImageProcessingFailed(TInt aErrorCode)=0;
  1.1096 +	
  1.1097 +	/**
  1.1098 +	Implementation sends this callback in order to notify the client about the failure of direct video capture operation.
  1.1099 +	
  1.1100 +	@param  aErrorCode
  1.1101 +			The reason of failure of the direct video capture. The error code could be ECam specific. Client shall 
  1.1102 +			be prepared to handle unrecognized error code.
  1.1103 +	*/
  1.1104 +	virtual void DirectVideoCaptureFailed(TInt aErrorCode)=0;
  1.1105 +	
  1.1106 +	/**
  1.1107 +	Gets a custom interface for future callbacks. This method will be called by the implementation to get a new interface
  1.1108 +	which would support future callbacks.
  1.1109 +
  1.1110 +	@param  aInterface
  1.1111 +		    The Uid of the particular interface function required for callbacks.
  1.1112 +		   
  1.1113 +	@param  aPtrInterface
  1.1114 +		    The implementation has to type-cast the retrieved custom interface pointer to the appropriate type.	
  1.1115 +
  1.1116 +	@return The error code.
  1.1117 +	*/
  1.1118 +	virtual TInt CustomInterface(TUid aInterface, TAny*& aPtrInterface)=0;
  1.1119 +	};
  1.1120 +
  1.1121 +/** 
  1.1122 +CCamera Video Capture Control class exposes an API for controlling operations related to video capture. This gives priority
  1.1123 +to the low latency aspect by postponing the post processing activity involved with current video captured data(while 
  1.1124 +stopping the video capture) in order to capture/prepare for next still image.
  1.1125 +
  1.1126 +@note This class is not intended for sub-classing and used to standardise existing varieties of implementations.
  1.1127 +       
  1.1128 +@note  If the class methods leave, any reference argument is not guaranteed to be valid.
  1.1129 +
  1.1130 +@note  Clients must implement an MCaptureVideoObserver in order to use this CCameraVideoCaptureControl API. 
  1.1131 +	   MCameraObserver2::VideoBufferReady will not be used with this class.
  1.1132 +
  1.1133 +@publishedPartner
  1.1134 +@prototype
  1.1135 +*/
  1.1136 +class CCamera::CCameraVideoCaptureControl : public CBase
  1.1137 +	{
  1.1138 +	/* so can use internal factory functions etc. */
  1.1139 +	friend class CCamera;
  1.1140 +	
  1.1141 +public:
  1.1142 +	
  1.1143 +	/** 
  1.1144 +	Specifies video capture state. 
  1.1145 +	The enumeration list may be extended in future.
  1.1146 +	*/ 
  1.1147 +	enum TVideoCaptureState
  1.1148 +		{
  1.1149 +		/** Video Capture has been prepared but not yet started */  
  1.1150 +		EVideoCapturePrepared, 	 
  1.1151 +		/** Video Capture has been started and is running */
  1.1152 +		EVideoCaptureActive,	 
  1.1153 +		/** Video Capture has been started and is paused */
  1.1154 +		EVideoCapturePaused,
  1.1155 +		/** Video Capture has been stopped or not yet prepared */
  1.1156 +		EVideoCaptureInActive
  1.1157 +		};
  1.1158 +	
  1.1159 +	/** 
  1.1160 +	Specifies the various embedded still capture support. 
  1.1161 +	The enumeration list may be extended in future.
  1.1162 +	*/	
  1.1163 +	enum TEmbeddedStillCaptureTypes
  1.1164 +		{
  1.1165 +		/** Embedded still capture not supported */
  1.1166 +		EEmbeddedStillCaptureNotSupported = 0x00,
  1.1167 +		/** Embedded still capture supported */
  1.1168 +		EEmbeddedStillCaptureSupported	= 0x01
  1.1169 +		};
  1.1170 +		
  1.1171 +	/** 
  1.1172 +	Specifies the various video capture types. 
  1.1173 +	The enumeration list may be extended in future.
  1.1174 +	*/	
  1.1175 +	enum TVideoCaptureType
  1.1176 +		{
  1.1177 +		/** Video capture not supported. */
  1.1178 +		EVideoCaptureNotSupported = 0x00,
  1.1179 +		/** Client video capture - Client video capture is a concept under which
  1.1180 +		video buffers will be available to the clients of ECam through the 
  1.1181 +		dedicated observer MCaptureVideoObserver::VideoBufferReady(). Video frame 
  1.1182 +		formats used under this client video capture can be either compressed video 
  1.1183 +		frames or uncompressed video frames which are available through CCamera::TFormat. */
  1.1184 +		EClientVideoCapture = 0x01,
  1.1185 +		/** Direct video capture - Direct video capture is a concept under which
  1.1186 +		video buffers will not be available to the clients of ECam through the dedicated observers. Video frames will be used
  1.1187 +		by the ECam adaptation and could be passed internally to other components. Video frame formats used under this direct
  1.1188 +		video capture can be either compressed video frames or uncompressed video frames which are available through 
  1.1189 +		CCamera::TFormat. */
  1.1190 +		EDirectVideoCapture = 0x02
  1.1191 +		};
  1.1192 +		
  1.1193 +	/** 
  1.1194 +	Specifies the fading effect for video captured frames. 
  1.1195 +	The enumeration list may be extended in future.
  1.1196 +	
  1.1197 +	@internalTechnology
  1.1198 +	*/
  1.1199 +	enum TFadingEffectState
  1.1200 +		{
  1.1201 +		/** The fading effect will be visible on video captured frames as well, 
  1.1202 +		whenever the viewfinder fading is enabled */
  1.1203 +		EFadingEffectEnabled,
  1.1204 +		/** The fading effect will not be visible on video captured frames, 
  1.1205 +		whenever the viewfinder fading is enabled */
  1.1206 +		EFadingEffectDisabled
  1.1207 +		};
  1.1208 +		
  1.1209 +	/** 
  1.1210 +	Provides information regarding parameters needed to prepare for video capture. 
  1.1211 +	*/
  1.1212 +	class TPrepareVideoParameters
  1.1213 +		{
  1.1214 +	public:
  1.1215 +		IMPORT_C TPrepareVideoParameters(); 
  1.1216 +		
  1.1217 +		IMPORT_C TUint Size() const;
  1.1218 +		IMPORT_C TUint Version() const;
  1.1219 +		
  1.1220 +		IMPORT_C TBool IsEmbeddedStillCaptureEnabled() const;
  1.1221 +		IMPORT_C void  SetEmbeddedStillCaptureState(TBool aIsEmbeddedStillCaptureEnabled);
  1.1222 +		
  1.1223 +		IMPORT_C CCamera::CCameraVideoCaptureControl::TVideoCaptureType VideoCaptureType() const;
  1.1224 +		IMPORT_C void SetVideoCaptureType(CCamera::CCameraVideoCaptureControl::TVideoCaptureType aVideoCaptureType);
  1.1225 +					
  1.1226 +	private:
  1.1227 +		//for future expansion
  1.1228 +		TUint iSize:24;
  1.1229 +		TUint iVersion:8; 
  1.1230 +		
  1.1231 +		//for future use
  1.1232 +		TInt iReserved1;
  1.1233 +		TInt iReserved2;
  1.1234 +		TInt iReserved3;
  1.1235 +	
  1.1236 +		TUint iReservedBits:26;
  1.1237 +		
  1.1238 +		TUint iVideoCaptureType:3;
  1.1239 +		
  1.1240 +		TUint iReservedBits2:2;
  1.1241 +				
  1.1242 +		/** Indicates whether the embedded still capture is enabled. 
  1.1243 +		One bit is enough to provide such information */
  1.1244 +		TUint iIsEmbeddedStillCaptureEnabled:1;
  1.1245 +
  1.1246 +	public:
  1.1247 +		/** Format must be one of the video frame formats supported (see TCameraInfo::iVideoFrameFormatsSupported). */
  1.1248 +		CCamera::TFormat iFormat;
  1.1249 +		
  1.1250 +		/** Pixel aspect ratio to be used for the image. */
  1.1251 +		CCamera::CCameraAdvancedSettings::TPixelAspectRatio iPixelAspectRatio;
  1.1252 +		
  1.1253 +		/** Size index must be in the range 0 to TCameraInfo::iNumVideoFrameSizesSupported-1 inclusive. */
  1.1254 +		TInt iSizeIndex;
  1.1255 +		
  1.1256 +		/** The rate must be in the range 0 to TCameraInfo::iNumVideoFrameRatesSupported-1 inclusive. */
  1.1257 +		TInt iRateIndex;
  1.1258 +		
  1.1259 +		/** The number of discrete buffers to use. */
  1.1260 +		TInt iBuffersToUse;
  1.1261 +		
  1.1262 +		/** This indirectly indicates how large the buffers are to be. Number of frames per buffer must be less than or 
  1.1263 +		equal to TCameraInfo::iMaxFramesPerBufferSupported. One buffer is returned to MCaptureVideoObserver::
  1.1264 +		VideoBufferReady() at a time. */
  1.1265 +		TInt iFramesPerBuffer;
  1.1266 +		
  1.1267 +		/** Identifies the rectangle to which the video frame has to be clipped.
  1.1268 +		If no specifc clipping rectangle desired by the client, the clipping region can be given by 
  1.1269 +		origin as the top-left corner and size as given by iSizeIndex. */
  1.1270 +		TRect iClipRect;
  1.1271 +		};
  1.1272 +		
  1.1273 +public:
  1.1274 +	
  1.1275 +    IMPORT_C static CCameraVideoCaptureControl* NewL(CCamera& aCamera, MCaptureVideoObserver& aCaptureVideoObserver);
  1.1276 +    
  1.1277 +    IMPORT_C CCamera::CCameraV2Histogram* CreateHistogramHandleL() const;
  1.1278 +    
  1.1279 +    IMPORT_C CCamera::CCameraSnapshot* GetSnapshotHandleL(TInt aClientViewFinderId) const;
  1.1280 +    
  1.1281 +    IMPORT_C CCamera::CCameraImageProcessing* GetTransformationHandleL() const;
  1.1282 +    
  1.1283 +    IMPORT_C void GetVideoFormatsSupportedL(TUint& aVideoFormatsSupported, const TSize& aSize) const;
  1.1284 +	
  1.1285 +	IMPORT_C void GetPixelAspectsSupportedL(TUint& aPixelAspectsSupported, CCamera::TFormat aVideoFormat, const TSize& aSize) const;
  1.1286 +	
  1.1287 +	IMPORT_C void GetEmbeddedStillCaptureSupportInfoL(TInt& aSupportedEmbeddedStillCaptureTypes) const;
  1.1288 +	
  1.1289 +    IMPORT_C void PrepareVideoCapture(const TPrepareVideoParameters& aPrepareVideoParameters);
  1.1290 +	
  1.1291 +	IMPORT_C void GetRangeAffectedSettingsL(RArray<TUid>& aRangeAffectedSettings) const;
  1.1292 +	
  1.1293 +	IMPORT_C void GetValueAffectedSettingsL(RArray<TUid>& aValueAffectedSettings) const;
  1.1294 +	
  1.1295 +	IMPORT_C void GetDisabledSettingsL(RArray<TUid>& aDisabledSettings) const;
  1.1296 +	
  1.1297 +	IMPORT_C void ReleaseVideoResource();
  1.1298 +	
  1.1299 +	IMPORT_C void StartVideoCaptureL();												
  1.1300 +	
  1.1301 +	IMPORT_C void StopVideoCapture();
  1.1302 +	
  1.1303 +	IMPORT_C void PauseVideoCapture();
  1.1304 +	
  1.1305 +	IMPORT_C void ResumeVideoCaptureL();
  1.1306 +	
  1.1307 +	IMPORT_C void GetFadingEffectStateL(TFadingEffectState& aFadingEffectState) const;
  1.1308 +	
  1.1309 +	IMPORT_C void SetFadingEffectState(TFadingEffectState aFadingEffectState);
  1.1310 +	
  1.1311 +	IMPORT_C void GetVideoCaptureStateL(TVideoCaptureState& aVideoCaptureState) const;
  1.1312 +    
  1.1313 +    IMPORT_C ~CCameraVideoCaptureControl();
  1.1314 +    
  1.1315 +    IMPORT_C void GetVideoCaptureSupportInfoL(TInt& aSupportedVideoCaptureTypes) const;
  1.1316 +    
  1.1317 +    IMPORT_C void GetPrepareVideoParametersL(TPrepareVideoParameters& aPrepareVideoParameters) const;
  1.1318 +    
  1.1319 +private:
  1.1320 +	CCameraVideoCaptureControl(CCamera& aOwner);
  1.1321 +	void ConstructL(MCaptureVideoObserver& aCaptureVideoObserver);
  1.1322 +	
  1.1323 +private:
  1.1324 +	void GetSupportedConversionCoefficientsL(TUint& aSupportedConversionCoefficients) const;
  1.1325 +    void GetConversionCoefficientL(TYuvCoefficients& aConversionCoefficients) const;
  1.1326 +    void SetConversionCoefficient(TYuvCoefficients aConversionCoefficients);
  1.1327 + 	
  1.1328 +private:
  1.1329 +	CCamera& iOwner;
  1.1330 +	MCameraVideoCaptureControl* iImpl;  // not owned
  1.1331 +	};
  1.1332 +	
  1.1333 +#endif //ECAMCAPTURECONTROL_H