diff -r a60acebbbd9d -r 78ad99c24f08 photosgallery/viewframework/texturemanager/src/glxbitmapdecoderwrapper.cpp --- a/photosgallery/viewframework/texturemanager/src/glxbitmapdecoderwrapper.cpp Tue May 11 16:13:40 2010 +0300 +++ b/photosgallery/viewframework/texturemanager/src/glxbitmapdecoderwrapper.cpp Tue May 25 12:42:31 2010 +0300 @@ -32,6 +32,7 @@ namespace { const TInt KGlxDecodingThreshold = 3000000; +const TInt KGlxDecodingThresholdDimension = 2000; // Photos low_ram_threshold [8.637 MB] as in oomconfig.xml @@ -113,19 +114,23 @@ delete iImageDecoder; iImageDecoder = NULL; } + + CImageDecoder::TOptions options = (CImageDecoder::TOptions) + ( CImageDecoder::EOptionNoDither | CImageDecoder::EOptionAlwaysThread ); + // Use extended JPEG decoder TRAPD( err, iImageDecoder = CExtJpegDecoder::FileNewL( - CExtJpegDecoder::EHwImplementation, iFs, aSourceFileName, CImageDecoder::EOptionNone ) ); + CExtJpegDecoder::EHwImplementation, iFs, aSourceFileName, options ) ); if ( KErrNone != err ) { GLX_LOG_INFO( "DoDecodeImageL:: ESwImplementation" ); TRAP(err,iImageDecoder = CExtJpegDecoder::FileNewL( - CExtJpegDecoder::ESwImplementation, iFs, aSourceFileName, CImageDecoder::EOptionNone ) ); + CExtJpegDecoder::ESwImplementation, iFs, aSourceFileName, options ) ); if ( KErrNone != err ) { GLX_LOG_INFO( "DoDecodeImageL:: CImageDecoder" ); // Not a JPEG - use standard decoder - iImageDecoder = CImageDecoder::FileNewL( iFs, aSourceFileName, CImageDecoder::EOptionNone ); + iImageDecoder = CImageDecoder::FileNewL( iFs, aSourceFileName, options ); isExtDecoderUsed = EFalse; } } @@ -182,17 +187,28 @@ { TRACER("CGlxBitmapDecoderWrapper:: DecodeImageL "); TReal32 mFactor = 1; + TReal32 mFactor1 = 1; + TReal32 mFactor2 = 1; //Set Size according to level and state TReal32 width = iOriginalSize.iWidth; TReal32 height = iOriginalSize.iHeight; GLX_LOG_INFO1("DecodeImageL:width=%f", width); GLX_LOG_INFO1("DecodeImageL:height=%f",height); - if ( KGlxDecodingThreshold < (width * height)) { - mFactor = TReal32(KGlxDecodingThreshold) / (width*height); + mFactor1 = TReal32(KGlxDecodingThreshold) / (width*height); + GLX_LOG_INFO1("mFactor1 =%f",mFactor1); } + + if ( KGlxDecodingThresholdDimension < width || KGlxDecodingThresholdDimension < height) + { + mFactor2 = TReal32(KGlxDecodingThresholdDimension) / Max(width, height); + GLX_LOG_INFO1("mFactor2 =%f",mFactor2); + } + + mFactor = Min(mFactor1 , mFactor2); + GLX_LOG_INFO1("Final mFactor =%f",mFactor); // create the destination bitmap if(!iBitmap)