camerauis/cameraxui/cxengine/src/cxecameradevicecontrolsymbian.cpp
changeset 56 01e205c615b9
parent 48 42ba2d16bf40
equal deleted inserted replaced
48:42ba2d16bf40 56:01e205c615b9
    43     qRegisterMetaType<CxeCameraDeviceControl::State>();
    43     qRegisterMetaType<CxeCameraDeviceControl::State>();
    44     initializeStates();
    44     initializeStates();
    45 
    45 
    46     mCameraDevice = new CxeCameraDevice();
    46     mCameraDevice = new CxeCameraDevice();
    47 
    47 
       
    48     //!@todo Temporary delay before reserving camera to avoid timing issues
       
    49     connect(&mReserveTimer, SIGNAL(timeout()), this, SLOT(doReserve()));
       
    50     mReserveTimer.setSingleShot(true);
       
    51 
    48     CX_DEBUG_EXIT_FUNCTION();
    52     CX_DEBUG_EXIT_FUNCTION();
    49 }
    53 }
    50 
    54 
    51 CxeCameraDeviceControlSymbian::~CxeCameraDeviceControlSymbian()
    55 CxeCameraDeviceControlSymbian::~CxeCameraDeviceControlSymbian()
    52 {
    56 {
    74 }
    78 }
    75 
    79 
    76 void CxeCameraDeviceControlSymbian::reserve()
    80 void CxeCameraDeviceControlSymbian::reserve()
    77 {
    81 {
    78     CX_DEBUG_ENTER_FUNCTION();
    82     CX_DEBUG_ENTER_FUNCTION();
    79 
    83     CX_ASSERT_ALWAYS(mCameraDevice);
    80     CX_DEBUG_ASSERT(mCameraDevice && mCameraDevice->camera());
       
    81 
    84 
    82     if (state() == Idle) {
    85     if (state() == Idle) {
    83         setState(Initializing);
    86         setState(Initializing);
    84         mCameraDevice->reserveCamera();
    87         //!@todo Temporary delay before reserving camera to avoid timing issues
       
    88         mReserveTimer.start(2000);
    85         OstTrace0(camerax_performance, CXECAMERADEVICECONTROLSYMBIAN_RESERVE, "msg: e_CX_RESERVE 1");
    89         OstTrace0(camerax_performance, CXECAMERADEVICECONTROLSYMBIAN_RESERVE, "msg: e_CX_RESERVE 1");
       
    90         CX_DEBUG(("HACK: Waiting for 2000ms before really doing reserve()"));
    86     } else if (state() == PendingRelease) {
    91     } else if (state() == PendingRelease) {
    87         // if we get a reserve request and if there is a pending release
    92         // if we get a reserve request and if there is a pending release
    88         // it is just fine to continue the init operation.
    93         // it is just fine to continue the init operation.
    89         setState(Initializing);
    94         setState(Initializing);
    90     } else {
    95     } else {
    91         // nothing to do
    96         // nothing to do
    92     }
    97     }
    93 
    98 
    94     CX_DEBUG_EXIT_FUNCTION();
    99     CX_DEBUG_EXIT_FUNCTION();
    95 }
   100 }
       
   101 
       
   102 void CxeCameraDeviceControlSymbian::doReserve()
       
   103 {
       
   104     CX_DEBUG_ENTER_FUNCTION();
       
   105     CX_ASSERT_ALWAYS(mCameraDevice);
       
   106     mCameraDevice->reserveCamera();
       
   107     CX_DEBUG_EXIT_FUNCTION();
       
   108 }
       
   109 
    96 
   110 
    97 void CxeCameraDeviceControlSymbian::powerOn()
   111 void CxeCameraDeviceControlSymbian::powerOn()
    98 {
   112 {
    99     CX_DEBUG_ENTER_FUNCTION();
   113     CX_DEBUG_ENTER_FUNCTION();
   100 
   114 
   224 
   238 
   225 void CxeCameraDeviceControlSymbian::release()
   239 void CxeCameraDeviceControlSymbian::release()
   226 {
   240 {
   227     CX_DEBUG_ENTER_FUNCTION();
   241     CX_DEBUG_ENTER_FUNCTION();
   228 
   242 
       
   243     //!@todo Temporary delay before reserving camera to avoid timing issues
       
   244     if (mReserveTimer.isActive()) {
       
   245         // release() was called when the timer was active
       
   246         mReserveTimer.stop();
       
   247         mCameraDevice->releaseCamera();
       
   248         setState(Idle);
       
   249         CX_DEBUG_EXIT_FUNCTION();
       
   250         return;
       
   251     }
       
   252 
   229     if (state() == Idle) {
   253     if (state() == Idle) {
   230         // nothing to do
   254         // nothing to do
   231         return;
   255         return;
   232     }
   256     }
   233 
   257