--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/IEBgps/src/IEImageEncoder.cpp Fri Oct 15 10:18:29 2010 +0900
@@ -0,0 +1,187 @@
+/*
+* 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 "IEImageEncoder.h"
+
+// ========================== MEMBER FUNCTIONS ============================= //
+
+CIEImageEncoder* CIEImageEncoder::NewL(RFs& aFileServer, MEncodingObserver& aObserver)
+{
+ CIEImageEncoder* self = new (ELeave) CIEImageEncoder(aFileServer, aObserver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+}
+
+CIEImageEncoder::~CIEImageEncoder()
+{
+ if(iFrameImageData)
+ {
+ delete iFrameImageData;
+ iFrameImageData = NULL;
+ }
+
+ if(iImageEncoder)
+ {
+ delete iImageEncoder;
+ iImageEncoder = NULL;
+ }
+
+ if(iExtImageEncoder)
+ {
+ delete iExtImageEncoder;
+ iExtImageEncoder = NULL;
+ }
+
+ if(iVisualFrame)
+ {
+ delete iVisualFrame;
+ iVisualFrame = NULL;
+ }
+}
+
+
+CIEImageEncoder::CIEImageEncoder(RFs& aFileServer, MEncodingObserver& aObserver)
+: CActive(EPriorityStandard), iFileServer(aFileServer), iObserver(aObserver)
+{
+}
+
+void CIEImageEncoder::ConstructL()
+{
+ iEncoderBusy = EFalse;
+
+ CActiveScheduler::Add(this);
+}
+
+void CIEImageEncoder::RunL()
+{
+ TInt error = iStatus.Int();
+
+ //iObserver.JpegImageReady(iStatus.Int());
+ iEncoderBusy = EFalse;
+}
+
+void CIEImageEncoder::DoCancel()
+{
+
+}
+
+void CIEImageEncoder::ConvertYuv2JpegL(HBufC8*& aDestBuffer,
+ HBufC8& aSourceBuffer,
+ const TSize aSize)
+{
+ TInt blocks = 0;
+
+ iEncoderBusy = ETrue;
+
+ if(iExtImageEncoder)
+ {
+ delete iExtImageEncoder;
+ iExtImageEncoder = NULL;
+
+ }
+
+ iExtImageEncoder = CExtJpegEncoder::DataNewL(aDestBuffer, _L8("image/jpeg"));
+
+ TPtr8 ptrSrc = aSourceBuffer.Des();
+ TInt bufSize = aSourceBuffer.Size();
+
+ if(iVisualFrame)
+ {
+ delete iVisualFrame;
+ iVisualFrame = NULL;
+ }
+
+ iVisualFrame = CVisualFrame::NewL(ptrSrc, aSize, CVisualFrame::EFormatYUV420Planar);
+
+ SetJpegImageDataL();
+ iExtImageEncoder->ConvertL(&iStatus, iVisualFrame, blocks, iFrameImageData);
+
+ if(!IsActive())
+ SetActive();
+}
+
+void CIEImageEncoder::ConvertYuv2JpegL(TDesC& aFileName,
+ HBufC8& aSourceBuffer,
+ const TSize aSize)
+{
+ TInt blocks = 0;
+
+ iEncoderBusy = ETrue;
+
+ if(iExtImageEncoder)
+ {
+ delete iExtImageEncoder;
+ iExtImageEncoder = NULL;
+
+ }
+
+ iExtImageEncoder = CExtJpegEncoder::FileNewL(iFileServer, aFileName, _L8("image/jpeg"));
+
+ TPtr8 ptrSrc = aSourceBuffer.Des();
+ TInt bufSize = aSourceBuffer.Size();
+
+ if(iVisualFrame)
+ {
+ delete iVisualFrame;
+ iVisualFrame = NULL;
+ }
+
+ iVisualFrame = CVisualFrame::NewL(ptrSrc, aSize, CVisualFrame::EFormatYUV420Planar);
+
+ SetJpegImageDataL();
+ iExtImageEncoder->ConvertL(&iStatus, iVisualFrame, blocks, iFrameImageData);
+
+ if(!IsActive())
+ SetActive();
+}
+
+void CIEImageEncoder::SetJpegImageDataL()
+{
+ TJpegImageData* jpegImageData;
+ jpegImageData = new (ELeave) TJpegImageData;
+ jpegImageData->iSampleScheme = TJpegImageData::EColor420;
+ jpegImageData->iQualityFactor = 90;
+
+ if(iFrameImageData)
+ {
+ delete iFrameImageData;
+ iFrameImageData = NULL;
+ }
+
+ iFrameImageData = CFrameImageData::NewL();
+ // Ownership of jpegImageData lies with CFrameImageData
+ User::LeaveIfError(iFrameImageData->AppendImageData(jpegImageData));
+}
+
+void CIEImageEncoder::CancelEncoding()
+{
+ if(iEncoderBusy)
+ {
+ if(iImageEncoder)
+ iImageEncoder->Cancel();
+ if(iExtImageEncoder)
+ iExtImageEncoder->Cancel();
+ }
+
+ if(IsActive())
+ Cancel();
+}
+
+// EOF