diff -r 8b2d6d0384b0 -r d9aefe59d544 camerauis/cameraxui/cxengine/src/cxecameradevice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraxui/cxengine/src/cxecameradevice.cpp Fri Apr 16 14:51:30 2010 +0300 @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2009 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: + * + */ +#include +#include + +#include "cxecameradevice.h" +#include "cxeerrormappingsymbian.h" +#include "cxutils.h" + +#include "cxedummycamera.h" + +CxeCameraDevice::CxeCameraDevice() : + mCamera(NULL), + mAdvancedSettings(NULL), + mImageProcessor(NULL), + mCameraSnapshot(NULL), + mCameraOrientation(NULL), + mFaceTracking(NULL) +{ + +} + +CxeCameraDevice::~CxeCameraDevice() +{ + CX_DEBUG_ENTER_FUNCTION(); + // Exiting, release all resources + releaseResources(); + CX_DEBUG_EXIT_FUNCTION(); +} + +void CxeCameraDevice::deleteCamera() +{ + CX_DEBUG_ENTER_FUNCTION(); + + emit prepareForCameraDelete(); + + // preparing for new camera, release old resources + releaseResources(); + + CX_DEBUG_EXIT_FUNCTION(); +} + +void CxeCameraDevice::releaseCamera() +{ + CX_DEBUG_ENTER_FUNCTION(); + + if (mCamera) { + emit prepareForRelease(); + mCamera->Release(); + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +void CxeCameraDevice::setCamera( CCamera *camera ) +{ + CX_DEBUG_ENTER_FUNCTION(); + + if (mCamera != camera) { + + // new camera, delete old resources + releaseResources(); + + mCamera = camera; + + // initialize resources + CxeError::Id err = initResources(); + + emit cameraAllocated(err); + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +CCamera* CxeCameraDevice::camera() +{ + return mCamera; +} + +CCamera::CCameraAdvancedSettings* CxeCameraDevice::advancedSettings() +{ + return mAdvancedSettings; +} + +CCamera::CCameraImageProcessing* CxeCameraDevice::imageProcessor() +{ + return mImageProcessor; +} + + +CCamera::CCameraSnapshot* CxeCameraDevice::cameraSnapshot() +{ + return mCameraSnapshot; +} + + +MCameraOrientation* CxeCameraDevice::cameraOrientation() +{ + return mCameraOrientation; +} + +MCameraFaceTracking* CxeCameraDevice::faceTracking() +{ + return mFaceTracking; +} + +CxeError::Id CxeCameraDevice::initResources() +{ + CX_DEBUG_ENTER_FUNCTION(); + + TInt status = KErrNone; + + if (mCamera) { + CX_DEBUG(("Get CCamera extensions..")); + + mCameraOrientation = static_cast( + mCamera->CustomInterface(KCameraOrientationUid)); + CX_DEBUG(("MCameraOrientation interface 0x%08x", mCameraOrientation)); + + mFaceTracking = static_cast( + mCamera->CustomInterface(KCameraFaceTrackingUid)); + CX_DEBUG(("MCameraFaceTracking interface 0x%08x", mFaceTracking)); + + TRAPD(errorAdvSet, mAdvancedSettings = + CCamera::CCameraAdvancedSettings::NewL(*mCamera)); + CX_DEBUG(("CCameraAdvancedSettings status: %d", errorAdvSet)); + + TRAPD(errorImgPr, mImageProcessor = + CCamera::CCameraImageProcessing::NewL(*mCamera)); + CX_DEBUG(("CCameraImageProcessing status: %d", errorImgPr)); + + TRAPD(errorSnap, mCameraSnapshot = + CCamera::CCameraSnapshot::NewL(*mCamera)); + CX_DEBUG(("CCameraSnapshot status: %d", errorSnap)); + + // Check all statuses and set first error code encountered. + // Imageprocessing is not supported by 2nd camera so we just ignore the error. + status = errorAdvSet != KErrNone + ? errorAdvSet : errorSnap; + CX_DEBUG(("Total status: %d", status)); + } + + CX_DEBUG_EXIT_FUNCTION(); + return CxeErrorHandlingSymbian::map(status); +} + +void CxeCameraDevice::releaseResources() +{ + CX_DEBUG_ENTER_FUNCTION(); + + // not owned. + mCameraOrientation = NULL; + mFaceTracking = NULL; + + delete mCameraSnapshot; + mCameraSnapshot = NULL; + + delete mAdvancedSettings; + mAdvancedSettings = NULL; + + delete mImageProcessor; + mImageProcessor = NULL; + + delete mCamera; + mCamera = NULL; + + CX_DEBUG_EXIT_FUNCTION(); +} + +CxeError::Id CxeCameraDevice::newCamera( Cxe::CameraIndex cameraIndex, MCameraObserver2 *observer ) +{ + CX_DEBUG_ENTER_FUNCTION(); + CX_DEBUG(("Cxe: using camera index %d", cameraIndex)); + + CX_DEBUG_ASSERT(cameraIndex == Cxe::PrimaryCameraIndex || cameraIndex == Cxe::SecondaryCameraIndex); + + CCamera* camera = NULL; + +#if defined(CXE_USE_DUMMY_CAMERA) || defined(__WINSCW__) + TRAPD(err, camera = CxeDummyCamera::NewL(*observer, cameraIndex, 100, 2)); + CX_DEBUG(("CxeCameraDevice::newCamera <> new CxeDummyCamera")); +#else + TRAPD(err, camera = CCamera::New2L(*observer, cameraIndex, 100 /*KCameraClientPriority*/)); + CX_DEBUG(("CxeCameraDevice::newCamera <> new CCamera")); +#endif + + if (!err) { + setCamera(camera); + } + + CX_DEBUG_EXIT_FUNCTION(); + return CxeErrorHandlingSymbian::map(err); +} + +// end of file