diff -r 34024902876b -r 50d5061ee01e camappengine/StillConverter/Src/CaeStillEncoder.cpp --- a/camappengine/StillConverter/Src/CaeStillEncoder.cpp Fri Mar 19 09:33:47 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,336 +0,0 @@ -/* -* Copyright (c) 2002 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: -* -* Description: Still Image Encoder for Camera Application Engine -* -*/ - - - -// INCLUDE FILES -#include - -#include "CaeStillConverter.h" -#include "CaeStillEncoder.h" -#include "CaeStillCommon.h" - -#ifdef CAE_TEST_VERSION -#include "CaeStillConverterTestErrors.h" -#endif - - -// ================= MEMBER FUNCTIONS ======================= - - -// --------------------------------------------------------- -// CCaeStillEncoder::NewL -// Two-phased constructor. -// --------------------------------------------------------- -// -EXPORT_C CCaeStillEncoder* CCaeStillEncoder::NewL() - { - CCaeStillEncoder* self = new( ELeave ) CCaeStillEncoder; - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------- -// CCaeStillEncoder::~CCaeStillEncoder -// Destructor. -// --------------------------------------------------------- -// -EXPORT_C CCaeStillEncoder::~CCaeStillEncoder() - { - Cancel(); - Cleanup(); - - // For RTRT code coverage analysis. - // #pragma attol insert _ATCPQ_DUMP(0); - } - - -// --------------------------------------------------------- -// CCaeStillEncoder::SetObserver -// Sets Still encoder observer. -// --------------------------------------------------------- -// -EXPORT_C void CCaeStillEncoder::SetObserver( - MCaeStillEncoderObserver* aObserver ) - { - iObserver = aObserver; - } - - -// ----------------------------------------------------------------------------- -// CCaeStillEncoder::SetImageCodecL -// Sets the specific image codec implementation to be used in encoding. -// ----------------------------------------------------------------------------- -// -void CCaeStillEncoder::SetImageCodecL( - TUid aCodecUid ) - { - iImageCodecUid = aCodecUid; - } - -// --------------------------------------------------------- -// CCaeStillEncoder::SetCompressionQuality -// Sets compression quality. -// --------------------------------------------------------- -// -EXPORT_C void CCaeStillEncoder::SetCompressionQuality( - TInt aQuality ) - { - iJpegQuality = Min( KJpegQualityMax, Max( KJpegQualityMin, aQuality ) ); - } - - -// --------------------------------------------------------- -// CCaeStillEncoder::CompressionQuality -// Gets compression quality. -// --------------------------------------------------------- -// -EXPORT_C TInt CCaeStillEncoder::CompressionQuality() const - { - return iJpegQuality; - } - - -// --------------------------------------------------------- -// CCaeStillEncoder::ConvertCFbsBitmapToHBufC8L -// Creates CImageItem object, places it in the internal -// queue and starts bitmap to memory image conversion. -// --------------------------------------------------------- -// -EXPORT_C void CCaeStillEncoder::ConvertCFbsBitmapToHBufC8L( - CFbsBitmap* aBitmap, - TTargetFormat aTargetFormat ) - { - LOGTEXT( _L( "Cae: CCaeStillEncoder::ConvertCFbsBitmapToHBufC8L() entering" ) ); - - CleanupStack::PushL( aBitmap ); - - // Create image item and set up image data. - - CImageItem* imageItem = new( ELeave ) CImageItem; - - imageItem->iBitmap = aBitmap; - - CleanupStack::Pop( aBitmap ); - CleanupStack::PushL( imageItem ); - - switch ( aTargetFormat ) - { - case ETargetFormatJPEG: - default: - { - imageItem->iImageTypeUid = KImageTypeJPGUid; - - imageItem->iFrameImageData = CFrameImageData::NewL(); - // ( do not push member variable to cleanup stack ) - - TJpegImageData* imagedata = new( ELeave ) TJpegImageData; - CleanupStack::PushL( imagedata ); - - imagedata->iSampleScheme = KCaeJpegColorSampling; - imagedata->iQualityFactor = iJpegQuality; - - User::LeaveIfError ( imageItem->iFrameImageData->AppendImageData( imagedata ) ); - - CleanupStack::Pop( imagedata ); - break; - } - } - - #ifdef CAE_TEST_VERSION - // For simulating errors when compiled as special "test version". - CaeConvertCFbsBitmapToHBufC8ErrorL(); - #endif - - // Append image to the queue. - User::LeaveIfError ( iImageQueue->Append( imageItem ) ); - - CleanupStack::Pop( imageItem ); - - // Start image conversion if not busy. - if ( !IsBusy() ) - { - TRAPD( error, ConvertL() ); - if ( error != KErrNone ) - { - ConversionComplete( error ); - } - } - - LOGTEXT( _L( "Cae: CCaeStillEncoder::ConvertCFbsBitmapToHBufC8L() returning" ) ); - } - - -// --------------------------------------------------------- -// CCaeStillEncoder::Cleanup -// Destroy all allocations. -// --------------------------------------------------------- -// -EXPORT_C void CCaeStillEncoder::Cleanup() - { - if ( iEncoder ) - { - iEncoder->Cancel(); - delete iEncoder; - iEncoder = NULL; - } - - if ( iState != EIdle ) - { - delete iEncodedImage; - iEncodedImage = NULL; - } - - if ( iImageQueue ) - { - iImageQueue->ResetAndDestroy(); - } - } - - -// --------------------------------------------------------- -// CCaeStillEncoder::CCaeStillEncoder -// Default constructor. -// This can NOT leave. -// --------------------------------------------------------- -// -CCaeStillEncoder::CCaeStillEncoder() : -iJpegQuality( KJpegQualityMax ) - { - CActiveScheduler::Add( this ); - } - - -// --------------------------------------------------------- -// CCaeStillEncoder::ConstructL -// Symbian 2nd phase constructor that can leave. -// --------------------------------------------------------- -// -void CCaeStillEncoder::ConstructL() - { - CCaeStillConverter::ConstructL(); - } - - -// --------------------------------------------------------- -// CCaeStillEncoder::DoCancel -// From CActive, implements cancellation of an outstanding request. -// --------------------------------------------------------- -// -void CCaeStillEncoder::DoCancel() - { - Cleanup(); - iState = EIdle; - } - - -// --------------------------------------------------------- -// CCaeStillEncoder::ConvertL -// Converts bitmap to memory JPEG image. -// Allocates Image Conversion Library (ICL) encoder and -// starts conversion. -// --------------------------------------------------------- -// -void CCaeStillEncoder::ConvertL() - { - LOGTEXT( _L( "Cae: CCaeStillEncoder::ConvertL() entering" ) ); - - // Do not delete the encoded image here, just set to NULL. - iEncodedImage = NULL; - - // Allocate new ICL encoder. - delete iEncoder; - iEncoder = NULL; - - // Use the default codec or the specific codec - iEncoder = CImageEncoder::DataNewL( iEncodedImage, - CImageEncoder::EOptionNone, (*iImageQueue)[0]->iImageTypeUid, - KNullUid, iImageCodecUid ); - - LOGTEXT3( _L( "Cae: CCaeStillEncoder::ConvertL(). Requested encoder: %x, Found encoder: %x" ), iImageCodecUid.iUid, iEncoder->ImplementationUid().iUid ); - - #ifdef CAE_TEST_VERSION - // For simulating errors when compiled as special "test version". - CaeStillConvertErrorL(); - #endif - - iState = EConvert; - iStatus = KRequestPending; - iEncoder->Convert( &iStatus, - *(*iImageQueue)[0]->iBitmap, - (*iImageQueue)[0]->iFrameImageData ); - SetActive(); - - LOGTEXT( _L( "Cae: CCaeStillEncoder::ConvertL() returning" ) ); - } - - -// --------------------------------------------------------- -// CCaeStillEncoder::ConversionComplete -// Perfoms necessary cleanup and delivers result -// to the client. -// --------------------------------------------------------- -// -void CCaeStillEncoder::ConversionComplete( - TInt aError ) - { - LOGTEXT( _L( "Cae: CCaeStillEncoder::ConversionComplete() entering" ) ); - #ifdef _DEBUG - if ( aError ) - { - LOGTEXT2( _L( "Cae: CCaeStillEncoder::ConversionComplete(): error detected: %d" ), aError ); - } - #endif - - if ( iEncoder ) - { - iEncoder->Cancel(); - delete iEncoder; - iEncoder = NULL; - } - - // To be outputted via call-back. - CFbsBitmap* bitmap = NULL; - - if ( iImageQueue->Count() > 0 ) - { - bitmap = (*iImageQueue)[0]->iBitmap; - - (*iImageQueue)[0]->iBitmap = NULL; // Prevent deletion of source image. - delete ( *iImageQueue )[0]; - - // Remove item pointer from the queue and compress the queue. - iImageQueue->Remove( 0 ); - } - - iState = EIdle; - - const TInt KZeroImageSize = 0; // Image size argument currently not in use. - - // Call back the client to deliver the result image. Gives away the ownership of the bitmap - // and iEncodedImage. - iObserver->McaeseoHBufC8ImageReady( bitmap, iEncodedImage, aError, KZeroImageSize ); - iEncodedImage = NULL; // Ownership has been given away - - LOGTEXT( _L( "Cae: CCaeStillEncoder::ConversionComplete() returning" ) ); - } - - -// End of File