camerauis/cameraxui/cxengine/src/cxecameradevice.cpp
changeset 19 d9aefe59d544
child 21 fa6d9f75d6a6
equal deleted inserted replaced
3:8b2d6d0384b0 19:d9aefe59d544
       
     1 /*
       
     2  * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3  * All rights reserved.
       
     4  * This component and the accompanying materials are made available
       
     5  * under the terms of "Eclipse Public License v1.0"
       
     6  * which accompanies this distribution, and is available
       
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8  *
       
     9  * Initial Contributors:
       
    10  * Nokia Corporation - initial contribution.
       
    11  *
       
    12  * Contributors:
       
    13  *
       
    14  * Description:
       
    15  *
       
    16  */
       
    17 #include <ECamOrientationCustomInterface2.h>
       
    18 #include <ecamfacetrackingcustomapi.h>
       
    19 
       
    20 #include "cxecameradevice.h"
       
    21 #include "cxeerrormappingsymbian.h"
       
    22 #include "cxutils.h"
       
    23 
       
    24 #include "cxedummycamera.h"
       
    25 
       
    26 CxeCameraDevice::CxeCameraDevice() :
       
    27     mCamera(NULL),
       
    28     mAdvancedSettings(NULL),
       
    29     mImageProcessor(NULL),
       
    30     mCameraSnapshot(NULL),
       
    31     mCameraOrientation(NULL),
       
    32     mFaceTracking(NULL)
       
    33 {
       
    34 
       
    35 }
       
    36 
       
    37 CxeCameraDevice::~CxeCameraDevice()
       
    38 {
       
    39     CX_DEBUG_ENTER_FUNCTION();
       
    40     // Exiting, release all resources
       
    41     releaseResources();
       
    42     CX_DEBUG_EXIT_FUNCTION();
       
    43 }
       
    44 
       
    45 void CxeCameraDevice::deleteCamera()
       
    46 {
       
    47     CX_DEBUG_ENTER_FUNCTION();
       
    48 
       
    49     emit prepareForCameraDelete();
       
    50 
       
    51     // preparing for new camera, release old resources
       
    52     releaseResources();
       
    53 
       
    54     CX_DEBUG_EXIT_FUNCTION();
       
    55 }
       
    56 
       
    57 void CxeCameraDevice::releaseCamera()
       
    58 {
       
    59     CX_DEBUG_ENTER_FUNCTION();
       
    60 
       
    61     if (mCamera) {
       
    62         emit prepareForRelease();
       
    63         mCamera->Release();
       
    64     }
       
    65 
       
    66     CX_DEBUG_EXIT_FUNCTION();
       
    67 }
       
    68 
       
    69 void CxeCameraDevice::setCamera( CCamera *camera )
       
    70 {
       
    71     CX_DEBUG_ENTER_FUNCTION();
       
    72 
       
    73     if (mCamera != camera) {
       
    74 
       
    75         // new camera, delete old resources
       
    76         releaseResources();
       
    77 
       
    78         mCamera = camera;
       
    79 
       
    80         // initialize resources
       
    81         CxeError::Id err = initResources();
       
    82 
       
    83         emit cameraAllocated(err);
       
    84     }
       
    85 
       
    86     CX_DEBUG_EXIT_FUNCTION();
       
    87 }
       
    88 
       
    89 CCamera* CxeCameraDevice::camera()
       
    90 {
       
    91     return mCamera;
       
    92 }
       
    93 
       
    94 CCamera::CCameraAdvancedSettings* CxeCameraDevice::advancedSettings()
       
    95 {
       
    96     return mAdvancedSettings;
       
    97 }
       
    98 
       
    99 CCamera::CCameraImageProcessing* CxeCameraDevice::imageProcessor()
       
   100 {
       
   101     return mImageProcessor;
       
   102 }
       
   103 
       
   104 
       
   105 CCamera::CCameraSnapshot* CxeCameraDevice::cameraSnapshot()
       
   106 {
       
   107     return mCameraSnapshot;
       
   108 }
       
   109 
       
   110 
       
   111 MCameraOrientation* CxeCameraDevice::cameraOrientation()
       
   112 {
       
   113     return mCameraOrientation;
       
   114 }
       
   115 
       
   116 MCameraFaceTracking* CxeCameraDevice::faceTracking()
       
   117 {
       
   118     return mFaceTracking;
       
   119 }
       
   120 
       
   121 CxeError::Id CxeCameraDevice::initResources()
       
   122 {
       
   123     CX_DEBUG_ENTER_FUNCTION();
       
   124 
       
   125     TInt status = KErrNone;
       
   126 
       
   127     if (mCamera) {
       
   128         CX_DEBUG(("Get CCamera extensions.."));
       
   129 
       
   130         mCameraOrientation = static_cast<MCameraOrientation*>(
       
   131             mCamera->CustomInterface(KCameraOrientationUid));
       
   132         CX_DEBUG(("MCameraOrientation interface 0x%08x", mCameraOrientation));
       
   133 
       
   134         mFaceTracking = static_cast<MCameraFaceTracking*>(
       
   135             mCamera->CustomInterface(KCameraFaceTrackingUid));
       
   136         CX_DEBUG(("MCameraFaceTracking interface 0x%08x", mFaceTracking));
       
   137 
       
   138         TRAPD(errorAdvSet, mAdvancedSettings =
       
   139               CCamera::CCameraAdvancedSettings::NewL(*mCamera));
       
   140         CX_DEBUG(("CCameraAdvancedSettings status: %d", errorAdvSet));
       
   141 
       
   142         TRAPD(errorImgPr, mImageProcessor =
       
   143               CCamera::CCameraImageProcessing::NewL(*mCamera));
       
   144         CX_DEBUG(("CCameraImageProcessing status: %d", errorImgPr));
       
   145 
       
   146         TRAPD(errorSnap, mCameraSnapshot =
       
   147               CCamera::CCameraSnapshot::NewL(*mCamera));
       
   148         CX_DEBUG(("CCameraSnapshot status: %d", errorSnap));
       
   149 
       
   150         // Check all statuses and set first error code encountered.
       
   151         // Imageprocessing is not supported by 2nd camera so we just ignore the error.
       
   152         status = errorAdvSet != KErrNone
       
   153                  ? errorAdvSet : errorSnap;
       
   154         CX_DEBUG(("Total status: %d", status));
       
   155     }
       
   156 
       
   157     CX_DEBUG_EXIT_FUNCTION();
       
   158     return CxeErrorHandlingSymbian::map(status);
       
   159 }
       
   160 
       
   161 void CxeCameraDevice::releaseResources()
       
   162 {
       
   163     CX_DEBUG_ENTER_FUNCTION();
       
   164 
       
   165     // not owned.
       
   166     mCameraOrientation = NULL;
       
   167     mFaceTracking = NULL;
       
   168 
       
   169     delete mCameraSnapshot;
       
   170     mCameraSnapshot = NULL;
       
   171 
       
   172     delete mAdvancedSettings;
       
   173     mAdvancedSettings = NULL;
       
   174 
       
   175     delete mImageProcessor;
       
   176     mImageProcessor = NULL;
       
   177 
       
   178     delete mCamera;
       
   179     mCamera = NULL;
       
   180 
       
   181     CX_DEBUG_EXIT_FUNCTION();
       
   182 }
       
   183 
       
   184 CxeError::Id CxeCameraDevice::newCamera( Cxe::CameraIndex cameraIndex, MCameraObserver2 *observer )
       
   185 {
       
   186     CX_DEBUG_ENTER_FUNCTION();
       
   187     CX_DEBUG(("Cxe: using camera index %d", cameraIndex));
       
   188 
       
   189     CX_DEBUG_ASSERT(cameraIndex == Cxe::PrimaryCameraIndex || cameraIndex == Cxe::SecondaryCameraIndex);
       
   190 
       
   191     CCamera* camera = NULL;
       
   192 
       
   193 #if defined(CXE_USE_DUMMY_CAMERA) || defined(__WINSCW__)
       
   194     TRAPD(err, camera = CxeDummyCamera::NewL(*observer, cameraIndex, 100, 2));
       
   195     CX_DEBUG(("CxeCameraDevice::newCamera <> new CxeDummyCamera"));
       
   196 #else
       
   197     TRAPD(err, camera = CCamera::New2L(*observer, cameraIndex, 100 /*KCameraClientPriority*/));
       
   198     CX_DEBUG(("CxeCameraDevice::newCamera <> new CCamera"));
       
   199 #endif
       
   200 
       
   201     if (!err) {
       
   202         setCamera(camera);
       
   203     }
       
   204 
       
   205     CX_DEBUG_EXIT_FUNCTION();
       
   206     return CxeErrorHandlingSymbian::map(err);
       
   207 }
       
   208 
       
   209 // end of file