--- a/camappengine/Engine/Inc/CaeEngineImp.h Fri Mar 19 09:33:47 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,837 +0,0 @@
-/*
-* Copyright (c) 2002-2004 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: Camera Application Engine implementation class
-*
-*/
-
-
-
-#ifndef CAEENGINEIMP_H
-#define CAEENGINEIMP_H
-
-// INCLUDES
-#include <ecam.h>
-#include <videorecorder.h>
-#include "CamCControllerCustomCommands.h"
-#include "CaeEngine.h"
-#include "CaeEngineExtInterface.h"
-#include "CaeCommon.h"
-#include "CaeStillEncoder.h"
-#include "CaeStillDecoder.h"
-#include "CaeCallbackActive.h" // For making method calls from callbacks.
-#include "CaeDbgUtilities.h" // For debugging.
-
-#include <e32std.h>
-
-// CONSTANTS
-const TInt KVideoTimesIntervalDefault = 1000000; // Default time interval for Video Recording times call-back.
-
-const TInt KVideoTimesDelay = 100000; // Delay in starting to generate video times, in microseconds.
-
-const TInt KCameraPriority = -1; // Relative priority (-100...100) of camera HW
-
-const TUid KUidBurstModeVFOptimization = {0x4A758866}; // Custom command interface UID used by some products
-
-// FORWARD DECLARATIONS
-class CVideoRecorderUtility;
-class RWsSession;
-class CWsScreenDevice;
-class RWindowBase;
-class CFbsBitmap;
-class CCaeStillQualityLevelsCont;
-class CCaeVideoQualityLevelsCont;
-class CCaeVideoTimes;
-class CCaeStillBurst;
-class CCaeStillStatesActive;
-
-
-// CLASS DECLARATIONS
-
-/**
-* Camera application engine implementation class.
-*/
-
-NONSHARABLE_CLASS( CCaeEngineImp ): public CCaeEngine,
- public MCameraObserver,
- public MExtensionCallbackInterface,
- public MCaeExtEngineInfoCallbackInterface,
- public MVideoRecorderUtilityObserver,
- public MCameraObserver2
- {
-
- friend void CCaeCallbackActive::RunL();
- friend void CCaeCallbackActive::DoCancel();
-
- public: // Construction and destruction
-
- static CCaeEngineImp* NewL();
-
- virtual ~CCaeEngineImp();
-
-
- public: // General methods / CCaeEngine.h
-
- void SetCamAppEngineObserver(
- MCamAppEngineObserver& aObserver );
-
- void GetInfo(
- TCamAppEngineInfo& aInfo ) const;
-
- void InitL(
- TBool aCreateSnapImage = ETrue );
-
- void InitL(
- TUid aSdUidStillQltyLevels,
- TBool aCreateSnapImage = ETrue );
-
- void InitVideoRecorderL();
-
- void InitVideoRecorderL(
- TUid aSdUidVideoQltyLevels );
-
- void Reserve();
-
- void Release();
-
- void PowerOn();
-
- void PowerOff();
-
-
- public: // Camera settings / CCaeEngine.h
-
- void SetZoomModeL(
- TZoomMode aZoomMode = EZoomModeDigital );
-
- TZoomMode ZoomMode() const;
-
- void SetZoomValueL(
- TInt aZoomValue = 0 );
-
- TInt ZoomValue() const;
-
- void SetBrightnessL(
- TInt aBrightness = 0 );
-
- TInt Brightness() const;
-
- void SetContrastL(
- TInt aContrast = 0 );
-
- TInt Contrast() const;
-
- void SetExposureModeL(
- CCamera::TExposure aExposureMode = CCamera::EExposureAuto );
-
- CCamera::TExposure ExposureMode() const;
-
- void SetWhiteBalanceModeL(
- CCamera::TWhiteBalance aWhiteBalanceMode = CCamera::EWBAuto );
-
- CCamera::TWhiteBalance WhiteBalanceMode() const;
-
- void SetFlashModeL(
- CCamera::TFlash aFlashMode = CCamera::EFlashNone );
-
- CCamera::TFlash FlashMode() const;
-
- void ResetToDefaultsL();
-
-
- public: // View Finder / CCaeEngine.h
-
- void SetViewFinderMirrorL(
- TBool aMirror );
-
- TBool ViewFinderMirror() const;
-
- void StartViewFinderBitmapsL(
- TSize& aVfFrameSize );
-
- void StartViewFinderBitmapsL(
- TSize& aVfFrameSize,
- TRect& aCropRect );
-
- void StartViewFinderDirectL(
- RWsSession& aWs,
- CWsScreenDevice& aScreenDevice,
- RWindowBase& aWindow,
- TRect& aScreenRect );
-
- void StartViewFinderDirectL(
- RWsSession& aWs,
- CWsScreenDevice& aScreenDevice,
- RWindowBase& aWindow,
- TRect& aScreenRect,
- TRect& aCropRect );
-
- void StopViewFinder();
-
- TBool IsViewFinding() const;
-
- void GetViewFinderSize(
- TSize& aVfFrameSize );
-
-
- public: // Still image capturing / CCaeEngine.h
-
- void PrepareStillCaptureL(
- TInt aStillQualityIndex );
-
- void PrepareStillCaptureL(
- TInt aStillQualityIndex,
- const TRect& aCropRect );
-
- void PrepareStillCaptureL(
- const TSize& aSize,
- CCamera::TFormat aFormat,
- TInt aCompressionQuality );
-
- void PrepareStillCaptureL(
- const TSize& aSize,
- CCamera::TFormat aFormat,
- TInt aCompressionQuality,
- const TRect& aCropRect );
-
- TInt StillQualityIndex() const;
-
- void GetStillFrameSize(
- TInt aStillQualityIndex,
- TSize& aSize ) const;
-
- TInt EstimatedStillSizeInBytes(
- TInt aStillQualityIndex ) const;
-
- void CaptureStill();
-
- void CancelCaptureStill();
-
-
- public: // Video recording / CCaeEngine.h
-
- void SetVideoRecordingFileNameL(
- const TDesC& aVideoClipFileName );
-
- void PrepareVideoRecordingL(
- TInt aVideoQualityIndex );
-
- void PrepareVideoRecordingL(
- const TSize& aFrameSize,
- TReal32 aFrameRate,
- TInt aBitRate,
- TBool aAudioEnabled,
- const TDesC8& aMimeType,
- const TDesC& aPreferredSupplier,
- const TDesC8& aVideoType = KNullDesC8,
- const TDesC8& aAudioType = KNullDesC8 );
-
- void CloseVideoRecording();
-
- TInt VideoQualityIndex() const;
-
- void GetVideoFrameSize(
- TInt aVideoQualityIndex,
- TSize& aSize ) const;
-
- TReal32 VideoFrameRate(
- TInt aVideoQualityIndex ) const;
-
- TInt EstimatedVideoRecordingBitRateL(
- TInt aVideoQualityIndex ) const;
-
- void SetVideoClipMaxSizeL(
- TInt aMaxClipSizeInBytes = 0 );
-
- TInt VideoClipMaxSize() const;
-
- void SetVideoAudioL(
- TBool aAudioEnabled );
-
- TBool VideoAudio() const;
-
- void SetVideoTimesIntervalL(
- TTimeIntervalMicroSeconds aInterval );
-
- TTimeIntervalMicroSeconds VideoTimesInterval() const;
-
- void StartVideoRecording();
-
- void StopVideoRecording();
-
- void PauseVideoRecording();
-
- void ResumeVideoRecording();
-
- TTimeIntervalMicroSeconds RemainingVideoRecordingTime() const;
-
- TBool IsVideoRecording() const;
-
- public: // New overloading method for preparing video recording / CCaeEngine.h
-
- void PrepareVideoRecordingL(
- const TSize& aFrameSize,
- TReal32 aFrameRate,
- TInt aBitRate,
- TBool aAudioEnabled,
- TInt aAudioBitRate,
- const TDesC8& aMimeType,
- const TDesC& aPreferredSupplier,
- const TDesC8& aVideoType,
- const TDesC8& aAudioType );
-
- public: // Still image burst capturing interface methods / CCaeEngine.h
-
- void SetCaeStillBurstObserver(
- MCaeStillBurstObserver& aObserver );
-
- TInt SetStillCaptureImageCountL(
- TInt aImageCount );
-
- TInt StillCaptureImageCount() const;
-
- void SetStillBurstCaptureIntervalL(
- TTimeIntervalMicroSeconds aInterval );
-
- TTimeIntervalMicroSeconds StillBurstCaptureInterval() const;
-
- void StopStillBurstCapture();
-
- void PrepareStillCaptureL(
- TInt aStillQualityIndex,
- TSize& aSnapSize );
-
- void PrepareStillCaptureL(
- const TSize& aSize,
- CCamera::TFormat aFormat,
- TInt aCompressionQuality,
- const TRect& aCropRect,
- TSize& aSnapSize );
-
- void SetEvCompensationL(
- TInt aEvIndex = 0 );
-
- TInt EvCompensation() const;
-
- public: // Method for switching snap-image creation on/off. / CCaeEngine.h
-
- void SetSnapImageCreation(
- TBool aCreateSnapImage = ETrue );
-
- public: // New methods since 2.6 and 2.8 / CCaeEngine.h
-
- static CCaeEngineImp* NewL(
- TInt aCameraIndex, TInt aDisplayIndex );
-
- void EnumerateStillCaptureSizes(
- TSize& aSize,
- TInt aSizeIndex,
- CCamera::TFormat aFormat ) const;
-
- void SetJpegQuality(
- TInt aQuality );
-
- TInt JpegQuality() const;
-
- TAny* CustomInterface(
- TUid aInterface );
-
- void SetSnapImageSizeL(
- TSize& aSize );
-
- void SetSnapImageColorMode(
- TDisplayMode aMode );
-
- void GetOrderL(
- RCaeOrderedFeatureList& aOrderedFeatureList );
-
- void SetOrderL(
- const RCaeOrderedFeatureList& aOrderedFeatureList );
-
- void SetSnapImageSourceL(
- TSnapImageSource aSnapImageSource );
-
- void SetImageCodecsL(
- TUid aDecoderUid, TUid aEncoderUid );
-
- TInt EnumerateVideoFrameSizeL(const TSize& aSize);
-
- TInt CCameraHandle() const;
-
- void SetCaeExtensionModeL( TBool aExtModeActive, TBool aCreateSnapImage );
-
- void ProcessExtViewFinderFrameReadyL( CFbsBitmap& aFrame );
-
- void ProcessExtSnapImageL( CFbsBitmap& aSnapImage );
-
- void ProcessExtCapturedImageL( CFbsBitmap& aBitmap, TBool aLastImage );
-
- void ProcessExtCapturedImageL( HBufC8* aImageData, TBool aLastImage );
-
- void ProcessExtCapturedImageL( TDesC8& aImageDataDes, TBool aLastImage );
-
- void ProcessExtCancel();
-
- void SkippedExtensionListL( RCaeOrderedFeatureList& aDisabledExtensions );
-
- void SetSkippedExtensionList( RCaeOrderedFeatureList& aDisabledExtensions );
-
- void EnableVideoRecording();
-
- void DisableVideoRecording();
-
- TInt SetAsyncVideoStopMode( TBool aAsyncVideoStopEnabled );
-
- public: // New public methods
-
- /**
- * Checks if still image burst capture should be completed.
- * @since 2.6
- * @return Boolean indicating if the burst should be completed.
- */
- TBool CheckForStillBurstCompletion();
-
- private: // From Camera Observer / ECam.h
-
- void ReserveComplete(
- TInt aError );
-
- void PowerOnComplete(
- TInt aError );
-
- void ViewFinderFrameReady(
- CFbsBitmap& aFrame );
-
- void ImageReady(
- CFbsBitmap* aBitmap,
- HBufC8* aData,
- TInt aError );
-
- void FrameBufferReady(
- MFrameBuffer* /*aFrameBuffer*/,
- TInt /*aError*/ ) {}; // Empty default because not in use.
-
- private: // From Video Recorder Utility Observer / VideoRecorder.h
-
- void MvruoOpenComplete(
- TInt aError );
-
- void MvruoPrepareComplete(
- TInt aError );
-
- void MvruoRecordComplete(
- TInt aError );
-
- void MvruoEvent(
- const TMMFEvent& aEvent );
-
-
- private: // Private member methods
-
- /**
- * C++ constructor.
- */
- CCaeEngineImp();
-
- /**
- * Symbian OS 2nd phase constructor that can leave.
- * @param aCameraIndex Index from 0 to CamerasAvailable()-1 inclusive
- * specifying the camera device to use.
- * @param aDisplayIndex Display index specifying the display to use.
- * @return void
- */
- void ConstructL( TInt aCameraIndex, TInt aDisplayIndex );
-
- /**
- * Finds all extension dlls and populates the extension arrays.
- * @since 2.8
- * @return void
- */
- void PopulateExtensionArrayL();
-
- //// General and settings related private methods. ////
-
- /**
- * Initializes the info class ("structure").
- * @since 2.1
- * @param aCamera Camera object.
- * @return void
- */
- void InitializeInfo(
- const CCamera& aCamera );
-
- /**
- * Checks that power is on. If not, then leaves.
- * @since 2.1
- * @return void
- */
- void CheckPowerL();
-
- /**
- * Cancels view finder, still capturing, and video recording.
- * @since 2.1
- * @return void
- */
- void CancelAllActivities();
-
- /**
- * Re-sets settings to the previous values (before releasing camera).
- * @since 2.1
- * @return void
- */
- void ResetToPreviousSettingsL();
-
- //// Video recording related private methods. ////
-
- /**
- * Cancels video recording.
- * @since 2.1
- * @return void
- */
- void CancelVideoRecording();
-
- /**
- * Prepares video recording settings.
- * @since 2.1
- * @return void
- */
- void PrepareVideoSettingsL();
-
- /**
- * Changes video clip file name.
- * @since 2.1
- * @return void
- */
- void ChangeVideoFileNameL();
-
- /**
- * Finds video type and format UIDs using ECOM.
- * @since 2.1
- * @param aMimeType MIME type.
- * @param aPreferredSupplier Preferred supplier of video encoder.
- * @return void
- */
- void FindVideoUidsL(
- const TDesC8& aMimeType,
- const TDesC& aPreferredSupplier );
-
- /**
- * Convert audio type from TDesC8 to TFourCC.
- * @since 2.1
- * @param aAudioType Audio type.
- * @return Audio type TFourCC code
- */
- TFourCC ConvertAndSetVideoAudioTypeL(
- const TDesC8& aAudioType );
-
- /**
- * Generates video recording times via
- * MCamAppEngineObserver::McaeoVideoRecordingTimes implemented by client.
- * @since 2.1
- * @param aEngineImp Camera Application Engine implementation object (this)
- * @return ETrue
- */
- static TInt VideoRecordingTimesCallback(
- TAny* aEngineImp );
-
- //// Still image burst capturing related private methods. ////
-
- /**
- * Gets option flag for still burst support.
- * @since 2.1
- * @return Option flag for still burst support
- */
- TCamAppEngineInfo::TOptions StillBurstSupport();
-
- /**
- * Compares two extension interface array items.
- * @since 2.8
- * @param aFirst First item
- * @param aSecond Second item
- * @return TInt Result of the comparison
- */
- static TBool MatchEqualImplUid( const TCaeExtensionInterfaceImplItem& aFirst, const TCaeExtensionInterfaceImplItem& aSecond );
-
- /**
- * Compares two extension interface array items.
- * @since 2.8
- * @param aFirst First item
- * @param aSecond Second item
- * @return TInt Result of the comparison
- */
- static TBool MatchEqualImplPtr( const TCaeExtensionInterfaceImplItem& aFirst, const TCaeExtensionInterfaceImplItem& aSecond );
-
- /**
- * Compares two extension interface array items.
- * @since 2.8
- * @param aFirst First item
- * @param aSecond Second item
- * @return TInt Result of the comparison
- */
- static TBool MatchSmallerInitialPriorityAndImplUid( const TCaeExtensionInterfaceImplItem& aFirst, const TCaeExtensionInterfaceImplItem& aSecond );
-
- /**
- * Compares two extension interface array items.
- * @since 2.8
- * @param aFirst First item
- * @param aSecond Second item
- * @return TInt Result of the comparison
- */
- static TBool Match( const TCaeOrderedFeatureListItem& aFirst, const TCaeOrderedFeatureListItem& aSecond );
-
- /**
- * Updates item order in the internal array or checks aOrderedFeatureArray validity.
- * @since 2.8
- * @param aOrderedFeatureArray Feature array sorted by the wanted calling order in an interface.
- * @param iUpdate Whether to update the internal raays or just to check validity of aOrderedFeatureArray.
- * @return void.
- */
- void DoSetOrderL( const RCaeOrderedFeatureList& aOrderedFeatureList, TBool iUpdate );
-
- private: // From MCaeEngineExtensionInterface
-
- TBool IsInterfaceSupported( TUid aInterfaceUid );
-
- TInt AddExtensionInterface( TUid aInterfaceUid, TUid aExtensionUid, TAny* aImplementationPtr, TInt aInitialPriority = 0 );
-
- TInt RemoveExtensionInterface( TUid aInterfaceUid, TAny* aImplementationPtr );
-
- TInt AddCustomInterface( TUid aInterfaceUid, TAny* aImplementationPtr );
-
- TAny* GetCallbackInterface( TUid aInterfaceUid );
-
- void RegisterFlags( TUint32 aFlags );
-
- void DeregisterFlags( TUint32 aFlags );
-
- private: // From MCaeExtEngineInfoCallbackInterface
-
- TSize McaeExtStillImageSize();
-
- TSize McaeExtSnapImageSize();
-
- TSize McaeExtViewFinderSize();
-
- void McaeExtCheckPowerL();
-
- TInt McaeExtDisplayIndex();
-
- private: // From Camera Observer2 / ECam.h
-
- void HandleEvent(const TECAMEvent& aEvent);
-
- void ViewFinderReady(MCameraBuffer& aCameraBuffer,TInt aError);
-
- void ImageBufferReady(MCameraBuffer& aCameraBuffer,TInt aError);
-
- void VideoBufferReady(MCameraBuffer& aCameraBuffer,TInt aError);
-
- private: // Data
-
- //// Pointers. ////
-
- // Camera API implementation object.
- CCamera* iCamera;
-
- // State machine for still capturing.
- CCaeStillStatesActive* iStillStatesActive;
-
- // All CAE Extension modules
- RPointerArray<MExtension> iExtension;
-
- // All extension interface implementations.
- RArray<TCaeExtensionInterfaceImplListItem> iExtInterfaceImplementationLists;
-
- // All custom interface implementations.
- RArray<TCaeCustomInterfaceImplItem> iExtCustomInterfaceImplementations;
-
- // Video Recorder API implementation object.
- CVideoRecorderUtility* iVideoRecorder;
-
- // Camera Application Engine observer.
- MCamAppEngineObserver* iCaeObserver;
-
- // Camera Application Engine info object.
- TCamAppEngineInfo* iInfo;
-
- // Still image capturing quality levels container.
- CCaeStillQualityLevelsCont* iStillQualityLevelsCont;
-
- // Video recording quality levels container.
- CCaeVideoQualityLevelsCont* iVideoQualityLevelsCont;
-
- // Active object for calling Camera Application Engine methods
- // indirectly from callbacks.
- CCaeCallbackActive* iCallbackActive;
-
- // Video recording frame size.
- // This is ptr because video recorder is not necessarily initialized.
- TSize* iVideoFrameSize;
-
- // Video recording frame size (to be prepared).
- // This is ptr because video recorder is not necessarily initialized.
- TSize* iVideoFrameSizePrep;
-
- // Video recording times generator.
- CCaeVideoTimes *iVideoTimes;
-
- // Video recording times callback.
- TCallBack* iVideoTimesCallback;
-
- // Video clip file name.
- HBufC* iVideoClipFileName;
-
- // Video Recorder video type.
- HBufC8* iVideoType;
-
- //// Booleans (mostly reporting state). ////
-
- // Boolean indicating if camera module is reserved for the engine.
- TBool iReserved;
-
- // Boolean indicating if camera module power is on.
- TBool iPowerOn;
-
- // Boolean indicating if video recording is initialized.
- TBool iVideoInitialized;
-
- // Boolean indicating if still image capture is prepared.
- TBool iStillPrepared;
-
- // Boolean indicating if video recording is opened.
- TBool iVideoOpened;
-
- // Boolean indicating if video recording is prepared.
- TBool iVideoPrepared;
-
- // Boolean indicating if view finder is currently running.
- TBool iViewFinderRunning;
-
- // Boolean indicating if video recording is currently running.
- TBool iVideoRecordingRunning;
-
- // Boolean indicating if video recording is currently paused.
- TBool iVideoRecordingPaused;
-
- // Boolean indicating if the engine should reset its basic settings
- // to the previous ones when re-reserving.
- TBool iResetToPreviousSettings;
-
- //// Camera module settings related variables. ////
-
- // Current zoom mode.
- TZoomMode iZoomMode;
-
- // Current zoom value.
- TInt iZoomValue;
-
- // Current brightness value.
- TInt iBrightness;
-
- // Current contrast value.
- TInt iContrast;
-
- // Camera exposure mode.
- CCamera::TExposure iExposureMode;
-
- // Camera white balance mode.
- CCamera::TWhiteBalance iWhiteBalanceMode;
-
- // Camera flash mode.
- CCamera::TFlash iFlashMode;
-
- //// View finder related variables. ////
-
- // View finder size when viewfinder has been started.
- TSize iTrueViewFinderSize;
-
- //// Still capturing related variables. ////
-
- // Still image capture quality level index currently prepared.
- TInt iStillQualityIndex;
-
- // Display index
- TInt iDisplayIndex;
-
- //// Video recording related variables. ////
-
- // Video recording quality level index currently prepared.
- TInt iVideoQualityIndex;
-
- // Handle to the camera used.
- TInt iCameraHandle;
-
- // Video Recorder controller UID.
- TUid iVideoControllerUid;
-
- // Video Recorder format UID.
- TUid iVideoFormatUid;
-
- // Video Recorder audio type.
- TFourCC iVideoAudioType;
-
- // Interval for calling McaeoVideoRecordingTimes.
- TTimeIntervalMicroSeconds32 iVideoTimesInterval;
-
- // Previous valid elapsed time value
- TTimeIntervalMicroSeconds iPrevTimeElapsed;
-
- // Previous valid remaining time value
- TTimeIntervalMicroSeconds iPrevTimeRemaining;
-
- //// Video recording parameters prepared. ////
-
- // Video recording frame rate.
- TReal32 iVideoFrameRate;
-
- // Video recording bit rate.
- TInt iVideoBitRate;
-
- // Boolean indicating if audio is enabled with video recording.
- TBool iVideoAudioEnabled;
-
- // Video recording audio bit rate.
- TInt iVideoAudioBitRate;
-
- // Video recording maximum clip size in bytes.
- TInt iMaxClipSizeInBytes;
-
- //// Video recording parameters to be prepared. ////
-
- // Video recording frame rate (to be prepared).
- TReal32 iVideoFrameRatePrep;
-
- // Video recording bit rate (to be prepared).
- TInt iVideoBitRatePrep;
-
- // Boolean indicating if audio is enabled with video recording (to be prepared).
- TBool iVideoAudioEnabledPrep;
-
- // Video recording audio bit rate (to be prepared).
- TInt iVideoAudioBitRatePrep;
-
- // Video recording maximum clip size in bytes (to be prepared).
- TInt iMaxClipSizeInBytesPrep;
-
- // Boolean indicating if parameters are/were prepared in video recording preparation..
- TBool iPrepPars;
-
- // Boolean indicating if video audio bit rate should be prepared.
- TBool iPrepareVideoAudioBitRate;
-
- // Boolean indicating if video stopping should be asynchronously or synchronously (default).
- TBool iAsyncVideoStopEnabled;
- };
-
-
-#endif // CAEENGINEIMP_H