IEBgps/src/IEFaceBrowser.cpp
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
// Include files
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    19
#include <e32debug.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    20
#include <e32math.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    21
#include <exifmodify.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    22
#include <BAUTILS.H>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    23
#include "IEFaceBrowser.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    24
#include "IEBgpsInfo.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    25
#include "IEImageData.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    26
#include "ImagicConsts.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    27
#include "debug.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    28
#include <hal.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    29
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    30
// ================= MEMBER FUNCTIONS ================================ //
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    31
CFaceBrowser* CFaceBrowser::NewLC(
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    32
        RFs& aFileServer, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    33
        MIEFaceBrowserObserver& aFaceBrowserObserver)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    34
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    35
    DP0_IMAGIC(_L("CFaceBrowser::NewLC ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    36
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    37
    CFaceBrowser* self = new (ELeave) CFaceBrowser(aFileServer, aFaceBrowserObserver);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    38
    CleanupStack::PushL(self);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    39
    self->ConstructL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    40
    CleanupStack::Pop();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    41
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    42
    DP0_IMAGIC(_L("CFaceBrowser::NewLC --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    43
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    44
    return self;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    45
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    46
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    47
CFaceBrowser::CFaceBrowser(
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    48
        RFs& aFileServer, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    49
        MIEFaceBrowserObserver& aFaceBrowserObserver) :
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    50
        iUtils(iFileServer),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    51
        iFileServer(aFileServer), 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    52
        iFaceBrowserObserver(aFaceBrowserObserver), 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    53
        CActive(EPriorityIdle)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    54
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    55
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    56
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    57
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    58
CFaceBrowser::~CFaceBrowser()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    59
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    60
    DP0_IMAGIC(_L("CFaceBrowser::~CFaceBrowser ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    61
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    62
    if(iImageDecoder)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    63
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    64
        iImageDecoder->CancelDecoding();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    65
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    66
        delete iImageDecoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    67
        iImageDecoder = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    68
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    69
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    70
    if(iImageEncoder)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    71
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    72
        iImageEncoder->CancelEncoding();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    73
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    74
        delete iImageEncoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    75
        iImageEncoder = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    76
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    77
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    78
    if(iSymbianImageDecoder)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    79
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    80
        delete iSymbianImageDecoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    81
        iSymbianImageDecoder = NULL;   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    82
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    83
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    84
    if(IsActive())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    85
        Cancel();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    86
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    87
#ifdef IDL_BGPS
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    88
    if(iIDLImageProcessor)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    89
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    90
        delete iIDLImageProcessor;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    91
        iIDLImageProcessor = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    92
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    93
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    94
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    95
    if(iInputBuffer)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    96
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    97
        delete iInputBuffer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    98
        iInputBuffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    99
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   100
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   101
    if(iOutputBuffer)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   102
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   103
        delete iOutputBuffer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   104
        iOutputBuffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   105
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   106
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   107
    if(iFaceYuvDataArray.Count() > 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   108
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   109
        TCroppedFaces croppedFace;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   110
        HBufC8* buffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   111
        TInt count = iFaceYuvDataArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   112
        for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   113
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   114
            croppedFace = iFaceYuvDataArray[0];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   115
            buffer = croppedFace.iYuvdata;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   116
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   117
            iFaceYuvDataArray.Remove(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   118
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   119
            delete buffer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   120
            buffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   121
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   122
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   123
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   124
    iFaceYuvDataArray.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   125
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   126
    if(iImageDataArray.Count() > 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   127
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   128
        TInt count = iImageDataArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   129
        for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   130
            iImageDataArray.Remove(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   131
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   132
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   133
    iImageDataArray.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   134
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   135
    iFaceCoordinates.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   136
    if (iTempFaceCoordinates)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   137
        iTempFaceCoordinates->Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   138
   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   139
    DP0_IMAGIC(_L("CFaceBrowser::~CFaceBrowser --"));    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   140
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   141
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   142
void CFaceBrowser::ConstructL()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   143
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   144
    TInt error = KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   145
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   146
    DP0_IMAGIC(_L("CFaceBrowser::ConstructL ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   147
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   148
    CActiveScheduler::Add(this);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   149
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   150
    iImageDecoder = CIEImageDecoder::NewL(iFileServer, *this);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   151
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   152
    iImageEncoder = CIEImageEncoder::NewL(iFileServer, *this);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   153
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   154
#ifdef IDLBGPS
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   155
    iIDLImageProcessor = CIDLImageProcessing::NewL(*this);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   156
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   157
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   158
    iBrowsingState = EStateIdle;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   159
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   160
    iNumberOfImages = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   161
    iNumberOfImagesBrowsed = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   162
    iNumberOfFacesCropped = 0;    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   163
    iNumberOfFaces = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   164
    iTotalNumberOfFaces = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   165
      
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   166
    //RDebug::Print(_L("IDL_Engine_Create error = %d"), error);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   167
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   168
    if(error != KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   169
        User::Leave(error);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   170
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   171
    DP0_IMAGIC(_L("CFaceBrowser::ConstructL --"));    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   172
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   173
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   174
void CFaceBrowser::RunL()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   175
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   176
    DP0_IMAGIC(_L("CFaceBrowser::RunL ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   177
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   178
    TInt error = KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   179
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   180
    switch(iBrowsingState)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   181
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   182
        case ECreatingBitmap:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   183
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   184
            DP0_IMAGIC(_L("CFaceBrowser::RunL() - ECreatingBitmap"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   185
            TInt error = iStatus.Int();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   186
            if(iSymbianImageDecoder)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   187
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   188
                delete iSymbianImageDecoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   189
                iSymbianImageDecoder = NULL;   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   190
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   191
#ifdef IDL_BGPS
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   192
            ContinueFBAfterImageConversionL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   193
#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   194
            //ExecuteFaceDetectionL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   195
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   196
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   197
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   198
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   199
        case EFaceBrowsingRunning:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   200
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   201
            DP0_IMAGIC(_L("CFaceBrowser::RunL() - EFaceBrowsingRunning"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   202
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   203
            TRAP(error, BrowseFacesL(iImageDataArray[iNumberOfImagesBrowsed]));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   204
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   205
            if(error != KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   206
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   207
                Cleanup();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   208
                iFaceBrowserObserver.FaceBrowsingError(error);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   209
                }                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   210
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   211
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   212
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   213
        case ESingleFaceBrowsingRunning:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   214
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   215
            DP0_IMAGIC(_L("CFaceBrowser::RunL() - ESingleFaceBrowsingRunning"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   216
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   217
            //TRAP(error, BrowseFacesL(iImageDataArray[iSingleFaceBrowsingIndex]));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   218
            TRAP(error, BrowseFacesL(iCurrentImageData));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   219
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   220
            if(error != KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   221
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   222
                Cleanup();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   223
                iFaceBrowserObserver.FaceBrowsingError(error);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   224
                }                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   225
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   226
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   227
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   228
        case EFaceBrowsingPaused:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   229
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   230
            DP0_IMAGIC(_L("CFaceBrowser::RunL() - EFaceBrowsingPaused"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   231
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   232
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   233
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   234
        case EFaceBrowsingStopped:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   235
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   236
            DP0_IMAGIC(_L("CFaceBrowser::RunL() - EFaceBrowsingStopped"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   237
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   238
            Cleanup();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   239
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   240
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   241
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   242
        case EFaceBrowsingCompleted:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   243
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   244
            DP0_IMAGIC(_L("CFaceBrowser::RunL() - EFaceBrowsingCompleted"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   245
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   246
            Cleanup();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   247
            iFaceBrowserObserver.FaceBrowsingComplete();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   248
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   249
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   250
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   251
        case ESingleFaceBrowsingComplete:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   252
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   253
            DP0_IMAGIC(_L("CFaceBrowser::RunL() - ESingleFaceBrowsingComplete"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   254
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   255
            Cleanup2();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   256
            iFaceBrowserObserver.FaceSingleFaceBrowsingComplete();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   257
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   258
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   259
                               
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   260
        default:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   261
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   262
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   263
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   264
    DP0_IMAGIC(_L("CFaceBrowser::RunL --"));    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   265
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   266
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   267
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   268
void CFaceBrowser::CheckCroppedFaceFileNames()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   269
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   270
    DP0_IMAGIC(_L("CFaceBrowser::CheckCroppedFaceFileNames"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   271
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   272
    TInt count = iFaceYuvDataArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   273
    //Check that file was really cropped
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   274
    for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   275
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   276
        if(BaflUtils::FileExists(iFileServer, iFaceYuvDataArray[i].iFileName))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   277
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   278
            //do nothing
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   279
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   280
        else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   281
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   282
            iFaceYuvDataArray.Remove(i);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   283
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   284
        //CImageData* data = new CImageData;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   285
        //data->iMGFilename = iFaceYuvDataArray[i].iFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   286
        //iImageDataArray.Append(data);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   287
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   288
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   289
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   290
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   291
void CFaceBrowser::DoCancel()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   292
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   293
    DP0_IMAGIC(_L("CFaceBrowser::DoCancel ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   294
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   295
    iImageDecoder->CancelDecoding();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   296
    iImageEncoder->CancelEncoding();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   297
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   298
    DP0_IMAGIC(_L("CFaceBrowser::DoCancel --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   299
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   300
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   301
TInt CFaceBrowser::RunError(TInt aError)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   302
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   303
    DP1_IMAGIC(_L("CFaceBrowser::RunError - Error: %d"), aError);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   304
    return aError;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   305
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   306
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   307
void CFaceBrowser::BitmapReady(TInt /*aError*/)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   308
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   309
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   310
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   311
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   312
// =============================== PUBLIC FUNCTIONS ============================== //
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   313
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   314
void CFaceBrowser::StartFaceBrowsing(RArray<CImageData*> aImageDataArray)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   315
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   316
    DP0_IMAGIC(_L("CFaceBrowser::StartFaceBrowsing ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   317
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   318
    if(iBrowsingState != EStateIdle)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   319
        iFaceBrowserObserver.FaceBrowsingError(KErrInUse); // Better error code ?
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   320
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   321
    if(aImageDataArray.Count() == 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   322
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   323
        DP0_IMAGIC(_L("ImageDataArray is empty!!!!"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   324
        iFaceBrowserObserver.FaceBrowsingError(KErrArgument);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   325
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   326
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   327
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   328
        iBrowsingState = EFaceBrowsingRunning;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   329
        //Take local copy of imagedata array
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   330
        for(TInt i=0; i<aImageDataArray.Count(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   331
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   332
            if(!aImageDataArray[i]->iGridData.iCorrupted)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   333
                iImageDataArray.Append(aImageDataArray[i]);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   334
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   335
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   336
        iNumberOfImages = iImageDataArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   337
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   338
        DP1_IMAGIC(_L("Number of images: %d"), iNumberOfImages);        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   339
        ContinueLoop();        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   340
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   341
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   342
    DP0_IMAGIC(_L("CFaceBrowser::StartFaceBrowsing --"));    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   343
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   344
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   345
//void CFaceBrowser::StartSingleFaceDetection(TInt aIndex, RArray<TRect>* aImageCoordArray)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   346
//void CFaceBrowser::StartSingleFaceDetection(TInt aIndex, RArray<TRect>* aImageCoordArray, RArray<CImageData*> aImageDataArray)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   347
void CFaceBrowser::StartSingleFaceBrowsing(TInt aIndex, RArray<TRect>* aImageCoordArray, CImageData* aImageData)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   348
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   349
    DP0_IMAGIC(_L("CFaceBrowser::StartSingleFaceBrowsing ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   350
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   351
    iCurrentImageData = aImageData;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   352
    iSingleFaceBrowsingIndex = aIndex;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   353
    iTempFaceCoordinates = aImageCoordArray;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   354
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   355
    if(iBrowsingState != EStateIdle)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   356
        iFaceBrowserObserver.FaceBrowsingError(KErrInUse); // Better error code ?
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   357
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   358
    iBrowsingState = ESingleFaceBrowsingRunning;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   359
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   360
    /*//Take local copy of imagedata array
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   361
    for(TInt i=0; i<aImageDataArray.Count(); i++)//TODO, copy only one array element, not all in alrray
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   362
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   363
        if(!aImageDataArray[i]->iGridData.iCorrupted)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   364
            iImageDataArray.Append(aImageDataArray[i]);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   365
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   366
    */
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   367
    iNumberOfImages = iImageDataArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   368
  
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   369
    DP0_IMAGIC(_L("CFaceBrowser::StartSingleFaceBrowsing --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   370
    ContinueLoop();        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   371
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   372
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   373
void CFaceBrowser::CancelFaceBrowsing()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   374
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   375
    DP0_IMAGIC(_L("CFaceBrowser::CancelFaceBrowsing ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   376
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   377
    Cleanup2();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   378
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   379
    if(IsActive())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   380
        Cancel();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   381
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   382
    //Cleanup();//TODO, check if this is needed
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   383
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   384
    DP0_IMAGIC(_L("CFaceBrowser::CancelFaceBrowsing ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   385
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   386
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   387
TInt CFaceBrowser::FindFaces(const TFileName a512x512TNFileName, RArray<TRect>& aCordArray)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   388
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   389
    DP1_IMAGIC(_L("CFaceBrowser::FindFaces, a512x512TNFileName = %S ++"), &a512x512TNFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   390
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   391
    TInt error = KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   392
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   393
    TRAP(error, iUtils.ReadFaceCoordinatesL(a512x512TNFileName, aCordArray));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   394
    if(error != KErrNone) return error;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   395
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   396
    DP0_IMAGIC(_L("CFaceBrowser::FindFaces --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   397
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   398
    return error;    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   399
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   400
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   401
TInt CFaceBrowser::GetNumberOfFaces(const TFileName /*aFile*/)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   402
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   403
    return 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   404
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   405
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   406
//void CIEEngineImp::RemoveExifFaceCoordsL(const TDes& aFilename, TPoint aTlCoord, TPoint aBrCoord, TInt aFaceNumber)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   407
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   408
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   409
TInt CFaceBrowser::RemoveFaceCoordinate(const TFileName a512x512TNFileName, RArray<TRect>& aCordArray)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   410
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   411
    DP0_IMAGIC(_L("CFaceBrowser::RemoveFaceCoordinate++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   412
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   413
     //Read first current make note
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   414
     TInt makerNoteSize;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   415
     HBufC8* makerNote = ReadExifMakerNoteL(a512x512TNFileName, makerNoteSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   416
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   417
     //Read first current maker note to new array from given file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   418
     //RArray<TRect> newCordArray;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   419
     //ReadFaceCoordinatesL(a512x512TNFileName, newCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   420
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   421
     //Allocate buffer for coords to be removed
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   422
     HBufC8* heapComment = HBufC8::NewL(100);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   423
     TPtr8 ptrCoords = heapComment->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   424
     //Copy coords to be removed to descriptor
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   425
     for(TInt i=0; i < aCordArray.Count(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   426
         {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   427
         ptrCoords.AppendNum(aCordArray[i].iTl.iX);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   428
         ptrCoords.Append(' ');
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   429
         ptrCoords.AppendNum(aCordArray[i].iTl.iY);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   430
         ptrCoords.Append(' ');
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   431
         ptrCoords.AppendNum(aCordArray[i].iBr.iX );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   432
         ptrCoords.Append(' ');
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   433
         ptrCoords.AppendNum(aCordArray[i].iBr.iY);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   434
         ptrCoords.Trim();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   435
         }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   436
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   437
     //Find coordinates from maker note
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   438
     TPtr8 tmpPtr = makerNote->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   439
     TInt res = tmpPtr.Find(ptrCoords);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   440
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   441
     if(res == KErrNotFound)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   442
         return res;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   443
         
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   444
     //Remove coordinates from maker note
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   445
     TInt l = ptrCoords.Length();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   446
     tmpPtr.Delete(res, ptrCoords.Length()+1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   447
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   448
     //Find number of faces from maker note and update it
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   449
     _LIT8(KNumberOfFace, "#");
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   450
     res = tmpPtr.Find(KNumberOfFace);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   451
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   452
     TLex8 lex(makerNote->Ptr());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   453
     lex.SkipAndMark(res+1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   454
     TInt faceCount = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   455
     lex.Val(faceCount);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   456
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   457
     //Check lenght of number of faces string
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   458
     TInt length = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   459
     //TInt aFaceNumber = 1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   460
     if(faceCount < 10)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   461
         length = 1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   462
     else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   463
         length = 2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   464
          
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   465
     HBufC8* numberOfFaces = HBufC8::NewL(length);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   466
     TPtr8 FaceNroPtr = numberOfFaces->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   467
     FaceNroPtr.AppendNum(faceCount-1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   468
              
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   469
     tmpPtr.Replace(res+1, length, FaceNroPtr);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   470
     //TPtr8 numberOfFaces;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   471
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   472
     delete numberOfFaces;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   473
     //numberOfFaces.Copy();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   474
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   475
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   476
     // 1. Read JPEG image from the file to a buffer...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   477
     RFile file;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   478
     User::LeaveIfError( file.Open( iFileServer, a512x512TNFileName, EFileWrite ) );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   479
     CleanupClosePushL( file );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   480
     TInt size = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   481
     file.Size(size);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   482
     HBufC8* jpegImage = HBufC8::NewL( size );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   483
     CleanupStack::PushL( jpegImage );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   484
     TPtr8 bufferDes( jpegImage->Des() );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   485
     User::LeaveIfError( file.Read( bufferDes ) );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   486
     CleanupStack::Pop( jpegImage );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   487
     CleanupStack::PopAndDestroy();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   488
     CleanupStack::PushL( jpegImage );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   489
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   490
     file.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   491
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   492
     // 2. Instantiate Exif modifier in ECreate mode...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   493
     CExifModify* modify = CExifModify::NewL( jpegImage->Des(), CExifModify::EModify );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   494
     CleanupStack::PushL( modify );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   495
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   496
     //3. Insert (Set) at least the mandatory Exif data.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   497
     //TInt descSize = 300;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   498
     //HBufC8* heapComment = HBufC8::NewL(descSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   499
     TPtr8 ptr = makerNote->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   500
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   501
     modify->SetMakerNoteL(ptr);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   502
     //modify->SetMakerNoteL(makerNote->Des());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   503
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   504
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   505
     // 4. Get the new Exif image...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   506
     // If zero length descriptor is given instead of jpeg->Des(), then only the
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   507
     // Exif meta data is returned.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   508
     //HBufC8* newExif = modify->WriteDataL( jpegImage->Des() );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   509
     HBufC8* newExif;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   510
     TRAPD(err, newExif = modify->WriteDataL( jpegImage->Des() ));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   511
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   512
     if(err != KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   513
         {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   514
         TInt i=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   515
         }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   516
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   517
     //TPtr8 tmp = newExif->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   518
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   519
     User::LeaveIfError( file.Replace( iFileServer, a512x512TNFileName, EFileWrite ) );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   520
     //Write Exif and jpeg image back to jpeg file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   521
     User::LeaveIfError(file.Write(*newExif));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   522
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   523
     // Process the new Exif data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   524
     delete newExif;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   525
     newExif = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   526
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   527
     // 5. Delete the modifier instance...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   528
     CleanupStack::PopAndDestroy( modify );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   529
     CleanupStack::PopAndDestroy( jpegImage );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   530
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   531
     file.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   532
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   533
    DP0_IMAGIC(_L("CFaceBrowser::RemoveFaceCoordinate--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   534
    return KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   535
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   536
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   537
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   538
//Writes face coordinates to Exif data if faces was found
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   539
TInt CFaceBrowser::AddFaceCoordinate(const TFileName aFilename, RArray<TRect>& aCordArray)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   540
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   541
    DP0_IMAGIC(_L("CFaceBrowser::AddFaceCoordinate++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   542
    //Read first current maker note to new array from given file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   543
    RArray<TRect> newCordArray;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   544
    iUtils.ReadFaceCoordinatesL(aFilename, newCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   545
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   546
    //Append existing coords to new coords array
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   547
    for(TInt i=0; i<newCordArray.Count(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   548
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   549
        aCordArray.Append(newCordArray[i]);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   550
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   551
              
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   552
     //Write all coords to file exif data manufactorer note
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   553
    iUtils.WriteFaceCoordinatesL(aFilename, aCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   554
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   555
    newCordArray.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   556
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   557
    DP0_IMAGIC(_L("CFaceBrowser::AddFaceCoordinate--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   558
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   559
    return KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   560
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   561
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   562
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   563
HBufC8* CFaceBrowser::ReadExifMakerNoteL(const TDes &aFileName, TInt& aSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   564
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   565
    DP0_IMAGIC(_L("CFaceBrowser::ReadExifMakerNoteL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   566
    HBufC8* makerNote;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   567
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   568
    // 1. Read Exif image from the file to a buffer...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   569
    RFile file;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   570
    User::LeaveIfError( file.Open( iFileServer, aFileName , EFileRead ) );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   571
    CleanupClosePushL( file );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   572
    TInt size = 65536;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   573
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   574
    HBufC8* exif = HBufC8::NewL( size );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   575
    CleanupStack::PushL( exif );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   576
    TPtr8 bufferDes( exif->Des() ); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   577
    TInt err1 = file.Read( bufferDes );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   578
    TInt length = bufferDes.Length();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   579
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   580
    if(length <= 0 )
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   581
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   582
        CleanupStack::Pop( exif );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   583
        CleanupStack::PopAndDestroy();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   584
        //return NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   585
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   586
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   587
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   588
        CleanupStack::Pop( exif );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   589
        CleanupStack::PopAndDestroy();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   590
        CleanupStack::PushL( exif );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   591
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   592
        // 2. Instantiate Exif reader...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   593
        CExifRead* ExifRead;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   594
        TInt err = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   595
        TRAP(err, ExifRead = CExifRead::NewL( exif->Des(),CExifRead::ENoJpeg ));//CExifRead::ENoTagChecking | CExifRead::ENoJpeg
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   596
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   597
        //HBufC8* comment = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   598
        if(err != KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   599
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   600
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   601
        else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   602
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   603
            CleanupStack::PushL( ExifRead );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   604
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   605
            // 3. Get required data from the Exif image...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   606
            TUint32  xRes;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   607
            TUint32  yRes;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   608
            ExifRead->GetPixelXDimension(xRes);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   609
            ExifRead->GetPixelYDimension(yRes);  
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   610
                    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   611
            makerNote = ExifRead->GetMakerNoteL(); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   612
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   613
            // Delete the reader instance...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   614
            CleanupStack::PopAndDestroy( ExifRead );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   615
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   616
       
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   617
        file.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   618
        CleanupStack::PopAndDestroy( exif );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   619
        //DP0_IMAGIC(_L("CIEEngineImp::ReadExifData--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   620
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   621
        if(makerNote == NULL)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   622
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   623
            User::Leave(KErrNotFound);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   624
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   625
        else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   626
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   627
            aSize = makerNote->Length();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   628
            //return (TUint8*)makerNote->Des().Ptr();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   629
            return makerNote;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   630
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   631
        //return comment->Des()->Ptr();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   632
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   633
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   634
    DP0_IMAGIC(_L("CFaceBrowser::ReadExifMakerNoteL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   635
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   636
    return NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   637
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   638
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   639
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   640
// ================================ FACE BROWSING RELATED FUNCTIONS =============================== //
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   641
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   642
//This is called from RunL when face browsing is started
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   643
void CFaceBrowser::BrowseFacesL(CImageData* aImageData)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   644
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   645
    DP0_IMAGIC(_L("CFaceBrowser::BrowseFacesL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   646
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   647
    if(iBrowsingState != EFaceBrowsingRunning && iBrowsingState != ESingleFaceBrowsingRunning)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   648
        User::Leave(KErrNotSupported);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   649
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   650
    TBool coordnatesExists = EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   651
    iCurrentImageData = aImageData;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   652
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   653
    TFileName filename;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   654
    iCurrentImageData->GetFileName(filename, ESize512x512);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   655
    DP1_IMAGIC(_L("CFaceBrowser::BrowseFacesL 512x512TNFile = %S ++"), &filename);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   656
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   657
    // 512x512 TN are supposed to be created in TN generation phase and should be present
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   658
    if(!iCurrentImageData->IsImageReady(ESize512x512))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   659
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   660
        Cleanup();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   661
        User::Leave(KErrNotFound);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   662
        }        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   663
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   664
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   665
        iCurrentImageData->GetFileName(iCurrent512x512TNFileName, ESize512x512); //target file to write face coords
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   666
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   667
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   668
    //If coordinates exist we do not process image anymore
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   669
    TRAPD(error, iUtils.ReadFaceCoordinatesL(iCurrent512x512TNFileName, iFaceCoordinates));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   670
    if (error == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   671
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   672
        if(iBrowsingState == ESingleFaceBrowsingRunning)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   673
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   674
            if(iBrowsingState == ESingleFaceBrowsingRunning)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   675
                 for(TInt i = 0; i<iFaceCoordinates.Count(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   676
                    iTempFaceCoordinates->Append(iFaceCoordinates[i]);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   677
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   678
            iBrowsingState = ESingleFaceBrowsingComplete;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   679
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   680
        else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   681
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   682
            //Increment to the next image index
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   683
            iNumberOfImagesBrowsed++;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   684
            //Check if we are at the end of image array
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   685
            if(iNumberOfImagesBrowsed == iNumberOfImages)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   686
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   687
                iBrowsingState = EFaceBrowsingCompleted;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   688
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   689
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   690
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   691
        //and continue to next image
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   692
        ContinueLoop();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   693
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   694
    //Here we have image which has to be processed for face detection
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   695
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   696
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   697
        iPrevBrowsingState = iBrowsingState;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   698
        iBrowsingState = ECreatingBitmap;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   699
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   700
        TSize size;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   701
        if(aImageData->GetAspectRatio() > 1)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   702
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   703
            size.iWidth=320;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   704
            size.iHeight=320/aImageData->GetAspectRatio();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   705
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   706
        else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   707
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   708
            size.iWidth=320*aImageData->GetAspectRatio();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   709
            size.iHeight=320;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   710
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   711
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   712
        if(size.iWidth%2 != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   713
            size.iWidth++;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   714
        if(size.iHeight%2 != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   715
            size.iHeight++;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   716
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   717
        iBitmap = new (ELeave) CFbsBitmap();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   718
        iBitmap->Create(size, EColor16M);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   719
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   720
        iSymbianImageDecoder = CImageDecoder::FileNewL(iFileServer, iCurrent512x512TNFileName, CImageDecoder::EPreferFastDecode);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   721
        iSymbianImageDecoder->Convert(&iStatus, *iBitmap, 0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   722
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   723
        if(!IsActive())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   724
            SetActive();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   725
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   726
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   727
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   728
    DP0_IMAGIC(_L("CFaceBrowser::BrowseFacesL --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   729
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   730
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   731
#ifdef IDLBGPS
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   732
void CFaceBrowser::ContinueFBAfterImageConversionL()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   733
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   734
    DP0_IMAGIC(_L("CFaceBrowser::ContinueFBAfterImageConversionL ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   735
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   736
    iBrowsingState = iPrevBrowsingState;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   737
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   738
    TSize size = iBitmap->SizeInPixels();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   739
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   740
    //Init IDL
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   741
    TInt value = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   742
    InitializeL(EIDLFeatureFaceDetection, size, size, &value, ETrue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   743
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   744
    // Code for the previous face detection which needed YUV input
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   745
    //TUint8* yuvArray;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   746
    //TInt yuvDataSize = size.iHeight * size.iWidth * 3 / 2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   747
    //yuvArray = new TUint8 [yuvDataSize];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   748
    //
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   749
    //ConvertRgb2Yuv(iBitmap, yuvArray, 3/*aBytesPerPixel*/, size);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   750
    // 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   751
    //iInputBuffer->Des().Copy(yuvArray, yuvDataSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   752
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   753
    TInt bitmapSize = size.iHeight * size.iWidth * 3;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   754
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   755
    // This is in the BGR order
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   756
    iInputBuffer->Des().Copy((TUint8 *)iBitmap->DataAddress(), bitmapSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   757
    //delete yuvArray;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   758
#if 0
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   759
    //just for testing --->
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   760
    _LIT(KTestPath, "C:\\Images\\RGB2YUV.YUV");
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   761
    TFileName temp;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   762
    temp.Copy(KTestPath);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   763
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   764
    RFile file;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   765
    User::LeaveIfError(file.Replace(iFileServer, temp, EFileWrite));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   766
    TInt dataSize = iInputBuffer->Size();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   767
    file.Write(iInputBuffer->Des());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   768
    //file.Write(yuvArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   769
    file.Flush();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   770
    file.Close();    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   771
    //TODO, just for testing <---
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   772
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   773
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   774
#if 0
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   775
    //just for testing ---> 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   776
    _LIT(KTestPath, "C:\\Images\\RawRGB.rgb");
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   777
    TFileName temp;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   778
    temp.Copy(KTestPath);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   779
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   780
    RFile file;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   781
    User::LeaveIfError(file.Replace(iFileServer, temp, EFileWrite));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   782
    TInt dataSize = iInputBuffer->Size();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   783
    file.Write(iInputBuffer->Des());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   784
    file.Flush();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   785
    file.Close();    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   786
    //just for testing <---
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   787
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   788
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   789
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   790
    TInt error = KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   791
    TRAP(error, BrowseFacesL(iCurrent512x512TNFileName, iFaceCoordinates));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   792
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   793
    if(error != KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   794
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   795
        Cleanup();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   796
        iFaceBrowserObserver.FaceBrowsingError(error);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   797
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   798
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   799
#if 0
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   800
    //only for debug
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   801
    _LIT(KTestPath, "C:\\Images\\RGB2YUV.MBM");
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   802
    TFileName temp;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   803
    temp.Copy(KTestPath);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   804
    iBitmap->Save(temp);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   805
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   806
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   807
    iBitmap->Reset();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   808
    delete iBitmap;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   809
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   810
    if(iBrowsingState == ESingleFaceBrowsingRunning)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   811
        iBrowsingState = ESingleFaceDetectionComplete;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   812
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   813
    ContinueLoop();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   814
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   815
    DP0_IMAGIC(_L("CFaceBrowser::ContinueFBAfterImageConversionL --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   816
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   817
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   818
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   819
//http://wiki.forum.nokia.com/index.php/TSS001195_-_RGB_to_YUV_conversion
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   820
void CFaceBrowser::ConvertRgb2Yuv(CFbsBitmap* aSourceBitmap, TUint8* aYuv, TInt aBytesPerPixel, const TSize aSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   821
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   822
    DP0_IMAGIC(_L("CFaceBrowser::ConvertRgb2Yuv++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   823
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   824
    // Definitions that help access each colour component in source bitmap
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   825
    #define   sR ((TInt32)(s[2]))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   826
    #define   sG ((TInt32)(s[1]))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   827
    #define   sB ((TInt32)(s[0]))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   828
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   829
    const TInt KImageNumPixels = aSize.iHeight*aSize.iWidth;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   830
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   831
    // Lock source bitmap (CFbsBitmap)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   832
    aSourceBitmap->LockHeap(EFalse);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   833
    TUint8* s = (TUint8*)aSourceBitmap->DataAddress();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   834
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   835
    TInt i = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   836
    TInt ui = KImageNumPixels;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   837
    TInt vi = KImageNumPixels + KImageNumPixels/4;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   838
       
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   839
    //iYuv is an array of TUint8 values, length (KImageNumPixels*3/2)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   840
         
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   841
    for(TInt j=0; j < aSize.iHeight; j++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   842
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   843
        for(TInt k=0; k < aSize.iWidth; k++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   844
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   845
            // Y value is generated for each pixel
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   846
            aYuv[i] = (TUint8)( (  66*sR + 129*sG +  25*sB + 128) >> 8 ) + 16;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   847
              
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   848
            // U, V values are generated for every other pixel on every other scanline 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   849
            if(0 == j%2 && 0 == k%2)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   850
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   851
                aYuv[ui++] = (TUint8)( (-38*sR - 74*sG + 112*sB + 128) >> 8 ) + 128;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   852
                aYuv[vi++] = (TUint8)( (112*sR - 94*sG - 18*sB + 128) >> 8 ) + 128;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   853
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   854
            i++; 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   855
            s+=aBytesPerPixel; // Number of bytes representing one pixel in source
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   856
                               // bitmap e.g. if bitmap display mode == EColor16M 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   857
                               // (24bits/pixel), then iBytesPerPixel == 3
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   858
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   859
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   860
       
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   861
    aSourceBitmap->UnlockHeap(EFalse);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   862
    // iYuv now contains the source frame converted to YUV420p format
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   863
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   864
    DP0_IMAGIC(_L("CFaceBrowser::ConvertRgb2Yuv--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   865
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   866
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   867
#ifdef IDLBGPS
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   868
//This is called after YUV data has been completed
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   869
void CFaceBrowser::BrowseFacesL(const TFileName a512x512TNFileName, RArray<TRect>& aFaceCoordinates)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   870
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   871
    DP0_IMAGIC(_L("CFaceBrowser::BrowseFacesL ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   872
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   873
       
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   874
    TPtr8 inBuffer = iInputBuffer->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   875
    TPtr8 outBuffer = iOutputBuffer->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   876
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   877
    iIDLImageProcessor->SetInOutDataL(inBuffer, outBuffer);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   878
    iIDLImageProcessor->ProcessImageL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   879
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   880
    TInt count = aFaceCoordinates.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   881
    for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   882
        aFaceCoordinates.Remove(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   883
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   884
    GetFaceCoordinates(iNumberOfFaces, aFaceCoordinates);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   885
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   886
    //Add number of faces to image data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   887
    iCurrentImageData->SetNumberOfFaces(iNumberOfFaces);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   888
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   889
    if(iBrowsingState == ESingleFaceBrowsingRunning)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   890
         for(TInt i = 0; i<aFaceCoordinates.Count(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   891
            iTempFaceCoordinates->Append(aFaceCoordinates[i]);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   892
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   893
    iUtils.WriteFaceCoordinatesL(a512x512TNFileName, aFaceCoordinates);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   894
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   895
    if(iBrowsingState == EFaceBrowsingRunning)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   896
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   897
        if(iBrowsingState == EFaceBrowsingRunning)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   898
            iNumberOfImagesBrowsed++;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   899
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   900
        if(iNumberOfImagesBrowsed == iNumberOfImages)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   901
            iBrowsingState = EFaceBrowsingCompleted;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   902
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   903
    else if(iBrowsingState == ESingleFaceBrowsingRunning)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   904
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   905
        iBrowsingState = ESingleFaceDetectionComplete;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   906
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   907
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   908
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   909
    DP0_IMAGIC(_L("CFaceBrowser::BrowseFacesL --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   910
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   911
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   912
void CFaceBrowser::GetFaceCoordinates(TInt& aNumberOfFaces, RArray<TRect>& aCordArray)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   913
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   914
    DP0_IMAGIC(_L("CFaceBrowser::GetFaceCoordinates ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   915
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   916
    iIDLImageProcessor->GetFacesDetected(aNumberOfFaces);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   917
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   918
    if(aNumberOfFaces <= 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   919
        DP0_IMAGIC(_L("No faces found!!!"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   920
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   921
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   922
        DP1_IMAGIC(_L("Number of faces found: %d"), aNumberOfFaces);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   923
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   924
        // Clean up the coordinate array
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   925
        if(aCordArray.Count() > 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   926
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   927
            TInt count = aCordArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   928
            for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   929
                aCordArray.Remove(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   930
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   931
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   932
        iIDLImageProcessor->GetFaceCoordinates(aCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   933
        aCordArray.SortSigned();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   934
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   935
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   936
    DP0_IMAGIC(_L("CFaceBrowser::GetFaceCoordinates --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   937
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   938
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   939
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   940
// =============================== FACE CROPPING RELATED FUNCTIONS ============================ //
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   941
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   942
void CFaceBrowser::CropFacesL(CImageData* aImageData)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   943
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   944
    DP0_IMAGIC(_L("CFaceBrowser::CropFacesL ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   945
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   946
    TInt error = KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   947
    iCurrentImageData = aImageData;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   948
    iNumberOfFacesCropped = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   949
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   950
    TFileName imageFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   951
    aImageData->GetFileName(imageFileName, EFullSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   952
    error = MakeFacesDir(imageFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   953
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   954
    if(error != KErrNone && error != KErrAlreadyExists)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   955
        User::Leave(error);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   956
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   957
    // 512x512 and 320x320 TN are supposed to be created in TN generation phase and should be present
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   958
    if(!iCurrentImageData->IsImageReady(ESize512x512) || !iCurrentImageData->IsImageReady(EFullSize))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   959
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   960
        Cleanup();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   961
        User::Leave(KErrNotFound);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   962
        }        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   963
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   964
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   965
        iCurrentImageData->GetFileName(iCurrent512x512TNFileName, ESize512x512);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   966
        iCurrentImageData->GetFileName(iCurrentImageFileName, EFullSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   967
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   968
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   969
    // We assume that all the images were searched for faces before face cropping started
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   970
    // Hence not checking if face coordinates exists or n ot
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   971
    iUtils.ReadFaceCoordinatesL(iCurrent512x512TNFileName, iFaceCoordinates);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   972
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   973
    if(iFaceCoordinates.Count() == 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   974
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   975
        iNumberOfImagesBrowsed++;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   976
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   977
        if(iNumberOfImagesBrowsed == iNumberOfImages)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   978
            iBrowsingState = EFaceCroppingCompleted;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   979
                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   980
        ContinueLoop();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   981
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   982
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   983
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   984
        iTotalNumberOfFaces +=  iFaceCoordinates.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   985
        DP1_IMAGIC(_L("iTotalNumberOfFaces = %d"), iTotalNumberOfFaces);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   986
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   987
        iImageDecoder->GetImageSizeL(iCurrentImageFileName, iSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   988
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   989
        if(!CheckOddSize(iSize))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   990
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   991
            TInt size = iSize.iWidth * iSize.iHeight * 3 / 2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   992
                    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   993
            PrepareInOutBuffersL(ETrue, size, EFalse, 0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   994
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   995
            iImageDecoder->ConvertJpeg2YuvL(iCurrentImageFileName, *iInputBuffer);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   996
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   997
        else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   998
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   999
            iNumberOfImagesBrowsed++;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1000
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1001
            if(iNumberOfImagesBrowsed == iNumberOfImages)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1002
                iBrowsingState = EFaceCroppingCompleted;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1003
                            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1004
            ContinueLoop();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1005
            }        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1006
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1007
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1008
    DP0_IMAGIC(_L("CFaceBrowser::CropFacesL --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1009
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1010
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1011
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1012
void CFaceBrowser::CropFacesL(const TFileName /*aImageFileName*/, RArray<TRect>& aFaceCoordinates)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1013
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1014
    DP1_IMAGIC(_L("CFaceBrowser::CropFacesL++, number of faces: %d"), aFaceCoordinates.Count());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1015
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1016
#ifdef IDLBGPS_CROP
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1017
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1018
    TRect rect(0, 0, 0, 0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1019
    TParse parser;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1020
    parser.Set(aImageFileName, NULL, NULL);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1021
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1022
    iNumberOfImagesBrowsed++;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1023
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1024
    // Clean the face data array
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1025
    if(iFaceYuvDataArray.Count() > 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1026
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1027
        TCroppedFaces temp;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1028
        HBufC8* buffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1029
        TInt count  = iFaceYuvDataArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1030
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1031
        for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1032
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1033
            temp = iFaceYuvDataArray[0];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1034
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1035
            iFaceYuvDataArray.Remove(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1036
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1037
            buffer = temp.iYuvdata;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1038
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1039
            delete buffer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1040
            buffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1041
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1042
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1043
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1044
    for(TInt faceIndex=0; faceIndex<aFaceCoordinates.Count(); faceIndex++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1045
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1046
        TSize tnSize;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1047
        TFileName thumbnailFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1048
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1049
        iCurrentImageData->GetFileName(thumbnailFileName, ESize32x32);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1050
        iImageDecoder->GetImageSizeL(thumbnailFileName, tnSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1051
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1052
        rect = GetFaceRect(iSize, tnSize, aFaceCoordinates[faceIndex]);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1053
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1054
        InitializeL(EIDLFeatureCrop, iSize, rect.Size(), &rect, EFalse);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1055
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1056
        TPtr8 inBuffer = iInputBuffer->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1057
        TPtr8 outBuffer = iOutputBuffer->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1058
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1059
        iIDLImageProcessor->SetInOutDataL(inBuffer, outBuffer);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1060
        iIDLImageProcessor->ProcessImageL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1061
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1062
        DP1_IMAGIC(_L("Face cropped: %d"), faceIndex);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1063
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1064
        TCroppedFaces croppedFace;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1065
        croppedFace.iYuvdata = HBufC8::NewL(iOutputBuffer->Size());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1066
        croppedFace.iYuvdata->Des().Copy(iOutputBuffer->Des());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1067
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1068
        croppedFace.iFileName.Append(parser.DriveAndPath());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1069
        croppedFace.iFileName.Append(KFaces);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1070
        croppedFace.iFileName.Append(parser.Name());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1071
        croppedFace.iFileName.Append(KUnderScr);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1072
        croppedFace.iFileName.AppendNum(faceIndex);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1073
        croppedFace.iFileName.Append(parser.Ext());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1074
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1075
        croppedFace.iCroppedSize = rect.Size();        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1076
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1077
        iFaceYuvDataArray.Append(croppedFace);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1078
        iCroppedFilenames->Append(croppedFace.iFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1079
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1080
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1081
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1082
    iBrowsingState = EEncodingFaces;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1083
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1084
    DP0_IMAGIC(_L("CFaceBrowser::CropFacesL --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1085
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1086
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1087
TRect CFaceBrowser::GetFaceRect(const TSize aOrgImageSize, const TSize aRelImageSize, const TRect aFaceRect)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1088
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1089
    DP0_IMAGIC(_L("CFaceBrowser::GetFaceRect ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1090
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1091
    TRect faceRect(0, 0, 0, 0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1092
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1093
    faceRect.iTl = aFaceRect.iTl;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1094
    faceRect.iBr = aFaceRect.iBr;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1095
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1096
    TReal width = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1097
    TReal height = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1098
    TReal aspectRatioX = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1099
    TReal aspectRatioY = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1100
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1101
    //Converting the face rect to original image size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1102
    aspectRatioX = (TReal)aOrgImageSize.iWidth / (TReal)aRelImageSize.iWidth;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1103
    aspectRatioY = (TReal)aOrgImageSize.iHeight / (TReal)aRelImageSize.iHeight;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1104
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1105
    //Make cropped rect bigger
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1106
    //faceRect.Grow(faceRect.Width()/4, (faceRect.Height()/2));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1107
    faceRect.Grow(faceRect.Width()/2.5, (faceRect.Height()/1.5));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1108
    //And move ract bit higher
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1109
    //faceRect.Move(0, -(faceRect.Height()/6));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1110
    faceRect.Move(0, -(faceRect.Height()/8));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1111
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1112
    if(aspectRatioX != 1.0 || aspectRatioY != 1.0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1113
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1114
        //Scale cropping rect size to original  
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1115
        faceRect.iTl.iX *= aspectRatioX;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1116
        faceRect.iTl.iY *= aspectRatioY;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1117
        faceRect.iBr.iX *= aspectRatioX;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1118
        faceRect.iBr.iY *= aspectRatioY;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1119
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1120
        // Check for extreme values and negative values
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1121
        // Any invalid values will be made max valid values
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1122
        if(faceRect.iTl.iX < 0) faceRect.iTl.iX = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1123
        if(faceRect.iTl.iY < 0) faceRect.iTl.iY = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1124
        if(faceRect.iTl.iX >= aOrgImageSize.iWidth) faceRect.iBr.iX = aOrgImageSize.iWidth-1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1125
        if(faceRect.iTl.iY >= aOrgImageSize.iHeight) faceRect.iBr.iY = aOrgImageSize.iHeight-1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1126
        if(faceRect.iBr.iX > aOrgImageSize.iWidth) faceRect.iBr.iX = aOrgImageSize.iWidth;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1127
        if(faceRect.iBr.iY > aOrgImageSize.iHeight) faceRect.iBr.iY = aOrgImageSize.iHeight;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1128
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1129
        }    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1130
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1131
    // Make sure that the width and height are divisible by 2, else encoder/decoder will give -10 error
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1132
    TReal remainder = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1133
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1134
    Math::Mod(remainder, faceRect.Size().iWidth, 2);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1135
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1136
    if(remainder != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1137
        faceRect.iBr.iX--;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1138
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1139
    Math::Mod(remainder, faceRect.Size().iHeight, 2);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1140
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1141
    if(remainder != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1142
        faceRect.iBr.iY--;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1143
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1144
    DP4_IMAGIC(_L("CFaceBrowser::GetFaceRect faceRect(%d, %d, %d, %d)--"), faceRect.iTl.iX, faceRect.iTl.iY, faceRect.iBr.iX, faceRect.iBr.iY);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1145
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1146
    return faceRect;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1147
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1148
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1149
TInt CFaceBrowser::MakeFacesDir(const TFileName aImageName)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1150
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1151
    DP0_IMAGIC(_L("CFaceBrowser::MakeFacesDir ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1152
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1153
    TInt error = KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1154
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1155
    TParse parser;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1156
    parser.Set(aImageName, NULL, NULL);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1157
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1158
    TFileName faceDir = parser.DriveAndPath();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1159
    faceDir.Append(KFaces);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1160
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1161
    if(BaflUtils::PathExists(iFileServer, faceDir))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1162
        error = KErrAlreadyExists;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1163
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1164
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1165
        error = iFileServer.MkDir(faceDir);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1166
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1167
        if(error == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1168
            error = iFileServer.SetAtt(faceDir, KEntryAttNormal, KEntryAttNormal);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1169
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1170
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1171
    DP0_IMAGIC(_L("CFaceBrowser::MakeFacesDir --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1172
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1173
    return error;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1174
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1175
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1176
void CFaceBrowser::EncodeFaceL(const TCroppedFaces aCroppedFace)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1177
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1178
    DP0_IMAGIC(_L("CFaceBrowser::EncodeFaceL ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1179
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1180
    HBufC8* buffer = aCroppedFace.iYuvdata;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1181
   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1182
    TFileName fileName = aCroppedFace.iFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1183
    TSize size = aCroppedFace.iCroppedSize;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1184
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1185
    DP1_IMAGIC(_L("Encoding Image: %S"), &fileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1186
    DP2_IMAGIC(_L("Size: %dx%d"), size.iWidth, size.iHeight);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1187
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1188
    iImageEncoder->ConvertYuv2JpegL(fileName, *buffer, size);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1189
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1190
    DP0_IMAGIC(_L("CFaceBrowser::EncodeFaceL --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1191
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1192
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1193
// =============================== COMMON FUNCTIONS ============================================== //
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1194
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1195
#ifdef IDLBGPS
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1196
void CFaceBrowser::InitializeL(const TIDLFeatures aIDLFeature, const TSize aInSize, const TSize aOutSize, TAny* aValue, TBool aInBufferCreate)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1197
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1198
    DP4_IMAGIC(_L("CFaceBrowser::InitializeL, aInsize = %dx%d, aOutSize = %dx%d ++"), aInSize.iWidth, aInSize.iHeight, aOutSize.iWidth, aOutSize.iHeight);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1199
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1200
//    TInt value = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1201
    TInt outputBufferSize = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1202
    //TInt inputBufferSize = (aInSize.iWidth * aInSize.iHeight * 3 / 2);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1203
    TInt inputBufferSize = aInSize.iWidth * aInSize.iHeight * 3;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1204
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1205
    iIDLImageProcessor->SetFeatureL(aIDLFeature, aValue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1206
    //iIDLImageProcessor->InitializeFeatureL(aInSize, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1207
    //                                        aOutSize, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1208
    //                                        EIDLFormatYUV420, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1209
    //                                        EIDLFormatYUV420);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1210
    iIDLImageProcessor->InitializeFeatureL(aInSize, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1211
                                                aOutSize, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1212
                                                EIDLFormatRGB, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1213
                                                EIDLFormatRGB);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1214
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1215
    iIDLImageProcessor->AllocateBuffersL(outputBufferSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1216
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1217
    PrepareInOutBuffersL(aInBufferCreate, inputBufferSize, ETrue, outputBufferSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1218
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1219
    DP0_IMAGIC(_L("CFaceBrowser::InitializeL --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1220
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1221
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1222
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1223
void CFaceBrowser::PrepareInOutBuffersL(TBool aInBufferCreate, const TInt aInBufSize, TBool aOutBufferCreate, const TInt aOutBufSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1224
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1225
    DP0_IMAGIC(_L("CFaceBrowser::PrepareInOutBuffersL ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1226
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1227
    if(aInBufferCreate)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1228
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1229
        if(aInBufSize <= 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1230
            User::Leave(KErrArgument);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1231
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1232
        if(iInputBuffer)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1233
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1234
            delete iInputBuffer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1235
            iInputBuffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1236
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1237
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1238
        iInputBuffer = HBufC8::NewL(aInBufSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1239
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1240
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1241
    if(aOutBufferCreate)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1242
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1243
        if(aOutBufSize <= 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1244
            User::Leave(KErrArgument);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1245
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1246
        if(iOutputBuffer)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1247
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1248
            delete iOutputBuffer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1249
            iOutputBuffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1250
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1251
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1252
        iOutputBuffer = HBufC8::NewL(aOutBufSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1253
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1254
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1255
    DP0_IMAGIC(_L("CFaceBrowser::PrepareInOutBuffersL --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1256
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1257
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1258
TBool CFaceBrowser::CheckOddSize(const TSize aSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1259
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1260
    DP0_IMAGIC(_L("CFaceBrowser::CheckOddSize ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1261
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1262
    TReal remainder = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1263
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1264
    Math::Mod(remainder, aSize.iWidth, 2);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1265
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1266
    if(remainder != 0) return ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1267
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1268
    Math::Mod(remainder, aSize.iHeight, 2);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1269
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1270
    if(remainder != 0) return ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1271
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1272
    DP0_IMAGIC(_L("CFaceBrowser::CheckOddSize --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1273
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1274
    return EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1275
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1276
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1277
#if 0
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1278
TFileName CFaceBrowser::MakeTNFileName(const TFileName aImageFileName, TBool a512TNFile, TBool /*a320TNFileName*/)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1279
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1280
    DP1_IMAGIC(_L("CFaceBrowser::Make512x512TNFileName, aImageFileName = %S ++"), &aImageFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1281
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1282
    TParse fileNameParser;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1283
    fileNameParser.Set(aImageFileName, NULL, NULL);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1284
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1285
    TFileName tnFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1286
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1287
    tnFileName = fileNameParser.DriveAndPath();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1288
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1289
    if(a512TNFile /*&& !a320TNFileName*/)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1290
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1291
        tnFileName.Append(K512x512TNFilePath);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1292
        tnFileName.Append(fileNameParser.Name());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1293
        tnFileName.Append(KTNExt);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1294
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1295
/*    if(!a512TNFile && a320TNFileName)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1296
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1297
        tnFileName.Append(K320TNFilePath);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1298
        tnFileName.Append(fileNameParser.Name());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1299
        tnFileName.Append(K320TNFileExt);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1300
        }*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1301
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1302
    DP1_IMAGIC(_L("CFaceBrowser::Make512x512TNFileName fileName512x512TN = %S --"), &tnFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1303
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1304
    return tnFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1305
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1306
#endif    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1307
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1308
void CFaceBrowser::Cleanup()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1309
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1310
    DP0_IMAGIC(_L("CFaceBrowser::Cleanup ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1311
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1312
    if(iImageDecoder)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1313
            iImageDecoder->CancelDecoding();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1314
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1315
    if(iImageEncoder)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1316
        iImageEncoder->CancelEncoding();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1317
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1318
    if(iFaceCoordinates.Count() > 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1319
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1320
        TInt count = iFaceCoordinates.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1321
        for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1322
            iFaceCoordinates.Remove(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1323
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1324
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1325
    if(iFaceYuvDataArray.Count() > 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1326
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1327
        TCroppedFaces croppedFaces;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1328
        HBufC8* buffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1329
        TInt count = iFaceYuvDataArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1330
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1331
        for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1332
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1333
            croppedFaces = iFaceYuvDataArray[0];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1334
            iFaceYuvDataArray.Remove(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1335
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1336
            buffer = croppedFaces.iYuvdata;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1337
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1338
            delete buffer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1339
            buffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1340
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1341
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1342
/*    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1343
    if(iImageDataArray.Count() > 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1344
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1345
        TInt count = iImageDataArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1346
        for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1347
            iImageDataArray.Remove(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1348
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1349
 */   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1350
    iNumberOfFaces = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1351
    iNumberOfImages = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1352
    iNumberOfImagesBrowsed = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1353
    iNumberOfFacesCropped = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1354
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1355
    iCurrentImageData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1356
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1357
    iCurrentImageFileName = KEmptyString;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1358
    iCurrent512x512TNFileName = KEmptyString;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1359
    //iCurrent320x320TNFileName = KEmptyString;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1360
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1361
    iBrowsingState = EStateIdle;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1362
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1363
    DP0_IMAGIC(_L("CFaceBrowser::Cleanup --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1364
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1365
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1366
void CFaceBrowser::Cleanup2()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1367
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1368
    DP0_IMAGIC(_L("CFaceBrowser::Cleanup2 ++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1369
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1370
    if(iImageDecoder)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1371
        iImageDecoder->CancelDecoding();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1372
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1373
    if(iImageEncoder)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1374
        iImageEncoder->CancelEncoding();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1375
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1376
    if(iFaceYuvDataArray.Count() > 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1377
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1378
        TCroppedFaces croppedFaces;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1379
        HBufC8* buffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1380
        TInt count = iFaceYuvDataArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1381
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1382
        for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1383
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1384
            croppedFaces = iFaceYuvDataArray[0];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1385
            iFaceYuvDataArray.Remove(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1386
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1387
            buffer = croppedFaces.iYuvdata;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1388
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1389
            delete buffer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1390
            buffer = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1391
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1392
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1393
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1394
    iBrowsingState = EStateIdle;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1395
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1396
    DP0_IMAGIC(_L("CFaceBrowser::Cleanup2 --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1397
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1398
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1399
void CFaceBrowser::ContinueLoop()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1400
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1401
    DP0_IMAGIC(_L("CFaceBrowser::ContinueLoop++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1402
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1403
    if(!IsActive())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1404
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1405
        SetActive();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1406
        TRequestStatus* status = &iStatus;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1407
        User::RequestComplete(status, KErrNone);            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1408
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1409
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1410
    DP0_IMAGIC(_L("CFaceBrowser::ContinueLoop--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1411
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1412
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1413
void CFaceBrowser::WriteFaceCoordToExif(TInt numOfFaces, RArray<TRect> faceCoordinates) {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1414
    //Add number of faces to image data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1415
    iCurrentImageData->SetNumberOfFaces(numOfFaces);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1416
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1417
    if(iBrowsingState == ESingleFaceBrowsingRunning)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1418
         for(TInt i = 0; i<iFaceCoordinates.Count(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1419
            iTempFaceCoordinates->Append(iFaceCoordinates[i]);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1420
 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1421
    iUtils.WriteFaceCoordinatesL(iCurrent512x512TNFileName, faceCoordinates);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1422
}
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1423
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
  1424
// EOF