diff -r 000000000000 -r 9b3e960ffc8a camappengine/Engine/Src/CaeImageQueueExtPro.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camappengine/Engine/Src/CaeImageQueueExtPro.cpp Thu Dec 17 08:51:24 2009 +0200 @@ -0,0 +1,214 @@ +/* +* Copyright (c) 2003-2007 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: Camera Application Engine image queue extension processing class +* +*/ + + + +// INCLUDE FILES + +#include "CaeEngineImp.h" // For LOGTEXT +#include // For CFbsBitmap + +#include "CaeImageQueueExtPro.h" // Still image burst capturing class. +#include "CaeImageItemExtPro.h" // Still image item class. + + +// CONSTANTS +const TInt KCaeStillBurstImageQueueGranularity = 6; // optimized count of burst images + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CCaeImageQueueExtPro::NewL +// ----------------------------------------------------------------------------- +// +CCaeImageQueueExtPro* CCaeImageQueueExtPro::NewL() + { + LOGTEXT( _L( "Cae: CCaeImageQueueExtPro::NewL() entering" ) ); + + CCaeImageQueueExtPro* self = new( ELeave ) CCaeImageQueueExtPro; + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + LOGTEXT( _L( "Cae: CCaeImageQueueExtPro::NewL() returning" ) ); + + return self; + } + + +// ----------------------------------------------------------------------------- +// CCaeImageQueueExtPro::CCaeImageQueueExtPro +// Destroys image queue. +// ----------------------------------------------------------------------------- +// +CCaeImageQueueExtPro::~CCaeImageQueueExtPro() + { + LOGTEXT( _L( "Cae: CCaeImageQueueExtPro::CaeImageQueueExtPro() entering" ) ); + + ResetAndDestroyImages(); + delete iImageQueue; + + LOGTEXT( _L( "Cae: CCaeImageQueueExtPro::CaeImageQueueExtPro() returning" ) ); + } + + +// ----------------------------------------------------------------------------- +// CCaeImageQueueExtPro::CaeImageQueueExtPro +// ----------------------------------------------------------------------------- +// +CCaeImageQueueExtPro::CCaeImageQueueExtPro() + { + } + + +// ----------------------------------------------------------------------------- +// CCaeImageQueueExtPro::ConstructL +// Allocates image queue. +// ----------------------------------------------------------------------------- +// +void CCaeImageQueueExtPro::ConstructL() + { + LOGTEXT( _L( "Cae: CCaeImageQueueExtPro::ConstructL() entering" ) ); + + iImageQueue = new( ELeave ) RPointerArray( + KCaeStillBurstImageQueueGranularity ); + + LOGTEXT( _L( "Cae: CCaeImageQueueExtPro::ConstructL() returning" ) ); + } + + +// ----------------------------------------------------------------------------- +// CCaeImageQueueExtPro::AppendImage +// Appends an image item object to image queue. +// ----------------------------------------------------------------------------- +// +TInt CCaeImageQueueExtPro::AppendImage( + CFbsBitmap* aBitmap, + HBufC8* aImageData, + TBool aLastImage, + TBool aSnapImage ) + { + LOGTEXT( _L( "Cae: CCaeImageQueueExtPro::AppendImage() entering" ) ); + + TInt result( KErrNone ); + + CCaeImageItemExtPro* imageItem = new CCaeImageItemExtPro(); + if ( imageItem ) + { + // Move image data to image item + imageItem->iImageData = aImageData; + imageItem->iBitmap = aBitmap; + imageItem->iLastImage = aLastImage; + imageItem->iSnapImage = aSnapImage; + + // Add image to the queue. + result = iImageQueue->Append( imageItem ); + if ( result != KErrNone ) + { + // In case of error, delete only imageItem, not the actual data + imageItem->iBitmap = NULL; + imageItem->iImageData = NULL; + delete imageItem; + imageItem = NULL; + } + } + else + { + result = KErrNoMemory; + } + + LOGTEXT( _L( "Cae: CCaeImageQueueExtPro::AppendImage() returning" ) ); + + return result; + } + + +// ----------------------------------------------------------------------------- +// CCaeImageQueueExtPro::ImageCount +// ----------------------------------------------------------------------------- +// +TInt CCaeImageQueueExtPro::ImageCount() const + { + // Return the count of image items. + return iImageQueue->Count(); + } + + +// ----------------------------------------------------------------------------- +// CCaeImageQueueExtPro::GetNextImage +// Fetches and deletes the next image from image queue. +// ----------------------------------------------------------------------------- +// +TInt CCaeImageQueueExtPro::GetNextImage( + CFbsBitmap*& aBitmap, // output + HBufC8*& aImageData, // output + TBool& aLastImage, // output + TBool& aSnapImage ) // output + { + LOGTEXT2( _L( "Cae: CCaeImageQueueExtPro::GetNextImage() entering, %d images in queue" ), iImageQueue->Count() ); + + TInt error( KErrNone ); + + if ( iImageQueue->Count() > 0 ) + { + // Get image data and bitmap pointer from the queue image item. + aImageData = (*iImageQueue)[0]->iImageData; + aBitmap = (*iImageQueue)[0]->iBitmap; + aLastImage = (*iImageQueue)[0]->iLastImage; + aSnapImage = (*iImageQueue)[0]->iSnapImage; + + // Do not delete the data. Delete the image item and remove from queue. + (*iImageQueue)[0]->iBitmap = NULL; + (*iImageQueue)[0]->iImageData = NULL; + delete (*iImageQueue)[0]; + iImageQueue->Remove( 0 ); + } + else + { + aBitmap = NULL; + aImageData = NULL; + aLastImage = EFalse; + aSnapImage = EFalse; + error = KErrUnderflow; + } + + LOGTEXT2( _L( "Cae: CCaeImageQueueExtPro::GetNextImage() returning: %d" ), error ); + + return error; + } + + +// ----------------------------------------------------------------------------- +// CCaeImageQueueExtPro::ResetAndDestroyImages() +// Reset and destroy image queue. +// ----------------------------------------------------------------------------- +// +void CCaeImageQueueExtPro::ResetAndDestroyImages() + { + LOGTEXT( _L( "Cae: CCaeImageQueueExtPro::ResetAndDestroyImages()" ) ); + + if ( iImageQueue ) + { + // Reset and destroy the image items from queue. + iImageQueue->ResetAndDestroy(); + } + } + + +// End of File