diff -r 235a7fc86938 -r 82749d516180 imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailimagedecoderv3.cpp --- a/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailimagedecoderv3.cpp Tue Feb 02 00:23:15 2010 +0200 +++ b/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailimagedecoderv3.cpp Fri Feb 19 23:07:36 2010 +0200 @@ -198,18 +198,25 @@ 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( "CThumbnailImageDecoderv3::CreateDecoderL() - HW CExtJpegDecoder failed %d", decErr); + + LeaveIfCorruptL( decErr ); + TRAP( decErr, iDecoder = CExtJpegDecoder::DataNewL( CExtJpegDecoder::ESwImplementation, iFs, *iBuffer, options )); if ( decErr != KErrNone ) - { + { + TN_DEBUG2( "CThumbnailImageDecoderv3::CreateDecoderL() - SW CExtJpegDecoder failed %d", decErr); + + LeaveIfCorruptL( decErr ); // don't force any mime type TRAPD( decErr, iDecoder = CImageDecoder::DataNewL( iFs, *iBuffer, options ) ); if ( decErr != KErrNone ) @@ -217,7 +224,7 @@ delete iBuffer; iBuffer = NULL; - TN_DEBUG1( "CThumbnailImageDecoderv3::CreateDecoderL() - error" ); + TN_DEBUG2( "CThumbnailImageDecoderv3::CreateDecoderL() - CImageDecoder error %d", decErr ); User::Leave( decErr ); } @@ -246,4 +253,18 @@ return iOriginalSize; } +// ----------------------------------------------------------------------------- +// CThumbnailImageDecoder3::LeaveIfCorruptL() +// Leave is image is corrupted +// ----------------------------------------------------------------------------- +// +void CThumbnailImageDecoderv3::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