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 ) |