diff -r 57d4cdd99204 -r edfc90759b9f imgeditor_plat/image_processing_engine_api/inc/ImageEditorEngineWrapper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imgeditor_plat/image_processing_engine_api/inc/ImageEditorEngineWrapper.h Fri Jan 29 13:53:17 2010 +0200 @@ -0,0 +1,600 @@ +/* +* Copyright (c) 2010 Ixonos Plc. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "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: +* Ixonos Plc +* +* Description: +* CEngineWrapper wraps functionality of Gonzales image +* processing engine architecture. +* +*/ + + +#ifndef IMAGEEDITORENGINEWRAPPER_H +#define IMAGEEDITORENGINEWRAPPER_H + +/// INCLUDES +#include +#include "commondefs.h" + + +/** Panic category */ +_LIT (KEnginePanic, "ENGINE PANIC"); + +/** Panic reasons */ +const TInt KEnginePanicAllocation = -1; +const TInt KEnginePanicInternal = -2; +const TInt KEnginePanicParameter = -3; + +/// FORWARD DECLARATIONS +class CFbsBitmap; +class CFilterStack; +class CSystemParameters; +class TFilter; +class CExifParser; + + +/** + * CEngineWrapper wraps functionality of Gonzales image processing + * engine architecture. + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib EngineWrapper.lib + * @since S60 v5.0 + */ +class CEngineWrapper : public CBase +{ + +public: + + + /** + * Two-phased constructor. + * @param - + */ + IMPORT_C static CEngineWrapper * NewL (); + + /** + * Destructor. + */ + IMPORT_C ~CEngineWrapper (); + + /** + * Creates JPEG source to engine. + * + * @since S60 v5.0 + * @param aFileName source image file name + * @return - + */ + IMPORT_C void CreateJpegSourceL (const TDesC & aFileName); + + /** + * Creates JPEG target for engine. + * + * @since S60 v5.0 + * @param aFileName saved image file name + * @param aQuality saved image quality + * @param aSize image size (width and height) + * @return - + */ + IMPORT_C void CreateJpegTargetL ( + const TDesC & aFileName, + const TInt aQuality, + const TSize * aSize = NULL + ); + + /** + * Creates ICL source to engine. + * + * @since S60 v5.0 + * @param aFileName source image file name + * @return / + */ + IMPORT_C void CreateIclSourceL (const TDesC & aFileName); + + /** + * Creates RGB888 buffer target to engine. + * + * @since S60 v5.0 + * @param - + * @return - + */ + IMPORT_C void CreateRGB888TargetL (); + + /** + * Sets screen size to engine. + * + * @since S60 v5.0 + * @param aSize screen size + * @return - + */ + IMPORT_C void SetScreenSizeL (const TSize & aSize); + + /** + * Adds new filter to the engine. + * + * @since S60 v5.0 + * @param aFilterName filter plug-in name + * @return - + */ + IMPORT_C void AddFilterL (const TDesC & aFilterName); + + /** + * Sets filter parameters for the last (top) filter. + * + * @since S60 v5.0 + * @param aParam reference to parameter structure + * @return - + */ + IMPORT_C void SetParamsL (const TDesC & aParam); + + /** + * Renders the engine graph. + * + * @since S60 v5.0 + * @param aMultiSessionBlockCount not used + * @return - + */ + IMPORT_C void RenderL (TInt* aMultiSessionBlockCount = NULL); + + /** + * Renders a block + * + * @since S60 v5.0 + * @return return percentage of image data saved, 100 when ready + */ + IMPORT_C TInt RenderBlockL (); + + /** + * Aborts block rendering + * + * @since S60 v5.0 + * @param - + * @return - + */ + IMPORT_C void RenderAbortL (); + + /** + * Initializes undo / redo stack. + * + * @since S60 v5.0 + * @param - + * @return - + */ + IMPORT_C void InitUndoRedo(); + + /** + * Sets a new undo / redo step. + * + * @since S60 v5.0 + * @param - + * @return - + */ + IMPORT_C void AddUndoRedoStepL(); + + /** + * Undoes the last operation. + * + * @since S60 v5.0 + * @param - + * @return - + */ + IMPORT_C void UndoL(); + + /** + * Checks if it is possible to undo. + * + * @since S60 v5.0 + * @param - + * @return ETrue if undo possible, EFalse otherwise + */ + IMPORT_C TBool CanUndo (); + + /** + * Checks if the image is changed after last saving. + * + * @since S60 v5.0 + * @param - + * @return ETrue if image is changed, EFalse otherwise + */ + IMPORT_C TBool IsImageChanged(); + + /** + * Stores current zoom value. + * + * @since S60 v5.0 + * @param - + * @return - + */ + IMPORT_C void StoreZoomL (); + + /** + * Restores stored zoom value. + * + * @since S60 v5.0 + * @param - + * @return - + */ + IMPORT_C void RestoreZoomL(); + + /** ZoomL + * Zooms the image. + * + * @since S60 v5.0 + * @param aZoom zoom direction + * @return - + */ + IMPORT_C void ZoomL (const TZoom aZoom); + + /** GetZoomMode + * Returns current zoom mode. + * + * @since S60 v5.0 + * @param - + * @return TZoomMode current zooming mode + */ + IMPORT_C TZoomMode GetZoomMode(); + + /** + * Pans the image. + * + * @since S60 v5.0 + * @param aDir direction, see commondefs.h + * @return - + */ + IMPORT_C void PanL (const TDirection aDir); + + + /** + * Pans the image. Used when panning is done with touch + * + * @since S60 v5.0 + * @param aXChange x-directional change on the screen + * @param aYChange y-directional change on the screen + * @return - + */ + IMPORT_C void PanL( TInt aXChange, TInt aYChange ); + + + /** + * Rotates the image. + * + * @since S60 v5.0 + * @param aRot rotation direction, see commodefs.h + * @return - + */ + IMPORT_C void RotateL (const TRotation aRot); + + /** + * Gets system parameters + * + * @since S60 v5.0 + * @param - + * @return pointer to the system parameters + */ + IMPORT_C CSystemParameters * GetSystemPars (); + + /** + * No functionality. + * + * @since S60 v5.0 + * @param aWidth width of the output image in pixels + * @param aHeight height of the output image in pixels + * @return - + */ + IMPORT_C void GetOutputImageSize ( TInt& aWidth, TInt& aHeight ) const; + + /** + * No functionality. + * + * @since S60 v5.0 + * @param aComment comment to be set + * @return - + */ + IMPORT_C void SetJpegCommentL (const TDesC8& aComment); + + /** + * Sets the bitmap to member variable. + * + * @since S60 v5.0 + * @param aBitmap bitmap to be set + * @return - + */ + IMPORT_C void SetBitmap (CFbsBitmap * aBitmap); + + /** + * Creates new EXIF thumbnail from the current filter stack. + * + * @since S60 v5.0 + * @param - + * @param - + * @return - + */ + IMPORT_C void CreateExifThumbNailL (); + +protected: + +private: + + CEngineWrapper (); + + void ConstructL (); + + /** + * Checks if a file exists or not, on return has the correct + * path to the checked file. + * + * @since S60 v5.0 + * @param aFileName file name, on return includes the correct path + * @return KErrNone if file exists, system wide error code otherwise + */ + TInt FileExists (TDes & aFileName) const; + + /** + * Cleans up the engine, frees allocated memory. Does not delete + * the engine itself. + * + * @since S60 v5.0 + * @param - + * @return - + */ + void Cleanup(); + + /** + * Computes current system parameters. + * + * @since S60 v5.0 + * @param - + * @return - + */ + void ComputeSystemParameters (); + + /** + * No functionality. + * + * @since S60 v5.0 + * @param aStartInd view port start index, defaults to 2 + * @return the current view port + */ + TRect ComputeViewPort( const TInt aStartInd = 2 ); + + /** + * No functionality. + * + * @since S60 v5.0 + * @param aViewPort the current view port + * @return the current visible view port area + */ + TRect ComputeVisibleViewPort (const TRect & aViewPort); + + /** + * No functionality + * + * @since S60 v5.0 + * @param aVvpOld the old visible view port area + * @return new pan value + */ + TPoint ComputeNewPanValue (const TRect & aVvpOld); + + /** + * Adds rotation filter to the engine. + * + * @since S60 v5.0 + * @param - + * @return - + */ + void AddRotateFilterL(); + + /** + * Copies rendered buffer from engine to screen bitmap. + * + * @since S60 v5.0 + * @param aBuffer pointer to engine buffer data + * @return - + */ + void CopyBufferL (TUint32 * aBuffer); + + /** + * Checks if two strings are equal. + * + * @since S60 v5.0 + * @param aString1 first string to be compared + * @param aString2 second string to be compared + * @return ETrue if equal, EFalse otherwise + */ + TBool CEngineWrapper::IsSameString ( + const TUint8 * aString1, + const TUint8 * aString2 + ); + + /** + * Updates scale and pan to crop rectangle. + * + * @since S60 v5.0 + * @param - + * @return - + */ + void UpdateCropRectL (); + + /** + * Updates thumbnail data to EXIF parser. + * + * @since S60 v5.0 + * @param - + * @return - + */ + TPtrC8 UpdateExifThumbnailL (); + + /** + * Handles tags that are always updated to the new image. If tags + * do not exist, creates new ones. + * + * @since S60 v5.0 + * @param - + * @return - + */ + void UpdateExifTagsL(); + + /** + * Gets current date and time as descriptor. + * + * @since S60 v5.0 + * @param aDateTimeBuf contains datetime on return + * @return - + */ + void GetCurrentDateTime (TDes8 & aDateTimeBuf) const; + + /** + * Computes current total rotation of the original image + * in degrees. + * + * @since S60 v5.0 + * @param - + * @return rotation in degrees + */ + TInt ComputeRotationL (); + + /** + * Computes bounding rectangle used from global cropping. + * + * @since S60 v5.0 + * @param - + * @return - + */ + void ComputeBoundingRectL(); + + /** + * Rendering mode + */ + enum TRenderingMode + { + // Invalid + ERenderingModeMin = 0, + // Render to jpeg + ERenderingModeJpeg, + // Render RGB888 buffer + ERenderingModeRGB888, + // Invalid + ERenderingModeMax + } iMode; + + /** + * Main engine + */ + CFilterStack * iMainEngine; + + /** + * Engine command line + */ + TBuf<256> iCmd; + + /** + * Source image size + */ + TSize iSourceSize; + + /** + * Screen size + */ + TSize iScreenSize; + + /** + * Screen data address + */ + CFbsBitmap * iScreenBitmap; + + /** + * Target image name + */ + TFileName iTargetFile; + + /** + * System parameters + */ + CSystemParameters * iSysPars; + + /** + * Undo points + */ + RArray iUndoPoints; + + /** + * Undo buffer for scale parameter + */ + RArray iScaleUndoBuf; + + /** + * EXIF parser + */ + CExifParser * iExifParser; + + /** + * EXIF thumbnail buffer + */ + TUint32 * iThumb; + + /** + * EXIF thumbnail dimensions + */ + TSize iThumbSize; + + /** + * JPEG comment text + */ + HBufC8* iJpegComment; + + /** + * Change counter, 0 if no changes after save + */ + TInt iChangeCount; + + /** + * Previous change counter + */ + TInt iPrevChangeCount; + + /** + * Scale buffer changed + */ + TBool iRenderScaleBuffer; + + /** + * Crop parameters + */ + TReal iScale; + TReal iMinScale; + TReal iMaxScale; + TReal iPanX; + TReal iPanY; + TReal iPanStep; + TRect iBoundingRect; + + /** + * Stored crop parameters + */ + TReal iScaleSt; + TReal iPanXSt; + TReal iPanYSt; + TRect iOldCropRect; + + /** + * Current zooming mode + */ + TZoomMode iZoomMode; + +}; + +#endif // IMAGEEDITORENGINEWRAPPER_H +