imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoderv2.cpp
--- a/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoderv2.cpp Tue Feb 02 00:23:15 2010 +0200
+++ b/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoderv2.cpp Fri Mar 19 09:35:30 2010 +0200
@@ -19,9 +19,9 @@
//INCLUDE FILES
#include <e32base.h>
#include <imageconversion.h>
-#include <exifread.h>
+#include <ExifRead.h>
-#include <iclextjpegapi.h>
+#include <IclExtJpegApi.h>
#include "thumbnailimagedecoderv2.h"
#include "thumbnaillog.h"
#include "thumbnailpanic.h"
@@ -155,28 +155,34 @@
iDecoder = NULL;
CImageDecoder::TOptions options = ( CImageDecoder::TOptions )(
- CImageDecoder::EOptionNoDither | CImageDecoder::EPreferFastDecode );
+ CImageDecoder::EOptionNoDither | CImageDecoder::EPreferFastDecode | CImageDecoder::EOptionAlwaysThread );
TRAPD( decErr, iDecoder = CExtJpegDecoder::DataNewL(
CExtJpegDecoder::EHwImplementation, iFs, *iBuffer, options ));
if ( decErr != KErrNone )
{
+ TN_DEBUG2( "CThumbnailImageDecoderv2::CreateDecoderL() - HW CExtJpegDecoder failed = %d", decErr );
TRAP( decErr, iDecoder = CExtJpegDecoder::DataNewL(
CExtJpegDecoder::ESwImplementation, iFs, *iBuffer, options ));
if ( decErr != KErrNone )
{
+ TN_DEBUG2( "CThumbnailImageDecoderv2::CreateDecoderL() - SW CExtJpegDecoder failed %d", decErr);
+ LeaveIfCorruptL( decErr );
+
TRAP( decErr, iDecoder = CImageDecoder::DataNewL( iFs, *iBuffer, KJpegMime(), options ) );
if ( decErr != KErrNone )
- {
+ {
+ TN_DEBUG2( "CThumbnailImageDecoderv2::CreateDecoderL() - CImageDecoder failed %d", decErr);
+ LeaveIfCorruptL( decErr );
+
// don't force any mime type
TRAPD( decErr, iDecoder = CImageDecoder::DataNewL( iFs, *iBuffer, options ) );
if ( decErr != KErrNone )
{
- TN_DEBUG1( "CThumbnailImageDecoderv2::CreateDecoderL() - error" );
-
+ TN_DEBUG2( "CThumbnailImageDecoderv2::CImageDecoder() - CImageDecoder no mime error %d", decErr );
User::Leave( decErr );
}
}
@@ -196,4 +202,18 @@
TN_DEBUG1( "CThumbnailImageDecoderv2::CreateDecoderL() end" );
}
+// -----------------------------------------------------------------------------
+// CThumbnailImageDecoderv2::LeaveIfCorruptL()
+// Leave if image is corrupted
+// -----------------------------------------------------------------------------
+//
+void CThumbnailImageDecoderv2::LeaveIfCorruptL(const TInt aError )
+ {
+ //no sense to try other codecs if image is corrupted
+ if( aError == KErrCorrupt || aError == KErrUnderflow)
+ {
+ User::Leave( aError );
+ }
+ }
+
//End of file