Common/Src/IEEngineUtils.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 <exifmodify.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    19
#include <BAUTILS.H>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    20
#include "IEEngineUtils.h" 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    21
#include "ImagicConsts.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    22
#include "debug.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    23
#include <exifread.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    24
#include <ExifUtility.h> 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    25
#include <ICLExif.h> 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    26
//#include <iclextjpegapi.h>  // For CExtJpegDecoder
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    27
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    28
#define KJpegDecIVAUidValue 0x10272C10
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    29
#define KJpegOptUidValue 0x101FF555
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    30
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    31
EXPORT_C CIEEngineUtils::CIEEngineUtils(RFs& aFs)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    32
    : iFs(aFs)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    33
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    34
    } 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    35
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    36
EXPORT_C CIEEngineUtils::~CIEEngineUtils()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    37
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    38
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    39
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    40
/* Generating IETNFileName with complete path */
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    41
EXPORT_C void CIEEngineUtils::GenerateThumbnailFileName(
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    42
        TThumbSize aTNResolution,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    43
        const TDesC& aSavedFileName, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    44
        TDes &aIETNFileName)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    45
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    46
    TFileName tmpName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    47
    TParse parser;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    48
    switch(aTNResolution)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    49
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    50
        case ESize512x512:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    51
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    52
            parser.Set(aSavedFileName, NULL, NULL);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    53
            tmpName = parser.DriveAndPath();//only path name
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    54
            tmpName.Append(K512x512TNFilePath);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    55
            tmpName.Append(parser.NameAndExt());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    56
            tmpName.Append(K512x512Ext);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    57
            aIETNFileName.Copy(tmpName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    58
            break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    59
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    60
        case ESize128x128:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    61
           {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    62
           parser.Set(aSavedFileName, NULL, NULL);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    63
           tmpName = parser.DriveAndPath();//only path name
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    64
           tmpName.Append(K128x128TNFilePath);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    65
           tmpName.Append(parser.NameAndExt());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    66
           tmpName.Append(K128x128Ext);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    67
           aIETNFileName.Copy(tmpName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    68
           break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    69
           }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    70
        case ESize32x32:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    71
           {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    72
           parser.Set(aSavedFileName, NULL, NULL);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    73
           tmpName = parser.DriveAndPath();//only path name
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    74
           tmpName.Append(K32x32TNFilePath);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    75
           tmpName.Append(parser.NameAndExt());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    76
           tmpName.Append(K32x32Ext);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    77
           aIETNFileName.Copy(tmpName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    78
           break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    79
           }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    80
        default:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    81
           ASSERT(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    82
           break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    83
        };
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    84
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    85
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    86
EXPORT_C void CIEEngineUtils::DeleteThumbnails(TDesC& aFileName, RFs& aFs)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    87
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    88
    TThumbSize res[] = { ESize512x512, ESize128x128, ESize32x32 };
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    89
    for (TInt i = 0;i < sizeof(res)/ sizeof(TThumbSize);i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    90
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    91
        TFileName thumbFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    92
        GenerateThumbnailFileName(res[i], aFileName, thumbFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    93
        BaflUtils::DeleteFile(aFs, thumbFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    94
        }    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    95
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    96
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    97
/*Creating TN Folder */
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    98
EXPORT_C TInt CIEEngineUtils::CreateTNFolder(RFs aFs, const TDesC& aTNPath)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    99
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   100
    TInt error = KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   101
    if( !BaflUtils::PathExists( aFs, aTNPath ) )
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   102
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   103
        error = aFs.MkDirAll( aTNPath );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   104
        error = aFs.SetAtt( aTNPath, KEntryAttHidden, 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
    return error;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   108
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   109
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   110
// Writes face coordinates to Exif data if faces was found
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   111
EXPORT_C TInt CIEEngineUtils::AddFaceCoordinate(const TFileName aFilename, RArray<TRect>& aCordArray)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   112
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   113
    DP0_IMAGIC(_L("CIEEngineUtils::AddFaceCoordinate++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   114
    // Read first current maker note to new array from given file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   115
    RArray<TRect> newCordArray;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   116
    ReadFaceCoordinatesL(aFilename, newCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   117
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   118
    // Append existing coords to new coords array
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   119
    for(TInt i=0; i<newCordArray.Count(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   120
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   121
        aCordArray.Append(newCordArray[i]);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   122
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   123
              
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   124
     // Write all coords to file exif data manufactorer note
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   125
    WriteFaceCoordinatesL(aFilename, aCordArray);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   126
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   127
    newCordArray.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   128
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   129
    DP0_IMAGIC(_L("CIEEngineUtils::AddFaceCoordinate--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   130
    return KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   131
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   132
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   133
EXPORT_C HBufC8* CIEEngineUtils::ReadExifMakerNoteL(const TDes &aFileName)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   134
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   135
    DP0_IMAGIC(_L("CIEEngineUtils::ReadExifMakerNoteL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   136
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   137
    HBufC8* exif = ReadExifHeaderL(iFs, aFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   138
    CleanupStack::PushL( exif );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   139
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   140
    CExifRead* exifRead = CExifRead::NewL(exif->Des(), CExifRead::ENoJpeg);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   141
    CleanupStack::PushL( exifRead );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   142
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   143
    // Get required data from the Exif image...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   144
    /*TUint32  xRes;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   145
    TUint32  yRes;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   146
    exifRead->GetPixelXDimension(xRes);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   147
    exifRead->GetPixelYDimension(yRes);*/  
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   148
    HBufC8* makerNote = exifRead->GetMakerNoteL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   149
    CleanupStack::PushL( makerNote );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   150
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   151
    CleanupStack::Pop( makerNote );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   152
    CleanupStack::PopAndDestroy( exifRead );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   153
    CleanupStack::PopAndDestroy( exif );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   154
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   155
    DP0_IMAGIC(_L("CIEEngineUtils::ReadExifMakerNoteL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   156
    return makerNote;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   157
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   158
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   159
EXPORT_C TInt CIEEngineUtils::RemoveFaceCoordinate(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   160
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   161
    DP0_IMAGIC(_L("CIEEngineUtils::RemoveFaceCoordinate++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   162
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   163
    //Read first current make note
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   164
    HBufC8* makerNote = ReadExifMakerNoteL(a128x128TNFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   165
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   166
    // Allocate buffer for coords to be removed
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   167
    HBufC8* heapComment = HBufC8::NewL(100);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   168
    TPtr8 ptrCoords = heapComment->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   169
    //Copy coords to be removed to descriptor
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   170
    for(TInt i=0; i < aCordArray.Count(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   171
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   172
        ptrCoords.AppendNum(aCordArray[i].iTl.iX);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   173
        ptrCoords.Append(' ');
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   174
        ptrCoords.AppendNum(aCordArray[i].iTl.iY);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   175
        ptrCoords.Append(' ');
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   176
        ptrCoords.AppendNum(aCordArray[i].iBr.iX );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   177
        ptrCoords.Append(' ');
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   178
        ptrCoords.AppendNum(aCordArray[i].iBr.iY);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   179
        ptrCoords.Trim();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   180
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   181
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   182
    //Find coordinates from maker note
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   183
    TPtr8 tmpPtr = makerNote->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   184
    TInt res = tmpPtr.Find(ptrCoords);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   185
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   186
    if(res == KErrNotFound)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   187
        return res;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   188
         
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   189
    //Remove coordinates from maker note
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   190
    TInt l = ptrCoords.Length();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   191
    tmpPtr.Delete(res, ptrCoords.Length()+1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   192
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   193
    //Find number of faces from maker note and update it
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   194
    _LIT8(KNumberOfFace, "#");
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   195
    res = tmpPtr.Find(KNumberOfFace);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   196
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   197
    TLex8 lex(makerNote->Ptr());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   198
    lex.SkipAndMark(res+1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   199
    TInt faceCount = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   200
    lex.Val(faceCount);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   201
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   202
    //Check lenght of number of faces string
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   203
    TInt length = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   204
    //TInt aFaceNumber = 1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   205
    if(faceCount < 10)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   206
        length = 1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   207
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   208
        length = 2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   209
          
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   210
    HBufC8* numberOfFaces = HBufC8::NewL(length);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   211
    TPtr8 FaceNroPtr = numberOfFaces->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   212
    FaceNroPtr.AppendNum(faceCount-1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   213
              
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   214
    tmpPtr.Replace(res+1, length, FaceNroPtr);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   215
    //TPtr8 numberOfFaces;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   216
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   217
    delete numberOfFaces;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   218
    //numberOfFaces.Copy();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   219
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   220
    // 1. Read JPEG image from the file to a buffer...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   221
    RFile file;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   222
    User::LeaveIfError( file.Open( iFs, a128x128TNFileName, EFileWrite ) );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   223
    CleanupClosePushL( file );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   224
    TInt size = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   225
    file.Size(size);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   226
    HBufC8* jpegImage = HBufC8::NewL( size );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   227
    CleanupStack::PushL( jpegImage );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   228
    TPtr8 bufferDes( jpegImage->Des() );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   229
    User::LeaveIfError( file.Read( bufferDes ) );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   230
    CleanupStack::Pop( jpegImage );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   231
    CleanupStack::PopAndDestroy();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   232
    CleanupStack::PushL( jpegImage );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   233
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   234
    file.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   235
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   236
    // 2. Instantiate Exif modifier in ECreate mode...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   237
    CExifModify* modify = CExifModify::NewL( jpegImage->Des(), CExifModify::EModify );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   238
    CleanupStack::PushL( modify );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   239
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   240
    //3. Insert (Set) at least the mandatory Exif data.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   241
    //TInt descSize = 300;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   242
    //HBufC8* heapComment = HBufC8::NewL(descSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   243
    TPtr8 ptr = makerNote->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   244
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   245
    modify->SetMakerNoteL(ptr);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   246
    //modify->SetMakerNoteL(makerNote->Des());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   247
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   248
    // 4. Get the new Exif image...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   249
    // If zero length descriptor is given instead of jpeg->Des(), then only the
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   250
    // Exif meta data is returned.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   251
    //HBufC8* newExif = modify->WriteDataL( jpegImage->Des() );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   252
    HBufC8* newExif;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   253
    TRAPD(err, newExif = modify->WriteDataL( jpegImage->Des() ));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   254
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   255
    if(err != KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   256
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   257
        TInt i=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   258
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   259
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   260
    //TPtr8 tmp = newExif->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   261
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   262
    User::LeaveIfError( file.Replace( iFs, a128x128TNFileName, EFileWrite ) );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   263
    //Write Exif and jpeg image back to jpeg file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   264
    User::LeaveIfError(file.Write(*newExif));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   265
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   266
    // Process the new Exif data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   267
    delete newExif;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   268
    newExif = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   269
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   270
    // 5. Delete the modifier instance...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   271
    CleanupStack::PopAndDestroy( modify );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   272
    CleanupStack::PopAndDestroy( jpegImage );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   273
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   274
    file.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   275
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   276
    DP0_IMAGIC(_L("CIEEngineUtils::RemoveFaceCoordinate--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   277
    return KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   278
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   279
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   280
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   281
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   282
EXPORT_C void CIEEngineUtils::WriteFaceCoordinatesL(const TFileName a512x512TNFileName, RArray<TRect>& aCordArray)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   283
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   284
    DP1_IMAGIC(_L("CIEEngineUtils::WriteFaceCoordinatesL a512x512TNFileName = %S ++"), &a512x512TNFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   285
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   286
    TInt error = KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   287
    RFile tnFile;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   288
    TInt size = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   289
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   290
    //Check that coords got from IDL makes sense. Eg. not out of image area etc.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   291
    /*TSize tnSize;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   292
    iImageDecoder->GetImageSizeL(iCurrentImageData->iMGTN_320x320_Filename, tnSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   293
    TInt brx;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   294
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   295
    TInt count = aCordArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   296
    TBool removed = EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   297
    for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   298
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   299
        brx = aCordArray[i].iBr.iX;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   300
        brx = aCordArray[i].iBr.iY;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   301
        brx = aCordArray[i].iTl.iX;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   302
        brx = aCordArray[i].iTl.iY;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   303
        if(aCordArray[i].iTl.iX >= aCordArray[i].iBr.iX || aCordArray[i].iTl.iY >= aCordArray[i].iBr.iY)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   304
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   305
            aCordArray.Remove(i);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   306
            removed = ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   307
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   308
        if(removed)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   309
            count = aCordArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   310
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   311
    */
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   312
   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   313
    User::LeaveIfError(tnFile.Open(iFs, a512x512TNFileName, EFileRead));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   314
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   315
    tnFile.Size(size);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   316
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   317
    if(size <= 0) User::Leave(KErrUnderflow); // May be more meaningful error code shud be returned
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   318
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   319
    HBufC8* imageData = HBufC8::NewL(size);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   320
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   321
    CleanupStack::PushL(imageData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   322
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   323
    TPtr8 imageDataPtr = imageData->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   324
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   325
    User::LeaveIfError(tnFile.Read(imageDataPtr));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   326
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   327
    tnFile.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   328
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   329
    // Create the exifmodifier instance
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   330
    CExifModify* exifModifier = CExifModify::NewL(imageDataPtr, CExifModify::ECreate);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   331
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   332
    CleanupStack::PushL(exifModifier);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   333
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   334
    //3. Insert (Set) at least the mandatory Exif data...
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   335
    exifModifier->SetXResolutionL( 123, 1 ); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   336
    exifModifier->SetYResolutionL( 512, 1 ); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   337
    exifModifier->SetResolutionUnitL( 2 );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   338
    exifModifier->SetYCbCrPositioningL( 1 );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   339
    exifModifier->SetComponentsConfigurationL( 1, 2, 3, 0 );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   340
    exifModifier->SetColorSpaceL( 1 );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   341
    exifModifier->SetPixelXDimensionL( 512 );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   342
    exifModifier->SetPixelYDimensionL( 512 );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   343
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   344
    TInt descSize = aCordArray.Count()*4*4 + 32+10; // Be careful calculating like this!!!
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   345
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   346
    HBufC8* heapComment = HBufC8::NewL(descSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   347
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   348
    CleanupStack::PushL(heapComment);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   349
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   350
    TPtr8 ptr = heapComment->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   351
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   352
    ptr.Append(KFaceCoordsHeader);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   353
    ptr.Append(KSpace);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   354
    ptr.Append(KFaceCoordsImagicVersion);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   355
    ptr.Append(KSpace);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   356
    ptr.Append(KHash);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   357
     
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   358
    //Set number of faces detected to Exif data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   359
    if(aCordArray.Count() == 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   360
        ptr.Append(KZero);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   361
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   362
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   363
        ptr.AppendNum(aCordArray.Count());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   364
        ptr.Append(KSpace);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   365
        for(TInt i=0; i<aCordArray.Count(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   366
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   367
            //TInt size = ptr.Size();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   368
            ptr.AppendNum(aCordArray[i].iTl.iX);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   369
            ptr.Append(KSpace);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   370
            ptr.AppendNum(aCordArray[i].iTl.iY);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   371
            ptr.Append(KSpace);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   372
            ptr.AppendNum(aCordArray[i].iBr.iX);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   373
            ptr.Append(KSpace);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   374
            ptr.AppendNum(aCordArray[i].iBr.iY);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   375
            ptr.Append(KSpace);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   376
            }    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   377
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   378
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   379
    exifModifier->SetMakerNoteL(ptr);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   380
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   381
    HBufC8* newImageData = exifModifier->WriteDataL(imageDataPtr); // newImageData contains the image data with the modified exif data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   382
    CleanupStack::PushL(newImageData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   383
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   384
    if(newImageData == NULL)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   385
        User::Leave(KErrNotFound); // Better error code should be returned
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   386
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   387
    TPtr8 newImageDataPtr = newImageData->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   388
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   389
    // Create the new thumbnail image with modified exif data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   390
    User::LeaveIfError(tnFile.Replace(iFs, a512x512TNFileName, EFileWrite));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   391
    User::LeaveIfError(tnFile.Write(newImageDataPtr));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   392
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   393
    tnFile.Flush();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   394
    tnFile.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   395
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   396
    CleanupStack::PopAndDestroy(4);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   397
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   398
    DP0_IMAGIC(_L("CIEEngineUtils::WriteFaceCoordinatesL --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   399
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   400
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   401
EXPORT_C void CIEEngineUtils::ReadFaceCoordinatesL(const TFileName a512x512TNFileName, RArray<TRect>& aCordArray)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   402
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   403
    DP1_IMAGIC(_L("CIEEngineUtils::ReadFaceCoordinatesL, a512x512TNFileName = %S ++"), &a512x512TNFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   404
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   405
    TInt count = aCordArray.Count();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   406
    for(TInt i=0; i<count; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   407
        aCordArray.Remove(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   408
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   409
    HBufC8* imageData = ReadExifHeaderL(iFs, a512x512TNFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   410
    CleanupStack::PushL(imageData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   411
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   412
    CExifRead* exifReader;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   413
    exifReader = CExifRead::NewL(imageData->Des(), CExifRead::ENoJpeg);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   414
    CleanupStack::PushL(exifReader);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   415
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   416
    HBufC8* makerNoteData = exifReader->GetMakerNoteL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   417
    TPtr8 makerNoteDataPtr = makerNoteData->Des();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   418
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   419
    // No valid face information
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   420
    if (makerNoteDataPtr.Find(KFaceCoordsHeader) != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   421
        User::Leave(KErrNotFound);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   422
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   423
    // 31 is the length of the string KFaceCoordsHeader+KSpace+KFaceCoordsImagicVersion+KSpace+KHash
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   424
    makerNoteDataPtr.Delete(0, 31);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   425
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   426
    TRect rect(0,0,0,0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   427
    TLex8 lex(makerNoteDataPtr.Ptr());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   428
    TInt faceCount = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   429
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   430
    lex.Val(faceCount);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   431
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   432
    if(faceCount > 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   433
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   434
        for(TInt i=0; i<faceCount; i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   435
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   436
            lex.SkipSpaceAndMark(); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   437
            lex.Val(rect.iTl.iX);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   438
            lex.SkipSpaceAndMark(); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   439
            lex.Val(rect.iTl.iY);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   440
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   441
            lex.SkipSpaceAndMark(); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   442
            lex.Val(rect.iBr.iX);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   443
            lex.SkipSpaceAndMark(); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   444
            lex.Val(rect.iBr.iY);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   445
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   446
            aCordArray.Append(rect);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   447
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   448
            DP4_IMAGIC(_L("Rect(%d, %d, %d, %d)"), rect.iTl.iX, rect.iTl.iY, rect.iBr.iX, rect.iBr.iY);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   449
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   450
            rect = TRect(0,0,0,0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   451
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   452
        aCordArray.SortSigned();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   453
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   454
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   455
    CleanupStack::PopAndDestroy(2);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   456
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   457
    DP0_IMAGIC(_L("CIEEngineUtils::ReadFaceCoordinatesL --"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   458
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   459
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   460
EXPORT_C void CIEEngineUtils::GetModifiedTimeL(const TDes &aFileName, TTime& aTime)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   461
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   462
    DP0_IMAGIC(_L("CIEEngineUtils::GetFileModifiedTimeL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   463
   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   464
    // Read file modified date
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   465
    RFile file;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   466
    TInt error = file.Open(iFs, aFileName , EFileRead);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   467
    DP1_IMAGIC(_L("CIEEngineUtils::GetFileModifiedTimeL - file open error = %d"), error);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   468
    User::LeaveIfError(error);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   469
    file.Modified(aTime);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   470
    file.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   471
    DP0_IMAGIC(_L("CIEEngineUtils::GetFileModifiedTimeL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   472
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   473
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   474
EXPORT_C void CIEEngineUtils::GetImageSizeL(const TDes &aFileName, TSize& aSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   475
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   476
    DP0_IMAGIC(_L("CIEEngineUtils::GetImageSizeL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   477
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   478
    CImageDecoder* imageDecoder = CImageDecoder::FileNewL(iFs, aFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   479
    TFrameInfo frameInfo = imageDecoder->FrameInfo();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   480
    aSize = frameInfo.iFrameCoordsInPixels.Size();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   481
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   482
    delete imageDecoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   483
    imageDecoder = NULL;   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   484
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   485
    DP2_IMAGIC(_L("CIEEngineUtils::GetImageSizeL-- [%d x %d]"), aSize.iWidth, aSize.iHeight);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   486
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   487
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   488
EXPORT_C HBufC8* CIEEngineUtils::ReadExifHeaderL(RFs& aFs, const TDesC &aFileName) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   489
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   490
    DP0_IMAGIC(_L("CIEEngineUtils::ReadExifHeaderL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   491
    RFile file;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   492
    User::LeaveIfError(file.Open(aFs, aFileName, EFileRead|EFileShareReadersOnly));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   493
    CleanupClosePushL(file);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   494
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   495
    TInt size;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   496
    file.Size(size);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   497
    size = Min(size, 64 * 1024);    // TODO use exact exif size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   498
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   499
    HBufC8* exif = HBufC8::NewL(size);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   500
    CleanupStack::PushL(exif);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   501
    TPtr8 bufferPtr(exif->Des()); 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   502
    User::LeaveIfError(file.Read(bufferPtr));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   503
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   504
    CleanupStack::Pop(exif); // exif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   505
    CleanupStack::PopAndDestroy(); // file
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   506
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   507
    DP0_IMAGIC(_L("CIEEngineUtils::ReadExifHeaderL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   508
    return exif;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   509
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   510
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   511
EXPORT_C HBufC8* CIEEngineUtils::ReadExifThumbnailL(RFs& aFs, const TDesC& aFileName)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   512
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   513
    DP1_IMAGIC(_L("CIEEngineUtils::ReadExifThumbnailL++ %S"), &aFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   514
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   515
    HBufC8* exif = ReadExifHeaderL(aFs, aFileName);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   516
    CleanupStack::PushL(exif);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   517
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   518
    // Instantiate Exif reader
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   519
    CExifRead* exifRead = CExifRead::NewL(*exif, CExifRead::ENoJpeg);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   520
    CleanupStack::PushL(exifRead);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   521
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   522
    // Get required data from the Exif image
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   523
    HBufC8* exifThumb = exifRead->GetThumbnailL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   524
    CleanupStack::PushL(exifThumb);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   525
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   526
    /*TUint32 w, w2, h, h2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   527
    exifRead->GetThumbnailXResolution(w, w2);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   528
    exifRead->GetThumbnailYResolution(h, h2);*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   529
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   530
    CleanupStack::Pop(exifThumb);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   531
    CleanupStack::PopAndDestroy(exifRead);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   532
    CleanupStack::PopAndDestroy(exif);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   533
    DP0_IMAGIC(_L("CIEEngineUtils::ReadExifThumbnailL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   534
    return exifThumb;
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
// Read the JPEG EXIF creation timestamp and orientation
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   539
//------------------------------------------------------------------------------
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   540
EXPORT_C void CIEEngineUtils::GetExifDateTimeAndOrientationL(
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   541
        const TDesC& aFilename, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   542
        TTime& aExifDateTime,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   543
        TUint16& aOrientation)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   544
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   545
    HBufC8* exifDateTime = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   546
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   547
//#define USE_EXIF_DECODER
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   548
#ifdef USE_EXIF_DECODER
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   549
    // First create the decoder and attach it to the JPEG file. The
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   550
    // decoder implementation UID has to be specified or calling
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   551
    // ExifMetadata() will crash.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   552
    CImageDecoder* imageDecoder = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   553
    imageDecoder = CImageDecoder::FileNewL(
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   554
            iFs, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   555
            aFilename, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   556
            CImageDecoder::EOptionNone, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   557
            KImageTypeJPGUid, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   558
            KNullUid,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   559
            TUid::Uid(KJPGDecoderImplementationUidValue));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   560
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   561
    // The specific implementation UID makes the downcasting safe.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   562
    // Besides, there is no other way to use the decoder.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   563
    CJPEGExifDecoder* jpegDecoder = static_cast<CJPEGExifDecoder*>(imageDecoder);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   564
    CleanupStack::PushL(jpegDecoder);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   565
    // Read the EXIF timestamp, format "YYYY:MM:DD HH:MM:SS".
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   566
    MExifMetadata* exifData = jpegDecoder->ExifMetadata();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   567
    if(!exifData)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   568
        User::Leave(KErrNotSupported);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   569
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   570
    TExifReaderUtility reader(exifData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   571
    exifDateTime = HBufC8::NewLC(KPMMExifDateTimeOriginalLength);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   572
    TInt error = reader.GetDateTimeOriginal(exifDateTime);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   573
    User::LeaveIfError(error);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   574
#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   575
    HBufC8* exifData = ReadExifHeaderL(iFs, aFilename);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   576
    CleanupStack::PushL(exifData);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   577
    CExifRead* exifReader = CExifRead::NewL(*exifData, CExifRead::ENoJpeg);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   578
    CleanupStack::PushL(exifReader);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   579
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   580
    exifDateTime = exifReader->GetDateTimeOriginalL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   581
#endif    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   582
    // Convert the descriptor to a TDateTime as it cannot be converted
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   583
    // directly to a TTime.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   584
    TLex8 lexer(*exifDateTime);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   585
    TInt timeValue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   586
    TDateTime intermediateDateTime;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   587
    // Year
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   588
    User::LeaveIfError(lexer.Val(timeValue));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   589
    intermediateDateTime.SetYear(timeValue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   590
    lexer.Inc(); // Skip the colon.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   591
    // Month
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   592
    User::LeaveIfError(lexer.Val(timeValue));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   593
    intermediateDateTime.SetMonth(TMonth(timeValue-1));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   594
    lexer.Inc();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   595
    // Day
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   596
    User::LeaveIfError(lexer.Val(timeValue));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   597
    intermediateDateTime.SetDay(timeValue-1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   598
    lexer.Inc();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   599
    // Hours
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   600
    User::LeaveIfError(lexer.Val(timeValue));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   601
    intermediateDateTime.SetHour(timeValue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   602
    lexer.Inc();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   603
    // Minutes
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   604
    User::LeaveIfError(lexer.Val(timeValue));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   605
    intermediateDateTime.SetMinute(timeValue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   606
    lexer.Inc();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   607
    // Seconds
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   608
    User::LeaveIfError(lexer.Val(timeValue));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   609
    intermediateDateTime.SetSecond(timeValue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   610
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   611
    // Finally, convert the TDateTime to a TTime.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   612
    aExifDateTime = intermediateDateTime;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   613
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   614
    // Read orientation
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   615
    TUint16 exifOrientation;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   616
#ifdef USE_EXIF_DECODER    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   617
    if (reader.GetOrientation(exifOrientation) == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   618
#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   619
    if (exifReader->GetOrientation(exifOrientation) == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   620
#endif        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   621
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   622
        switch (exifOrientation)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   623
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   624
            case 1: case 2:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   625
                aOrientation = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   626
                break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   627
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   628
            case 3: case 4:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   629
                aOrientation = 180;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   630
                break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   631
                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   632
            case 5: case 8:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   633
                aOrientation = 90;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   634
                break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   635
                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   636
            case 6: case 7:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   637
                aOrientation = 270;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   638
                break;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   639
                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   640
            default:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   641
                DP0_IMAGIC(_L("CIEEngineUtils::GetExifDateTimeAndOrientationL: invalid orientation"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   642
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   643
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   644
        DP1_IMAGIC(_L("CIEEngineUtils::GetExifDateTimeAndOrientationL: %d"), aOrientation);        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   645
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   646
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   647
#ifdef USE_EXIF_DECODER
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   648
    CleanupStack::PopAndDestroy(exifDateTime);    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   649
    CleanupStack::PopAndDestroy(jpegDecoder);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   650
#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   651
    CleanupStack::PopAndDestroy(exifReader);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   652
    CleanupStack::PopAndDestroy(exifData);    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   653
#endif    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   654
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   655
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   656
EXPORT_C TUid CIEEngineUtils::GetImageDecoderUid()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   657
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   658
    CImplementationInformationType* type;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   659
    TInt error;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   660
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   661
    TUid uid = TUid::Uid(KJpegDecIVAUidValue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   662
    TRAP(error, type = CImageDecoder::GetImplementationInformationL(uid));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   663
    if (error == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   664
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   665
        DP0_IMAGIC(_L("CIEEngineUtils::GetImageDecoderUid: IVA decoder found"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   666
        return uid;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   667
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   668
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   669
    uid = TUid::Uid(KJpegOptUidValue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   670
    TRAP(error, type = CImageDecoder::GetImplementationInformationL(uid));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   671
    if (error == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   672
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   673
        DP0_IMAGIC(_L("CIEEngineUtils::GetImageDecoderUid: Emuzed decoder found"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   674
        return uid;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   675
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   676
   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   677
    /*CExtJpegDecoder* extDecoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   678
    TRAP(error, extDecoder = CImageDecoder::DataNewL(CExtJpegDecoder::EHwImplementation));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   679
    if (error == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   680
        return extDecoder->ImplementationUid();*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   681
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   682
    /*TRAP(error, type = CImageDecoder::GetImplementationInformationL(CExtJpegDecoder::ESwImplementation));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   683
    if (error == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   684
        return type->ImplementationUid();*/ 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   685
  
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   686
    DP0_IMAGIC(_L("CIEEngineUtils::GetImageDecoderUid: no specified decoder found"));    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   687
    return KNullUid;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   688
    }