IEBgps/inc/IEFaceBrowser.h
changeset 3 93fff7023be8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IEBgps/inc/IEFaceBrowser.h	Fri Oct 15 10:18:29 2010 +0900
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 2009 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: Juha Kauppinen, Mika Hokkanen
+* 
+* Description: Photo Browser
+*
+*/
+
+#ifndef __IEFACEBROWSER_H__
+#define __IEFACEBROWSER_H__
+
+#include <e32base.h>
+#include <f32file.h>
+#include <f32file.h>
+//#include <IDLImageProcessing.h>
+#include <ImageConversion.h>
+//#include <IclExtJpegApi.h>
+
+#include "IEBgpsInfo.h"
+#include "IEImageData.h"
+#include "IEImageEncoder.h"
+#include "IEImageDecoder.h"
+#include "IEEngineUtils.h"
+
+// Foraward class declaration
+class CIEImageDecoder;
+class CIEImageEncoder;
+
+// Class declaration
+class MIEFaceBrowserObserver
+{
+public:
+    virtual void FaceBrowsingComplete() = 0;
+    virtual void FaceBrowsingError(TInt aError) = 0;
+    virtual void FaceSingleFaceBrowsingComplete() = 0;
+    
+};
+
+class CFaceBrowser : public CActive, 
+                        public MDecodingObserver,
+                        public MEncodingObserver
+#ifdef IDL_BGPS                        
+                        , public MIDLObserver
+#endif
+{
+private:
+    enum TFaceBrowsingState
+        {
+        EStateIdle = 0,
+        EFaceBrowsingRunning,
+        ESingleFaceBrowsingRunning,
+        EFaceBrowsingPaused,
+        EFaceBrowsingStopped,
+        EFaceBrowsingCompleted,
+        EFaceCroppingRunning,
+        EEncodingFaces,
+        EFaceCroppingCompleted,
+        ESingleFaceBrowsingComplete,
+        ECreatingBitmap
+        };
+/*
+    enum TFaceBrowsingMode
+        {
+        EBrowseModeNone = 0,
+        EBrowseModeSingleImage,
+        EBrowseModeBulkImages,
+        EModeCroppingFaces        
+        };
+*/
+    class TCroppedFaces
+        {
+        public:
+            HBufC8* iYuvdata;
+            TFileName iFileName;
+            TSize iCroppedSize;
+        };
+public: // First phase constructor and destructor
+    static CFaceBrowser* NewLC(RFs& aFileServer, MIEFaceBrowserObserver& aFaceBrowserObserver);
+    virtual ~CFaceBrowser();
+
+private: // Second phase constuctor and C++ default constructor
+    void ConstructL();
+    CFaceBrowser(RFs& aFileServer, MIEFaceBrowserObserver& aFaceBrowserObserver);
+
+protected: // From CActive
+    void RunL();
+    void DoCancel();
+    TInt RunError(TInt aError);
+    
+public: // From MDecodingObserver
+    void YuvImageReady(TInt aError);
+    void BitmapReady(TInt aError);
+
+public: // From MEncodingObserver
+    void JpegImageReady(TInt aError);
+    
+public: // From MIDLObserver
+    inline void ProcessingComplete(TDesC8& /*aData*/){};
+    inline void HandleError(TInt /*aError*/){}; 
+
+public: // New public functions
+    void StartFaceBrowsing(RArray<CImageData*> aImageDataArray);
+    void StartSingleFaceBrowsing(TInt aIndex, RArray<TRect>* aImageCoordArray, CImageData* aImageData);
+    void CancelFaceBrowsing();
+    TInt FindFaces(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
+    TInt GetNumberOfFaces(const TFileName aFile);
+    void StartFaceCropping(RArray<CImageData*> aImageDataArray, RArray<TFileName>* aCroppedFilenames);
+    void CancelFaceCropping();
+    TInt AddFaceCoordinate(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
+    TInt RemoveFaceCoordinate(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
+    HBufC8* ReadExifMakerNoteL(const TDes &aFileName, TInt& aSize);
+    
+    
+private: // Internal functions
+    
+    // Common functions
+#ifdef IDL_BGPS
+    void InitializeL(const TIDLFeatures aIDLFeature, const TSize aInSize, const TSize aOutSize, TAny* aValue, TBool aInBufferCreate);
+#endif
+    void PrepareInOutBuffersL(TBool aInBufferCreate, const TInt aInBufSize, TBool aOutBufferCreate, const TInt aOutBufSize);
+    TFileName MakeTNFileName(const TFileName aImageFileName, TBool a128TNFile, TBool a320TNFileName);
+    void Cleanup();
+    void Cleanup2();
+    void ContinueLoop();
+    TBool CheckOddSize(const TSize aSize);
+    
+    //New function to handle RGB conversion
+    void ContinueFBAfterImageConversionL();
+    void ConvertRgb2Yuv(CFbsBitmap* aSourceBitmap, TUint8* aYuv, TInt aBytesPerPixel, const TSize aSize);
+        
+    // Face browsing related functions
+    void BrowseFacesL(CImageData* aImageData);
+#ifdef IDL_BGPS
+    void BrowseFacesL(TFileName a128x128TNFileName, RArray<TRect>& aFaceCoordinates);
+#endif
+    void GetFaceCoordinates(TInt& aNumberOfFaces, RArray<TRect>& aCordArray);
+    //void WriteFaceCoordinatesToExifDataL(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
+    //void IsCoordinateExistsL(const TFileName a128x128TNFileName, TBool& aBool);
+    //void ReadFaceCoordinatesL(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
+        
+    // Face cropping related functions    
+    void CropFacesL(CImageData* aImageData);
+    void CropFacesL(const TFileName aImageFileName, RArray<TRect>& aFaceCoordinates);
+    TInt MakeFacesDir(const TFileName aImageName);
+    TRect GetFaceRect(const TSize aOrgImageSize, const TSize aRelImageSize, const TRect aFaceRect);    
+    void EncodeFaceL(const TCroppedFaces aCroppedFace);
+    void CheckCroppedFaceFileNames();
+    
+    // Face detection
+    void WriteFaceCoordToExif(TInt numOfFaces, RArray<TRect> faceCoordinates);
+
+private: // Data members
+    RFs& iFileServer;
+    MIEFaceBrowserObserver& iFaceBrowserObserver;
+
+    RArray<CImageData*> iImageDataArray;
+    RArray<TCroppedFaces> iFaceYuvDataArray;
+    RArray<TRect> iFaceCoordinates;
+    RArray<TRect>* iTempFaceCoordinates;
+    
+    CIEImageDecoder* iImageDecoder;
+    CIEImageEncoder* iImageEncoder;
+    CImageDecoder*   iSymbianImageDecoder;
+    
+#ifdef IDL_BGPS
+    CIDLImageProcessing* iIDLImageProcessor;
+#endif
+    
+    HBufC8* iInputBuffer;
+    HBufC8* iOutputBuffer;
+    
+    CImageData* iCurrentImageData;
+    
+    TFaceBrowsingState iBrowsingState;
+    TFaceBrowsingState iPrevBrowsingState;
+//    TFaceBrowsingMode iBrowseMode;
+    
+    TSize iSize;
+    
+    TInt iNumberOfImages;
+    TInt iNumberOfImagesBrowsed;
+    TInt iSingleFaceBrowsingIndex;
+    TInt iNumberOfFacesCropped;    
+    TInt iNumberOfFaces;   
+    
+    TFileName iCurrentImageFileName;
+    TFileName iCurrent512x512TNFileName;
+    TInt        iTotalNumberOfFaces;
+    CIEEngineUtils iUtils;
+    
+    RArray<TFileName>* iCroppedFilenames;
+    //RArray<TRect> iImageCoordArray;
+    CFbsBitmap*     iBitmap;
+};
+
+#endif // __IEFACEBROWSER_H__