multimediacommscontroller/mmcccontroller/src/mcccamerahandler.cpp
changeset 0 1bce908db942
child 17 a5ac35ca6d81
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2006 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 
       
    18 
       
    19 
       
    20 
       
    21 // INCLUDE FILES
       
    22 #include <e32svr.h>
       
    23 
       
    24 #include "mcccamerahandler.h"
       
    25 #include "mccscreen.h"
       
    26 #include "mcccontrollerlogs.h"
       
    27 #include "mccresources.h"
       
    28 #include "mcctimermanager.h"
       
    29 
       
    30 
       
    31 // EXTERNAL DATA STRUCTURES
       
    32 
       
    33 // EXTERNAL FUNCTION PROTOTYPES  
       
    34 
       
    35 // CONSTANTS
       
    36 
       
    37 const TInt KMccCameraHandlerValueNotAssigned = KMaxTInt;
       
    38 
       
    39 
       
    40 // MACROS
       
    41 
       
    42 #define MCC_ASSERT_CAMERA_VAL_L( a ) \
       
    43 __ASSERT_ALWAYS( a != KMccCameraHandlerValueNotAssigned, User::Leave( KErrNotReady ) );  
       
    44 
       
    45 #define MCC_USE_CAMERA( func_call ) \
       
    46 if ( iCamera ) { iCamera->func_call; }
       
    47 
       
    48 #define MCC_USE_READY_CAMERA( func_call ) \
       
    49 if ( iCamera && IsCameraReady() ) { iCamera->func_call; }
       
    50 
       
    51 #define MCC_USE_SCREEN( func_call ) \
       
    52 if ( iScreen ) { iScreen->func_call; }    
       
    53 
       
    54 // LOCAL CONSTANTS AND MACROS
       
    55 
       
    56 // MODULE DATA STRUCTURES
       
    57 
       
    58 // LOCAL FUNCTION PROTOTYPES
       
    59 
       
    60 // FORWARD DECLARATIONS
       
    61 
       
    62 // ============================= LOCAL FUNCTIONS ===============================
       
    63 
       
    64 
       
    65 // ============================ MEMBER FUNCTIONS ===============================
       
    66 
       
    67 // -----------------------------------------------------------------------------
       
    68 // CMccCameraHandler::CMccCameraHandler
       
    69 // -----------------------------------------------------------------------------
       
    70 //
       
    71 CMccCameraHandler::CMccCameraHandler( 
       
    72     MMccResources& aResources, TInt aCameraIndex, TInt aPriority ):
       
    73     iResources( aResources ),
       
    74 	iState( EInit ),
       
    75 	iPriority( aPriority ), 
       
    76 	iCameraIndex( aCameraIndex ),
       
    77 	iZoom( KMccCameraHandlerValueNotAssigned ),
       
    78 	iDigitalZoom( KMccCameraHandlerValueNotAssigned ),
       
    79 	iContrast( KMccCameraHandlerValueNotAssigned ),
       
    80 	iBrightness( KMccCameraHandlerValueNotAssigned ),
       
    81 	iWhiteBalance( KMccCameraHandlerValueNotAssigned ),
       
    82 	iExposure( KMccCameraHandlerValueNotAssigned )
       
    83     {
       
    84     }
       
    85 
       
    86 // -----------------------------------------------------------------------------
       
    87 // CMccCameraHandler::~CMccCameraHandler
       
    88 // -----------------------------------------------------------------------------
       
    89 //
       
    90 CMccCameraHandler::~CMccCameraHandler()
       
    91     {
       
    92 	__CONTROLLER( "CMccCameraHandler::~CMccCameraHandler" )
       
    93 	
       
    94 	NotifyObservers( KErrCancel );
       
    95 	
       
    96 	iObservers.Reset();
       
    97     iObservers.Close();
       
    98     
       
    99     DoReleaseCamera();
       
   100     DoReleaseScreen();
       
   101 
       
   102     
       
   103 #ifdef MCC_CAMERAHANDLER_TEST
       
   104     RemoveDependencyFile();
       
   105 #endif
       
   106     
       
   107 	__CONTROLLER( "CMccCameraHandler::~CMccCameraHandler, exit" )
       
   108     }
       
   109 
       
   110 // -----------------------------------------------------------------------------
       
   111 // CMccCameraHandler::NewL
       
   112 // -----------------------------------------------------------------------------
       
   113 //
       
   114 CMccCameraHandler* CMccCameraHandler::NewL( 
       
   115     MMccResources& aResources, TInt aCameraIndex, TInt aPriority )
       
   116     {    
       
   117     CMccCameraHandler* self = 
       
   118         new ( ELeave ) CMccCameraHandler( aResources, aCameraIndex, aPriority );
       
   119     CleanupStack::PushL( self );
       
   120     self->ConstructL();
       
   121     CleanupStack::Pop( self );
       
   122     return self;
       
   123     }
       
   124 
       
   125 // -----------------------------------------------------------------------------
       
   126 // CMccCameraHandler::ConstructL
       
   127 // -----------------------------------------------------------------------------
       
   128 //
       
   129 void CMccCameraHandler::ConstructL()
       
   130     {
       
   131 	__CONTROLLER( "CMccCameraHandler::ConstructL" )
       
   132 	
       
   133 #ifdef MCC_CAMERAHANDLER_TEST
       
   134     CreateDependencyFileL();
       
   135 #endif
       
   136     }
       
   137 
       
   138 // -----------------------------------------------------------------------------
       
   139 // CMccCameraHandler::EnableViewFinderL
       
   140 // -----------------------------------------------------------------------------
       
   141 //
       
   142 void CMccCameraHandler::EnableViewFinderL( TMccVideoSinkSetting& aSetting )
       
   143 	{
       
   144 	__CONTROLLER( "CMccCameraHandler::EnableViewFinderL" )
       
   145 
       
   146     if ( iScreen && SettingsChanged( aSetting ) )
       
   147         {
       
   148         DoReleaseScreen();
       
   149         }
       
   150     
       
   151     iViewFinderSettings = aSetting;
       
   152     
       
   153     __CONTROLLER( "CMccCameraHandler::EnableViewFinderL, starting vf" )
       
   154 
       
   155     CCamera* cam = IsCameraReady() ? iCamera : NULL;
       
   156     if ( !iScreen )
       
   157         {                
       
   158 	    __CONTROLLER( "CMccCameraHandler::EnableViewFinderL, starting window" )
       
   159 	    __CONTROLLER_INT2( "CMccCameraHandler::EnableViewFinderL, location",  
       
   160 	                       iViewFinderSettings.iLocation.iX, 
       
   161 	                       iViewFinderSettings.iLocation.iY)
       
   162 		iScreen = CMccScreen::NewL( cam,
       
   163                                     iViewFinderSettings.iLocation, 
       
   164 		                            iViewFinderSettings.iSize, 
       
   165 		                            iViewFinderSettings.iDeviceIndex,
       
   166 		                            iViewFinderSettings.iWindowOrdinalPosition,
       
   167 		                            iViewFinderSettings.iWindowOrdinalPriority );
       
   168         }
       
   169     else
       
   170         {
       
   171         User::LeaveIfError( iScreen->SetCamera( cam ) );
       
   172         }
       
   173    
       
   174     iScreen->StartL();
       
   175     
       
   176     iViewFinderEnabled = ETrue;   
       
   177         
       
   178 	__CONTROLLER( "CMccCameraHandler::EnableViewFinderL, exit" )
       
   179 	}
       
   180 
       
   181 // -----------------------------------------------------------------------------
       
   182 // CMccCameraHandler::DisableViewFinderL
       
   183 // -----------------------------------------------------------------------------
       
   184 //
       
   185 void CMccCameraHandler::DisableViewFinderL()
       
   186 	{
       
   187 	__CONTROLLER( "CMccCameraHandler::DisableViewFinderL" )
       
   188 	
       
   189     DoReleaseScreen();   
       
   190     
       
   191     iViewFinderEnabled = EFalse;
       
   192 	
       
   193 	__CONTROLLER( "CMccCameraHandler::DisableViewFinderL, exit" )
       
   194 	}
       
   195 
       
   196 // -----------------------------------------------------------------------------
       
   197 // CMccCameraHandler::IsViewFinderEnabled
       
   198 // -----------------------------------------------------------------------------
       
   199 //  
       
   200 TBool CMccCameraHandler::IsViewFinderEnabled() const
       
   201     {
       
   202     // Zero size vf is considered as disabled
       
   203     return ( iViewFinderEnabled &&  
       
   204            ( iViewFinderSettings.iSize.iHeight != 0 || 
       
   205              iViewFinderSettings.iSize.iWidth != 0 ) );
       
   206     }
       
   207 
       
   208 // -----------------------------------------------------------------------------
       
   209 // CMccCameraHandler::GetViewFinderSettingsL
       
   210 // -----------------------------------------------------------------------------
       
   211 //	
       
   212 void CMccCameraHandler::GetViewFinderSettingsL( TMccVideoSinkSetting& aSetting )
       
   213     {
       
   214     __CONTROLLER( "CMccCameraHandler::GetViewFinderSettingsL" )
       
   215     __CONTROLLER_INT2( "CMccCameraHandler::GetViewFinderSettingsL, size",  
       
   216 	                       iViewFinderSettings.iSize.iHeight, 
       
   217 	                       iViewFinderSettings.iSize.iWidth)
       
   218     __CONTROLLER_INT2( "CMccCameraHandler::GetViewFinderSettingsL, location",  
       
   219 	                       iViewFinderSettings.iLocation.iX, 
       
   220 	                       iViewFinderSettings.iLocation.iY)
       
   221     aSetting = iViewFinderSettings;    
       
   222     __CONTROLLER( "CMccCameraHandler::GetViewFinderSettingsL,exit" )
       
   223     }
       
   224 
       
   225 // -----------------------------------------------------------------------------
       
   226 // CMccCameraHandler::GetCamInfoL
       
   227 // -----------------------------------------------------------------------------
       
   228 //
       
   229 void CMccCameraHandler::GetCamInfoL( TCameraInfo& aInfo, TBool aForceCameraCreation )
       
   230     {
       
   231 	__CONTROLLER( "CMccCameraHandler::GetCamInfoL" )
       
   232 	
       
   233 	TBool removeTemporaryCamera( EFalse );
       
   234 	if ( aForceCameraCreation && !iCamera )
       
   235 	    {
       
   236 	    iCamera = CreateCameraL();
       
   237 	    removeTemporaryCamera = ETrue;
       
   238 	    }
       
   239 	    
       
   240 	__ASSERT_ALWAYS( iCamera, User::Leave( KErrNotReady ) );
       
   241     
       
   242     iCamera->CameraInfo( aInfo );
       
   243     
       
   244     if ( removeTemporaryCamera )
       
   245         {
       
   246         delete iCamera;
       
   247         iCamera = 0;
       
   248         }
       
   249         
       
   250 	__CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, orientation", aInfo.iOrientation )
       
   251     __CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, options", aInfo.iOptionsSupported )
       
   252 	__CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, flash modes", aInfo.iFlashModesSupported )
       
   253 	__CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, exposure modes", aInfo.iExposureModesSupported )
       
   254 	__CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, white balance modes", aInfo.iWhiteBalanceModesSupported )
       
   255     __CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, min zoom", aInfo.iMinZoom )
       
   256 	__CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, max zoom", aInfo.iMaxZoom )
       
   257 	__CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, max digital zoom", aInfo.iMaxDigitalZoom )
       
   258     __CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, min zoom factor", aInfo.iMinZoomFactor )
       
   259 	__CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, max zoom factor", aInfo.iMaxZoomFactor )
       
   260 	__CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, max digital zoom factor", aInfo.iMaxDigitalZoomFactor )
       
   261     __CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, image sizes", aInfo.iNumImageSizesSupported )
       
   262 	__CONTROLLER_INT1( "CMccCameraHandler::GetCamInfoL, image formats", aInfo.iImageFormatsSupported )	
       
   263     
       
   264 	__CONTROLLER( "CMccCameraHandler::GetCamInfoL, exit" )
       
   265     }
       
   266 
       
   267 // -----------------------------------------------------------------------------
       
   268 // CMccCameraHandler::GetNumOfCamerasL
       
   269 // -----------------------------------------------------------------------------
       
   270 //
       
   271 TInt CMccCameraHandler::GetNumOfCamerasL()
       
   272     {
       
   273 	__CONTROLLER( "CMccCameraHandler::GetNumOfCamerasL" )
       
   274     
       
   275     TInt count = CCamera::CamerasAvailable();
       
   276     
       
   277 	__CONTROLLER_INT1( "CMccCameraHandler::GetNumOfCamerasL, count ", count )
       
   278 	__CONTROLLER( "CMccCameraHandler::GetNumOfCamerasL, exit" )
       
   279 	return count;
       
   280     }
       
   281 // -----------------------------------------------------------------------------
       
   282 // CMccCameraHandler::GetValue
       
   283 // -----------------------------------------------------------------------------
       
   284 //
       
   285 void CMccCameraHandler::GetValueL( TUint32 aParam, TInt& aVal )
       
   286     {
       
   287 	__CONTROLLER( "CMccCameraHandler::GetValue" )
       
   288 	switch( aParam )
       
   289 	    {
       
   290 	    case KMccCamZoomFactor:
       
   291     	    {
       
   292             TInt temp = iCamera ? iCamera->ZoomFactor() : iZoom;
       
   293             MCC_ASSERT_CAMERA_VAL_L( temp )      
       
   294             aVal = temp;
       
   295 	        break;   
       
   296     	    }
       
   297 	    case KMccCamDigitZoomFactor:
       
   298 	        {
       
   299             TInt temp = iCamera ? iCamera->DigitalZoomFactor() : iDigitalZoom;
       
   300             MCC_ASSERT_CAMERA_VAL_L( temp )
       
   301             aVal = temp;
       
   302 	        break;
       
   303 	        }    
       
   304 	    case KMccCamContrast:
       
   305 	    	{
       
   306             TInt temp = iCamera ? iCamera->Contrast() : iContrast;
       
   307             MCC_ASSERT_CAMERA_VAL_L( temp )
       
   308             aVal = temp;
       
   309 	        break;
       
   310 	    	}
       
   311 	    case KMccCamBrightness:
       
   312 	        {
       
   313             TInt temp = iCamera ? iCamera->Brightness() : iBrightness;
       
   314             MCC_ASSERT_CAMERA_VAL_L( temp )
       
   315             aVal = temp;
       
   316 	        break;
       
   317 	        }
       
   318 	    case KMccCamWhiteBalance:
       
   319 	        {
       
   320             TInt temp = iCamera ? iCamera->WhiteBalance() : iWhiteBalance;
       
   321             MCC_ASSERT_CAMERA_VAL_L( temp )
       
   322             aVal = temp;
       
   323 	        break;
       
   324 	        }
       
   325 	    case KMccCamExposure:
       
   326 	        {
       
   327 	        TInt temp = iCamera ? iCamera->Exposure() : iExposure;
       
   328 	        MCC_ASSERT_CAMERA_VAL_L( temp )
       
   329             aVal = temp;
       
   330 	        break;
       
   331 	        }
       
   332 	    default:
       
   333 	        {
       
   334 	        User::Leave( KErrNotSupported );  
       
   335 	        break;
       
   336 	        }
       
   337 	    }
       
   338 	__CONTROLLER_INT2( "CMccCameraHandler::GetValue, param, value", aParam, aVal )
       
   339 	__CONTROLLER( "CMccCameraHandler::GetValue, exit" )
       
   340     }
       
   341 
       
   342 // -----------------------------------------------------------------------------
       
   343 // CMccCameraHandler::SetValue
       
   344 // -----------------------------------------------------------------------------
       
   345 //
       
   346 void CMccCameraHandler::SetValueL( TUint32 aParam, TInt aVal )
       
   347     {
       
   348 	__CONTROLLER( "CMccCameraHandler::SetValue" )
       
   349 	
       
   350 	if ( aVal == KMccCameraHandlerValueNotAssigned )
       
   351 	    {
       
   352 	    __CONTROLLER( "CMccCameraHandler::SetValue, value not assigned, exit" )
       
   353 	    return;
       
   354 	    }
       
   355 	    
       
   356 	__CONTROLLER_INT2( "CMccCameraHandler::SetValue, param, value", aParam, aVal )
       
   357 	switch( aParam )
       
   358 	    {
       
   359 	    case KMccCamZoomFactor:
       
   360             MCC_USE_CAMERA( SetZoomFactorL( aVal ) )
       
   361             iZoom = aVal;
       
   362 	        break;
       
   363 	    case KMccCamDigitZoomFactor:
       
   364             MCC_USE_CAMERA( SetDigitalZoomFactorL( aVal ) )
       
   365             iDigitalZoom = aVal;
       
   366 	        break;
       
   367 	    case KMccCamContrast:
       
   368             MCC_USE_CAMERA( SetContrastL( aVal ) )
       
   369             iContrast = aVal;
       
   370 	        break;
       
   371 	    case KMccCamBrightness:
       
   372             MCC_USE_CAMERA( SetBrightnessL( aVal ) )
       
   373             iBrightness = aVal;
       
   374 	        break;
       
   375 	    case KMccCamWhiteBalance:
       
   376             MCC_USE_CAMERA( SetWhiteBalanceL( static_cast<CCamera::TWhiteBalance>( aVal ) ) )
       
   377             iWhiteBalance = aVal;
       
   378 	        break;
       
   379 	    case KMccCamExposure:
       
   380 	        MCC_USE_CAMERA( SetExposureL( static_cast<CCamera::TExposure>( aVal ) ) )
       
   381 	        iExposure = aVal;
       
   382 	        break;
       
   383 	    default:
       
   384 	        User::Leave( KErrNotSupported );    
       
   385 	    }
       
   386 	__CONTROLLER( "CMccCameraHandler::SetValue, exit" )
       
   387     }
       
   388 
       
   389 // -----------------------------------------------------------------------------
       
   390 // CMccCameraHandler::GetValue
       
   391 // -----------------------------------------------------------------------------
       
   392 //
       
   393 void CMccCameraHandler::GetValueL( TUint32 /*aParam*/, TReal& /*aVal*/ )
       
   394     {
       
   395 	User::Leave( KErrNotSupported );    
       
   396     }
       
   397 
       
   398 // -----------------------------------------------------------------------------
       
   399 // CMccCameraHandler::SetValue
       
   400 // -----------------------------------------------------------------------------
       
   401 //
       
   402 void CMccCameraHandler::SetValueL( TUint32 /*aParam*/, TReal /*aVal*/ )
       
   403     {
       
   404 	User::Leave( KErrNotSupported );    
       
   405     }
       
   406 
       
   407 // -----------------------------------------------------------------------------
       
   408 // CMccCameraHandler::ReserveResourcesL
       
   409 // -----------------------------------------------------------------------------
       
   410 //
       
   411 void CMccCameraHandler::ReserveResourcesL( 
       
   412     TInt aCameraIndex, TBool aForceCameraCreation )
       
   413     {
       
   414     __CONTROLLER_INT1( "CMccCameraHandler::ReserveResourcesL, forced:", 
       
   415                        aForceCameraCreation )
       
   416     
       
   417     // If camera is in use, camera with different index cannot be reserved
       
   418     if ( iCamera )
       
   419         {
       
   420         __ASSERT_ALWAYS( iCameraIndex == aCameraIndex, User::Leave( KErrInUse ) );
       
   421         }
       
   422     else
       
   423         {
       
   424         __CONTROLLER_INT1( "CMccCameraHandler::ReserveResourcesL, creating camera (index):", 
       
   425                            aCameraIndex )
       
   426         TBool bIndexChanged = (iCameraIndex != aCameraIndex);
       
   427         iCameraIndex = aCameraIndex;        
       
   428         iCamera = CreateCameraL();
       
   429         if ( bIndexChanged )
       
   430             {
       
   431             /* Reset the camera handler internal values , for example zoom factor */
       
   432             ResetCameraHandler();
       
   433             }
       
   434         }   
       
   435         
       
   436     __ASSERT_ALWAYS( iCamera, User::Leave( KErrNotReady ) );
       
   437 
       
   438     if ( iState == EFailed )
       
   439         {
       
   440         __CONTROLLER( "CMccCameraHandler::ReserveResourcesL, async failure has occured!" )  
       
   441         User::Leave( KErrInUse );
       
   442         }
       
   443     else if ( iState == EInit )
       
   444         {
       
   445         __CONTROLLER( "CMccCameraHandler::ReserveResourcesL, reserving" )  
       
   446         
       
   447         iCamera->Reserve();
       
   448         iState = EReserving;
       
   449         }
       
   450     else
       
   451         {
       
   452         __CONTROLLER( "CMccCameraHandler::ReserveResourcesL, already reserved" )  
       
   453         }
       
   454     
       
   455     iForcedResourceReservation = aForceCameraCreation;
       
   456     
       
   457     __CONTROLLER( "CMccCameraHandler::ReserveResourcesL, exit" )
       
   458     }
       
   459 
       
   460 // -----------------------------------------------------------------------------
       
   461 // CMccCameraHandler::ReleaseResources
       
   462 // -----------------------------------------------------------------------------
       
   463 //       
       
   464 void CMccCameraHandler::ReleaseResources()
       
   465     {
       
   466     __CONTROLLER( "CMccCameraHandler::ReleaseResources" )
       
   467     
       
   468     if ( iForcedResourceReservation )
       
   469         {
       
   470         __CONTROLLER( "CMccCameraHandler::  forcefully reserved, not releasing" )
       
   471         }
       
   472     else if ( !IsViewFinderEnabled() )
       
   473         {
       
   474         DoReleaseScreen();
       
   475         DoReleaseCamera();
       
   476         }
       
   477     else
       
   478         {
       
   479         // Camera is not really released in case viewfinder is still enabled.
       
   480         __CONTROLLER( "CMccCameraHandler:: Do not release yet, wait for vf disabling" )
       
   481         }
       
   482     
       
   483 	  
       
   484     __CONTROLLER( "CMccCameraHandler::ReleaseResources, exit" )
       
   485     }
       
   486 
       
   487 // -----------------------------------------------------------------------------
       
   488 // CMccCameraHandler::Handle
       
   489 // -----------------------------------------------------------------------------
       
   490 //
       
   491 TUint32 CMccCameraHandler::Handle()
       
   492 	{
       
   493 	if ( iCamera )
       
   494 	    {
       
   495 	    return iCamera->Handle();
       
   496 	    }
       
   497 	else
       
   498 	    {
       
   499 	    return 0;
       
   500 	    }
       
   501 	}
       
   502 	    
       
   503 // -----------------------------------------------------------------------------
       
   504 // CMccCameraHandler::IsCameraReady
       
   505 // -----------------------------------------------------------------------------
       
   506 //        
       
   507 TBool CMccCameraHandler::IsCameraReady()
       
   508     {
       
   509     return ( iState == EPowered ); 
       
   510     }
       
   511 
       
   512 // -----------------------------------------------------------------------------
       
   513 // CMccCameraHandler::MonitorCameraReservation
       
   514 // -----------------------------------------------------------------------------
       
   515 //        
       
   516 TInt CMccCameraHandler::MonitorCameraReservation( 
       
   517     MMccCameraHandlerObserver& aObserver, 
       
   518     TBool aForceCameraReserve )
       
   519     {
       
   520     __CONTROLLER_INT1( "CMccCameraHandler::MonitorCameraReservation, force", 
       
   521                        aForceCameraReserve )
       
   522     TInt err( KErrNone );
       
   523     if ( iState != EPowered )
       
   524         {
       
   525         __CONTROLLER( "CMccCameraHandler::MonitorCameraReservation, start monitoring" )
       
   526         err = iObservers.Append( &aObserver );
       
   527         if ( !err && aForceCameraReserve )
       
   528             {
       
   529 
       
   530             TRAP( err, ReserveResourcesL( iCameraIndex, aForceCameraReserve ) );    
       
   531             }
       
   532         }
       
   533     else
       
   534         {
       
   535         // Camera is already ready for usage
       
   536         err = KErrArgument;
       
   537         }
       
   538     
       
   539     __CONTROLLER_INT1( "CMccCameraHandler::MonitorCameraReservation, exit with err", err )   
       
   540     return err;
       
   541     }
       
   542 
       
   543 // -----------------------------------------------------------------------------
       
   544 // CMccCameraHandler::StopCameraMonitoring
       
   545 // -----------------------------------------------------------------------------
       
   546 //  
       
   547 TInt CMccCameraHandler::StopCameraMonitoring( 
       
   548     MMccCameraHandlerObserver& aObserver,
       
   549     TBool aForceCameraRelease )
       
   550     {
       
   551     __CONTROLLER_INT1( "CMccCameraHandler::StopCameraMonitoring, force",
       
   552                        aForceCameraRelease )   
       
   553     TInt err( KErrNone );
       
   554     TInt index = iObservers.Find( &aObserver );
       
   555     if ( index != KErrNotFound )
       
   556         {
       
   557         iObservers.Remove( index );
       
   558         }
       
   559     else
       
   560         {
       
   561         err = KErrNotFound;
       
   562         }
       
   563 
       
   564     if ( iForcedResourceReservation && aForceCameraRelease )
       
   565         {
       
   566         __CONTROLLER( "CMccCameraHandler::StopCameraMonitoring, releasing resource" )
       
   567         iForcedResourceReservation = EFalse;
       
   568         ReleaseResources();
       
   569         }
       
   570     
       
   571     __CONTROLLER_INT1( "CMccCameraHandler::StopCameraMonitoring, exit with err", err )   
       
   572     return err;
       
   573     }
       
   574 
       
   575 // -----------------------------------------------------------------------------
       
   576 // CMccCameraHandler::HandleEvent
       
   577 // -----------------------------------------------------------------------------
       
   578 //
       
   579 void CMccCameraHandler::HandleEvent( const TECAMEvent& aEvent )
       
   580     {
       
   581     __CONTROLLER( "CMccCameraHandler::HandleEvent" )
       
   582     
       
   583     if ( aEvent.iEventType == KUidECamEventReserveComplete )
       
   584         {
       
   585         ReserveComplete( aEvent.iErrorCode );
       
   586         }
       
   587     else if ( aEvent.iEventType == KUidECamEventPowerOnComplete )
       
   588         {
       
   589         PowerOnComplete( aEvent.iErrorCode );
       
   590         }
       
   591     else
       
   592         {
       
   593         __CONTROLLER( "CMccCameraHandler::HandleEvent, unknown event" )
       
   594         }
       
   595     }
       
   596 
       
   597 // -----------------------------------------------------------------------------
       
   598 // CMccCameraHandler::ViewFinderReady
       
   599 // -----------------------------------------------------------------------------
       
   600 //
       
   601 void CMccCameraHandler::ViewFinderReady( 
       
   602     MCameraBuffer& aCameraBuffer, 
       
   603     TInt aError )
       
   604     {
       
   605     if ( !aError )
       
   606 		{
       
   607 		if ( aCameraBuffer.NumFrames() > 0 )
       
   608 		    {
       
   609 		    TRAP( aError, DoViewFinderFrameReady( aCameraBuffer.BitmapL( 0 ) ) );
       
   610 		    }
       
   611 		else
       
   612 		    {
       
   613 		    #if ( defined __WINSCW__ ) || ( defined __WINS__ )
       
   614 		    // Bitmap might be missing in emulator, ignore the problem
       
   615 		    __CONTROLLER( "CMccCameraHandler::ViewFinderReady, no bitmap" )
       
   616 		    #else  
       
   617 		    aError = KErrNotReady;
       
   618 		    #endif
       
   619 		    }
       
   620 		}
       
   621 	if ( aError )
       
   622 	    {
       
   623 	    __CONTROLLER_INT1( "CMccCameraHandler::ViewFinderReady, error:", aError )
       
   624 	    iState = EFailed;
       
   625 	    }
       
   626 	    
       
   627 	aCameraBuffer.Release();
       
   628     }
       
   629 
       
   630 // -----------------------------------------------------------------------------
       
   631 // CMccCameraHandler::ImageBufferReady
       
   632 // -----------------------------------------------------------------------------
       
   633 //
       
   634 void CMccCameraHandler::ImageBufferReady( 
       
   635     MCameraBuffer& /*aCameraBuffer*/,TInt /*aError*/ )
       
   636     {
       
   637     }
       
   638 
       
   639 // -----------------------------------------------------------------------------
       
   640 // CMccCameraHandler::VideoBufferReady
       
   641 // -----------------------------------------------------------------------------
       
   642 //
       
   643 void CMccCameraHandler::VideoBufferReady( 
       
   644     MCameraBuffer& /*aCameraBuffer*/,TInt /*aError*/ )
       
   645     {
       
   646     }
       
   647 
       
   648 // -----------------------------------------------------------------------------
       
   649 // CMccCameraHandler::TimerExpiredL
       
   650 // -----------------------------------------------------------------------------
       
   651 //
       
   652 void CMccCameraHandler::TimerExpiredL( TMccTimerId /*aTimerId*/, TAny* /*aTimerParam*/ )
       
   653     { 
       
   654     __CONTROLLER( "CMccCameraHandler::TimerExpiredL, NOP" )
       
   655     }
       
   656     
       
   657 // -----------------------------------------------------------------------------
       
   658 // CMccCameraHandler::ReserveComplete
       
   659 // -----------------------------------------------------------------------------
       
   660 //
       
   661 void CMccCameraHandler::ReserveComplete( TInt aError )
       
   662 	{
       
   663 	__CONTROLLER( "CMccCameraHandler::ReserveComplete" )
       
   664 	DoReserveComplete( aError );
       
   665 	}
       
   666 	
       
   667 // -----------------------------------------------------------------------------
       
   668 // CMccCameraHandler::PowerOnComplete
       
   669 // -----------------------------------------------------------------------------
       
   670 //
       
   671 void CMccCameraHandler::PowerOnComplete( TInt aError )
       
   672 	{
       
   673 	__CONTROLLER( "CMccCameraHandler::PowerOnComplete" )
       
   674 	DoPowerOnComplete( aError );
       
   675 	}
       
   676 
       
   677 // -----------------------------------------------------------------------------
       
   678 // CMccCameraHandler::ViewFinderFrameReady
       
   679 // -----------------------------------------------------------------------------
       
   680 //
       
   681 void CMccCameraHandler::ViewFinderFrameReady( CFbsBitmap& aFrame )
       
   682 	{
       
   683 	DoViewFinderFrameReady( aFrame );
       
   684 	}
       
   685 
       
   686 // -----------------------------------------------------------------------------
       
   687 // CMccCameraHandler::ImageReady
       
   688 // -----------------------------------------------------------------------------
       
   689 //
       
   690 void CMccCameraHandler::ImageReady( CFbsBitmap* /*aBitmap*/, HBufC8* /*aData*/, TInt /*aError*/ )
       
   691 	{
       
   692 	
       
   693 	}
       
   694 
       
   695 // -----------------------------------------------------------------------------
       
   696 // CMccCameraHandler::FrameBufferReady
       
   697 // -----------------------------------------------------------------------------
       
   698 //
       
   699 void CMccCameraHandler::FrameBufferReady( MFrameBuffer* /*aFrameBuffer*/, TInt /*aError*/ )
       
   700 	{	
       
   701 	}
       
   702 
       
   703 // -----------------------------------------------------------------------------
       
   704 // CMccCameraHandler::DoReserveComplete
       
   705 // -----------------------------------------------------------------------------
       
   706 //
       
   707 void CMccCameraHandler::DoReserveComplete( TInt aError )
       
   708 	{
       
   709 	__CONTROLLER_INT1( "CMccCameraHandler::DoReserveComplete, with value", aError )
       
   710 	if ( aError == KErrNone )
       
   711 		{
       
   712 		__CONTROLLER( "CMccCameraHandler::DoReserveComplete, powering on camera" )
       
   713 		iState = EReserved;
       
   714 		iCamera->PowerOn();
       
   715 		}
       
   716 	else
       
   717 		{
       
   718 		__CONTROLLER_INT1( "CMccCameraHandler::DoReserveComplete, reserving failed", aError )
       
   719 		iState = EFailed;
       
   720 		
       
   721 		// Notify observers immediately since reservation is not continued
       
   722 		NotifyObservers( aError );
       
   723 		}	
       
   724 	__CONTROLLER( "CMccCameraHandler::DoReserveComplete, exit" )
       
   725 	}
       
   726 	
       
   727 // -----------------------------------------------------------------------------
       
   728 // CMccCameraHandler::DoPowerOnComplete
       
   729 // -----------------------------------------------------------------------------
       
   730 //
       
   731 void CMccCameraHandler::DoPowerOnComplete( TInt aError )
       
   732 	{
       
   733 	__CONTROLLER_INT1( "CMccCameraHandler::DoPowerOnComplete, with value", aError )
       
   734 	if ( aError == KErrNone )
       
   735 		{
       
   736 		iState = EPowered;
       
   737 		
       
   738 		// Viewfinder was enabled before resource release, enable again.
       
   739 		// Also set old camera settings.
       
   740 		if ( iViewFinderEnabled )
       
   741 		    {
       
   742 		    TRAP( aError, 
       
   743 		        {
       
   744 		        EnableViewFinderL( iViewFinderSettings );
       
   745 		        UpdateCameraSettingsL();
       
   746 		        } 
       
   747 		        );
       
   748 		    if ( aError )
       
   749 		        {
       
   750 		        __CONTROLLER_INT1( "CMccCameraHandler::DoPowerOnComplete, setting renew failure", 
       
   751 		                           aError )
       
   752 		        iState = EFailed;    
       
   753 		        } 
       
   754 		    }
       
   755 		}
       
   756 	else
       
   757 		{
       
   758 		__CONTROLLER_INT1( "CMccCameraHandler::DoPowerOnComplete, powering failed", aError )
       
   759 		iState = EFailed;
       
   760 		}	
       
   761 	
       
   762 	// Notify observers about success or failure
       
   763     NotifyObservers( aError );
       
   764     
       
   765 	__CONTROLLER( "CMccCameraHandler::DoPowerOnComplete, exit" )
       
   766 	}
       
   767 
       
   768 // -----------------------------------------------------------------------------
       
   769 // CMccCameraHandler::DoViewFinderFrameReady
       
   770 // -----------------------------------------------------------------------------
       
   771 //
       
   772 void CMccCameraHandler::DoViewFinderFrameReady( CFbsBitmap& aFrame )
       
   773 	{
       
   774 	MCC_USE_SCREEN( Draw( aFrame ) )
       
   775 	}
       
   776 		
       
   777 // -----------------------------------------------------------------------------
       
   778 // CMccCameraHandler::NotifyObservers
       
   779 // -----------------------------------------------------------------------------
       
   780 //
       
   781 void CMccCameraHandler::NotifyObservers( TInt aError )
       
   782 	{	
       
   783 	__CONTROLLER_INT1( "CMccCameraHandler::NotifyObservers, error", aError )
       
   784 	
       
   785 	TInt lastIndex( iObservers.Count() - 1 );
       
   786 	for ( TInt i = lastIndex; i >= 0; i-- )
       
   787 	    {
       
   788 	    iObservers[ i ]->CameraReady( aError );
       
   789 	    iObservers.Remove( i );
       
   790 	    }
       
   791 	    
       
   792     __CONTROLLER( "CMccCameraHandler::NotifyObservers, exit" )	
       
   793 	}
       
   794 
       
   795 // -----------------------------------------------------------------------------
       
   796 // CMccCameraHandler::SettingsChanged
       
   797 // -----------------------------------------------------------------------------
       
   798 //	
       
   799 TBool CMccCameraHandler::SettingsChanged( const TMccVideoSinkSetting& aSetting ) const
       
   800     {
       
   801     return ( iViewFinderSettings.iLocation != aSetting.iLocation ||
       
   802              iViewFinderSettings.iSize != aSetting.iSize ||
       
   803              iViewFinderSettings.iDeviceIndex != aSetting.iDeviceIndex ||
       
   804              iViewFinderSettings.iWindowOrdinalPosition != aSetting.iWindowOrdinalPosition ||
       
   805              iViewFinderSettings.iWindowOrdinalPriority != aSetting.iWindowOrdinalPriority );
       
   806     }
       
   807 
       
   808 // -----------------------------------------------------------------------------
       
   809 // CMccCameraHandler::UpdateCameraSettingsL
       
   810 // -----------------------------------------------------------------------------
       
   811 //
       
   812 void CMccCameraHandler::UpdateCameraSettingsL()
       
   813     {
       
   814     __CONTROLLER( "CMccCameraHandler::UpdateCameraSettingsL" )
       
   815     
       
   816     SetValueL( KMccCamZoomFactor, iZoom );
       
   817 	SetValueL( KMccCamDigitZoomFactor, iDigitalZoom );
       
   818     SetValueL( KMccCamContrast, iContrast );
       
   819 	SetValueL( KMccCamBrightness, iBrightness );
       
   820 	SetValueL( KMccCamWhiteBalance, iWhiteBalance );
       
   821 	SetValueL( KMccCamExposure, iExposure );
       
   822 	
       
   823 	__CONTROLLER( "CMccCameraHandler::UpdateCameraSettingsL, exit" )
       
   824     }
       
   825 
       
   826 // -----------------------------------------------------------------------------
       
   827 // CMccCameraHandler::CreateCameraL
       
   828 // -----------------------------------------------------------------------------
       
   829 //
       
   830 CCamera* CMccCameraHandler::CreateCameraL()
       
   831     {
       
   832     __CONTROLLER( "CMccCameraHandler::CreateCameraL" )
       
   833     
       
   834     CCamera* camera = NULL;
       
   835     TRAPD( err, camera = CCamera::New2L( *this, iCameraIndex, iPriority ) );
       
   836     __CONTROLLER_INT1( "CMccCameraHandler::CreateCameraL, camera2 creation, err:", err )
       
   837     
       
   838     if ( err == KErrNotSupported )
       
   839         {
       
   840         camera = CCamera::NewL( *this, iCameraIndex );
       
   841         }
       
   842     else
       
   843         {
       
   844         User::LeaveIfError( err );
       
   845         }
       
   846     
       
   847     __CONTROLLER( "CMccCameraHandler::CreateCameraL, exit" )
       
   848     return camera;
       
   849     }
       
   850 
       
   851 // -----------------------------------------------------------------------------
       
   852 // CMccCameraHandler::DoReleaseScreen
       
   853 // -----------------------------------------------------------------------------
       
   854 //
       
   855 void CMccCameraHandler::DoReleaseScreen()
       
   856     {
       
   857     __CONTROLLER( "CMccCameraHandler::DoReleaseScreen" );
       
   858     
       
   859     delete iScreen;
       
   860     iScreen = NULL;
       
   861     
       
   862     __CONTROLLER( "CMccCameraHandler::DoReleaseScreen, exit" )
       
   863     }
       
   864 
       
   865 // -----------------------------------------------------------------------------
       
   866 // CMccCameraHandler::DoReleaseCamera
       
   867 // -----------------------------------------------------------------------------
       
   868 //
       
   869 void CMccCameraHandler::DoReleaseCamera()
       
   870     {
       
   871     __CONTROLLER( "CMccCameraHandler::DoReleaseCamera" )
       
   872     
       
   873     MCC_USE_SCREEN( SetCamera( NULL ) )
       
   874     
       
   875     if ( iCamera )
       
   876         {	
       
   877         iCamera->Release();
       
   878         }
       
   879     
       
   880     delete iCamera;
       
   881     iCamera = NULL;
       
   882 
       
   883     iState = EInit;
       
   884     
       
   885     __CONTROLLER( "CMccCameraHandler::DoReleaseCamera, exit" )
       
   886     }
       
   887 
       
   888 // -----------------------------------------------------------------------------
       
   889 // CMccCameraHandler::ResetCameraHandler
       
   890 // -----------------------------------------------------------------------------
       
   891 //
       
   892 void CMccCameraHandler::ResetCameraHandler()
       
   893     {
       
   894     __CONTROLLER( "CMccCameraHandler::ResetCameraHandler, entry" )
       
   895     iZoom = KMccCameraHandlerValueNotAssigned;
       
   896     iDigitalZoom = KMccCameraHandlerValueNotAssigned;
       
   897     iContrast = KMccCameraHandlerValueNotAssigned;
       
   898     iBrightness = KMccCameraHandlerValueNotAssigned;
       
   899     iWhiteBalance = KMccCameraHandlerValueNotAssigned;
       
   900     iExposure = KMccCameraHandlerValueNotAssigned;
       
   901     __CONTROLLER( "CMccCameraHandler::ResetCameraHandler, exit" )
       
   902     }    
       
   903 
       
   904 #ifdef MCC_CAMERAHANDLER_TEST
       
   905 
       
   906 _LIT( KTestCameraPluginName, "C:\\102070cc.txt" );
       
   907 
       
   908 // -----------------------------------------------------------------------------
       
   909 // CMccCameraHandler::CreateDependencyFileL
       
   910 // -----------------------------------------------------------------------------
       
   911 //	
       
   912 void CMccCameraHandler::CreateDependencyFileL()
       
   913 	{
       
   914 	// Enforce dependency
       
   915 	// create the file the plugin depends on.
       
   916 	User::LeaveIfError( iFsSession.Connect() );
       
   917 	RFile file;
       
   918 	TInt err = file.Replace( iFsSession, KTestCameraPluginName, EFileShareAny );
       
   919   	file.Close();
       
   920   	if ( err != KErrNone )
       
   921   		{
       
   922 	    User::LeaveIfError( KErrNotSupported );
       
   923   		}
       
   924    	User::LeaveIfError( iFbsSession.Connect( iFsSession ) );
       
   925 	}
       
   926 
       
   927 // -----------------------------------------------------------------------------
       
   928 // CMccCameraHandler::RemoveDependencyFile
       
   929 // -----------------------------------------------------------------------------
       
   930 //	
       
   931 void CMccCameraHandler::RemoveDependencyFile()
       
   932 	{
       
   933 	iFbsSession.Disconnect();
       
   934 	iFsSession.Delete( KTestCameraPluginName );
       
   935 	iFsSession.Close();
       
   936 	}		
       
   937 
       
   938 #endif
       
   939 	
       
   940 // End of file
       
   941