camappengine/Engine/Src/CaeImageQueueExtPro.cpp
changeset 0 9b3e960ffc8a
--- /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 <fbs.h>                            // 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<CCaeImageItemExtPro>( 
+        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