diff -r 34024902876b -r 50d5061ee01e camappengine/Engine/Inc/CaeStillStatesActive.h --- a/camappengine/Engine/Inc/CaeStillStatesActive.h Fri Mar 19 09:33:47 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,828 +0,0 @@ -/* -* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Still capture state machine implementation class -* -*/ - - - -#ifndef CAESTILLSTATESACTIVE_H -#define CAESTILLSTATESACTIVE_H - -// INCLUDES -#include -#include -#include -#include -#include -#include "CaeEngineExtInterface.h" -#include "CaeCommon.h" -#include "CaeEngine.h" -#include "CaeStillEncoder.h" -#include "CaeStillDecoder.h" -#include "CaeDbgUtilities.h" // For debugging. - - -// CONSTANTS - -#ifdef _DEBUG -const TInt KOneSecond = 1000000; // This many microseconds in a second -#endif - -// Optimal snap bitmap size concerning memory usage and snap image quality -const TInt KCaeDefaultSnapWidth = 640; -const TInt KCaeDefaultSnapHeight = 480; - -_LIT(KCaePanicText, "CamAppEngine"); -enum TCaePanic - { - ECaePanicInvalidState = 1 - }; - -const TInt KCaeDefaultCompressionQuality = 90; -const CCamera::TFormat KBaseStillInputFormat1 = CCamera::EFormatFbsBitmapColor16M; -const CCamera::TFormat KBaseStillInputFormat2 = CCamera::EFormatFbsBitmapColor64K; -const TDisplayMode KCaeDefaultDisplayMode = EColor64K; // The default display mode for the snap image - - -// FORWARD DECLARATIONS -class CCaeEngineImp; -class CCaeStillBurst; -class CCaeImageQueueExtPro; - -// CLASS DECLARATION - -/** -* Still capure state machine implementation class -*/ - -NONSHARABLE_CLASS( CCaeStillStatesActive ) : public CActive, - public MCaeStillEncoderObserver, - public MCaeStillDecoderObserver - { - public: // Enums - - /** - * Events for the state machine - */ - enum TCaeEvent - { - // External event - ECaeEventNone = 0, - - // Start - ECaeEventStartStillCapture = 1, - - // Capturing - ECaeEventImageCaptureReady = 100, - ECaeEventBurstImageCaptureReady = 101, - ECaeEventBurstCaptureReady = 102, - ECaeEventAppendCapturedBurstImageReady = 103, - ECaeEventViewFinderForBurstReady = 104, - - // Processing - ECaeEventBurstImageFetchReady = 200, - ECaeEventDecodeToBitmapReady = 201, - ECaeEventExtractExifMetaDataReady = 202, - ECaeEventProcessCapturedImageStepReady = 203, - ECaeEventProcessCapturedImageAllReady = 204, - ECaeEventProcessSnapImageStepReady = 205, - ECaeEventProcessSnapImageAllReady = 206, - ECaeEventDeliverSnapImageReady = 207, - ECaeEventProcessStillImageStepReady = 208, - ECaeEventProcessStillImageAllReady = 209, - ECaeEventEncodeToJpegReady = 210, - ECaeEventDeliverStillBurstImageReady = 211, - ECaeEventDeliverStillImageReady = 212, - - // Processing - ECaeEventImageQueueExtPro = 300, - - // End of process - ECaeEventEnd = 900 - }; - - public: // Constructors and destructor - - /** - * Symbian OS two-phased constructor. - * @since 2.8 - * @param aCamera Reference to Camera API. - * @param aInfo Reference to the engine info struct - * @param aProcessImageImplList Reference to list of the extensions implementing MCaeExtProcessImageInterface. - * @return instance of the object - */ - static CCaeStillStatesActive* NewL( - CCamera& aCamera, - const TCamAppEngineInfo& aInfo, - RArray& aProcessImageImplList ); - - /** - * Destructor. - * @since 2.8 - */ - virtual ~CCaeStillStatesActive(); - - public: // Delegated from CCaeEngine class method calls - - void SetCamAppEngineObserver( - MCamAppEngineObserver& aObserver ); - - void SetSnapImageCreation( - TBool aCreateSnapImage = ETrue ); - - void SetSnapImageSourceL( - CCaeEngine::TSnapImageSource aSnapImageSource ); - - void SetSnapImageSizeL( - TSize& aSize ); - - void SetSnapImageColorMode( - TDisplayMode aMode ); - - void SetJpegQuality( - TInt aQuality ); - - TInt JpegQuality() const; - - void SetImageCodecsL( - TUid aDecoderUid, TUid aEncoderUid ); - - void SetCaeStillBurstObserver( - MCaeStillBurstObserver& aObserver ); - - TInt SetStillCaptureImageCountL( - TInt aImageCount ); - - TInt StillCaptureImageCount() const; - - void SetStillBurstCaptureIntervalL( - TTimeIntervalMicroSeconds aInterval ); - - TTimeIntervalMicroSeconds StillBurstCaptureInterval() const; - - void StopStillBurstCapture(); - - void CancelCaptureStill(); - - public: // New methods - - /** - * Called asynchronously when the captured image is ready. - * @since 2.8 - * @param aBitmap A pointer to an image held in CFbsBitmap form - * @param aData A pointer to an image held in HBufC8 in previously specified format. - * @param aError SymbianOS standard error code. - * @return void. - */ - void ImageReady( - CFbsBitmap* aBitmap, - HBufC8* aData, - TInt aError ); - - /** - * Called asynchronously when the view finder frame is ready. - * @since 2.8 - * @return void - */ - void ViewFinderFrameReady(); - - /** - * Get current still image size. - * @since 2.8 - * @return Still image size in pixels. - */ - TSize StillImageSize() const; - - /** - * Get current snap image size. - * @since 2.8 - * @return Snap image size in pixels. - */ - TSize SnapImageSize() const; - - /** - * Set view finder mode enabled or disabled. - * @since 2.8 - * @param aIsEnabled Tell if the view finder is enabled. - * @return void. - */ - void SetViewFinderMode( - TBool aIsEnabled ); - - /** - * Check if the state machine has been started. - * @since 2.8 - * @return State of the state machine. - */ - TBool IsRunning() const; - - /** - * Register flags which affect general extension handling in the engine. - * @since 2.8 - * @param aFlags Flags to register. - * @return void. - */ - void RegisterFlags( TUint32 aFlags ); - - /** - * Deregister flags which have been registered before. - * @since 2.8 - * @param aFlags Flags to deregister. - * @return void. - */ - void DeregisterFlags( TUint32 aFlags ); - - /** - * Prepare the state machine for still image capture . - * The returned snap image size is always equal or bigger in both - * dimensions than the given size. The returned size is stepwise - * downscaled from the captured image size. The parameter aSnapSize - * is ignored if that is not supported for the image format used. - * @since 2.8 - * @param aSize Still image size. - * @param aFormat Still image format. - * @param aCropRect Desired cropping/clipping rectangle. The size (0,0) means that this parameter is ignored. - * @param aSnapSize Desired snap image size. Returns the real snap image size. - * @return void - */ - void PrepareStillCaptureL( - const TSize& aSize, - CCamera::TFormat aFormat, - const TRect& aCropRect, - TSize& aSnapSize ); - - /** - * Send event to the state machine. Usually only ECaeEventStartStillCapture - * event is send outside the class. - * @since 2.8 - * @param aEvent Event to the state machine. - * @param aDelay The delay that the event will occur after. - * @return void. - */ - void Event( TCaeEvent aEvent, TTimeIntervalMicroSeconds32 aDelay = 0 ); - - /** - * Recover and handle error cases. This could mean also ending of - * the state machine, but not always (e.g. in burst mode ). - * @since 2.8 - * @param aError Error code. - * @return void. - */ - void ErrorRecovery( TInt aError ); - - /** - * Start capturing without active object delay. - * @since 3.2 - * @return void. - */ - void StartQuickCapture(); - - /** - * Gets the extension mode status. - * @since 3.2 - * @return ETrue if extension mode is avtive. - */ - TBool ExtModeActive(); - - /** - * Sets the extension mode on/off. - * @since 3.2 - * @return void. - */ - void SetExtModeActiveL( TBool aExtModeActive ); - - /** - * Do the extension processing for snap image. - * @since 3.2 - * @return error code. - */ - TInt ProcessExtSnapImage( CFbsBitmap* aSnapImage ); - - - /** - * Do the extension processing for captured image. - * @since 3.2 - * @return error code. - */ - TInt ProcessExtCapturedImage( HBufC8* aImageData, TBool aLastImage ); - - /** - * Do the extension processing for captured bitmap image. - * @since 3.2 - * @return error code. - */ - TInt ProcessExtCapturedImage( CFbsBitmap* aImageBitmapData, TBool aLastImage ); - - /** - * Set the burst mode optimization mode - * @since 3.2 - * @return void. - */ - void SetBurstModeVFOptimization( TBool aBurstModeVFOptimization ); - - private: // Enums - - /** - * States of the state machine - */ - enum TCaeState - { - ECaeStateNone = 0, - - // Capturing - ECaeStateCapturing = 100, - ECaeStateCapturingBurst = 101, - ECaeStateAppendingBurstImage = 102, - ECaeStateBurstWaitingForViewFinder = 103, - - // Processing - ECaeStateFetchingNextBurstImage = 200, - ECaeStateDecodingCapturedImageToBitmap = 201, - ECaeStateExtractingExifMetaData = 202, - ECaeStateExtensionsProcessingCapturedImage = 203, - ECaeStateDecodingToSnapImage = 204, - ECaeStateExtensionsProcessingSnapImage = 205, - ECaeStateDeliveringSnapImage = 206, - ECaeStateExtensionsProcessingStillImage = 207, - ECaeStateEncodingToJpeg = 208, - ECaeStateDeliveringStillImage = 209, - ECaeStateDeliveringStillBurstImage = 210, - ECaeStateCompletingStillBurst = 211 - }; - - private: // Constructors - - /** - * C++ constructor. - * @since 2.8 - * @param aCamAppEngine Reference to CCaeEngineImp instance - */ - CCaeStillStatesActive( - CCamera& aCamera, - const TCamAppEngineInfo& aInfo, - RArray& aProcessImageImplList ); - - /** - * Symbian OS 2nd phase constructor that can leave. - * @since 2.8 - * @return void - */ - void ConstructL(); - - private: // Methods from CActive - - void RunL(); - - void DoCancel(); - - void Cancel(); - - private: // From Still Encoder Observer / CaeStillConverter.h - - void McaeseoHBufC8ImageReady( - CFbsBitmap* aBitmap, - HBufC8* aImageData, - TInt aError, - TInt aImageSize ); - - private: // From Still Decoder Observer / CaeStillConverter.h - - void McaesdoCFbsBitmapImageReady( - HBufC8* aImageData, - CFbsBitmap* aBitmap, - TInt aError, - TInt aImageSize ); - - private: // Event handlers for state transitions - - /** - * Handle errors from extenal processing, e.g. from the extensions. - * @since 2.8 - * @return void. - */ - void HandleExternalError(); - - /** - * Handle events from extenal processing, e.g. from the extensions. - * @since 2.8 - * @return void. - */ - void HandleExternalEvent(); - - /** - * Handle start event. - * @since 2.8 - * @return void. - */ - void HandleStart(); - - /** - * Handle event when an image has been captured. - * @since 2.8 - * @return void. - */ - void HandleImageCaptureReady(); - - /** - * Handle event when a burst image has been appended to the array. - * @since 2.8 - * @return void. - */ - void HandleAppendCapturedBurstImageReady(); - - /** - * Handle event when a burst image has been fetched from the array. - * @since 2.8 - * @return void. - */ - void HandleBurstImageFetchReady(); - - /** - * Handle event when a bitmap has been decoded. - * @since 2.8 - * @return void. - */ - void HandleDecodeToBitmapReady(); - - /** - * Handle event when all the extensions have been processed the captured image. - * @since 2.8 - * @return void. - */ - void HandleProcessCapturedImageAllReady(); - - /** - * Handle event all extensions have been processed the still image. - * @since 2.8 - * @return void. - */ - void HandleProcessStillImageAllReady(); - - /** - * Handle event when a still bitmap has been encoded to Jpeg. - * @since 2.8 - * @return void. - */ - void HandleEncodeToJpegReady(); - - /** - * Handle event when the still burst image has been delivered to the client. - * @since 2.8 - * @return void. - */ - void HandleDeliverStillBurstImageReady(); - - /** - * Handle event when there are images in extension processing queue - * @since 3.2 - * @return void. - */ - void HandleImageQueueExtPro(); - - private: // Action functions for states - - /** - * Start still (single) image capturing. - * @since 2.8 - * @return void. - */ - void DoCaptureStill(); - - /** - * Start still burst image capturing. - * @since 2.8 - * @return void. - */ - void DoCaptureStillBurst(); - - /** - * Start still burst capturing for one image. - * @since 2.8 - * @return void. - */ - void DoCaptureStillBurstImage(); - - /** - * Start appending captured burst image to the array. - * @since 2.8 - * @return void. - */ - void DoAppendCapturedBurstImageToArray(); - - /** - * Start fetching the next burst image from the array. - * @since 2.8 - * @return void. - */ - void DoFetchNextBurstImage(); - - /** - * Start decoding the captured image to the bitmap. - * @since 2.8 - * @return void. - */ - void DoDecodeCapturedImageToBitmap(); - - /** - * Start processing the captured image in the extensions. - * @since 2.8 - * @return void. - */ - void DoExtensionsProcessCapturedImage(); - - /** - * Start processing the snap image in the extensions. - * @since 2.8 - * @return void. - */ - void DoExtensionsProcessSnapImage(); - - /** - * Start delivering the snap image to the client. - * @since 2.8 - * @return void. - */ - void DoDeliverSnapImage(); - - /** - * Start processing the still image in the extensions. - * @since 2.8 - * @return void. - */ - void DoExtensionsProcessStillImage(); - - /** - * Start encoding to Jpeg image. - * @since 2.8 - * @return void. - */ - void DoEncodeStillImageToJpeg(); - - /** - * Start delivering the still burst image to the client. - * @since 2.8 - * @return void. - */ - void DoDeliverStillBurstImage(); - - /** - * Start delivering the still image to the client. - * @since 2.8 - * @return void. - */ - void DoDeliverStillImage(); - - /** - * Start completing the still burst. - * @since 2.8 - * @return void. - */ - void DoCompleteStillBurst(); - - private: // Helper methods - - /** - * Get the current display mode from the system. - * @since 2.8 - * @param aDisplayMode Returned display mode. - * @return TBool Whether the display mode was found. - */ - TBool GetSystemDisplayMode( TDisplayMode& aDisplayMode ); - - /** - * If needed, calculates the stepwise downscaled size for the snap bitmap. - * @since 2.8 - * @param aSnapSize Desired snap image size. Returns the real snap image size. - * @return void - */ - void CalcDownscaledSnapSize( - TSize& aSnapSize ) const; - - /** - * Gets the thumbnal from an Exif image. - * @since 2.8 - * @return - */ - void GetThumbnailL( - HBufC8*& aReadThumbnail, - TSize& aThumbnailSize ); - - /** - * The output image type for the client. - * @since 2.8 - * @return Tell if the output format is bitmap. - */ - TBool IsBitmapOutput(); - - /** - * Retrieves/fetches still image size index from Camera API. - * @since 2.8 - * @param aSize Still image frame size - * @param aStillDataFormat Still image data format - * @return Still image size index - */ - TInt RetrieveStillSizeIndex( - const TSize& aSize, - CCamera::TFormat aStillDataFormat ) const; - - /** - * Cancel the state machine actions and release and cancel internal objects. - * @since 2.8 - * @return void. - */ - void CancelAndCleanup(); - - /** - * Check for still burst completion. - * @since 2.8 - * @return Return whether the still burst should be completed. - */ - TBool CheckForStillBurstCompletion(); - - /** - * Delete images and continue burst. Ignore error for an individual image. - * @since 2.8 - * @param aError Error code. - * @return void. - */ - void BurstErrorRecovery( TInt aError ); - - /** - * Complete still image burst capture but do not delete still burst object. - * @since 2.8 - * @return void. - */ - void CompleteStillBurst(); - - /** - * Delete still burst object. - * @since 2.8 - * @return void. - */ - void DeleteStillBurst(); - - private: - - //// Objects //// - - // Timer used for delayed calls. - RTimer iDelayedCallTimer; - - // File server handle for file operations. - RFs iFs; - - // Camera API reference. - CCamera& iCamera; - - // Engine info reference. - const TCamAppEngineInfo& iInfo; - - // Camera Application Engine observer. - MCamAppEngineObserver* iCaeObserver; - - // Still image encoder object. - CCaeStillEncoder* iStillEncoder; - - // Still image decoder object. - CCaeStillDecoder* iStillDecoder; - - // Still burst observer. - MCaeStillBurstObserver* iCaeStillBurstObserver; - - // Still image burst object, contains all the images captured in a burst. - CCaeStillBurst* iStillBurst; - - // Still image queue object for extension handling (used only when extension mode is active), - // contains all the images that are waiting for extension handling and delivery to UI. - CCaeImageQueueExtPro* iImageQueueExtPro; - - - //// Data //// - - // All extension interface implementations for image processing. - RArray& iProcessImageImplList; - - // Image data in image format structure. - HBufC8* iImageData; - - // Image data in bitmap. - CFbsBitmap* iBitmap; - - // Snap image. - CFbsBitmap* iSnapBitmap; - - // Exif header. - HBufC8* iImageHeaderData; - - // Empty Snap image. - CFbsBitmap* iEmptySnapImage; - - // Snap image source (input for decoding). - CCaeEngine::TSnapImageSource iSnapImageSource; - - // Snap image size. - TSize iSnapImageSize; - - // Optimal snap image size. - TSize iOptimalSnapImageSize; - - // Snap image color mode. - TDisplayMode iSnapImageColorMode; - - // Still image capturing frame size. - TSize iStillFrameSize; - - // Still image capture input format from Camera API. - CCamera::TFormat iStillInputFormat; - - // Still image capture output format for client. - CCamera::TFormat iStillOutputFormat; - - // Still image compression quality value. - TInt iStillCompressionQuality; - - // Time delay to be inserted between captures in a burst. - TTimeIntervalMicroSeconds32 iStillBurstCaptureInterval; - - // Count of processed (encoded/decoded) burst images. - TInt iCountOfProcessedBurstImages; - - // Count of delivered burst images (delivered to the client). - TInt iCountOfDeliveredBurstImages; - - - //// State information //// - - // Current state - TCaeState iCurrentState; - - // The first error detected during the burst. - TInt iFirstStillBurstError; - - // Current Extension array index - TInt iCurrentExtensionIndex; - - // Delayed event id - TCaeEvent iDelayedEvent; - - - //// Flags //// - - // Boolean indicating if the engine should create the snap image (for client's display purposes). - TBool iCreateSnapImage; - - // Boolean indicating if still image capturing is currently cancelled. - TBool iStillCancelled; - - // Boolean indicating if delivering burst images has started. - TBool iStillBurstDeliveryStarted; - - // Boolean indicating if still burst is stopped. - TBool iStillBurstStopped; - - // Boolean indicating if a view finder frame has been received. - TBool iViewFinderFrameReceived; - - // Boolean indicating if the view finder has been enabled. - TBool iIsViewFinderEnabled; - - // Boolean indicating if the extension mode is selected - TBool iExtModeActive; - - // Boolean indicating if this is the last burst image for extension processing - TBool iLastImageExtPro; - - // Boolean indicating if still image capture is prepared. - TBool iStillPrepared; - - //// Flags using reference count //// - - // Boolean indicating if full color snap image is required for extensions. - TInt32 iRequireFullColorSnapInputImageRefCount; - - // Boolean indicating if the VF burst optimization is used - TBool iBurstModeVFOptimization; - -#ifdef _DEBUG - // Performance debugging variables - TTime iCaptureStartTime; - TTime iImageReadyTime; - TTime iFinalImageReadyTime; -#endif - }; - -#endif // CAESTILLSTATESACTIVE_H - -// End of File