diff -r 235a7fc86938 -r 82749d516180 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 Feb 19 23:07:36 2010 +0200 @@ -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