harvester/common/src/harvesterexifutil.cpp
branchRCL_3
changeset 18 63c982fb92f2
parent 9 82c0024438c8
child 19 b73252188534
equal deleted inserted replaced
16:9422ed56ee45 18:63c982fb92f2
    21 #include "mdeobjectdef.h"
    21 #include "mdeobjectdef.h"
    22 #include "mdeconstants.h"
    22 #include "mdeconstants.h"
    23 #include "mdeproperty.h"
    23 #include "mdeproperty.h"
    24 #include "tz.h"
    24 #include "tz.h"
    25 #include <ExifModify.h>
    25 #include <ExifModify.h>
       
    26 #include "OstTraceDefinitions.h"
       
    27 
       
    28 #ifdef OST_TRACE_COMPILER_IN_USE
       
    29 #include "harvesterexifutilTraces.h"
       
    30 #endif
    26 
    31 
    27 
    32 
    28 
    33 
    29 using namespace MdeConstants;
    34 using namespace MdeConstants;
    30 
    35 
   135 
   140 
   136 
   141 
   137 EXPORT_C TBool CHarvesterExifUtil::IsValidExifData(TPtr8 aPtr)
   142 EXPORT_C TBool CHarvesterExifUtil::IsValidExifData(TPtr8 aPtr)
   138 	{
   143 	{
   139 	WRITELOG( "CHarvesterExifUtil::IsValidExifData start" );
   144 	WRITELOG( "CHarvesterExifUtil::IsValidExifData start" );
       
   145 	OstTrace0( TRACE_NORMAL, CHARVESTEREXIFUTIL_ISVALIDEXIFDATA, "CHarvesterExifUtil::IsValidExifData start" );	
   140 	
   146 	
   141 	CExifRead* reader = NULL;
   147 	CExifRead* reader = NULL;
   142 	
   148 	
   143 	TRAPD(err, reader = CExifRead::NewL(aPtr, CExifRead::ENoJpeg | CExifRead::ENoTagChecking));
   149 	TRAPD(err, reader = CExifRead::NewL(aPtr, CExifRead::ENoJpeg | CExifRead::ENoTagChecking));
   144 	if (err != KErrNone || !reader )
   150 	if (err != KErrNone || !reader )
   145 		{
   151 		{
   146 		WRITELOG1( "CHarvesterExifUtil::IsValidExifData - error code: %d", err );
   152 		WRITELOG1( "CHarvesterExifUtil::IsValidExifData - error code: %d", err );
   147 	
   153 		OstTrace1( TRACE_NORMAL, DUP1_CHARVESTEREXIFUTIL_ISVALIDEXIFDATA, "CHarvesterExifUtil::IsValidExifData -error code:%d", err );
       
   154 
   148 		return EFalse;
   155 		return EFalse;
   149 		}
   156 		}
   150 	
   157 	
   151 	delete reader;
   158 	delete reader;
   152 	
   159 	
   153 	WRITELOG( "CHarvesterExifUtil::IsValidExifData end" );	
   160 	WRITELOG( "CHarvesterExifUtil::IsValidExifData end" );	
       
   161 	OstTrace0( TRACE_NORMAL, DUP2_CHARVESTEREXIFUTIL_ISVALIDEXIFDATA, "CHarvesterExifUtil::IsValidExifData end" );
   154 	
   162 	
   155 	return ETrue;
   163 	return ETrue;
   156 	}
   164 	}
   157 
   165 
   158 void CHarvesterExifUtil::StripNulls( HBufC& aString )
   166 void CHarvesterExifUtil::StripNulls( HBufC& aString )
   181 	}
   189 	}
   182 
   190 
   183 EXPORT_C TInt CHarvesterExifUtil::ReadExifDataL( CHarvestData& aHd, CFileData& aFileData )
   191 EXPORT_C TInt CHarvesterExifUtil::ReadExifDataL( CHarvestData& aHd, CFileData& aFileData )
   184     {
   192     {
   185     WRITELOG( "CHarvesterExifUtil::ReadExifDataL()" );
   193     WRITELOG( "CHarvesterExifUtil::ReadExifDataL()" );
       
   194     OstTrace0( TRACE_NORMAL, CHARVESTEREXIFUTIL_READEXIFDATAL, "CHarvesterExifUtil::ReadExifDataL" );
       
   195     
   186 
   196 
   187     CExifRead* reader = CExifRead::NewL(
   197     CExifRead* reader = CExifRead::NewL(
   188     		aFileData.iImageData->Des(), CExifRead::ENoJpeg | CExifRead::ENoTagChecking);
   198     		aFileData.iImageData->Des(), CExifRead::ENoJpeg | CExifRead::ENoTagChecking);
   189     CleanupStack::PushL(reader);
   199     CleanupStack::PushL(reader);
   190     
   200     
   225     
   235     
   226     // Getting aFileData.iModified date
   236     // Getting aFileData.iModified date
   227     if ( reader->TagExists(KIdDateTime, EIfd0) )
   237     if ( reader->TagExists(KIdDateTime, EIfd0) )
   228         {
   238         {
   229         WRITELOG( "CHarvesterExifUtil::ReadExifDataL() - getting last aFileData.iModified date (exif)" );
   239         WRITELOG( "CHarvesterExifUtil::ReadExifDataL() - getting last aFileData.iModified date (exif)" );
       
   240         OstTrace0( TRACE_NORMAL, DUP1_CHARVESTEREXIFUTIL_READEXIFDATAL, "CHarvesterExifUtil::ReadExifDataL - getting last aFileData.iModified date (exif)" );
       
   241         
   230         aHd.iDateModified8 = reader->GetDateTimeL();
   242         aHd.iDateModified8 = reader->GetDateTimeL();
   231         }
   243         }
   232     
   244     
   233     // Getting original date
   245     // Getting original date
   234     if ( reader->TagExists(KIdDateTimeOriginal, EIfdExif) )
   246     if ( reader->TagExists(KIdDateTimeOriginal, EIfdExif) )
   235         {
   247         {
   236         WRITELOG( "CHarvesterExifUtil::ReadExifDataL() - getting original date (exif)" );
   248         WRITELOG( "CHarvesterExifUtil::ReadExifDataL() - getting original date (exif)" );
       
   249         OstTrace0( TRACE_NORMAL, DUP2_CHARVESTEREXIFUTIL_READEXIFDATAL, "CHarvesterExifUtil::ReadExifDataL - getting original date (exif)" );
       
   250         
   237         aHd.iDateOriginal8 = reader->GetDateTimeOriginalL();
   251         aHd.iDateOriginal8 = reader->GetDateTimeOriginalL();
   238         }
   252         }
   239         
   253         
   240     // Getting date & time digitized
   254     // Getting date & time digitized
   241     if ( reader->TagExists(KIdDateTimeDigitized, EIfdExif) )
   255     if ( reader->TagExists(KIdDateTimeDigitized, EIfdExif) )
   242         {
   256         {
   243         WRITELOG( "CHarvesterExifUtil::ReadExifDataL() - getting digitized date (exif)" );
   257         WRITELOG( "CHarvesterExifUtil::ReadExifDataL() - getting digitized date (exif)" );
       
   258         OstTrace0( TRACE_NORMAL, DUP3_CHARVESTEREXIFUTIL_READEXIFDATAL, "CHarvesterExifUtil::ReadExifDataL - getting digitized date (exif)" );
       
   259         
   244         aHd.iDateDigitized8 = reader->GetDateTimeDigitizedL();
   260         aHd.iDateDigitized8 = reader->GetDateTimeDigitizedL();
   245         }            
   261         }            
   246     
   262     
   247     //Getting camera maker
   263     //Getting camera maker
   248     aHd.iMake = ReadExifTagL( *reader, EIfd0, KIdMake );
   264     aHd.iMake = ReadExifTagL( *reader, EIfd0, KIdMake );
   334         
   350         
   335         aHd.iSamplesPerPixel = MdsUtils::ToUInt16L( CONST_CAST( TUint8*, tagData.Ptr() ) );
   351         aHd.iSamplesPerPixel = MdsUtils::ToUInt16L( CONST_CAST( TUint8*, tagData.Ptr() ) );
   336         aHd.iStoreSamplesPerPixel = ETrue;
   352         aHd.iStoreSamplesPerPixel = ETrue;
   337         
   353         
   338         WRITELOG1( "CHarvesterExifUtil::ReadExifDataL() - samples per pixel: %d", aHd.iSamplesPerPixel );
   354         WRITELOG1( "CHarvesterExifUtil::ReadExifDataL() - samples per pixel: %d", aHd.iSamplesPerPixel );
       
   355         OstTrace1( TRACE_NORMAL, DUP4_CHARVESTEREXIFUTIL_READEXIFDATAL, "CHarvesterExifUtil::ReadExifDataL - samples per pixel: %d", aHd.iSamplesPerPixel );
       
   356         
   339         }
   357         }
   340     
   358     
   341     //Getting ISO speed rating.
   359     //Getting ISO speed rating.
   342     if ( reader->TagExists(KIdISOSpeedRatings, EIfdExif) )
   360     if ( reader->TagExists(KIdISOSpeedRatings, EIfdExif) )
   343         {
   361         {
   413 //
   431 //
   414 EXPORT_C TTime CHarvesterExifUtil::ConvertExifDateTimeToSymbianTimeL(
   432 EXPORT_C TTime CHarvesterExifUtil::ConvertExifDateTimeToSymbianTimeL(
   415 		const TDesC8& aDateTime )
   433 		const TDesC8& aDateTime )
   416     {
   434     {
   417     WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL()" );
   435     WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL()" );
       
   436     OstTrace0( TRACE_NORMAL, CHARVESTEREXIFUTIL_CONVERTEXIFDATETIMETOSYMBIANTIMEL, "CHarvesterExifUtil::ConvertExifDateTimeToSymbianTimeL" );    
   418     
   437     
   419     TDateTime datetime( 0, EJanuary, 0, 0, 0, 0, 0 );
   438     TDateTime datetime( 0, EJanuary, 0, 0, 0, 0, 0 );
   420     TBuf<4> text;
   439     TBuf<4> text;
   421     
   440     
   422     // Year
   441     // Year
   425     TInt number = 0;
   444     TInt number = 0;
   426     TInt error = lex.Val( number );
   445     TInt error = lex.Val( number );
   427     if ( error != KErrNone )
   446     if ( error != KErrNone )
   428         {
   447         {
   429         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get year" );
   448         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get year" );
       
   449         OstTrace0( TRACE_NORMAL, DUP1_CHARVESTEREXIFUTIL_CONVERTEXIFDATETIMETOSYMBIANTIMEL, "CHarvesterExifUtil::ConvertExifDateTimeToSymbianTimeL - couldn't get year" );
       
   450         
   430         User::Leave( error );
   451         User::Leave( error );
   431         }
   452         }
   432     datetime.SetYear( number );
   453     datetime.SetYear( number );
   433     
   454     
   434     // Month
   455     // Month
   436     lex.Assign( textPart2 );
   457     lex.Assign( textPart2 );
   437     error = lex.Val( number );
   458     error = lex.Val( number );
   438     if ( error != KErrNone )
   459     if ( error != KErrNone )
   439         {
   460         {
   440         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get month" );
   461         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get month" );
       
   462         OstTrace0( TRACE_NORMAL, DUP2_CHARVESTEREXIFUTIL_CONVERTEXIFDATETIMETOSYMBIANTIMEL, "CHarvesterExifUtil::ConvertExifDateTimeToSymbianTimeL - couldn't get month" );
       
   463         
   441         User::Leave( error );
   464         User::Leave( error );
   442         }        
   465         }        
   443     number--;
   466     number--;
   444     TMonth month = (TMonth) number;
   467     TMonth month = (TMonth) number;
   445     datetime.SetMonth( month );
   468     datetime.SetMonth( month );
   449     lex.Assign( textPart3 );
   472     lex.Assign( textPart3 );
   450     error = lex.Val( number );
   473     error = lex.Val( number );
   451     if ( error != KErrNone )
   474     if ( error != KErrNone )
   452         {
   475         {
   453         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get date" );
   476         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get date" );
       
   477         OstTrace0( TRACE_NORMAL, DUP3_CHARVESTEREXIFUTIL_CONVERTEXIFDATETIMETOSYMBIANTIMEL, "CHarvesterExifUtil::ConvertExifDateTimeToSymbianTimeL - couldn't get date" );
       
   478         
   454         User::Leave( error );
   479         User::Leave( error );
   455         }
   480         }
   456     datetime.SetDay( number - 1 );
   481     datetime.SetDay( number - 1 );
   457     
   482     
   458     // Hours
   483     // Hours
   460     lex.Assign( textPart4 );
   485     lex.Assign( textPart4 );
   461     error = lex.Val( number );
   486     error = lex.Val( number );
   462     if ( error != KErrNone )
   487     if ( error != KErrNone )
   463         {
   488         {
   464         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get hours" );
   489         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get hours" );
       
   490         OstTrace0( TRACE_NORMAL, DUP4_CHARVESTEREXIFUTIL_CONVERTEXIFDATETIMETOSYMBIANTIMEL, "CHarvesterExifUtil::ConvertExifDateTimeToSymbianTimeL - couldn't get hours" );
       
   491         
   465         User::Leave( error );
   492         User::Leave( error );
   466         }    
   493         }    
   467     datetime.SetHour( number );
   494     datetime.SetHour( number );
   468     
   495     
   469     // Minutes
   496     // Minutes
   471     lex.Assign( textPart5 );
   498     lex.Assign( textPart5 );
   472     error = lex.Val( number );
   499     error = lex.Val( number );
   473     if ( error != KErrNone )
   500     if ( error != KErrNone )
   474         {
   501         {
   475         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get minutes" );
   502         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get minutes" );
       
   503         OstTrace0( TRACE_NORMAL, DUP5_CHARVESTEREXIFUTIL_CONVERTEXIFDATETIMETOSYMBIANTIMEL, "CHarvesterExifUtil::ConvertExifDateTimeToSymbianTimeL - couldn't get minutes" );
       
   504         
   476         User::Leave( error );
   505         User::Leave( error );
   477         }
   506         }
   478     datetime.SetMinute( number );
   507     datetime.SetMinute( number );
   479     
   508     
   480     // Seconds
   509     // Seconds
   482     lex.Assign( textPart6 );
   511     lex.Assign( textPart6 );
   483     error = lex.Val( number );
   512     error = lex.Val( number );
   484     if ( error != KErrNone )
   513     if ( error != KErrNone )
   485         {
   514         {
   486         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get seconds" );
   515         WRITELOG( "CHarvesterImagePluginAO::ConvertExifDateTimeToSymbianTimeL() - couldn't get seconds" );
       
   516         OstTrace0( TRACE_NORMAL, DUP6_CHARVESTEREXIFUTIL_CONVERTEXIFDATETIMETOSYMBIANTIMEL, "CHarvesterExifUtil::ConvertExifDateTimeToSymbianTimeL - couldn't get seconds" );
       
   517         
   487         User::Leave( error );
   518         User::Leave( error );
   488         }
   519         }
   489     datetime.SetSecond( number );
   520     datetime.SetSecond( number );
   490     
   521     
   491     TTime time( datetime );
   522     TTime time( datetime );
  1749         WRITELOG( "CHarvesterExifUtil::ReadGPSLatitudeL() - GPS Latitude found" );
  1780         WRITELOG( "CHarvesterExifUtil::ReadGPSLatitudeL() - GPS Latitude found" );
  1750         
  1781         
  1751         TReal64 latitude = 0.0;
  1782         TReal64 latitude = 0.0;
  1752         const CExifTag* refTag = aReader->GetTagL(
  1783         const CExifTag* refTag = aReader->GetTagL(
  1753                 EIfdGps, KIdGpsLatitudeRef );
  1784                 EIfdGps, KIdGpsLatitudeRef );
  1754         TBuf8<2> latitudeRef = refTag->Data();
  1785         TBuf8<3> latitudeRef = refTag->Data();
  1755         const CExifTag* latitudeTag = aReader->GetTagL(
  1786         const CExifTag* latitudeTag = aReader->GetTagL(
  1756                 EIfdGps, KIdGpsLatitude );
  1787                 EIfdGps, KIdGpsLatitude );
  1757         TBuf8<KCoordinateBufferSize> latitudeBuf = latitudeTag->Data();
  1788         TBuf8<KCoordinateBufferSize> latitudeBuf = latitudeTag->Data();
  1758         MdsUtils::ConvertFromDegreesToDecimalL( latitudeBuf, latitude );
  1789         MdsUtils::ConvertFromDegreesToDecimalL( latitudeBuf, latitude );
  1759         if ( latitudeRef == KSouth )
  1790         if ( latitudeRef == KSouth )
  1782         WRITELOG( "CHarvesterExifUtil::ReadGPSLatitudeL() - GPS Longitude found" );
  1813         WRITELOG( "CHarvesterExifUtil::ReadGPSLatitudeL() - GPS Longitude found" );
  1783     
  1814     
  1784         TReal64 longitude = 0.0;
  1815         TReal64 longitude = 0.0;
  1785         const CExifTag* refTag = aReader->GetTagL(
  1816         const CExifTag* refTag = aReader->GetTagL(
  1786                 EIfdGps, KIdGpsLongitudeRef );
  1817                 EIfdGps, KIdGpsLongitudeRef );
  1787         TBuf8<2> longitudeRef = refTag->Data();
  1818         TBuf8<3> longitudeRef = refTag->Data();
  1788         const CExifTag* longitudeTag = aReader->GetTagL(
  1819         const CExifTag* longitudeTag = aReader->GetTagL(
  1789                 EIfdGps, KIdGpsLongitude );
  1820                 EIfdGps, KIdGpsLongitude );
  1790         TBuf8<KCoordinateBufferSize> longitudeBuf = longitudeTag->Data();
  1821         TBuf8<KCoordinateBufferSize> longitudeBuf = longitudeTag->Data();
  1791         MdsUtils::ConvertFromDegreesToDecimalL( longitudeBuf, longitude );
  1822         MdsUtils::ConvertFromDegreesToDecimalL( longitudeBuf, longitude );
  1792         if ( longitudeRef == KWest )
  1823         if ( longitudeRef == KWest )