view DemoCube/src/DemoCamera.cpp @ 0:43361e733c66

Origination.
author Atul Varma <varmaa@toolness.com>
date Tue, 12 Feb 2008 17:18:02 -0600
parents
children
line wrap: on
line source

/*=====================================================================

    Copyright © 2007 Nokia Corporation. All rights reserved.

======================================================================*/

#include "DemoCameraNotify.h"
#include "DemoCamera.h"

enum TInternalState
	{
	EUninitialized = 0x00,
	EReserved      = 0x01,
	EPowered       = 0x02,
	EReady         = 0x03
	};

CDemoCamera* CDemoCamera::NewL(const TSize& aSize, MDemoCameraNotify* aNotify)
	{
	CDemoCamera* self = new(ELeave) CDemoCamera(aSize);
	CleanupStack::PushL(self);
	self->ConstructL(aNotify);
	CleanupStack::Pop();
	return self;
	}

CDemoCamera::CDemoCamera(const TSize& aSize) :
	iState(EUninitialized),
	iSize(aSize),
	iCamera(NULL),
	iNotify(NULL)
	{
	}

void CDemoCamera::ConstructL(MDemoCameraNotify* aNotify)
	{
	iNotify = aNotify;
	iCamera = CCamera::NewL(*this, 0);
	}

CDemoCamera::~CDemoCamera()
	{
	iNotify = NULL;
	if(iState & EReady)
		{
		Release();
		}
	if(iCamera)
		{
		delete iCamera;
		iCamera = NULL;
		}
	}

void CDemoCamera::Acquire()
	{
	switch(iState)
		{
		case EUninitialized:
			iCamera->Reserve();
			break;
		case EReserved:
			iCamera->PowerOn();
			break;
		case EReady:
			iNotify->CameraReady();
			break;
		default:
			break;
		}
	}

void CDemoCamera::Release()
	{
	switch(iState)
		{
		case EReady:
			iCamera->PowerOff();
			iState &= ~EPowered;
		case EReserved:
			iCamera->Release();
			iState &= ~EReserved;
		case EUninitialized:
		default:
			break;
		}
	}

void CDemoCamera::StartFeedL()
	{
	iCamera->StartViewFinderBitmapsL(iSize);
	}

void CDemoCamera::StopFeed()
	{
	iCamera->StopViewFinder();
	}

void CDemoCamera::ReserveComplete(TInt /*aError*/)
	{
	iState |= EReserved;
	iCamera->PowerOn();
	}

void CDemoCamera::PowerOnComplete(TInt /*aError*/)
	{
	iState |= EPowered;
	iNotify->CameraReady();
	}

void CDemoCamera::ViewFinderFrameReady(CFbsBitmap& aFrame)
	{
	iNotify->SetCameraFrame(aFrame);
	}

void CDemoCamera::ImageReady(CFbsBitmap* /*aBitmap*/, HBufC8* /*aData*/, TInt /*aError*/)
	{
	}

void CDemoCamera::FrameBufferReady(MFrameBuffer* /*aFrameBuffer*/, TInt /*aError*/)
	{
	}