diff -r 000000000000 -r 951a5db380a0 videditor/VideoEditorCommon/src/VeiImageConverter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videditor/VideoEditorCommon/src/VeiImageConverter.cpp Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,261 @@ +/* +* Copyright (c) 2010 Ixonos Plc. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "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: +* Ixonos Plc +* +* Description: +* +*/ + + + +// INCLUDE FILES +#include "VeiImageConverter.h" + +#include +#include +#include +#include "VideoEditorCommon.h" +#include "VideoEditorDebugUtils.h" + + + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CVeiImageConverter::CVeiImageConverter::NewL( +// MConverterController* aController ) +// --------------------------------------------------------- +// +EXPORT_C CVeiImageConverter* CVeiImageConverter::NewL( + MConverterController* aController ) + { + CVeiImageConverter* self = + new(ELeave) CVeiImageConverter( aController ); + CleanupStack::PushL( self ); + + self->ConstructL(); + + CleanupStack::Pop( self ); + return self; + } +// --------------------------------------------------------- +// CVeiImageConverter::CVeiImageConverter( +// MConverterController* aController ) +// --------------------------------------------------------- +// +CVeiImageConverter::CVeiImageConverter( + MConverterController* aController ) : + CActive( EPriorityStandard ), iController( aController ) + { + } + +// --------------------------------------------------------- +// CVeiImageConverter::ConstructL() +// EPOC two phased constructor +// --------------------------------------------------------- +// +void CVeiImageConverter::ConstructL() + { + User::LeaveIfError( iFs.Connect() ); + // create the destination bitmap + + iBitmapScaler = CBitmapScaler::NewL(); + + CActiveScheduler::Add( this ); + } + +// Destructor +EXPORT_C CVeiImageConverter::~CVeiImageConverter() + { + LOG(KVideoEditorLogFile, "CVeiImageConverter::~CVeiImageConverter(): in"); + if ( IsActive() ) + { + Cancel(); + } + + delete iImageEncoder; + delete iBitmapScaler; + // CImageDecoder must be deleted before the + iFs.Close(); // related RFs is closed, + delete iBitmap; // otherwise a related thread might panic + + iController = NULL; + + LOG(KVideoEditorLogFile, "CVeiImageConverter::~CVeiImageConverter(): out"); + } + + + +// --------------------------------------------------------- +// CVeiImageConverter::StartToEncodeL( +// TFileName& aFileName, TUid aImageType, TUid aImageSubType ) +// --------------------------------------------------------- +// +EXPORT_C void CVeiImageConverter::StartToEncodeL( + const TDesC& aFileName, const TUid& aImageType, const TUid& aImageSubType ) + { + LOG(KVideoEditorLogFile, "CVeiImageConverter::StartToEncodeL(): In"); + if ( iImageEncoder ) + { + delete iImageEncoder; + iImageEncoder = NULL; + } + + // create the encoder + LOG(KVideoEditorLogFile, "CVeiImageConverter::StartToEncodeL(): 2, own thread started"); + iImageEncoder = CImageEncoder::FileNewL( iFs, aFileName, + CImageEncoder::EOptionAlwaysThread, aImageType, aImageSubType ); + + iState = EEncoding; + iImageEncoder->Convert( &iStatus, *iBitmap ); + + SetActive(); + LOG(KVideoEditorLogFile, "CVeiImageConverter::StartToEncodeL(): Out"); + } +// --------------------------------------------------------- +// CVeiImageConverter::DoCancel() +// --------------------------------------------------------- +// +void CVeiImageConverter::DoCancel() + { + LOG(KVideoEditorLogFile, "CVeiImageConverter::DoCancel(): in"); + if ( iState == EEncoding && iImageEncoder ) + { + iImageEncoder->Cancel(); + } + else if ( iState == EScaling ) + { + iBitmapScaler->Cancel(); + } + LOG(KVideoEditorLogFile, "CVeiImageConverter::DoCancel(): out"); + } +// --------------------------------------------------------- +// CVeiImageConverter::RunL() +// --------------------------------------------------------- +// +void CVeiImageConverter::RunL() + { + LOG(KVideoEditorLogFile, "CVeiImageConverter::RunL: In"); + switch( iState ) + { + case EEncoding: + { + iState = EIdle; + iController->NotifyCompletion( iStatus.Int() ); + break; + } + + default: // some error + { + LOG(KVideoEditorLogFile, "CVeiImageConverter::RunL: Scale completed"); + iState = EIdle; + iController->NotifyCompletion( iStatus.Int() ); + } + } + } + +// --------------------------------------------------------- +// CVeiImageConverter::RunError(TInt aError) +// --------------------------------------------------------- +// +TInt CVeiImageConverter::RunError(TInt aError) + { + LOGFMT(KVideoEditorLogFile, "CVeiImageConverter::RunError(): in, aError:%d", aError); + TInt err; + err = aError; + return err; + } + +// --------------------------------------------------------- +// CVeiImageConverter::GetEncoderImageTypesL( +// RImageTypeDescriptionArray& aImageTypeArray ) +// --------------------------------------------------------- +// +EXPORT_C void CVeiImageConverter::GetEncoderImageTypesL( + RImageTypeDescriptionArray& aImageTypeArray ) + { + CImageEncoder::GetImageTypesL( aImageTypeArray ); + } + +// --------------------------------------------------------- +// CVeiImageConverter::SetBitmap() +// --------------------------------------------------------- +// +EXPORT_C void CVeiImageConverter::SetBitmap( CFbsBitmap* aBitmap ) + { + LOG(KVideoEditorLogFile, "CVeiImageConverter::SetBitmap(): in"); + if (iBitmap) + { + delete iBitmap; + iBitmap = NULL; + } + iBitmap = aBitmap; + LOG(KVideoEditorLogFile, "CVeiImageConverter::SetBitmap(): out"); + } + +// --------------------------------------------------------- +// CVeiImageConverter::GetBitmap() +// --------------------------------------------------------- +// +EXPORT_C CFbsBitmap* CVeiImageConverter::GetBitmap() + { + return iBitmap; + } + +// --------------------------------------------------------- +// CVeiImageConverter::Scale() +// --------------------------------------------------------- +// +EXPORT_C void CVeiImageConverter::ScaleL(CFbsBitmap* aSrcBitmap,CFbsBitmap* aDestBitmap, const TSize& aSize) + { + LOG(KVideoEditorLogFile, "CVeiImageConverter::Scale: in"); + if ( IsActive() ) + { + Cancel(); + } + + if ( iBitmap ) + { + delete iBitmap; + iBitmap = NULL; + } +/* Create new bitmap where scaled bitmap is stored + When scaling is ready, NotifyCompletion() callback and + bitmap address can be asked with GetBitmap function */ + + iBitmap = aDestBitmap; + iBitmap = new (ELeave) CFbsBitmap; + iBitmap->Create( aSize, aSrcBitmap->DisplayMode() ); + + iState = EScaling; + iBitmapScaler->Scale( &iStatus, *aSrcBitmap, *iBitmap, EFalse ); + + SetActive(); + + LOG(KVideoEditorLogFile, "CVeiImageConverter::Scale: out"); + } + +// --------------------------------------------------------- +// CVeiImageConverter::CancelEncoding() +// --------------------------------------------------------- +// +EXPORT_C void CVeiImageConverter::CancelEncoding() + { + if ( iImageEncoder ) + { + delete iImageEncoder; + iImageEncoder = NULL; + } + } + +// End of File