mmsharing/mmshengine/src/musengcamerahandler.cpp
branchRCL_3
changeset 33 bc78a40cd63c
parent 32 73a1feb507fb
child 35 6c57ef9392d2
equal deleted inserted replaced
32:73a1feb507fb 33:bc78a40cd63c
     1 /*
       
     2 * Copyright (c) 2005 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 // USER
       
    20 #include "musengcamerahandler.h"
       
    21 #include "musunittesting.h"
       
    22 #include "musengmceutils.h"
       
    23 #include "musenglogger.h"
       
    24 
       
    25 // SYSTEM
       
    26 #include <mcemanager.h>
       
    27 #include <mcecamerasource.h>
       
    28 #include <mcevideostream.h>
       
    29 #include <mcertpsink.h>
       
    30 #include <mcedisplaysink.h>
       
    31 #include <mcefilesink.h>
       
    32 #include <mcesession.h>
       
    33 
       
    34 const TInt KMaxBrightness = 100;
       
    35 const TInt KMinBrightness = -100;
       
    36 const TInt KBrightnessStepSize = 10;
       
    37 
       
    38 
       
    39 //Number of big and small zoom steps on Zoom scale
       
    40 const TInt KZoomBigStepCount = 15;
       
    41 const TInt KZoomSmallStepCount = KZoomBigStepCount*2;
       
    42 const TInt KZoomStepMinSize = 1;
       
    43 
       
    44 const TInt64 KZoomFasterTime = 333333; // 1/3 second
       
    45 
       
    46 
       
    47 // -----------------------------------------------------------------------------
       
    48 //
       
    49 // -----------------------------------------------------------------------------
       
    50 //
       
    51 TMusEngCameraHandler::TMusEngCameraHandler() :
       
    52     iSession( NULL ),
       
    53     iDefaultBrightness( 0 ),
       
    54     iZoomInTime(0),
       
    55     iZoomOutTime(0),
       
    56     iSmallZoomStep( KZoomStepMinSize ),
       
    57     iBigZoomStep( KZoomStepMinSize ),
       
    58     iCurrentCamera( TMusEngCameraHandler::ECameraNotAvailable ),
       
    59     iCameraUsage( MusSettingsKeys::EUseCameraSwapping )
       
    60     {
       
    61     }
       
    62 
       
    63 // -----------------------------------------------------------------------------
       
    64 // From MLcCameraControl
       
    65 // -----------------------------------------------------------------------------
       
    66 //
       
    67 TInt TMusEngCameraHandler::LcCameraCountL()
       
    68     {
       
    69     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::LcCameraCountL()" )
       
    70     __ASSERT_ALWAYS( iSession != NULL, User::Leave( KErrNotReady ) );
       
    71     
       
    72     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
    73     __ASSERT_ALWAYS( camera != NULL, User::Leave( KErrNotReady ) );
       
    74     TInt camerasAvailable = camera->CamerasAvailable();
       
    75     
       
    76     if ( camerasAvailable > 1 && 
       
    77          iCameraUsage != MusSettingsKeys::EUseCameraSwapping )
       
    78         {
       
    79         camerasAvailable = 1;
       
    80         }
       
    81          
       
    82     MUS_LOG1( "mus: [ENGINE]  <- TMusEngCameraHandler::LcCameraCountL()",
       
    83             camerasAvailable );
       
    84     return camerasAvailable;
       
    85     }
       
    86 
       
    87 // -----------------------------------------------------------------------------
       
    88 // From MLcCameraControl
       
    89 // -----------------------------------------------------------------------------
       
    90 //
       
    91 TInt TMusEngCameraHandler::CurrentLcCameraIndex()
       
    92     {
       
    93     return iCurrentCamera;
       
    94     }
       
    95 
       
    96 // -----------------------------------------------------------------------------
       
    97 // From MLcCameraControl
       
    98 // -----------------------------------------------------------------------------
       
    99 //
       
   100 void TMusEngCameraHandler::ToggleLcCameraL()
       
   101     {
       
   102     TCurrentCamera newCamera( TMusEngCameraHandler::EBackCamera );
       
   103     if ( iCurrentCamera == TMusEngCameraHandler::EBackCamera )
       
   104         {
       
   105         newCamera = TMusEngCameraHandler::EFrontCamera;
       
   106         }
       
   107     ChangeCameraL( newCamera );   
       
   108     }
       
   109 
       
   110 // -----------------------------------------------------------------------------
       
   111 // From MLcBrightnessControl
       
   112 // -----------------------------------------------------------------------------
       
   113 //
       
   114 TInt TMusEngCameraHandler::MinLcBrightnessL()
       
   115     {
       
   116     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::MinLcBrightnessL()" )
       
   117  
       
   118     // minimum brightness is not in camera info, but a constant
       
   119 
       
   120     MUS_LOG1( "mus: [ENGINE]  <- TMusEngCameraHandler::MinLcBrightnessL(): %d",
       
   121               KMinBrightness )
       
   122 
       
   123     return KMinBrightness;
       
   124     }
       
   125 
       
   126 // -----------------------------------------------------------------------------
       
   127 // From MLcBrightnessControl
       
   128 // -----------------------------------------------------------------------------
       
   129 //
       
   130 TInt TMusEngCameraHandler::MaxLcBrightnessL()
       
   131     {
       
   132     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::MaxLcBrightnessL()" )
       
   133     
       
   134     // maximum brightness is not in camera info, but a constant
       
   135 
       
   136     MUS_LOG1( "mus: [ENGINE]  <- TMusEngCameraHandler::MaxLcBrightnessL(): %d",
       
   137               KMaxBrightness )
       
   138 
       
   139     return KMaxBrightness;
       
   140     }
       
   141 
       
   142 // -----------------------------------------------------------------------------
       
   143 // From MLcBrightnessControl
       
   144 // -----------------------------------------------------------------------------
       
   145 //
       
   146 TInt TMusEngCameraHandler::LcBrightnessL()
       
   147     {
       
   148     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::LcBrightnessL()" )
       
   149     
       
   150     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   151 
       
   152     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   153     TInt brightness = camera->BrightnessL();
       
   154 
       
   155     MUS_LOG1( "mus: [ENGINE]  <- TMusEngCameraHandler::LcBrightnessL(): %d",
       
   156               brightness )
       
   157 
       
   158     return brightness;
       
   159     }
       
   160 
       
   161 // -----------------------------------------------------------------------------
       
   162 // From MLcBrightnessControl
       
   163 // -----------------------------------------------------------------------------
       
   164 //
       
   165 void TMusEngCameraHandler::SetLcBrightnessL( TInt aValue )
       
   166     {
       
   167     MUS_LOG1( "mus: [ENGINE]  -> TMusEngCameraHandler::SetLcBrightnessL( %d )",
       
   168               aValue )
       
   169 
       
   170     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   171 
       
   172     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   173     camera->SetBrightnessL( aValue );
       
   174 
       
   175     MUS_LOG( "mus: [ENGINE]  <- TMusEngCameraHandler::SetLcBrightnessL()" )
       
   176     }
       
   177 
       
   178 // -----------------------------------------------------------------------------
       
   179 // From MLcBrightnessControl
       
   180 // -----------------------------------------------------------------------------
       
   181 //
       
   182 void TMusEngCameraHandler::IncreaseLcBrightnessL()
       
   183     {
       
   184     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::IncreaseLcBrightnessL()" )
       
   185     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   186 
       
   187     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   188 
       
   189     TInt newBrightness = camera->BrightnessL() + KBrightnessStepSize;
       
   190     
       
   191     if ( newBrightness < KMaxBrightness )
       
   192         {
       
   193         camera->SetBrightnessL( newBrightness );
       
   194         }
       
   195     else
       
   196         {
       
   197         camera->SetBrightnessL( KMaxBrightness );
       
   198         }
       
   199 
       
   200     MUS_LOG( "mus: [ENGINE]  <- TMusEngCameraHandler::IncreaseLcBrightnessL()" )
       
   201     }
       
   202 
       
   203 // -----------------------------------------------------------------------------
       
   204 // From MLcBrightnessControl
       
   205 // -----------------------------------------------------------------------------
       
   206 //
       
   207 void TMusEngCameraHandler::DecreaseLcBrightnessL()
       
   208     {
       
   209     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::DecreaseLcBrightnessL()" )
       
   210     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   211 
       
   212     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   213 
       
   214     TInt newBrightness = camera->BrightnessL() - KBrightnessStepSize;
       
   215 
       
   216     if ( newBrightness > KMinBrightness )
       
   217         {
       
   218         camera->SetBrightnessL( newBrightness );
       
   219         }
       
   220     else
       
   221         {
       
   222         camera->SetBrightnessL( KMinBrightness );
       
   223         }
       
   224 
       
   225     MUS_LOG( "mus: [ENGINE]  <- TMusEngCameraHandler::DecreaseLcBrightnessL()" )
       
   226     }
       
   227 
       
   228 // -----------------------------------------------------------------------------
       
   229 // From MLcZoomControl
       
   230 // -----------------------------------------------------------------------------
       
   231 //
       
   232 TInt TMusEngCameraHandler::MinLcZoomL()
       
   233     {
       
   234     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::MinLcZoomL()" )
       
   235     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   236 
       
   237     // Although we do not need camera for return value, we have to have it in
       
   238     // order to have proper iCameraInfo
       
   239     MusEngMceUtils::GetCameraL( *iSession );
       
   240 
       
   241     MUS_LOG1( "mus: [ENGINE]  <- TMusEngCameraHandler::MinLcZoomL( %d )",
       
   242               iCameraInfo.iMinZoom )
       
   243 
       
   244     return iCameraInfo.iMinZoom;
       
   245     }
       
   246 
       
   247 // -----------------------------------------------------------------------------
       
   248 // From MLcZoomControl
       
   249 // -----------------------------------------------------------------------------
       
   250 //
       
   251 TInt TMusEngCameraHandler::MaxLcZoomL()
       
   252     {
       
   253     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::MaxLcZoomL()" )
       
   254     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   255 
       
   256     // Although we do not need camera for return value, we have to have it in
       
   257     // order to have proper iCameraInfo
       
   258     MusEngMceUtils::GetCameraL( *iSession );
       
   259 
       
   260     TInt maxZoom = iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom;
       
   261 
       
   262     MUS_LOG1( "mus: [ENGINE]     Max optical zoom( %d )",
       
   263               iCameraInfo.iMaxZoom )
       
   264     MUS_LOG1( "mus: [ENGINE]     Max digital zoom( %d )",
       
   265               iCameraInfo.iMaxDigitalZoom )
       
   266     MUS_LOG1( "mus: [ENGINE]  <- TMusEngCameraHandler::MaxLcZoomL( %d )",
       
   267               maxZoom )
       
   268 
       
   269     return maxZoom;
       
   270     }
       
   271 
       
   272 // -----------------------------------------------------------------------------
       
   273 // From MLcZoomControl
       
   274 // -----------------------------------------------------------------------------
       
   275 //
       
   276 TInt TMusEngCameraHandler::LcZoomValueL()
       
   277     {
       
   278     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::LcZoomValueL" )
       
   279     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   280 
       
   281     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   282 
       
   283     TInt currentZoom = camera->ZoomFactorL() + camera->DigitalZoomFactorL();
       
   284 
       
   285     MUS_LOG1( "mus: [ENGINE]  <- TMusEngCameraHandler::LcZoomValueL( %d )",
       
   286               currentZoom )
       
   287 
       
   288     return currentZoom;
       
   289     }
       
   290 
       
   291 // -----------------------------------------------------------------------------
       
   292 // From MLcZoomControl
       
   293 // -----------------------------------------------------------------------------
       
   294 //
       
   295 void TMusEngCameraHandler::SetLcZoomValueL( TInt aValue )
       
   296     {
       
   297     MUS_LOG1( "mus: [ENGINE]  -> TMusEngCameraHandler::SetLcZoomValueL( %d )", 
       
   298               aValue )
       
   299               
       
   300     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   301     __ASSERT_ALWAYS( aValue <= MaxLcZoomL() && aValue >= MinLcZoomL(), 
       
   302                      User::Leave( KErrArgument ) );
       
   303     
       
   304     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   305 
       
   306     if ( aValue <= iCameraInfo.iMaxZoom )
       
   307         {
       
   308         MUS_LOG( "mus: [ENGINE]     Optical zoom factor increased" )
       
   309         camera->SetZoomFactorL( aValue ); 
       
   310         }
       
   311     
       
   312     if ( aValue - iCameraInfo.iMaxZoom > 0 )
       
   313         {
       
   314         camera->SetDigitalZoomFactorL( aValue - iCameraInfo.iMaxZoom );
       
   315         MUS_LOG1( "mus: [ENGINE]     Digital zoom factor increased to %d",
       
   316                   aValue - iCameraInfo.iMaxZoom )
       
   317         }
       
   318     
       
   319     MUS_LOG( "mus: [ENGINE]  <- MusEngCameraHandler::SetLcZoomValueL()" )
       
   320     }
       
   321 
       
   322 // -----------------------------------------------------------------------------
       
   323 // From MLcZoomControl
       
   324 // -----------------------------------------------------------------------------
       
   325 //
       
   326 void TMusEngCameraHandler::LcZoomInL()
       
   327     {
       
   328     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::LcZoomInL()" )
       
   329     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   330 
       
   331     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   332 
       
   333     // First try to increase optical zoom factor. If in maximum value, try to
       
   334     // increase digital zoom factor.
       
   335     TInt stepSize = ZoomStepSize( iZoomInTime );
       
   336     TInt zoomFactor = camera->ZoomFactorL();
       
   337     TInt zoomDigitalFactor = camera->DigitalZoomFactorL();
       
   338  
       
   339     //increate optical zoom factor
       
   340     if ( zoomFactor + stepSize <= iCameraInfo.iMaxZoom )
       
   341         {
       
   342         //optical zoom factor is enough
       
   343         camera->SetZoomFactorL( zoomFactor + stepSize );
       
   344         stepSize = 0;
       
   345         }
       
   346     else if (zoomFactor <  iCameraInfo.iMaxZoom)
       
   347        {
       
   348        stepSize -=  iCameraInfo.iMaxZoom - zoomFactor;
       
   349        camera->SetZoomFactorL( iCameraInfo.iMaxZoom );
       
   350        }
       
   351 
       
   352     //increate digital zoom factor
       
   353     if (stepSize > 0)
       
   354         {
       
   355         if ( zoomDigitalFactor + stepSize <= iCameraInfo.iMaxDigitalZoom )
       
   356             {
       
   357             camera->SetDigitalZoomFactorL( zoomDigitalFactor + stepSize );
       
   358             }
       
   359         else 
       
   360             {
       
   361             camera->SetDigitalZoomFactorL( iCameraInfo.iMaxDigitalZoom );
       
   362             MUS_LOG( "mus: [ENGINE]     TMusEngCameraHandler::ZoomInL(): \
       
   363                       Optical and digital zoom factors are in maximum value" )
       
   364             }
       
   365         }
       
   366     
       
   367     MUS_LOG( "mus: [ENGINE]  <- TMusEngCameraHandler::LcZoomInL()" )
       
   368     }
       
   369 
       
   370 // -----------------------------------------------------------------------------
       
   371 // From MLcZoomControl
       
   372 // -----------------------------------------------------------------------------
       
   373 //
       
   374 void TMusEngCameraHandler::LcZoomOutL()
       
   375     {
       
   376     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::LcZoomOutL()" )
       
   377     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   378 
       
   379     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   380 
       
   381     // First try to decrease digital zoom factor. If already zero, try to
       
   382     // decrease optical zoom factor.
       
   383     TInt stepSize = ZoomStepSize( iZoomOutTime );
       
   384     TInt zoomFactor = camera->ZoomFactorL();
       
   385     TInt zoomDigitalFactor = camera->DigitalZoomFactorL();
       
   386     
       
   387     //decreate digital zoom factor firstly
       
   388     if ( zoomDigitalFactor - stepSize >= 0  )
       
   389         {
       
   390         //digital zoom factor is enough
       
   391         camera->SetDigitalZoomFactorL( zoomDigitalFactor - stepSize );
       
   392         stepSize = 0;
       
   393         }
       
   394     else if ( zoomDigitalFactor > 0 )
       
   395         {
       
   396         stepSize -= zoomDigitalFactor;
       
   397         camera->SetDigitalZoomFactorL( 0 );
       
   398         MUS_LOG("mus: [ENGINE] Digigal Factor to zero")
       
   399         }
       
   400    
       
   401     //decreate optical zoom factor firstly
       
   402     if ( stepSize > 0 )
       
   403         {
       
   404         if ( zoomFactor - stepSize > iCameraInfo.iMinZoom )
       
   405             {
       
   406             camera->SetZoomFactorL( zoomFactor - stepSize );
       
   407             }
       
   408         else 
       
   409             {
       
   410             MUS_LOG( "mus: [ENGINE]    TMusEngCameraHandler::LcZoomOutL():\
       
   411                       Optical and digital zoom factors are in minimum value" )
       
   412             camera->SetZoomFactorL( iCameraInfo.iMinZoom );
       
   413             }
       
   414         }
       
   415 
       
   416     MUS_LOG( "mus: [ENGINE]  <- TMusEngCameraHandler::LcZoomOutL()" )
       
   417     }
       
   418 
       
   419 // -----------------------------------------------------------------------------
       
   420 //
       
   421 // -----------------------------------------------------------------------------
       
   422 //
       
   423 void TMusEngCameraHandler::SetSession( CMceSession* aSession )
       
   424     {
       
   425     iSession = aSession;
       
   426     }
       
   427 
       
   428 // -----------------------------------------------------------------------------
       
   429 //
       
   430 // -----------------------------------------------------------------------------
       
   431 //
       
   432 void TMusEngCameraHandler::InitializeL( CMceCameraSource& aCamera )
       
   433     {
       
   434     aCamera.GetCameraInfo( iCameraInfo );
       
   435     
       
   436     InitializeZoomStepSize();
       
   437     
       
   438     iCurrentCamera = EBackCamera;
       
   439     if ( iCameraUsage == MusSettingsKeys::EUseOnlySecondaryCamera )
       
   440        {
       
   441        iCurrentCamera = EFrontCamera;
       
   442        }
       
   443     aCamera.SetCameraIndexL( (TInt)iCurrentCamera );
       
   444     }
       
   445 
       
   446 // -----------------------------------------------------------------------------
       
   447 //
       
   448 // -----------------------------------------------------------------------------
       
   449 //
       
   450 void TMusEngCameraHandler::PlayL()
       
   451     {
       
   452     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::PlayL()" )
       
   453 
       
   454     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   455     
       
   456     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   457 
       
   458     if ( !camera->IsEnabled() )
       
   459         {
       
   460         camera->EnableL();
       
   461         }
       
   462     else
       
   463         {
       
   464         MUS_LOG( "mus: [ENGINE]    Camera already enabled, ignore request" )
       
   465         }
       
   466         
       
   467     MUS_LOG( "mus: [ENGINE]  <- TMusEngCameraHandler::PlayL()" )
       
   468     }
       
   469 
       
   470 
       
   471 // -----------------------------------------------------------------------------
       
   472 // Disable camera if not already disabled
       
   473 // -----------------------------------------------------------------------------
       
   474 //
       
   475 void TMusEngCameraHandler::PauseL()
       
   476     {
       
   477     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::PauseL()" )
       
   478 
       
   479     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   480 
       
   481     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   482 
       
   483     if ( camera->IsEnabled() )
       
   484         {
       
   485         camera->DisableL();
       
   486         }
       
   487     else
       
   488         {
       
   489         MUS_LOG( "mus: [ENGINE]    Camera already disabled, ignore request" )
       
   490         }
       
   491 
       
   492     MUS_LOG( "mus: [ENGINE]  <- TMusEngCameraHandler::PauseL()" )
       
   493     }
       
   494 
       
   495 // -----------------------------------------------------------------------------
       
   496 //
       
   497 // -----------------------------------------------------------------------------
       
   498 //
       
   499 TBool TMusEngCameraHandler::IsPlayingL()
       
   500     {
       
   501     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
       
   502     
       
   503     return ( MusEngMceUtils::GetCameraL( *iSession )->IsEnabled() );
       
   504     }
       
   505 
       
   506 // -----------------------------------------------------------------------------
       
   507 //
       
   508 // -----------------------------------------------------------------------------
       
   509 //
       
   510 void TMusEngCameraHandler::InitializeZoomStepSize()
       
   511     {
       
   512     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::InitializeZoomStepSize()" )
       
   513     MUS_LOG2( "iMaxZoom = %d, iMinZoom = %d", iCameraInfo.iMaxZoom, iCameraInfo.iMinZoom);
       
   514     MUS_LOG2( "iMaxDigitalZoom = %d, iMaxDigitalZoomFactor = %d", 
       
   515             iCameraInfo.iMaxDigitalZoom, iCameraInfo.iMaxDigitalZoomFactor);
       
   516 
       
   517     iBigZoomStep = ( iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom - 
       
   518             iCameraInfo.iMinZoom ) / KZoomBigStepCount;
       
   519             
       
   520     if ( iBigZoomStep < KZoomStepMinSize )
       
   521         iBigZoomStep = KZoomStepMinSize;
       
   522 
       
   523     iSmallZoomStep = ( iCameraInfo.iMaxZoom + iCameraInfo.iMaxDigitalZoom - 
       
   524             iCameraInfo.iMinZoom ) / KZoomSmallStepCount;
       
   525     
       
   526     if ( iSmallZoomStep < KZoomStepMinSize )
       
   527         iSmallZoomStep = KZoomStepMinSize;
       
   528 
       
   529     MUS_LOG2( "mus: [ENGINE]  iSmallZoomStep = %d, iBigZoomStep = %d", 
       
   530             iSmallZoomStep, iBigZoomStep )
       
   531     MUS_LOG( "mus: [ENGINE]  <- TMusEngCameraHandler::InitializeZoomStepSize()" )   
       
   532     }
       
   533 
       
   534 // -----------------------------------------------------------------------------
       
   535 //
       
   536 // -----------------------------------------------------------------------------
       
   537 //
       
   538 void TMusEngCameraHandler::ReadCameraUsageKeyL()
       
   539     {
       
   540     MUS_LOG( "mus: [ENGINE] -> TMusEngCameraHandler::ReadCameraUsageKeyL()" )
       
   541 
       
   542     // We try to read camera usage. If we do not succeed, we use default
       
   543     iCameraUsage = MusSettingsKeys::EUseCameraSwapping;
       
   544     TRAPD( error, 
       
   545             iCameraUsage = MultimediaSharingSettings::CameraUsageL() )
       
   546     __ASSERT_ALWAYS( error == KErrNone || error == KErrNotFound, 
       
   547                      User::Leave( error ) );
       
   548     
       
   549     MUS_LOG( "mus: [ENGINE] <- TMusEngCameraHandler::ReadCameraUsageKeyL()" )
       
   550     
       
   551     }
       
   552 
       
   553 // -----------------------------------------------------------------------------
       
   554 //  Calculate the zoom step based time escaped
       
   555 // -----------------------------------------------------------------------------
       
   556 //
       
   557 TInt TMusEngCameraHandler::ZoomStepSize( TInt64& aTime )
       
   558     {
       
   559     TTime now;
       
   560     now.HomeTime();
       
   561     TInt64 timeNow = now.Int64();   
       
   562     TInt stepSize = ( ( timeNow - aTime ) <= KZoomFasterTime ) ? iBigZoomStep : iSmallZoomStep;
       
   563     
       
   564     aTime = now.Int64();
       
   565     
       
   566     MUS_LOG1( "mus: [ENGINE]  stepSize = %d", stepSize );    
       
   567 
       
   568     return stepSize;
       
   569     }
       
   570 
       
   571 // -----------------------------------------------------------------------------
       
   572 //
       
   573 // -----------------------------------------------------------------------------
       
   574 //
       
   575 TInt TMusEngCameraHandler::CamerasAvailableL( 
       
   576     TMusEngCameraHandler::TCurrentCamera& aCurrentCamera )
       
   577     {
       
   578     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::CamerasAvailableL()" )
       
   579     __ASSERT_ALWAYS( iSession != NULL, User::Leave( KErrNotReady ) );
       
   580     
       
   581     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   582     __ASSERT_ALWAYS( camera != NULL, User::Leave( KErrNotReady ) );
       
   583     aCurrentCamera = iCurrentCamera;
       
   584     TInt camerasAvailable = camera->CamerasAvailable();
       
   585     
       
   586     if ( camerasAvailable > 1 && 
       
   587          iCameraUsage != MusSettingsKeys::EUseCameraSwapping )
       
   588         {
       
   589         camerasAvailable = 1;
       
   590         }
       
   591          
       
   592     MUS_LOG( "mus: [ENGINE]  <- TMusEngCameraHandler::CamerasAvailable()" )
       
   593     return camerasAvailable;  
       
   594     }
       
   595 
       
   596 // -----------------------------------------------------------------------------
       
   597 //
       
   598 // -----------------------------------------------------------------------------
       
   599 //
       
   600 void TMusEngCameraHandler::ChangeCameraL( TCurrentCamera aCurrentCamera ) 
       
   601     {
       
   602     MUS_LOG( "mus: [ENGINE]  -> TMusEngCameraHandler::ChangeCameraL()" )
       
   603     __ASSERT_ALWAYS( iSession != NULL, User::Leave( KErrNotReady ) );
       
   604     
       
   605     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   606     CMceDisplaySink* display = MusEngMceUtils::GetDisplayL( *iSession );
       
   607     
       
   608     if ( camera->CamerasAvailable() )
       
   609         {
       
   610         if ( TMusEngCameraHandler::EFrontCamera == aCurrentCamera &&
       
   611              TMusEngCameraHandler::EFrontCamera != iCurrentCamera )
       
   612             {
       
   613             MUS_LOG( "mus: [ENGINE]  Set Front camera" )
       
   614             iCurrentCamera = TMusEngCameraHandler::EFrontCamera;
       
   615             ChangeActiveCameraL( iCurrentCamera );
       
   616             }
       
   617         else if ( TMusEngCameraHandler::EBackCamera == aCurrentCamera && 
       
   618                   TMusEngCameraHandler::EBackCamera != iCurrentCamera )
       
   619             {
       
   620             MUS_LOG( "mus: [ENGINE]  Set Back camera " )
       
   621             iCurrentCamera = TMusEngCameraHandler::EBackCamera;
       
   622             ChangeActiveCameraL( iCurrentCamera );
       
   623             }
       
   624         else if ( TMusEngCameraHandler::ECameraNotAvailable == aCurrentCamera )
       
   625             {
       
   626             if ( iCurrentCamera  == TMusEngCameraHandler::EBackCamera )
       
   627                 {
       
   628                 iCurrentCamera  = TMusEngCameraHandler::EFrontCamera;
       
   629                 }
       
   630             else
       
   631                 {
       
   632                 iCurrentCamera  = TMusEngCameraHandler::EBackCamera;
       
   633                 }
       
   634             ChangeActiveCameraL( iCurrentCamera );
       
   635             }
       
   636         }
       
   637     MUS_LOG( "mus: [ENGINE]  <- TMusEngCameraHandler::ChangeCameraL()" )
       
   638     }
       
   639 
       
   640 // -----------------------------------------------------------------------------
       
   641 //  Disable camera before it changes it. It enables camera after change. 
       
   642 // -----------------------------------------------------------------------------
       
   643 //
       
   644 void TMusEngCameraHandler::ChangeActiveCameraL( TCurrentCamera aNewCamera )
       
   645     {
       
   646     MUS_LOG( "mus: [ENGINE] ->  ChangeActiveCamera()" )
       
   647     
       
   648     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
       
   649     CMceDisplaySink* display = MusEngMceUtils::GetDisplayL( *iSession );
       
   650     MUS_LOG( "mus: [ENGINE]  Camera enabled ?" )
       
   651     if ( camera->IsEnabled() )
       
   652         {
       
   653         MUS_LOG( "mus: [ENGINE]  Is view finder enabled? " )
       
   654             if ( display->IsEnabled() )
       
   655                 {
       
   656                 MUS_LOG( "mus: [ENGINE]  Disable view finder" )
       
   657                 display->DisableL();
       
   658                 }
       
   659         MUS_LOG( "mus: [ENGINE]  Disable camera" )
       
   660         camera->DisableL();
       
   661         camera->SetCameraIndexL( aNewCamera );
       
   662         camera->EnableL();
       
   663         display->EnableL();
       
   664         }
       
   665     else
       
   666         {
       
   667         if ( display->IsEnabled() )
       
   668             {
       
   669             MUS_LOG( "mus: [ENGINE]  Disable view finder" )
       
   670             display->DisableL();
       
   671             }
       
   672         MUS_LOG( "mus: [ENGINE]  set camera index" )        
       
   673         camera->SetCameraIndexL( aNewCamera );
       
   674         MUS_LOG( "mus: [ENGINE]  Enable camera" ) 
       
   675         display->EnableL();
       
   676         }
       
   677     
       
   678     MUS_LOG( "mus: [ENGINE]  -> fetching new iCameraInfo..." )
       
   679     camera->GetCameraInfo( iCameraInfo );
       
   680     InitializeZoomStepSize();
       
   681     }