diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/src/cameracontroller/cambuffer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/src/cameracontroller/cambuffer.cpp Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,265 @@ +/* +* Copyright (c) 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: Implementation of CCamBuffer class. +* Temporary own implementation of MCameraBuffer. +* To be replaced by ECam CCameraBuffer. +* +*/ + + + +#include + +#include "camlogging.h" +#include "cambuffer.h" + + +// --------------------------------------------------------------------------- +// NewL +// Takes ownership of aData, but not aBitmap +// --------------------------------------------------------------------------- +// +CCamBuffer* +CCamBuffer::NewL( const CFbsBitmap& aBitmap, + HBufC8* aData ) + { + CCamBuffer* self = CCamBuffer::NewLC( aBitmap, aData ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// NewLC +// Takes ownership of aData, but not aBitmap +// --------------------------------------------------------------------------- +// +CCamBuffer* +CCamBuffer::NewLC( const CFbsBitmap& aBitmap, + HBufC8* aData ) + { + CCamBuffer* self = new (ELeave) CCamBuffer; + CleanupStack::PushL( self ); + self->ConstructL( aBitmap, aData ); + return self; + } + + +// --------------------------------------------------------------------------- +// NewL +// Takes ownership of both objects. +// --------------------------------------------------------------------------- +// +CCamBuffer* +CCamBuffer::NewL( CFbsBitmap* aBitmap, + HBufC8* aData ) + { + CCamBuffer* self = CCamBuffer::NewLC( aBitmap, aData ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// NewLC +// Takes ownership of both objects. +// --------------------------------------------------------------------------- +// +CCamBuffer* +CCamBuffer::NewLC( CFbsBitmap* aBitmap, + HBufC8* aData ) + { + CCamBuffer* self = new (ELeave) CCamBuffer; + CleanupStack::PushL( self ); + self->ConstructL( aBitmap, aData ); + return self; + } + + +// --------------------------------------------------------------------------- +// NumFrames +// +// Number of frames available in the buffer. +// --------------------------------------------------------------------------- +// +TInt +CCamBuffer::NumFrames() + { + return 1; + } + + +// --------------------------------------------------------------------------- +// DataL +// +// Frame data as descriptor. +// *not supported here* +// --------------------------------------------------------------------------- +// +TDesC8* +CCamBuffer::DataL( TInt aFrameIndex ) + { + if( aFrameIndex != 0 || !iImageData ) + User::Leave( KErrNotSupported ); + + return iImageData; + } + +// --------------------------------------------------------------------------- +// BitmapL +// +// Frame data as bitmap. +// --------------------------------------------------------------------------- +// +CFbsBitmap& +CCamBuffer::BitmapL( TInt aFrameIndex ) + { + if( aFrameIndex != 0 || !iBitmap ) + User::Leave( KErrNotFound ); + + return *iBitmap; + } + +// --------------------------------------------------------------------------- +// DataL +// +// Frame data as chunk. +// *not supported here* +// --------------------------------------------------------------------------- +// +RChunk& +CCamBuffer::ChunkL() + { + User::Leave( KErrNotSupported ); + + return iChunk; + } + +// --------------------------------------------------------------------------- +// ChunkOffsetL +// +// Frame data offset in chunk. +// *not supported here* +// --------------------------------------------------------------------------- +// +TInt +CCamBuffer::ChunkOffsetL( TInt /*aFrameIndex*/ ) + { + User::Leave( KErrNotSupported ); + + return 0; + } + +// --------------------------------------------------------------------------- +// FrameSize +// +// Frame data size. +// *not supported here, as only bitmap supported* +// --------------------------------------------------------------------------- +// +TInt +CCamBuffer::FrameSize( TInt /*aFrameIndex*/ ) + { + return -1; + } + +// --------------------------------------------------------------------------- +// Release +// +// Release this buffer. +// Simply deletes this object. +// --------------------------------------------------------------------------- +// +void +CCamBuffer::Release() + { + delete this; + } + +// =========================================================================== + +// --------------------------------------------------------------------------- +// ConstructL +// +// --------------------------------------------------------------------------- +// +void +CCamBuffer::ConstructL( const CFbsBitmap& aBitmap, + HBufC8* aData ) + { + PRINT( _L("CamTest => CCamBuffer::ConstructL") ); + + + iBitmap = new (ELeave) CFbsBitmap; + TInt error = iBitmap->Duplicate( aBitmap.Handle() ); + + iImageData = aData; + + PRINT1( _L("CamTest <> duplicate bitmap status(%d)"), error ); + + User::LeaveIfError( error ); + + PRINT( _L("CamTest <= CCamBuffer::ConstructL") ); + } + +// --------------------------------------------------------------------------- +// ConstructL +// +// --------------------------------------------------------------------------- +// +void +CCamBuffer::ConstructL( CFbsBitmap* aBitmap, + HBufC8* aData ) + { + PRINT( _L("CamTest => CCamBuffer::ConstructL") ); + + iImageData = aData; + iBitmap = aBitmap; + + PRINT( _L("CamTest <= CCamBuffer::ConstructL") ); + } + + +// --------------------------------------------------------------------------- +// Constructor +// +// --------------------------------------------------------------------------- +// +CCamBuffer::CCamBuffer() + : iBitmap( NULL ), + iImageData( NULL ), + iOwnBitmap( ETrue ), + iOwnData( ETrue ) + { + } + +// --------------------------------------------------------------------------- +// Destructor +// *private, because Release() is supposed to be used.* +// --------------------------------------------------------------------------- +// +CCamBuffer::~CCamBuffer() + { + PRINT( _L("CamTest => ~CCamBuffer") ); + + PRINT( _L("CamTest <> ~CCamBuffer: Close RChunk..") ); + iChunk.Close(); + PRINT( _L("CamTest <> ~CCamBuffer: delete CFbsBitmap..") ); + delete iBitmap; + PRINT( _L("CamTest <> ~CCamBuffer: delete HBufC8*..") ); + delete iImageData; + + PRINT( _L("CamTest <= ~CCamBuffer") ); + } + + +// end of file