diff -r e1e28b0273b0 -r 93fff7023be8 IEBgps/src/IEImageDecoder.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IEBgps/src/IEImageDecoder.cpp Fri Oct 15 10:18:29 2010 +0900 @@ -0,0 +1,228 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: Juha Kauppinen, Mika Hokkanen +* +* Description: Photo Browser +* +*/ + +// Include files +#include "IEImageDecoder.h" + +// ========================== MEMBER FUNCTIONS ============================= // + +CIEImageDecoder* CIEImageDecoder::NewL(RFs& aFileServer, MDecodingObserver& aObserver) +{ + CIEImageDecoder* self = new (ELeave) CIEImageDecoder(aFileServer, aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; +} + +CIEImageDecoder::~CIEImageDecoder() +{ + if(iImageDecoder) + { + delete iImageDecoder; + iImageDecoder = NULL; + } + + if(iExtImageDecoder) + { + delete iExtImageDecoder; + iExtImageDecoder = NULL; + } + + if(iVisualFrame) + { + delete iVisualFrame; + iVisualFrame = NULL; + } +} + +//EPriorityIdle, EPriorityLow, EPriorityStandard, EPriorityUserInput, EPriorityHigh +CIEImageDecoder::CIEImageDecoder(RFs& aFileServer, MDecodingObserver& aObserver) +: CActive(EPriorityStandard), iFileServer(aFileServer), iObserver(aObserver), iSrcPtr(NULL, 0, 0) +{ +} + +void CIEImageDecoder::ConstructL() +{ + CActiveScheduler::Add(this); + + iDecoderBusy = EFalse; + iDecode2Yuv = EFalse; + iDecode2Bitmap = EFalse; + + iNumOfBitmaps = 0; +} + +void CIEImageDecoder::RunL() +{ +/* + TPtr8 ptr = iVisualFrame->DataPtrL(); + TInt dataSize = ptr.Size(); + TUint8* bufU = (TUint8*) ptr.Ptr(); +*/ + if(iDecode2Yuv) + { + iDecode2Yuv = EFalse; + + if(iExtImageDecoder) + { + delete iExtImageDecoder; + iExtImageDecoder = NULL; + } + + //iObserver.YuvImageReady(iStatus.Int()); + } + + if(iDecode2Bitmap) + { + iDecode2Bitmap = EFalse; + + if(iImageDecoder) + { + delete iImageDecoder; + iImageDecoder = NULL; + } + + iObserver.BitmapReady(iStatus.Int()); + } + + iDecoderBusy = EFalse; +} + +void CIEImageDecoder::DoCancel() +{ + +} + +void CIEImageDecoder::GetImageSizeL(const TFileName aFileName, TSize& aSize) +{ + if(iImageDecoder) + { + delete iImageDecoder; + iImageDecoder = NULL; + } + + iImageDecoder = CImageDecoder::FileNewL(iFileServer, aFileName); + TFrameInfo frameInfo = iImageDecoder->FrameInfo(); + + aSize.iWidth = frameInfo.iOverallSizeInPixels.iWidth; + aSize.iHeight = frameInfo.iOverallSizeInPixels.iHeight; + + delete iImageDecoder; + iImageDecoder = NULL; +} + +void CIEImageDecoder::ConvertJpeg2YuvL(const TDesC& aSourceFile, + HBufC8& aBuffer) +{ + TInt fileSize = 0; + TInt blocks = 0; + + iDecoderBusy = ETrue; + iDecode2Yuv = ETrue; + + if(iExtImageDecoder) + { + delete iExtImageDecoder; + iExtImageDecoder = NULL; + } + + iExtImageDecoder = CExtJpegDecoder::FileNewL(iFileServer, aSourceFile); + + TFrameInfo frameInfo = iExtImageDecoder->FrameInfo(); + + TInt width = frameInfo.iOverallSizeInPixels.iWidth; + TInt height = frameInfo.iOverallSizeInPixels.iHeight; + + /*if(width%2 != 0) + width++; + if(height%2 != 0) + height++;*/ + + TPtr8 bufPtr = aBuffer.Des(); + + iBufU = (TUint8*)bufPtr.Ptr(); + + if(iVisualFrame) + { + delete iVisualFrame; + iVisualFrame = NULL; + } + + iVisualFrame = CVisualFrame::NewL(bufPtr, + TSize(width, height), + CVisualFrame::EFormatYUV420Planar); + + + iExtImageDecoder->ConvertL(&iStatus, iVisualFrame, blocks); + + if(!IsActive()) + SetActive(); + +} + + +void CIEImageDecoder::ConvertJpeg2BitmapL(CFbsBitmap& aDestBitmap, TDesC8& aSourceData) +{ + TInt frameNumber = 0; + + iDecoderBusy = ETrue; + iDecode2Bitmap = ETrue; + + TInt dataSize = aSourceData.Size(); + + iSrcPtr.Set((TUint8*)aSourceData.Ptr(), aSourceData.Size(), aSourceData.Size()); + + if(iImageDecoder) + { + delete iImageDecoder; + iImageDecoder = NULL; + } + + iImageDecoder = CImageDecoder::DataNewL(iFileServer, iSrcPtr); + + iImageDecoder->Convert(&iStatus, aDestBitmap, frameNumber); + + iNumOfBitmaps++; + + if(!IsActive()) + SetActive(); +} + + +TPtr8 CIEImageDecoder::GetVisualFrame() +{ + return iVisualFrame->DataPtrL(); +} + +void CIEImageDecoder::CancelDecoding() +{ + if(iDecoderBusy) + { + if(iImageDecoder) + iImageDecoder->Cancel(); + + if(iExtImageDecoder) + iExtImageDecoder->Cancel(); + } + + if(IsActive()) + Cancel(); +} + + +// EOF