void CImageRescaler::RunL() { switch( iState ) { case EStartRescale: { // Start rescaling process DecodeL(); break; } case EDecoding: { if(iStatus == KErrNone) { ScaleL(); } else if(iStatus == KErrUnderflow) { iImageDecoder->ContinueConvert( &iStatus ); SetActive(); } else { // Unknown error iErr = iStatus.Int(); CompleteRerescale(); } break; } case EEncoding: { iErr = iStatus.Int(); CompleteRerescale(); break; } case EScaling: { EncodeL(); break; } default: { iErr = KErrGeneral; CompleteRerescale(); break; } } }
// ----------------------------------------------------------------------------- // Implementation of CActive // ----------------------------------------------------------------------------- // void CMPXImageUtil::RunL() { TInt deleteDecoder( ETrue ); switch( iState ) { case EDecoding: { if( iStatus == KErrNone ) { if ( !iScaleRquired ) { iState = EIdle; iObserver.ExtractAlbumArtCompleted(iBitmap,KErrNone); iBitmap = NULL; } else { deleteDecoder = EFalse; ScaleL(); } break; } else { // some error if ( iBitmap ) { delete iBitmap; iBitmap = NULL; } iState = EIdle; iObserver.ExtractAlbumArtCompleted(iBitmap, iStatus.Int()); break; } } case EScaling: { iState = EIdle; iObserver.ExtractAlbumArtCompleted(iBitmap,iStatus.Int()); iBitmap = NULL; } break; default: // some error { iState = EIdle; if ( iBitmap ) { delete iBitmap; iBitmap = NULL; } iObserver.ExtractAlbumArtCompleted(iBitmap,iStatus.Int()); break; } } // It's safe to destroy iImageData here delete iImageData; iImageData = NULL; if ( deleteDecoder ) { delete iImageDecoder; iImageDecoder = NULL; } }