IEBgps/inc/IEFaceBrowser.h
author jkauppin
Fri, 15 Oct 2010 10:18:29 +0900
changeset 3 93fff7023be8
permissions -rw-r--r--
Initial version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     1
/*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     3
* All rights reserved.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     4
* This component and the accompanying materials are made available
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     6
* which accompanies this distribution, and is available
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     8
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     9
* Initial Contributors:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    11
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    12
* Contributors: Juha Kauppinen, Mika Hokkanen
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    13
* 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    14
* Description: Photo Browser
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    15
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    16
*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    17
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    18
#ifndef __IEFACEBROWSER_H__
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    19
#define __IEFACEBROWSER_H__
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    20
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    21
#include <e32base.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    22
#include <f32file.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    23
#include <f32file.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    24
//#include <IDLImageProcessing.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    25
#include <ImageConversion.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    26
//#include <IclExtJpegApi.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    27
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    28
#include "IEBgpsInfo.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    29
#include "IEImageData.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    30
#include "IEImageEncoder.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    31
#include "IEImageDecoder.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    32
#include "IEEngineUtils.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    33
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    34
// Foraward class declaration
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    35
class CIEImageDecoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    36
class CIEImageEncoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    37
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    38
// Class declaration
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    39
class MIEFaceBrowserObserver
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    40
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    41
public:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    42
    virtual void FaceBrowsingComplete() = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    43
    virtual void FaceBrowsingError(TInt aError) = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    44
    virtual void FaceSingleFaceBrowsingComplete() = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    45
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    46
};
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    47
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    48
class CFaceBrowser : public CActive, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    49
                        public MDecodingObserver,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    50
                        public MEncodingObserver
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    51
#ifdef IDL_BGPS                        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    52
                        , public MIDLObserver
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    53
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    54
{
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    55
private:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    56
    enum TFaceBrowsingState
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    57
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    58
        EStateIdle = 0,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    59
        EFaceBrowsingRunning,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    60
        ESingleFaceBrowsingRunning,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    61
        EFaceBrowsingPaused,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    62
        EFaceBrowsingStopped,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    63
        EFaceBrowsingCompleted,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    64
        EFaceCroppingRunning,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    65
        EEncodingFaces,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    66
        EFaceCroppingCompleted,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    67
        ESingleFaceBrowsingComplete,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    68
        ECreatingBitmap
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    69
        };
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    70
/*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    71
    enum TFaceBrowsingMode
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    72
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    73
        EBrowseModeNone = 0,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    74
        EBrowseModeSingleImage,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    75
        EBrowseModeBulkImages,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    76
        EModeCroppingFaces        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    77
        };
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    78
*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    79
    class TCroppedFaces
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    80
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    81
        public:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    82
            HBufC8* iYuvdata;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    83
            TFileName iFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    84
            TSize iCroppedSize;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    85
        };
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    86
public: // First phase constructor and destructor
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    87
    static CFaceBrowser* NewLC(RFs& aFileServer, MIEFaceBrowserObserver& aFaceBrowserObserver);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    88
    virtual ~CFaceBrowser();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    89
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    90
private: // Second phase constuctor and C++ default constructor
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    91
    void ConstructL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    92
    CFaceBrowser(RFs& aFileServer, MIEFaceBrowserObserver& aFaceBrowserObserver);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    93
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    94
protected: // From CActive
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    95
    void RunL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    96
    void DoCancel();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    97
    TInt RunError(TInt aError);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    98
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    99
public: // From MDecodingObserver
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   100
    void YuvImageReady(TInt aError);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   101
    void BitmapReady(TInt aError);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   102
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   103
public: // From MEncodingObserver
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   104
    void JpegImageReady(TInt aError);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   105
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   106
public: // From MIDLObserver
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   107
    inline void ProcessingComplete(TDesC8& /*aData*/){};
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   108
    inline void HandleError(TInt /*aError*/){}; 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   109
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   110
public: // New public functions
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   111
    void StartFaceBrowsing(RArray<CImageData*> aImageDataArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   112
    void StartSingleFaceBrowsing(TInt aIndex, RArray<TRect>* aImageCoordArray, CImageData* aImageData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   113
    void CancelFaceBrowsing();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   114
    TInt FindFaces(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   115
    TInt GetNumberOfFaces(const TFileName aFile);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   116
    void StartFaceCropping(RArray<CImageData*> aImageDataArray, RArray<TFileName>* aCroppedFilenames);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   117
    void CancelFaceCropping();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   118
    TInt AddFaceCoordinate(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   119
    TInt RemoveFaceCoordinate(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   120
    HBufC8* ReadExifMakerNoteL(const TDes &aFileName, TInt& aSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   121
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   122
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   123
private: // Internal functions
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   124
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   125
    // Common functions
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   126
#ifdef IDL_BGPS
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   127
    void InitializeL(const TIDLFeatures aIDLFeature, const TSize aInSize, const TSize aOutSize, TAny* aValue, TBool aInBufferCreate);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   128
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   129
    void PrepareInOutBuffersL(TBool aInBufferCreate, const TInt aInBufSize, TBool aOutBufferCreate, const TInt aOutBufSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   130
    TFileName MakeTNFileName(const TFileName aImageFileName, TBool a128TNFile, TBool a320TNFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   131
    void Cleanup();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   132
    void Cleanup2();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   133
    void ContinueLoop();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   134
    TBool CheckOddSize(const TSize aSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   135
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   136
    //New function to handle RGB conversion
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   137
    void ContinueFBAfterImageConversionL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   138
    void ConvertRgb2Yuv(CFbsBitmap* aSourceBitmap, TUint8* aYuv, TInt aBytesPerPixel, const TSize aSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   139
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   140
    // Face browsing related functions
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   141
    void BrowseFacesL(CImageData* aImageData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   142
#ifdef IDL_BGPS
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   143
    void BrowseFacesL(TFileName a128x128TNFileName, RArray<TRect>& aFaceCoordinates);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   144
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   145
    void GetFaceCoordinates(TInt& aNumberOfFaces, RArray<TRect>& aCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   146
    //void WriteFaceCoordinatesToExifDataL(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   147
    //void IsCoordinateExistsL(const TFileName a128x128TNFileName, TBool& aBool);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   148
    //void ReadFaceCoordinatesL(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   149
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   150
    // Face cropping related functions    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   151
    void CropFacesL(CImageData* aImageData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   152
    void CropFacesL(const TFileName aImageFileName, RArray<TRect>& aFaceCoordinates);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   153
    TInt MakeFacesDir(const TFileName aImageName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   154
    TRect GetFaceRect(const TSize aOrgImageSize, const TSize aRelImageSize, const TRect aFaceRect);    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   155
    void EncodeFaceL(const TCroppedFaces aCroppedFace);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   156
    void CheckCroppedFaceFileNames();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   157
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   158
    // Face detection
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   159
    void WriteFaceCoordToExif(TInt numOfFaces, RArray<TRect> faceCoordinates);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   160
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   161
private: // Data members
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   162
    RFs& iFileServer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   163
    MIEFaceBrowserObserver& iFaceBrowserObserver;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   164
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   165
    RArray<CImageData*> iImageDataArray;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   166
    RArray<TCroppedFaces> iFaceYuvDataArray;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   167
    RArray<TRect> iFaceCoordinates;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   168
    RArray<TRect>* iTempFaceCoordinates;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   169
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   170
    CIEImageDecoder* iImageDecoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   171
    CIEImageEncoder* iImageEncoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   172
    CImageDecoder*   iSymbianImageDecoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   173
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   174
#ifdef IDL_BGPS
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   175
    CIDLImageProcessing* iIDLImageProcessor;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   176
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   177
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   178
    HBufC8* iInputBuffer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   179
    HBufC8* iOutputBuffer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   180
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   181
    CImageData* iCurrentImageData;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   182
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   183
    TFaceBrowsingState iBrowsingState;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   184
    TFaceBrowsingState iPrevBrowsingState;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   185
//    TFaceBrowsingMode iBrowseMode;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   186
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   187
    TSize iSize;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   188
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   189
    TInt iNumberOfImages;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   190
    TInt iNumberOfImagesBrowsed;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   191
    TInt iSingleFaceBrowsingIndex;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   192
    TInt iNumberOfFacesCropped;    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   193
    TInt iNumberOfFaces;   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   194
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   195
    TFileName iCurrentImageFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   196
    TFileName iCurrent512x512TNFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   197
    TInt        iTotalNumberOfFaces;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   198
    CIEEngineUtils iUtils;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   199
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   200
    RArray<TFileName>* iCroppedFilenames;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   201
    //RArray<TRect> iImageCoordArray;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   202
    CFbsBitmap*     iBitmap;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   203
};
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   204
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   205
#endif // __IEFACEBROWSER_H__