diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/src/cameracontroller/cambuffershare.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/src/cameracontroller/cambuffershare.cpp Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,124 @@ +/* +* 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 CCamBufferShare class. +* Wrapper around to store and handle sharing of buffer +* implementing MCameraBuffer interface. Counts references +* and frees the stored buffer, when no client uses it. +* +* +*/ + + + +// =========================================================================== +// Includes +#include // MCameraBuffer +#include "camlogging.h" +#include "cambuffershare.h" + +// =========================================================================== +// Static data initialisation +#ifdef _DEBUG + TInt CCamBufferShare::isTotalBufferCount = 0; +#endif // _DEBUG + + +// =========================================================================== +// Class methods + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CCamBufferShare::CCamBufferShare( MCameraBuffer* aSharedBuffer ) + : iSharedBuffer( aSharedBuffer ), + iReferenceCount( 0 ) + { +#ifdef _DEBUG + ++isTotalBufferCount; +#endif // _DEBUG + } + +// --------------------------------------------------------------------------- +// Destructor +// Private, Release is to be used by clients. +// --------------------------------------------------------------------------- +// +CCamBufferShare::~CCamBufferShare() + { + PRINT( _L("Camera => ~CCamBufferShare") ); + if( iSharedBuffer ) + { + iSharedBuffer->Release(); + iSharedBuffer = NULL; + } +#ifdef _DEBUG + --isTotalBufferCount; +#endif + PRINT( _L("Camera <= ~CCamBufferShare") ); + } + +// --------------------------------------------------------------------------- +// Return the shared buffer. +// Ownership never transferred to caller. +// --------------------------------------------------------------------------- +// +MCameraBuffer* +CCamBufferShare::SharedBuffer() + { + return iSharedBuffer; + } + +// --------------------------------------------------------------------------- +// Signal, that new client uses this buffer. +// --------------------------------------------------------------------------- +// +void +CCamBufferShare::Reserve() + { + ++iReferenceCount; + } + +// --------------------------------------------------------------------------- +// Signal that one client has stopped using this buffer. +// --------------------------------------------------------------------------- +// +void +CCamBufferShare::Release() + { + --iReferenceCount; + + if( iReferenceCount <= 0 ) + { + delete this; + } + } + +#ifdef _DEBUG +// --------------------------------------------------------------------------- +// TotalBufferShareCount <> +// +// Debug method to follow the total amount of shared buffers in use. +// --------------------------------------------------------------------------- +// +TInt +CCamBufferShare::TotalBufferShareCount() + { + return isTotalBufferCount; + } +#endif // _DEBUG + + +// end of file +