diff -r 34024902876b -r 50d5061ee01e camappengine/Engine/Src/CaeStillBurst.cpp --- a/camappengine/Engine/Src/CaeStillBurst.cpp Fri Mar 19 09:33:47 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,353 +0,0 @@ -/* -* Copyright (c) 2003,2004 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 still image burst class -* -*/ - - - -// INCLUDE FILES - -#include "CaeEngineImp.h" // For LOGTEXT -#include // For CFbsBitmap -#include // For HAL - -#include "CaeStillBurst.h" // Still image burst capturing class. -#include "CaeImageItem.h" // Still image item class. - - -// CONSTANTS -const TInt KCaeStillBurstImageQueueGranularity = 6; -const TInt KCaeMinImageHeapSize = 0; - -// ============================ MEMBER FUNCTIONS =============================== - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::NewL -// ----------------------------------------------------------------------------- -// -CCaeStillBurst* CCaeStillBurst::NewL() - { - LOGTEXT( _L( "Cae: CCaeStillBurst::NewL() entering" ) ); - - CCaeStillBurst* self = new( ELeave ) CCaeStillBurst; - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - LOGTEXT( _L( "Cae: CCaeStillBurst::NewL() returning" ) ); - - return self; - } - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::~CCaeStillBurst -// Destroys image queue. -// ----------------------------------------------------------------------------- -// -CCaeStillBurst::~CCaeStillBurst() - { - LOGTEXT( _L( "Cae: CCaeStillBurst::~CCaeStillBurst() entering" ) ); - - ResetAndDestroyImages(); - - if ( iImageHeap ) - { - iImageHeap->Close(); - } - - delete iImageQueue; - - LOGTEXT( _L( "Cae: CCaeStillBurst::~CCaeStillBurst() returning" ) ); - } - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::CCaeStillBurst -// ----------------------------------------------------------------------------- -// -CCaeStillBurst::CCaeStillBurst() - { - } - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::ConstructL -// Allocates image queue. -// ----------------------------------------------------------------------------- -// -void CCaeStillBurst::ConstructL() - { - LOGTEXT2( _L( "Cae: CCaeStillBurst::ConstructL() entering, min heap: %d" ), KCaeMinImageHeapSize ); - - iImageQueue = new( ELeave ) RPointerArray( - KCaeStillBurstImageQueueGranularity ); - - TInt maxMem; - User::LeaveIfError( HAL::Get( HAL::EMemoryRAM, maxMem ) ); - #if (defined (__WINS__) || defined (__WINSCW__)) - maxMem /= 2; // Fix emulator -4 error - #endif - - iImageHeap = User::ChunkHeap( NULL, KCaeMinImageHeapSize, maxMem ); - - #ifdef _DEBUG - if ( !iImageHeap ) - { - LOGTEXT( _L( "Cae: CCaeStillBurst::ConstructL() Error: Cannot create iImageHeap !" ) ); - } - #endif - - User::LeaveIfNull( iImageHeap ); - - LOGTEXT( _L( "Cae: CCaeStillBurst::ConstructL() returning" ) ); - } - - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::SetLengthL -// ----------------------------------------------------------------------------- -// -void CCaeStillBurst::SetLengthL( - TInt aLength ) - { - LOGTEXT2( _L( "Cae: CCaeStillBurst::SetLengthL(): length: %d" ), aLength ); - - // Leave if not supported. - if ( aLength < 1 ) - { - LOGTEXT( _L( "Cae: CCaeStillBurst::SetLengthL(): leaving KErrArgument" )); - User::Leave( KErrArgument ); - } - - iDesiredLength = aLength; - } - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::Length -// ----------------------------------------------------------------------------- -// -TInt CCaeStillBurst::Length() const - { - LOGTEXT2( _L( "Cae: CCaeStillBurst::Length(): length: %d" ), iDesiredLength ); - - return iDesiredLength; - } - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::AppendImage -// Appends an image item object to image queue. -// ----------------------------------------------------------------------------- -// -TInt CCaeStillBurst::AppendImage( - CFbsBitmap* aBitmap, - HBufC8* aImageData, - TInt aError ) - { - LOGTEXT2( _L( "Cae: CCaeStillBurst::AppendImage() entering: %d" ), aError ); - - TInt result( KErrNone ); - - CCaeImageItem* imageItem = new CCaeImageItem( *iImageHeap ); - if ( imageItem ) - { - if (aImageData) - { - // Copy image data from HBufC8 to image heap - imageItem->iImageData = iImageHeap->Alloc( aImageData->Size() ); - if ( imageItem->iImageData ) - { - imageItem->iImageDataSize = aImageData->Size(); - Mem::Copy( imageItem->iImageData, aImageData->Ptr(), - imageItem->iImageDataSize ); - } - else - { - result = KErrNoMemory; - } - } - if ( result == KErrNone ) - { - imageItem->iBitmap = aBitmap; - imageItem->iError = aError; - // Add image to the queue. - result = iImageQueue->Append( imageItem ); - } - if ( result == KErrNone ) - { - iCountOfBurstAppends++; - LOGTEXT2( _L( "Cae: CCaeStillBurst::AppendImage(): count of burst appends = %d" ), iCountOfBurstAppends ); - - // Given aImageData can be deleted now as it has successfully - // been copied to imageItem->iImageData - delete aImageData; - } - else - { - // Do not delete the bitmap if error, delete just imageItem - // which deletes also iImageData. - imageItem->iBitmap = NULL; - delete imageItem; - imageItem = NULL; - } - } - else - { - result = KErrNoMemory; - } - - LOGTEXT( _L( "Cae: CCaeStillBurst::AppendImage() returning" ) ); - - return result; - } - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::CaptureCount -// ----------------------------------------------------------------------------- -// -TInt CCaeStillBurst::CaptureCount() const - { - // Return the count of appends (captures) made. - return iCountOfBurstAppends; - } - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::ImageCount -// ----------------------------------------------------------------------------- -// -TInt CCaeStillBurst::ImageCount() const - { - // Return the count of image items. - return iImageQueue->Count(); - } - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::GetNextImage -// Fetches and deletes the next image from image queue. -// ----------------------------------------------------------------------------- -// -TInt CCaeStillBurst::GetNextImage( - CFbsBitmap*& aBitmap, // output - HBufC8*& aImageData, // output - TInt& aError ) // output - { - LOGTEXT2( _L( "Cae: CCaeStillBurst::GetNextImage() entering, %d images in queue" ), iImageQueue->Count() ); - - TInt error( KErrNone ); - - if ( iImageQueue->Count() > 0 ) - { - - if ( (*iImageQueue)[0]->iImageData ) - { - // Copy image data from queue image item. - aImageData = HBufC8::New( (*iImageQueue)[0]->iImageDataSize ); - if ( aImageData ) - { - aImageData->Des().Copy( (TUint8*)(*iImageQueue)[0]->iImageData, - (*iImageQueue)[0]->iImageDataSize ); - } - else - { - error = KErrNoMemory; - } - } - - if ( error == KErrNone ) - { - // Get bitmap pointer and image error value from the queue image item. - aBitmap = (*iImageQueue)[0]->iBitmap; - aError = (*iImageQueue)[0]->iError; - - #ifdef _DEBUG - if ( aError ) - { - LOGTEXT2( _L( "Cae: CCaeStillBurst::GetNextImage(): This image has error: %d" ), aError ); - } - #endif - - // Do not delete the bitmap. Delete the image item which deletes iImageData also. - (*iImageQueue)[0]->iBitmap = NULL; - delete (*iImageQueue)[0]; - iImageQueue->Remove( 0 ); - } - - if ( ( iImageQueue->Count() == 0 ) || error ) - { - // Give free memory to system from the top of heap. - iImageHeap->Compress(); - LOGTEXT( _L( "Cae: CCaeStillBurst::GetNextImage(): last image fetched, compressed the heap" ) ); - MEM(); - } - } - else - { - aBitmap = NULL; - aImageData = NULL; - error = KErrUnderflow; - } - - LOGTEXT2( _L( "Cae: CCaeStillBurst::GetNextImage() returning: %d" ), error ); - - return error; - } - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::IsBurstCaptured -// ----------------------------------------------------------------------------- -// -TBool CCaeStillBurst::IsBurstCaptured() const - { - TBool isComplete( EFalse ); - if ( iCountOfBurstAppends >= iDesiredLength ) - { - isComplete = ETrue; - } - return isComplete; - } - - -// ----------------------------------------------------------------------------- -// CCaeStillBurst::ResetAndDestroyImages() -// Reset and destroy image queue. -// ----------------------------------------------------------------------------- -// -void CCaeStillBurst::ResetAndDestroyImages() - { - LOGTEXT( _L( "Cae: CCaeStillBurst::ResetAndDestroyImages()" ) ); - - if ( iImageQueue ) - { - // Reset and destroy the image items from queue. - iImageQueue->ResetAndDestroy(); - } - if ( iImageHeap ) - { - iImageHeap->Compress(); // Give free memory to system from the top of heap - } - iCountOfBurstAppends = 0; - } - - -// End of File