imagingandcamerafws/camerafw/source/ecamviewfinder.cpp
changeset 0 40261b775718
equal deleted inserted replaced
-1:000000000000 0:40261b775718
       
     1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include <ecamviewfinder.h>
       
    17 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
       
    18 #include <ecamviewfinderdef.h>
       
    19 #endif
       
    20 #include <ecam/camerahistogram.h>
       
    21 #include <ecam/ecamviewfinderintf.h>
       
    22 #include <ecam/implementationfactoryintf.h>
       
    23 #include "ecamversion.h"
       
    24 
       
    25 /**	
       
    26 CCameraViewFinder Constructor.
       
    27 
       
    28 @param aOwner
       
    29        a reference to a CCamera object providing the settings. 
       
    30 
       
    31 @internalComponent
       
    32 @prototype
       
    33 */
       
    34 CCameraViewFinder::CCameraViewFinder(CCamera& aOwner): iOwner(aOwner), iImplBase(NULL)
       
    35 	{
       
    36 	}
       
    37 
       
    38 /**
       
    39 Destructor
       
    40 */	
       
    41 CCameraViewFinder::~CCameraViewFinder()
       
    42 	{
       
    43 	}
       
    44 
       
    45 /**
       
    46 Retrieves the fading capabilites for a particular viewfinder.
       
    47 
       
    48 @param  aVFFadingCapabilities
       
    49 		Retrieves the fading capabilities associated with the given viewfinder.
       
    50 		
       
    51 @leave  May leave with any error code.
       
    52 
       
    53 @internalTechnology
       
    54 */
       
    55 EXPORT_C void CCameraViewFinder::GetViewFinderFadingCapabilitiesL(CCameraViewFinder::TViewFinderFadingCapabilities& aVFFadingCapabilities) const
       
    56 	{
       
    57 	if(iImplBase != NULL)
       
    58 		{
       
    59 		iImplBase->GetViewFinderFadingCapabilitiesL(aVFFadingCapabilities);	
       
    60 		}
       
    61 	else
       
    62 		{
       
    63 		User::Leave(KErrNotSupported);	
       
    64 		}	
       
    65 	}
       
    66 
       
    67 /**
       
    68 Retrieves the current fading effect/control being used for a particular viewfinder.
       
    69 
       
    70 @param  aCurrentVFFadingEffect
       
    71 		Retrieves the fading effects associated with the given viewfinder.
       
    72 		
       
    73 @leave  May leave with any error code.
       
    74 
       
    75 @internalTechnology
       
    76 */
       
    77 EXPORT_C void CCameraViewFinder::GetViewFinderFadingEffectL(CCameraViewFinder::TViewFinderFadingEffect& aCurrentVFFadingEffect) const
       
    78 	{
       
    79 	if(iImplBase != NULL)
       
    80 		{
       
    81 		iImplBase->GetViewFinderFadingEffectL(aCurrentVFFadingEffect);	
       
    82 		}
       
    83 	else
       
    84 		{
       
    85 		User::Leave(KErrNotSupported);	
       
    86 		}
       
    87 	}
       
    88 
       
    89 /**
       
    90 Sets the fading effect/control for a particular viewfinder.
       
    91 
       
    92 @param  aVFFadingEffect
       
    93 		The desired fading effects associated with the given viewfinder.
       
    94 	
       
    95 @leave  KErrNotSupported if the implementation of this method is not present.
       
    96 		
       
    97 @note   Event KUidECamEvent2ViewFinderFadingEffect is used to notify the requesting client about the setting of the 
       
    98 		fading effect.
       
    99 		
       
   100 @internalTechnology
       
   101 */
       
   102 EXPORT_C void CCameraViewFinder::SetViewFinderFadingEffectL(const CCameraViewFinder::TViewFinderFadingEffect& aVFFadingEffect)
       
   103 	{
       
   104 	if(iImplBase != NULL)
       
   105 		{
       
   106 		iImplBase->SetViewFinderFadingEffect(aVFFadingEffect);	
       
   107 		}
       
   108 	else
       
   109 		{
       
   110 		User::Leave(KErrNotSupported);	
       
   111 		}
       
   112 	}
       
   113 	
       
   114 /**
       
   115 Retrieves the handle number which represents the given viewfinder object. 
       
   116 
       
   117 @param  aVFHandle
       
   118 		The viewfinder handle
       
   119 		
       
   120 @leave  May leave with any error code.
       
   121 
       
   122 @note   KECamDefaultViewFinderHandle is used to refer to the viewfinder started using CCamera methods. 
       
   123 */
       
   124 EXPORT_C void CCameraViewFinder::GetViewFinderHandleL(TInt& aVFHandle) const
       
   125 	{
       
   126 	if(iImplBase != NULL)
       
   127 		{
       
   128 		iImplBase->GetViewFinderHandleL(aVFHandle);	
       
   129 		}
       
   130 	else
       
   131 		{
       
   132 		User::Leave(KErrNotSupported);	
       
   133 		}
       
   134 	}
       
   135 
       
   136 /**
       
   137 Constructor for the TViewFinderFadingCapabilities class.
       
   138 Sets the size and version of this class.
       
   139 
       
   140 @internalTechnology
       
   141 */
       
   142 EXPORT_C CCameraViewFinder::TViewFinderFadingCapabilities::TViewFinderFadingCapabilities()
       
   143 	{
       
   144 	iSize = sizeof(CCameraViewFinder::TViewFinderFadingCapabilities);
       
   145 	iVersion = KECamViewFinderFadingCapabilitiesCurrentVersion;
       
   146 	}
       
   147 	
       
   148 /** 
       
   149 Returns the size of the class. Used for extensibility by deriving from this base class and adding new member variables.
       
   150 Intended to be used for implementation of methods where this class reference is passed as function arguments. 
       
   151 Implementation of such methods can find out the whether the actual class passed is base or the derived one. So, if a new application 
       
   152 is made to run on an old implementation, an error may occur once the old implementation detects this by getting 
       
   153 the size information of the T class passed. Also, if old application is made to run on a new implementation, this can be 
       
   154 handled correctly if the derived class variables handling is done in a proper 'if-else' statement.
       
   155 
       
   156 @return The size of the class.
       
   157 
       
   158 @note The size will be modified when the T-class gets updated.
       
   159 
       
   160 @internalTechnology
       
   161 */
       
   162 EXPORT_C TUint CCameraViewFinder::TViewFinderFadingCapabilities::Size() const
       
   163 	{
       
   164 	return iSize;
       
   165 	}
       
   166 	
       
   167 /**	
       
   168 Returns the version of the class. Used for extensibility specially when the class members are not added but the Reserved 
       
   169 members get used at a later stage.
       
   170 
       
   171 @return The version of the class.
       
   172 
       
   173 @note The version will be modified when the T-class gets updated.
       
   174 
       
   175 @internalTechnology
       
   176 */
       
   177 EXPORT_C TUint CCameraViewFinder::TViewFinderFadingCapabilities::Version() const
       
   178 	{
       
   179 	return iVersion;
       
   180 	}
       
   181 	
       
   182 /**
       
   183 Constructor for the TViewFinderFadingEffect class.
       
   184 Sets the size and version of this class.
       
   185 
       
   186 @internalTechnology
       
   187 */
       
   188 EXPORT_C CCameraViewFinder::TViewFinderFadingEffect::TViewFinderFadingEffect()
       
   189 	{
       
   190 	iSize = sizeof(CCameraViewFinder::TViewFinderFadingEffect);
       
   191 	iVersion = KECamViewFinderFadingEffectCurrentVersion;
       
   192 	}
       
   193 	
       
   194 /** 
       
   195 Returns the size of the class. Used for extensibility by deriving from this base class and adding new member variables.
       
   196 Intended to be used for implementation of methods where this class reference is passed as function arguments. 
       
   197 Implementation of such methods can find out the whether the actual class passed is base or the derived one. So, if a new application 
       
   198 is made to run on an old implementation, an error may occur once the old implementation detects this by getting 
       
   199 the size information of the T class passed. Also, if old application is made to run on a new implementation, this can be 
       
   200 handled correctly if the derived class variables handling is done in a proper 'if-else' statement.
       
   201 
       
   202 @return The size of the class.
       
   203 
       
   204 @note The size will be modified when the T-class gets updated.
       
   205 
       
   206 @internalTechnology
       
   207 */
       
   208 EXPORT_C TUint CCameraViewFinder::TViewFinderFadingEffect::Size() const
       
   209 	{
       
   210 	return iSize;
       
   211 	}
       
   212 	
       
   213 /**	
       
   214 Returns the version of the class. Used for extensibility specially when the class members are not added but the Reserved 
       
   215 members get used at a later stage.
       
   216 
       
   217 @return The version of the class.
       
   218 
       
   219 @note The version will be modified when the T-class gets updated.
       
   220 
       
   221 @internalTechnology
       
   222 */
       
   223 EXPORT_C TUint CCameraViewFinder::TViewFinderFadingEffect::Version() const
       
   224 	{
       
   225 	return iVersion;
       
   226 	}
       
   227 	
       
   228 /**
       
   229 Retrieves the position of spots for a given spot combination which is to be displayed on a particular viewfinder.
       
   230 
       
   231 @param  aSpotCombination
       
   232 		A given spot combination. It is a bitfield where every bit represents the presence or absence of a particular spot.
       
   233 		
       
   234 @param  aSpotsPosition
       
   235 		An array of TRect which represents the position of every spot present in the given spot combination. 
       
   236 		The first member of this array maps the first spot present in the given spot combination from the least significant bit side.
       
   237 		The position of a spot is relative to the top-left corner of viewfinder.
       
   238 
       
   239 @leave  May leave with any error code.
       
   240 		
       
   241 @note   These TRect specify the position of the spots relative to the targeted viewfinder space. Note 
       
   242         that spots could also be represented as points since point is a special case of rectangle.
       
   243 		
       
   244 @see 	CCamera::CCameraImageCaptureControl::GetMaximumSpotsL
       
   245 @see	CCamera::CCameraImageCaptureControl::GetSupportedSpotsCombinationL
       
   246 @see    CCamera::CCameraImageCaptureControl::GetSpotsCombinationL
       
   247 @see    CCamera::CCameraImageCaptureControl::SetSpotsCombination
       
   248 */
       
   249 void CCameraViewFinder::GetSpotsPositionL(TUint /*aSpotCombination*/, RArray<TRect>& /*aSpotsPosition*/) const
       
   250 	{
       
   251 	User::Leave(KErrNotSupported);	
       
   252 	}
       
   253 
       
   254 /**
       
   255 Retrieves the supported image enhancements.
       
   256 
       
   257 @param  aSupportedImageEnhancement
       
   258 		A bitfield of all supported TImageEnhancement to be provided to the client.
       
   259 
       
   260 @leave  May leave with any error code.
       
   261 */
       
   262 void CCameraViewFinder::GetSupportedImageEnhancementL(TUint& /*aSupportedImageEnhancement*/) const
       
   263 	{
       
   264 	User::Leave(KErrNotSupported);	
       
   265 	}
       
   266 
       
   267 /**
       
   268 Get the current image enhancement for the particular viewfinder.
       
   269 
       
   270 @param  aImageEnhancement
       
   271 		Currently used TImageEnhancement for the viewfinder display.
       
   272 		
       
   273 @leave  May leave with any error code. 
       
   274 */
       
   275 void CCameraViewFinder::GetImageEnhancementL(CCameraViewFinder::TImageEnhancement& /*aImageEnhancement*/) const
       
   276 	{
       
   277 	User::Leave(KErrNotSupported);	
       
   278 	}
       
   279 	
       
   280 /**
       
   281 Set the image enhancement for a particular viewfinder.
       
   282 
       
   283 @param  aImageEnhancement 
       
   284 		The TImageEnhancement value to be set
       
   285 		
       
   286 @leave  KErrNotSupported If the implementation of this method is not present.
       
   287 
       
   288 @note   Event KUidECamEvent2ViewFinderImageEnhancement is used to notify clients about the image enhancement setting operation.
       
   289 */
       
   290 void CCameraViewFinder::SetImageEnhancementL(CCameraViewFinder::TImageEnhancement /*aImageEnhancement*/)
       
   291 	{
       
   292 	User::Leave(KErrNotSupported);
       
   293 	}
       
   294 
       
   295 /**
       
   296 Retrieves the supported viewfinder magnification factor in terms of percentage. Changing the magnification factor allows 
       
   297 the user to view more or less area than what would normally appear on the captured image.
       
   298 
       
   299 @param	aSupportedVFMagnification
       
   300 		An array of TUint which retrieves the supported magnification factor. Every member of this array is a 
       
   301 		magnification factor and represents a percentage unit. Note that every array member is multiplied by 
       
   302 		KECamFineResolutionFactor to support fractional percentages as well. For example, 90.5% will be represented by 9050.
       
   303 		
       
   304 @leave  May leave with any error code.
       
   305 */
       
   306 void CCameraViewFinder::GetSupportedVFMagnificationL(RArray<TUint>& /*aSupportedVFMagnification*/) const
       
   307 	{
       
   308 	User::Leave(KErrNotSupported);	
       
   309 	}
       
   310 
       
   311 /**
       
   312 Retrieves the current magnification factor for a particular viewfinder.
       
   313 
       
   314 @param  aVFMagnification
       
   315 		The current magnification factor used for the given viewfinder. It represents a percentage unit. 
       
   316 		Note that the magnification factor is multiplied by KECamFineResolutionFactor to support fractional 
       
   317 		percentages as well. For example, 90.5% will be represented by 9050.
       
   318 		
       
   319 @leave  May leave with any error code.
       
   320 */
       
   321 void CCameraViewFinder::GetViewfinderMagnificationL(TUint& /*aVFMagnification*/) const
       
   322 	{
       
   323 	User::Leave(KErrNotSupported);	
       
   324 	}
       
   325 
       
   326 /**
       
   327 Set a particular magnification factor for the given viewfinder.
       
   328 
       
   329 @param  aVFMagnification
       
   330 		The magnification factor to be set. It represents a percentage unit. 
       
   331 		Note that the magnification factor is multiplied by KECamFineResolutionFactor to support fractional 
       
   332 		percentages as well. For example, 90.5% will be represented by 9050.
       
   333 		
       
   334 @leave  KErrNotSupported If the implementation of this method is not present.
       
   335 
       
   336 @note   Event KUidECamEvent2ViewFinderMagnification is used to notify the requesting client about the setting of the 
       
   337 		magnification factor.
       
   338 */
       
   339 void CCameraViewFinder::SetViewfinderMagnificationL(TUint /*aVFMagnification*/)
       
   340 	{
       
   341 	User::Leave(KErrNotSupported);
       
   342 	}
       
   343 
       
   344 /**
       
   345 Factory function for creating the CCameraV2DirectViewFinder object.
       
   346 
       
   347 @param aCamera 
       
   348 	   A reference to a CCamera object providing the settings.
       
   349 	   
       
   350 @param aDirectViewFinderObserver
       
   351 	   Reference to the direct view finder observer.
       
   352 
       
   353 @return A pointer to a fully constructed CCameraV2DirectViewFinder object.
       
   354 
       
   355 @leave KErrNoMemory Out of memory Or any other system-wide error code.
       
   356 
       
   357 @leave KErrExtensionNotSupported When NewL/NewDuplicateL used instead of New2L/NewDuplicate2L.
       
   358 */
       
   359 EXPORT_C CCamera::CCameraV2DirectViewFinder* CCamera::CCameraV2DirectViewFinder::NewL(CCamera& aCamera, MDirectViewFinderObserver& aDirectViewFinderObserver)
       
   360 	{
       
   361  	if(aCamera.CameraVersion() == KCameraDefaultVersion)
       
   362  		{
       
   363  		User::Leave(KErrExtensionNotSupported);
       
   364  		}
       
   365  		
       
   366 	CCamera::CCameraV2DirectViewFinder* self = new (ELeave)CCamera::CCameraV2DirectViewFinder(aCamera); 
       
   367 	CleanupStack::PushL(self);
       
   368 	self->ConstructL(aDirectViewFinderObserver);
       
   369 	CleanupStack::Pop(self);
       
   370 	return self; 
       
   371 	}
       
   372 	
       
   373 	
       
   374 void CCamera::CCameraV2DirectViewFinder::ConstructL(MDirectViewFinderObserver& aDirectViewFinderObserver)
       
   375 	{
       
   376 	SetImplHandle();
       
   377 	if(iImpl == NULL)
       
   378 		{
       
   379 		User::LeaveIfError(KErrNotSupported);		
       
   380 		}
       
   381 	SetImplBaseHandle();
       
   382 	
       
   383 	iImpl->SetDirectViewFinderObserver(aDirectViewFinderObserver);
       
   384 	iImpl->SetDirectViewFinderHandle(this);
       
   385 	}
       
   386 	
       
   387 /**	
       
   388 CCameraV2DirectViewFinder Constructor.
       
   389 
       
   390 @param aOwner
       
   391        A reference to a CCamera object providing the settings. 
       
   392 */
       
   393 CCamera::CCameraV2DirectViewFinder::CCameraV2DirectViewFinder(CCamera& aOwner): CCameraViewFinder(aOwner),iImpl(NULL)
       
   394 	{
       
   395 	}
       
   396 
       
   397 /**
       
   398 Destructor
       
   399 @note  The child objects created out of this direct viewfinder class object shall be delete beforehand. Various child 
       
   400 	   objects are snapshot and histograms.
       
   401 */	
       
   402 EXPORT_C CCamera::CCameraV2DirectViewFinder::~CCameraV2DirectViewFinder()
       
   403 	{
       
   404 	if (iImpl != NULL)
       
   405 		{
       
   406 		iImpl->Release(this);
       
   407 		}
       
   408 		
       
   409 	if (iImplBase != NULL)
       
   410 		{
       
   411 		iImplBase->Release();
       
   412 		}
       
   413 	}	
       
   414 	
       
   415 /**
       
   416 Retrieve pointer to histogram API in order to use it specifically for a particular viewfinder.
       
   417 
       
   418 @return Pointer to use histogram API specifically for the given viewfinder.
       
   419 		
       
   420 @leave  May leave with any error code.
       
   421 
       
   422 @note   Different types of histogram may be used for a specific viewfinder. Every time this method will be called
       
   423 		on the CCameraV2DirectViewFinder class object, a new type of histogram will be created.
       
   424 */	
       
   425 EXPORT_C CCamera::CCameraV2Histogram* CCamera::CCameraV2DirectViewFinder::CreateHistogramHandleL() const
       
   426 	{
       
   427 	MImplementationFactory* implFactory = NULL;
       
   428 	
       
   429 	iImpl->CreateHistogramImplFactoryL(implFactory);
       
   430 	
       
   431 	CleanupReleasePushL(*implFactory);
       
   432 	CCamera::CCameraV2Histogram* histogram = CCamera::CCameraV2Histogram::CreateL(iOwner, *implFactory);
       
   433 	CleanupStack::Pop(implFactory);
       
   434 	
       
   435 	implFactory->Release();
       
   436 	return histogram;	
       
   437 	}
       
   438 
       
   439 /**
       
   440 Retrieve pointer to image processing API in order to use it specifically for a particular viewfinder.
       
   441 
       
   442 @return Pointer to use image processing API specifically for the given viewfinder.
       
   443 		
       
   444 @leave  May leave with any error code.
       
   445 */
       
   446 EXPORT_C CCamera::CCameraImageProcessing* CCamera::CCameraV2DirectViewFinder::GetTransformationHandleL() const
       
   447 	{
       
   448 	MImplementationFactory* implFactory = NULL;
       
   449 	
       
   450 	iImpl->GetImageProcessingImplFactoryL(implFactory);
       
   451 	
       
   452 	CleanupReleasePushL(*implFactory);
       
   453 	CCamera::CCameraImageProcessing* imgProc = CCamera::CCameraImageProcessing::CreateL(iOwner, *implFactory);
       
   454 	CleanupStack::Pop(implFactory);
       
   455 	
       
   456 	implFactory->Release();
       
   457 	return imgProc;	
       
   458 	}
       
   459 
       
   460 /**
       
   461 Retrieve pointer to direct snapshot API in order to use it for displaying the snapshots for still images directly on the 
       
   462 given direct viewfinder screen. 
       
   463 
       
   464 @return Pointer to use direct snapshot API specifically for the given viewfinder.
       
   465 		
       
   466 @leave  May leave with any error code.
       
   467 
       
   468 @note  Direct snapshot API is not supposed to be used for snapshots for video.
       
   469 */
       
   470 EXPORT_C CCamera::CCameraDirectSnapshot* CCamera::CCameraV2DirectViewFinder::GetDirectSnapshotHandleL() const
       
   471 	{
       
   472 	return CCamera::CCameraDirectSnapshot::CreateL(const_cast<CCamera::CCameraV2DirectViewFinder&>(*this));
       
   473 	}
       
   474 
       
   475 /** 
       
   476 Creates a new viewfinder and starts transfer of view finder data to the given portion of the screen using direct 
       
   477 screen access.
       
   478 
       
   479 The aScreenRect parameter is in screen coordinates and may be modified if,
       
   480 for example, the camera requires the destination to have a certain byte alignment, and so on.
       
   481 
       
   482 @param  aWs 
       
   483         Window server session.
       
   484 @param  aScreenDevice 
       
   485         Screen device.
       
   486 @param  aWindow 
       
   487         Displayable window.
       
   488 @param  aScreenRect 
       
   489         Portion of the screen to which view finder data is to be
       
   490         transferred. This is in screen co-ordinates and may be modified if, for example,
       
   491         the camera requires the destination to have a certain byte alignment.
       
   492 
       
   493 @leave  KErrInUse if another direct viewfinder is running with the same set of window parameters. May leave with any other error code.
       
   494 
       
   495 @note   MDirectViewFinderObserver::DirectViewFinderFirstFrameDisplayed() will be used to notify clients that the first 
       
   496 		frame has been displayed.
       
   497 */
       
   498 EXPORT_C void CCamera::CCameraV2DirectViewFinder::StartViewFinderDirectL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, 
       
   499 										RWindowBase& aWindow, TRect& aScreenRect)
       
   500 	{
       
   501 	iImpl->StartViewFinderDirectL(aWs, aScreenDevice, aWindow, aScreenRect);	
       
   502 	}
       
   503 
       
   504 /** 
       
   505 Creates a new viewfinder and starts transfer of view finder data to the given portion of the screen using direct screen
       
   506 access and also clips to the specified portion of the screen.
       
   507 
       
   508 The view finder has the same size and position as aScreenRect but is only
       
   509 visible in the intersection of aScreenRect and aClipRect. May leave with KErrNotSupported
       
   510 or KErrNotReady if Reserve() has not been called, or has not yet completed.
       
   511 
       
   512 @param  aWs 
       
   513         Window server session.
       
   514 @param  aScreenDevice 
       
   515         Screen device.
       
   516 @param  aWindow 
       
   517         Displayable window.
       
   518 @param  aScreenRect 
       
   519         Portion of the screen to which view finder data is to be
       
   520         transferred. This is in screen coordinates and may be modified if, for example,
       
   521         the camera requires the destination to have a certain byte alignment.
       
   522 @param  aClipRect
       
   523         The rectangle to which the screen will be clipped.
       
   524 
       
   525 @leave  KErrInUse if another direct viewfinder is running with the same set of window parameters. May leave with any other error code.
       
   526 
       
   527 @note   MDirectViewFinderObserver::DirectViewFinderFirstFrameDisplayed() will be used to notify clients that the first 
       
   528 		frame has been displayed.
       
   529 */									
       
   530 EXPORT_C void CCamera::CCameraV2DirectViewFinder::StartViewFinderDirectL(RWsSession& aWs, CWsScreenDevice& aScreenDevice,
       
   531 										RWindowBase& aWindow, TRect& aScreenRect, TRect& aClipRect)
       
   532 	{
       
   533 	iImpl->StartViewFinderDirectL(aWs, aScreenDevice, aWindow, aScreenRect, aClipRect);	
       
   534 	}
       
   535 
       
   536 /**
       
   537 Retrieves the parameters associated with the direct viewfinder.
       
   538 
       
   539 @param  aScreenNumber
       
   540 		Retrieves the screen number on which the direct viewfinder is supposed to run.
       
   541 		
       
   542 @param  aScreenRect
       
   543 		Retrieves the TRect which identifies the portion of the screen to which view finder data is to be transferred.
       
   544 
       
   545 @param  aClipRect
       
   546 		Retrieves the TRect which identifies the rectangle to which the screen will be clipped.
       
   547 		
       
   548 @leave  May leave with any error code.
       
   549 */
       
   550 EXPORT_C void CCamera::CCameraV2DirectViewFinder::GetDirectViewFinderPropertiesL(TInt& aScreenNumber, TRect& aScreenRect, 
       
   551 																						TRect& aClipRect) const
       
   552 	{
       
   553 	iImpl->GetDirectViewFinderPropertiesL(aScreenNumber, aScreenRect, aClipRect);	
       
   554 	}
       
   555 
       
   556 /**
       
   557 Pauses the direct viewfinder.
       
   558 */
       
   559 EXPORT_C void CCamera::CCameraV2DirectViewFinder::PauseViewFinderDirect()
       
   560 	{
       
   561 	iImpl->PauseViewFinderDirect();	
       
   562 	}
       
   563 
       
   564 /**
       
   565 Resumes the direct viewfinder
       
   566 
       
   567 @note   MDirectViewFinderObserver::DirectViewFinderFirstFrameDisplayed() will be used to notify clients that the first
       
   568 		frame has been displayed.
       
   569 */
       
   570 EXPORT_C void CCamera::CCameraV2DirectViewFinder::ResumeViewFinderDirect()
       
   571 	{
       
   572 	iImpl->ResumeViewFinderDirect();	
       
   573 	}
       
   574 
       
   575 /**
       
   576 Retrieves the state of the direct viewfinder.
       
   577 
       
   578 @param  aViewFinderState
       
   579 		Retrieves the state of the direct viewfinder.
       
   580 		
       
   581 @leave  May leave with any error code.
       
   582 */
       
   583 EXPORT_C void CCamera::CCameraV2DirectViewFinder::GetViewFinderStateL(CCamera::CCameraV2DirectViewFinder::TViewFinderState& aViewFinderState) const
       
   584 	{
       
   585 	iImpl->GetViewFinderStateL(aViewFinderState);	
       
   586 	}
       
   587 
       
   588 /**
       
   589 Stops the direct viewfinder.
       
   590 */
       
   591 EXPORT_C void CCamera::CCameraV2DirectViewFinder::StopDirectViewFinder()
       
   592 	{
       
   593 	iImpl->StopDirectViewFinder();	
       
   594 	}
       
   595 
       
   596 /** 
       
   597 Gets the handle to the implementer's MCameraV2DirectViewFinder derived class.
       
   598 */	
       
   599 void CCamera::CCameraV2DirectViewFinder::SetImplHandle()
       
   600 	{
       
   601 	if(iImpl == NULL)
       
   602 		{
       
   603 		iImpl = static_cast<MCameraV2DirectViewFinder*>(iOwner.CustomInterface(KECamMCameraV2DirectViewFinderUid));
       
   604 		}
       
   605 	}
       
   606 
       
   607 /** 
       
   608 Gets the handle to the implementer's MCameraViewFinder derived class for v2 direct viewfinder.
       
   609 */	
       
   610 void CCamera::CCameraV2DirectViewFinder::SetImplBaseHandle()
       
   611 	{
       
   612 	if(iImplBase == NULL)
       
   613 		{
       
   614 		iImplBase = static_cast<MCameraViewFinder*>(iOwner.CustomInterface(KECamMCameraBaseV2DirectViewFinderUid));
       
   615 		}
       
   616 	}
       
   617 /**
       
   618 Provides the interface pointer for the MCameraV2DirectViewFinder implementation.
       
   619 
       
   620 @return  Interface pointer for MCameraV2DirectViewFinder implementation.
       
   621 */	
       
   622 MCameraV2DirectViewFinder* CCamera::CCameraV2DirectViewFinder::Impl()
       
   623 	{
       
   624 	return iImpl;
       
   625 	}
       
   626 
       
   627 /**
       
   628 Factory function for creating the CCameraClientViewFinder object.
       
   629 
       
   630 @param aCamera 
       
   631 	   A reference to a CCamera object providing the settings.
       
   632 	   
       
   633 @param aClientViewFinderObserver
       
   634 	   Reference to the client view finder observer.
       
   635 
       
   636 @return A pointer to a fully constructed CCameraClientViewFinder object.
       
   637 
       
   638 @leave KErrNoMemory Out of memory or any other system-wide error code.
       
   639 
       
   640 @leave KErrExtensionNotSupported When NewL/NewDuplicateL used instead of New2L/NewDuplicate2L.
       
   641 */
       
   642 EXPORT_C CCamera::CCameraClientViewFinder* CCamera::CCameraClientViewFinder::NewL(CCamera& aCamera, MClientViewFinderObserver& aClientViewFinderObserver)
       
   643 	{
       
   644  	if(aCamera.CameraVersion() == KCameraDefaultVersion)
       
   645  		{
       
   646  		User::Leave(KErrExtensionNotSupported);
       
   647  		}
       
   648  		
       
   649 	CCamera::CCameraClientViewFinder* self = new (ELeave)CCamera::CCameraClientViewFinder(aCamera); 
       
   650 	CleanupStack::PushL(self);
       
   651 	self->ConstructL(aClientViewFinderObserver);
       
   652 	CleanupStack::Pop(self);
       
   653 	return self; 
       
   654 	}
       
   655 		
       
   656 void CCamera::CCameraClientViewFinder::ConstructL(MClientViewFinderObserver& aClientViewFinderObserver)
       
   657 	{
       
   658 	SetImplHandle();
       
   659 	if(iImpl == NULL)
       
   660 		{
       
   661 		User::LeaveIfError(KErrNotSupported);		
       
   662 		}
       
   663 	SetImplBaseHandle();
       
   664 	
       
   665 	iImpl->SetClientViewFinderObserver(aClientViewFinderObserver);
       
   666 	iImpl->SetClientViewFinderHandle(this);
       
   667 	}
       
   668 	
       
   669 /**	
       
   670 CCameraClientViewFinder Constructor.
       
   671 
       
   672 @param aOwner
       
   673        a reference to a CCamera object providing the settings. 
       
   674 */
       
   675 CCamera::CCameraClientViewFinder::CCameraClientViewFinder(CCamera& aOwner): CCameraViewFinder(aOwner), iImpl(NULL)
       
   676 	{
       
   677 	}
       
   678 	
       
   679 /**
       
   680 Retrieve pointer to histogram API in order to use it specifically for a particular viewfinder.
       
   681 
       
   682 @return Pointer to use histogram API specifically for the given viewfinder.
       
   683 		
       
   684 @leave  May leave with any error code.
       
   685 
       
   686 @note   Different types of histogram may be used for a specific viewfinder. Every time this method will be called
       
   687 		on the CCameraClientViewFinder class object, a new type of histogram will be created.
       
   688 */	
       
   689 EXPORT_C CCamera::CCameraV2Histogram* CCamera::CCameraClientViewFinder::CreateHistogramHandleL() const
       
   690 	{
       
   691 	MImplementationFactory* implFactory = NULL;
       
   692 	
       
   693 	iImpl->CreateHistogramImplFactoryL(implFactory);
       
   694 	
       
   695 	CleanupReleasePushL(*implFactory);
       
   696 	CCamera::CCameraV2Histogram* histogram = CCamera::CCameraV2Histogram::CreateL(iOwner, *implFactory);
       
   697 	CleanupStack::Pop(implFactory);
       
   698 	
       
   699 	implFactory->Release();
       
   700 	return histogram;	
       
   701 	}
       
   702 
       
   703 /**
       
   704 Retrieve pointer to image processing API in order to use it specifically for a particular viewfinder.
       
   705 
       
   706 @return Pointer to use image processing API specifically for the given viewfinder.
       
   707 		
       
   708 @leave  May leave with any error code.
       
   709 */
       
   710 EXPORT_C CCamera::CCameraImageProcessing* CCamera::CCameraClientViewFinder::GetTransformationHandleL() const
       
   711 	{
       
   712 	MImplementationFactory* implFactory = NULL;
       
   713 	
       
   714 	iImpl->GetImageProcessingImplFactoryL(implFactory);
       
   715 	
       
   716 	CleanupReleasePushL(*implFactory);
       
   717 	CCamera::CCameraImageProcessing* imgProc = CCamera::CCameraImageProcessing::CreateL(iOwner, *implFactory);
       
   718 	CleanupStack::Pop(implFactory);
       
   719 	
       
   720 	implFactory->Release();
       
   721 	return imgProc;	
       
   722 	}
       
   723 
       
   724 /** 
       
   725 Creates a new viewfinder and starts transfer of view finder data.
       
   726 
       
   727 Availability of viewfinder data is notified by MClientViewFinderObserver::ViewFinderBufferReady().
       
   728 
       
   729 @param  aScreenNumber
       
   730 		The screen number on which the client viewfinder is supposed to run.
       
   731 @param  aImageFormat 
       
   732         The image format requested by the client.
       
   733 @param  aSize 
       
   734         On return, the size used. The size may be modified by the implementation because of hardware constraints and 
       
   735         byte alignment.
       
   736 
       
   737 @leave  May leave with any error code.
       
   738 
       
   739 @note   KECamDefaultViewFinderHandle is used to refer to the viewfinder started using CCamera methods.
       
   740 
       
   741 @see	CCamera::StartViewFinderL(TFormat aImageFormat,TSize& aSize)
       
   742 */
       
   743 EXPORT_C void CCamera::CCameraClientViewFinder::StartClientViewFinderL(TInt aScreenNumber, CCamera::TFormat aImageFormat, TSize& aSize)
       
   744 	{
       
   745 	iImpl->StartClientViewFinderL(aScreenNumber, aImageFormat, aSize);
       
   746 	}
       
   747 
       
   748 /** 
       
   749 Creates a new viewfinder and starts transfer of view finder data. Also, clips the picture to the specified clip	rectangle. 
       
   750 
       
   751 Availability of viewfinder data is notified by MClientViewFinderObserver::ViewFinderBufferReady().
       
   752 
       
   753 The picture is the size of the intersection of aSize and aClipRect, not simply
       
   754 aSize padded with white space.
       
   755 
       
   756 @param  aScreenNumber
       
   757 		The screen number on which the client viewfinder is supposed to run.
       
   758 @param  aImageFormat 
       
   759         The image format.
       
   760 @param  aSize
       
   761         On return, the size used. The size may be modified by the implementation because of hardware constraints and
       
   762         byte alignment.
       
   763 @param  aClipRect 
       
   764         Required clip rectangle. May be modified if, for example,
       
   765         the camera only supports certain byte alignments.
       
   766 
       
   767 @leave  May leave with any error code.
       
   768 
       
   769 @note   KECamDefaultViewFinderHandle is used to refer viewfinder started using CCamera methods.
       
   770 
       
   771 @see	CCamera::StartViewFinderL(TFormat aImageFormat,TSize& aSize,TRect& aClipRect)
       
   772 */
       
   773 EXPORT_C void CCamera::CCameraClientViewFinder::StartClientViewFinderL(TInt aScreenNumber, CCamera::TFormat aImageFormat, TSize& aSize, TRect& aClipRect)
       
   774 	{
       
   775 	iImpl->StartClientViewFinderL(aScreenNumber, aImageFormat, aSize, aClipRect);
       
   776 	}
       
   777 
       
   778 /**
       
   779 Retrieves the state of the client viewfinder.
       
   780 
       
   781 @param  aIsActive
       
   782 		ETrue indicates that client viewfinder is active.
       
   783 		EFalse indicates that client viewfinder is not active.
       
   784 
       
   785 @leave  May leave with any error code.
       
   786 */
       
   787 EXPORT_C void CCamera::CCameraClientViewFinder::GetClientViewFinderStateL(TBool& aIsActive) const
       
   788 	{
       
   789 	iImpl->GetClientViewFinderStateL(aIsActive);	
       
   790 	}
       
   791 
       
   792 /**
       
   793 Retrieves the parameters associated with the client viewfinder.
       
   794 
       
   795 @param  aScreenNumber
       
   796 		Retrieves the screen number on which the client viewfinder is supposed to run.
       
   797 		
       
   798 @param  aImageFormat
       
   799 		Retrieves the image format of the client viewfinder.
       
   800 
       
   801 @param  aSize
       
   802 		Retrieves the size used for the client viewfinder.
       
   803 		
       
   804 @param	aClipRect
       
   805 		Retrieves the clip rectangle. If not specified, the clipping is retrieved as a TRect having origin as top left 
       
   806 		corner and the size as 'aSize'.
       
   807 		
       
   808 @leave  May leave with any error code.
       
   809 */
       
   810 EXPORT_C void CCamera::CCameraClientViewFinder::GetClientViewFinderPropertiesL(TInt& aScreenNumber, CCamera::TFormat& aImageFormat, TSize& aSize, TRect& aClipRect) const
       
   811 	{
       
   812 	iImpl->GetClientViewFinderPropertiesL(aScreenNumber, aImageFormat, aSize, aClipRect);
       
   813 	}
       
   814 
       
   815 /**
       
   816 Stop the client viewfinder.
       
   817 */
       
   818 EXPORT_C void CCamera::CCameraClientViewFinder::StopClientViewFinder()
       
   819 	{
       
   820 	iImpl->StopClientViewFinder();
       
   821 	}
       
   822 
       
   823 /**
       
   824 Retrieves the client viewfinder buffer. Client calls this method after being notified about availability of viewfinder
       
   825 data via MClientViewFinderObserver::ViewFinderBufferReady().
       
   826 
       
   827 @param  aClientViewFinderBuffer
       
   828 		Reference to MCameraBuffer2 which retrieves the client viewfinder data.
       
   829 
       
   830 @leave  May leave with any error code.
       
   831 */	
       
   832 EXPORT_C void CCamera::CCameraClientViewFinder::GetViewFinderBufferL(MCameraBuffer2& aClientViewFinderBuffer) const
       
   833 	{
       
   834 	iImpl->GetViewFinderBufferL(aClientViewFinderBuffer);	
       
   835 	}
       
   836 
       
   837 /**
       
   838 Destructor
       
   839 @note  The child objects created out of this client viewfinder class object shall be delete beforehand. Various child 
       
   840 	   objects are snapshot and histograms.
       
   841 */	
       
   842 EXPORT_C CCamera::CCameraClientViewFinder::~CCameraClientViewFinder()
       
   843 	{
       
   844 	if (iImpl != NULL)
       
   845 		{
       
   846 		iImpl->Release(this);
       
   847 		}
       
   848 		
       
   849 	if (iImplBase != NULL)
       
   850 		{
       
   851 		iImplBase->Release();
       
   852 		}
       
   853 	}
       
   854 
       
   855 /** 
       
   856 Gets the handle to the implementer's MCameraClientViewFinder derived class.
       
   857 */	
       
   858 void CCamera::CCameraClientViewFinder::SetImplHandle()
       
   859 	{
       
   860 	if(iImpl == NULL)
       
   861 		{
       
   862 		iImpl = static_cast<MCameraClientViewFinder*>(iOwner.CustomInterface(KECamMCameraClientViewFinderUid));
       
   863 		}
       
   864 	}
       
   865 
       
   866 /** 
       
   867 Gets the handle to the implementer's MCameraViewFinder derived class for client viewfinder.
       
   868 */	
       
   869 void CCamera::CCameraClientViewFinder::SetImplBaseHandle()
       
   870 	{
       
   871 	if(iImplBase == NULL)
       
   872 		{
       
   873 		iImplBase = static_cast<MCameraViewFinder*>(iOwner.CustomInterface(KECamMCameraBaseClientViewFinderUid));
       
   874 		}
       
   875 	}
       
   876 
       
   877 /**
       
   878 @internalComponent
       
   879 
       
   880 Factory function that creates a new camera direct snapshot object.
       
   881 
       
   882 @param	aDirectViewFinder
       
   883 		A reference to the camera direct viewfinder object for which a camera direct snapshot object is to be created.
       
   884 		
       
   885 @leave  KErrNoMemory if out of memory; also any system wide error.
       
   886 
       
   887 @return A pointer to a fully constructed camera direct snapshot object.
       
   888 */	
       
   889 EXPORT_C CCamera::CCameraDirectSnapshot* CCamera::CCameraDirectSnapshot::CreateL(CCamera::CCameraV2DirectViewFinder& aDirectViewFinder)
       
   890 	{
       
   891 	CCamera::CCameraDirectSnapshot* self = new (ELeave) CCamera::CCameraDirectSnapshot();
       
   892 	CleanupStack::PushL(self);
       
   893 	self->ConstructL(aDirectViewFinder);
       
   894 	CleanupStack::Pop(self);
       
   895 	return self; 
       
   896 	}
       
   897 
       
   898 /**
       
   899 @internalComponent
       
   900 
       
   901 CCameraDirectSnapshot second phase constructor 
       
   902 
       
   903 Function used to initialise internal state of the object. 
       
   904 
       
   905 @param	aDirectViewFinder
       
   906 		A reference to the camera direct viewfinder object on which the direct snapshot will be displayed.
       
   907 
       
   908 @leave KErrNoMemory Out of memory; or any other error code as well.
       
   909 
       
   910 @note This method is supposed to be used by this class only.
       
   911 */ 
       
   912 void CCamera::CCameraDirectSnapshot::ConstructL(CCamera::CCameraV2DirectViewFinder& aDirectViewFinder) 
       
   913 	{
       
   914 	iImpl = static_cast<MCameraDirectSnapshot*>(DirectViewFinderImpl(aDirectViewFinder)->GetDirectSnapshotImpl(KECamMCameraDirectSnapshotUid));
       
   915 
       
   916 	if (iImpl == NULL)
       
   917 		{
       
   918 		User::Leave(KErrNotSupported);
       
   919 		}
       
   920 		
       
   921 	iImpl->SetDirectViewFinder(&aDirectViewFinder);
       
   922 	}
       
   923 	
       
   924 /**
       
   925 Constructor for the CCameraDirectSnapshot class.
       
   926 */
       
   927 CCamera::CCameraDirectSnapshot::CCameraDirectSnapshot():iImpl(NULL)
       
   928 	{
       
   929 	}
       
   930 
       
   931 /**
       
   932 Provides the interface pointer for the concrete implementation of CCameraV2DirectViewFinder. 
       
   933 
       
   934 @param	aDirectViewFinder
       
   935 		A reference to the camera direct viewfinder object
       
   936 
       
   937 @return interface pointer for the concrete implementation of CCameraV2DirectViewFinder.
       
   938 */
       
   939 MCameraV2DirectViewFinder* CCamera::CCameraDirectSnapshot::DirectViewFinderImpl(CCamera::CCameraV2DirectViewFinder& aDirectViewFinder)
       
   940 	{
       
   941 	return aDirectViewFinder.Impl();
       
   942 	}
       
   943 	
       
   944 /**
       
   945 Destructor
       
   946 */
       
   947 EXPORT_C CCamera::CCameraDirectSnapshot::~CCameraDirectSnapshot()
       
   948 	{
       
   949 	if (iImpl != NULL)
       
   950 		{
       
   951 		iImpl->Release();
       
   952 		}
       
   953 	}
       
   954 
       
   955 /**
       
   956 Retrieve the version2 direct viewfinder object out of which this direct snapshot has been created. This information may be
       
   957 required by the client in order to map the direct snapshot object with its parent version2 direct viewfinder object or also
       
   958 to retrieve properties of its parent version2 direct viewfinder object.
       
   959 
       
   960 @param	aDirectViewFinder
       
   961 		A pointer to the camera version2 direct viewfinder object on which the direct snapshot will be displayed.
       
   962 
       
   963 @leave  May leave with any error code.
       
   964 */
       
   965 EXPORT_C void CCamera::CCameraDirectSnapshot::GetDirectViewFinderL(CCamera::CCameraV2DirectViewFinder*& aDirectViewFinder) const
       
   966 	{
       
   967 	iImpl->GetDirectViewFinderL(aDirectViewFinder);
       
   968 	}
       
   969 
       
   970 /**
       
   971 Enable the direct snapshot. The direct snapshot will be displayed on the parent direct viewfinder screen. The screen size
       
   972 of the snapshot will be the same as that of the parent direct viewfinder screen.
       
   973 
       
   974 The direct snapshot can be displayed only for still images.
       
   975 
       
   976 @param  aDirectSnapshotParameters
       
   977 		The desired direct snapshot parameter.
       
   978 		
       
   979 @leave  May leave with any error code.
       
   980 */
       
   981 EXPORT_C void CCamera::CCameraDirectSnapshot::EnableDirectSnapshotL(CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters& aDirectSnapshotParameters)
       
   982 	{
       
   983 	iImpl->EnableDirectSnapshotL(aDirectSnapshotParameters);
       
   984 	}
       
   985 
       
   986 /**
       
   987 Disable the direct snapshot. The direct snapshot will not be displayed on the parent direct viewfinder screen.
       
   988 */
       
   989 EXPORT_C void CCamera::CCameraDirectSnapshot::DisableDirectSnapshot()
       
   990 	{
       
   991 	iImpl->DisableDirectSnapshot();
       
   992 	}
       
   993 
       
   994 /**
       
   995 Retrieves the current state for direct snapshot.
       
   996 
       
   997 @param  aDirectSnapshotParameters
       
   998 		Retrieves the current state for direct snapshot.
       
   999 		
       
  1000 @leave  May leave with any error code.
       
  1001 */	
       
  1002 EXPORT_C void CCamera::CCameraDirectSnapshot::GetDirectSnapshotStateL(CCamera::CCameraDirectSnapshot::TDirectSnapshotState& aDirectSnapshotState) const
       
  1003 	{
       
  1004 	iImpl->GetDirectSnapshotStateL(aDirectSnapshotState);
       
  1005 	}
       
  1006 
       
  1007 /**
       
  1008 Retrieves the direct snapshot parameters. 
       
  1009 
       
  1010 @param  aDirectSnapshotParameters
       
  1011 		Retrieves the direct snapshot parameter of type TDirectSnapshotParameters.
       
  1012 		
       
  1013 @leave  May leave with any error code.
       
  1014 */
       
  1015 EXPORT_C void CCamera::CCameraDirectSnapshot::GetDirectSnapshotParametersL(CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters& aDirectSnapshotParameters) const
       
  1016 	{
       
  1017 	iImpl->GetDirectSnapshotParametersL(aDirectSnapshotParameters);	
       
  1018 	}
       
  1019 
       
  1020 /**
       
  1021 Sets the direct snapshot parameters. 
       
  1022 
       
  1023 @param  aDirectSnapshotParameters
       
  1024 		The desired direct snapshot parameter of type TDirectSnapshotParameters.
       
  1025 		
       
  1026 @leave  May leave with any error code.
       
  1027 */	
       
  1028 EXPORT_C void CCamera::CCameraDirectSnapshot::SetDirectSnapshotParametersL(const CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters& aDirectSnapshotParameters)
       
  1029 	{
       
  1030 	iImpl->SetDirectSnapshotParametersL(aDirectSnapshotParameters);		
       
  1031 	}
       
  1032 
       
  1033 /**
       
  1034 Constructor for the TDirectSnapshotParameters class.
       
  1035 Sets the size and version of this class.
       
  1036 */
       
  1037 EXPORT_C CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters::TDirectSnapshotParameters()
       
  1038 	{
       
  1039 	iSize = sizeof(CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters);
       
  1040 	iVersion = KECamViewFinderFadingEffectCurrentVersion;
       
  1041 	}
       
  1042 	
       
  1043 /** 
       
  1044 Returns the size of the class. Used for extensibility by deriving from this base class and adding new member variables.
       
  1045 Intended to be used for implementation of methods where this class reference is passed as function arguments. 
       
  1046 Implementation of such methods can find out the whether the actual class passed is base or the derived one. So, if a new application 
       
  1047 is made to run on an old implementation, an error may occur once the old implementation detects this by getting 
       
  1048 the size information of the T class passed. Also, if old application is made to run on a new implementation, this can be 
       
  1049 handled correctly if the derived class variables handling is done in a proper 'if-else' statement.
       
  1050 
       
  1051 @return The size of the class.
       
  1052 
       
  1053 @note The size will be modified when the T-class gets updated.
       
  1054 */	
       
  1055 EXPORT_C TUint CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters::Size() const
       
  1056 	{
       
  1057 	return iSize;
       
  1058 	};
       
  1059 
       
  1060 /**	
       
  1061 Returns the version of the class. Used for extensibility specially when the class members are not added but the Reserved 
       
  1062 members get used at a later stage.
       
  1063 
       
  1064 @return The version of the class.
       
  1065 
       
  1066 @note The version will be modified when the T-class gets updated.
       
  1067 */
       
  1068 EXPORT_C TUint CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters::Version() const
       
  1069 	{
       
  1070 	return iVersion;
       
  1071 	};
       
  1072 		
       
  1073 /** 
       
  1074 Indicates whether the aspect ratio of the direct snapshot image has to maintained (if ETrue) or not (if EFalse) 
       
  1075 while scaling down.
       
  1076 
       
  1077 @return TBool: ETrue implies aspect ratio has to be maintained, EFalse otherwise.
       
  1078 
       
  1079 @see CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters::iIsAspectRatioMaintained
       
  1080 */
       
  1081 EXPORT_C TBool CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters::IsAspectRatioMaintained() const
       
  1082 	{
       
  1083 	if (iIsAspectRatioMaintained)
       
  1084 		{
       
  1085 		return ETrue;
       
  1086 		}
       
  1087 	else
       
  1088 		{
       
  1089 		return EFalse;
       
  1090 		}	
       
  1091 	}
       
  1092 	
       
  1093 /** 
       
  1094 Sets the state to inform whether the aspect ratio of the direct snapshot image has to be maintained or not while scaling
       
  1095 down.
       
  1096 
       
  1097 @param  aIsAspectRatioMaintained
       
  1098 		ETrue implies must be maintained, EFalse otherwise.
       
  1099 		
       
  1100 @see CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters::iIsAspectRatioMaintained
       
  1101 */
       
  1102 EXPORT_C void CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters::SetAspectRatioState(TBool aIsAspectRatioMaintained)
       
  1103 	{
       
  1104 	iIsAspectRatioMaintained = static_cast<TUint>(aIsAspectRatioMaintained);
       
  1105 	}