cameramanager.cpp

来自「barcode readers [ from Image]」· C++ 代码 · 共 119 行

CPP
119
字号
/* Copyright (c) 2001, Nokia Mobile Phones. All rights reserved */

#include <CameraServ.h>
#include "CameraManager.h"
#include "CameraObserver.h"


CCameraManager* CCameraManager::NewL(MCameraObserver& aObserver)
	{
	CCameraManager* self = CCameraManager::NewLC(aObserver);
	CleanupStack::Pop();
	return self;
	}


CCameraManager* CCameraManager::NewLC(MCameraObserver& aObserver)
	{
	CCameraManager* self = new (ELeave) CCameraManager(aObserver);
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
	}


CCameraManager::CCameraManager(MCameraObserver& aObserver)
:	CActive(CActive::EPriorityStandard),
    iObserver(aObserver),
    iCameraState(EUninitalised)
	{
	//	Implementation not required
	}


CCameraManager::~CCameraManager()
	{
	Cancel();

    if (iCameraState != EUninitalised)
        {
        //  Connected to the server so shut the camera down
        iCameraServer.TurnCameraOff();

        iCameraServer.Close();
        }

	}


void CCameraManager::ConstructL()
	{
    User::LeaveIfError(iCameraServer.Connect());

    iCameraState = EStartingCamera;
    iCameraServer.TurnCameraOn(iStatus);

	CActiveScheduler::Add(this);

	SetActive();
	}


TBool CCameraManager::IsReady()
    {
    if (iCameraState == EReady)
        {
        return  ETrue;
        }
    else
        {
        return  EFalse;
        }
    }

void CCameraManager::Snap(CFbsBitmap& aBitmap)
    {
    ASSERT(IsReady());

    iCameraState = ETakingPicture;
    iCameraServer.GetImage(iStatus, aBitmap);
    SetActive();
    }

void CCameraManager::DoCancel()
	{
    //  Not implementated
	}


void CCameraManager::RunL()
	{
    if (iStatus != KErrNone)
        {
            iObserver.Error(iStatus.Int());
            return;
        }

    switch (iCameraState)
        {
    case EStartingCamera:
        iCameraServer.SetLightingConditions(RCameraServ::ELightingNormal);
        iCameraServer.SetImageQuality(RCameraServ::EQualityHigh);
        iCameraState = EReady;
        break;

    case ETakingPicture:
        iObserver.PictureTaken();
        iCameraState = EReady;
        break;

    case EReady:
    case EError:
    default:
        iCameraState = EError;  //  For the invalid cases
        iObserver.Error(KErrGeneral);

        }
	}
    

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?