os/mm/mmplugins/cameraplugins/source/mmcameraclientplugin/mmcameraclientsession/src/mmcameraclientsession.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
//
sl@0
    15
sl@0
    16
/**
sl@0
    17
 @file
sl@0
    18
 @internalComponent
sl@0
    19
*/
sl@0
    20
sl@0
    21
#include <ecom/ecom.h>
sl@0
    22
#include <ecom/implementationproxy.h>
sl@0
    23
#include <f32file.h>
sl@0
    24
sl@0
    25
#include "mmcameraclientsession.h"
sl@0
    26
#include "mmdirectviewfinder.h"
sl@0
    27
sl@0
    28
#include <graphics/surfaceconfiguration.h>
sl@0
    29
#include "w32std.h"
sl@0
    30
sl@0
    31
/**
sl@0
    32
 * First-phase constructor
sl@0
    33
 */
sl@0
    34
CMMCameraClientSession::CMMCameraClientSession():iCameraObserver2(NULL),
sl@0
    35
									 iReserved(EFalse),
sl@0
    36
									 iPoweredUp(EFalse),
sl@0
    37
									 iPrepareCompleted(EFalse),
sl@0
    38
									 iCollaborativeClient(EFalse)
sl@0
    39
	{
sl@0
    40
	}
sl@0
    41
sl@0
    42
/**
sl@0
    43
 * NewL() factory function
sl@0
    44
 */
sl@0
    45
CMMCameraClientSession* CMMCameraClientSession::NewL()
sl@0
    46
	{
sl@0
    47
	FileDependencyUtil::CheckFileDependencyL();
sl@0
    48
	return new (ELeave) CMMCameraClientSession;
sl@0
    49
	}
sl@0
    50
sl@0
    51
/**
sl@0
    52
 * Destructor
sl@0
    53
 */
sl@0
    54
CMMCameraClientSession::~CMMCameraClientSession()
sl@0
    55
	{
sl@0
    56
	delete iCameraPowerHandler;
sl@0
    57
	delete iCameraAccessHandler;
sl@0
    58
sl@0
    59
	iHashMap.Close();
sl@0
    60
	iCameraSession.Close();
sl@0
    61
	}
sl@0
    62
sl@0
    63
sl@0
    64
//
sl@0
    65
// from CCameraPlugin
sl@0
    66
//
sl@0
    67
sl@0
    68
/**
sl@0
    69
 * Derived from CCameraPlugin. Second Phase contruction
sl@0
    70
 *
sl@0
    71
 * @see CCameraPlugin
sl@0
    72
 */
sl@0
    73
void CMMCameraClientSession::Construct2L(MCameraObserver& /*aObserver*/, TInt /*aCameraIndex*/)
sl@0
    74
	{
sl@0
    75
	User::Leave(KErrNotSupported);
sl@0
    76
	}
sl@0
    77
sl@0
    78
/**
sl@0
    79
 * Derived from CCameraPlugin. Second Phase contruction for collaborative clients
sl@0
    80
 *
sl@0
    81
 * @see CCameraPlugin
sl@0
    82
 */
sl@0
    83
void CMMCameraClientSession::Construct2DupL(MCameraObserver& /*aObserver*/, TInt /*aCameraHandle*/)
sl@0
    84
	{
sl@0
    85
	User::Leave(KErrNotSupported);
sl@0
    86
	}
sl@0
    87
sl@0
    88
/**
sl@0
    89
 * Derived from CCameraPlugin. Second Phase contruction
sl@0
    90
 *
sl@0
    91
 * @see CCameraPlugin
sl@0
    92
 */
sl@0
    93
void CMMCameraClientSession::Construct2L(MCameraObserver2& aObserver, TInt aCameraIndex, TInt aPriority)
sl@0
    94
	{
sl@0
    95
	if (aCameraIndex > CamerasAvailable())
sl@0
    96
		{
sl@0
    97
		User::Leave(KErrNotSupported);
sl@0
    98
		}
sl@0
    99
sl@0
   100
	iCameraIndex = aCameraIndex;
sl@0
   101
	iPriority = aPriority;
sl@0
   102
	iCameraObserver2 = &aObserver;
sl@0
   103
sl@0
   104
	//initialize server
sl@0
   105
	//create session
sl@0
   106
	User::LeaveIfError(iCameraSession.Connect());
sl@0
   107
sl@0
   108
	//open camera
sl@0
   109
	TOpenCamera openCam;
sl@0
   110
sl@0
   111
	openCam.iCameraIndex = iCameraIndex;
sl@0
   112
	openCam.iPriority = iPriority;
sl@0
   113
	openCam.iHandle = KECamHandleNotKnown;
sl@0
   114
	openCam.iMMCapability = ETrue;  //could be changed.
sl@0
   115
	openCam.iCollaborativeClient = EFalse;
sl@0
   116
sl@0
   117
	TOpenCameraPckg openCamBuf(openCam);
sl@0
   118
sl@0
   119
	User::LeaveIfError(iCameraSession.SendMessage(ECamOpenCamera, openCamBuf));
sl@0
   120
					// since this call is synchronous, providing reference to local
sl@0
   121
					//  varialbe is not a problem.
sl@0
   122
												   
sl@0
   123
	iCameraAccessHandler = CMMCameraAccessHandler::NewL(this, CActive::EPriorityStandard);
sl@0
   124
	iCameraPowerHandler = CMMCameraPowerHandler::NewL(this, CActive::EPriorityStandard);
sl@0
   125
	}
sl@0
   126
sl@0
   127
/**
sl@0
   128
 * Derived from CCameraPlugin. Second Phase contruction for collaborative clients
sl@0
   129
 *
sl@0
   130
 * @see CCameraPlugin
sl@0
   131
 */
sl@0
   132
void CMMCameraClientSession::Construct2DupL(MCameraObserver2& /*aObserver*/, TInt /*aCameraHandle*/)
sl@0
   133
	{
sl@0
   134
	User::Leave(KErrNotSupported);	
sl@0
   135
	}
sl@0
   136
sl@0
   137
sl@0
   138
//
sl@0
   139
// from CCamera itself
sl@0
   140
//
sl@0
   141
sl@0
   142
/**
sl@0
   143
 * Retrieves information about the currectly reserved camera device
sl@0
   144
 *
sl@0
   145
 * @see CCamera::CameraInfo()
sl@0
   146
 */
sl@0
   147
void CMMCameraClientSession::CameraInfo(TCameraInfo& /*aInfo*/) const
sl@0
   148
	{ 
sl@0
   149
	return;
sl@0
   150
	}
sl@0
   151
sl@0
   152
/**
sl@0
   153
 * Reserves the camera
sl@0
   154
 *
sl@0
   155
 * @see CCamera::Reserve()
sl@0
   156
 */
sl@0
   157
void CMMCameraClientSession::Reserve()
sl@0
   158
	{
sl@0
   159
	iCameraAccessHandler->Reserve();
sl@0
   160
	}
sl@0
   161
sl@0
   162
/**
sl@0
   163
 * Relinquishes control of the camera device
sl@0
   164
 *
sl@0
   165
 * @see CCamera::Release()
sl@0
   166
 */
sl@0
   167
void CMMCameraClientSession::Release()
sl@0
   168
	{
sl@0
   169
	iCameraSession.SendMessage(ECamCameraAccessControl, ECameraRelease);
sl@0
   170
	iPoweredUp = EFalse;
sl@0
   171
	}
sl@0
   172
sl@0
   173
/**
sl@0
   174
 * Powers on the camera device
sl@0
   175
 *
sl@0
   176
 * @see CCamera::PowerOn()
sl@0
   177
 */
sl@0
   178
void CMMCameraClientSession::PowerOn()
sl@0
   179
	{
sl@0
   180
	iCameraPowerHandler->PowerOn();
sl@0
   181
	}
sl@0
   182
sl@0
   183
/**
sl@0
   184
 * Powers down the camera device
sl@0
   185
 *
sl@0
   186
 * @see CCamera::PowerOff()
sl@0
   187
 */
sl@0
   188
void CMMCameraClientSession::PowerOff()
sl@0
   189
	{	
sl@0
   190
	iCameraSession.SendMessage(ECamPowerCamera, ECameraPowerOff);
sl@0
   191
	iPoweredUp = EFalse;
sl@0
   192
	}
sl@0
   193
sl@0
   194
/**
sl@0
   195
 * Retrieves the handle of the currently reserved camera
sl@0
   196
 *
sl@0
   197
 * @see CCamera::Handle()
sl@0
   198
 */
sl@0
   199
TInt CMMCameraClientSession::Handle()
sl@0
   200
	{
sl@0
   201
	TCameraHandle handle;
sl@0
   202
	TCameraHandlePckg pckg(handle);
sl@0
   203
sl@0
   204
	iCameraSession.SendRxMessage(ECamCameraHandle, pckg);
sl@0
   205
sl@0
   206
	handle = pckg();
sl@0
   207
	return handle.iHandle;
sl@0
   208
	}
sl@0
   209
sl@0
   210
/**
sl@0
   211
 * Sets the optical zoom level
sl@0
   212
 *
sl@0
   213
 * @see CCamera::SetZoomFactorL()
sl@0
   214
 */
sl@0
   215
void CMMCameraClientSession::SetZoomFactorL(TInt aZoomFactor)
sl@0
   216
	{
sl@0
   217
	User::LeaveIfError(iCameraSession.SendMessage(ECamSetParameter, EZoomFactor, aZoomFactor));
sl@0
   218
	}
sl@0
   219
sl@0
   220
/**
sl@0
   221
 *  Retrieves current optical zoom level
sl@0
   222
 *
sl@0
   223
 * @see CCamera::ZoomFactor()
sl@0
   224
 */
sl@0
   225
TInt CMMCameraClientSession::ZoomFactor() const
sl@0
   226
	{
sl@0
   227
	TCameraZoom zoomFactor;
sl@0
   228
	TCameraZoomPckg pckg(zoomFactor);
sl@0
   229
	iCameraSession.SendRxMessage(ECamGetParameter, EZoomFactor, pckg);
sl@0
   230
	zoomFactor = pckg();
sl@0
   231
	return zoomFactor.iZoom;
sl@0
   232
	}
sl@0
   233
sl@0
   234
/**
sl@0
   235
 * Sets the digital zoom level
sl@0
   236
 *
sl@0
   237
 * @see CCamera::SetDigitalZoomFactorL()
sl@0
   238
 */
sl@0
   239
void CMMCameraClientSession::SetDigitalZoomFactorL(TInt aDigitalZoomFactor)
sl@0
   240
	{
sl@0
   241
	User::LeaveIfError(iCameraSession.SendMessage(ECamSetParameter, EDigitalZoomFactor, aDigitalZoomFactor));
sl@0
   242
	}
sl@0
   243
sl@0
   244
/**
sl@0
   245
 * Retrieves the current digital zoom level
sl@0
   246
 *
sl@0
   247
 * @see CCamera::DigitalZoomFactor()
sl@0
   248
 */
sl@0
   249
TInt CMMCameraClientSession::DigitalZoomFactor() const
sl@0
   250
	{
sl@0
   251
	TCameraDigitalZoom digitalZoomFactor;
sl@0
   252
	TCameraDigitalZoomPckg pckg(digitalZoomFactor);
sl@0
   253
	iCameraSession.SendRxMessage(ECamGetParameter, EDigitalZoomFactor, pckg);
sl@0
   254
	digitalZoomFactor = pckg();
sl@0
   255
	return digitalZoomFactor.iDigitalZoom;
sl@0
   256
	}
sl@0
   257
sl@0
   258
/**
sl@0
   259
 * Sets the contrast level
sl@0
   260
 *
sl@0
   261
 * @see CCamera::SetContrastL()
sl@0
   262
 */
sl@0
   263
void CMMCameraClientSession::SetContrastL(TInt aContrast)
sl@0
   264
	{
sl@0
   265
	User::LeaveIfError(iCameraSession.SendMessage(ECamSetParameter, EContrast, aContrast));
sl@0
   266
	}
sl@0
   267
sl@0
   268
/**
sl@0
   269
 * Retrieves the current contrast level
sl@0
   270
 *
sl@0
   271
 * @see CCamera::Contrast()
sl@0
   272
 */
sl@0
   273
TInt CMMCameraClientSession::Contrast() const
sl@0
   274
	{
sl@0
   275
	TCameraContrast contrast;
sl@0
   276
	TCameraContrastPckg pckg(contrast);
sl@0
   277
	iCameraSession.SendRxMessage(ECamGetParameter, EContrast, pckg);
sl@0
   278
	contrast = pckg();
sl@0
   279
	return contrast.iContrast;
sl@0
   280
	}
sl@0
   281
sl@0
   282
/**
sl@0
   283
 * Sets the brightness level
sl@0
   284
 *
sl@0
   285
 * @see CCamera::SetBrightnessL()
sl@0
   286
 */
sl@0
   287
void CMMCameraClientSession::SetBrightnessL(TInt aBrightness)
sl@0
   288
	{
sl@0
   289
	User::LeaveIfError(iCameraSession.SendMessage(ECamSetParameter, EBrightness, aBrightness));
sl@0
   290
	}
sl@0
   291
sl@0
   292
/**
sl@0
   293
 * Retrieves the current brightness level
sl@0
   294
 *
sl@0
   295
 * @see CCamera::Brigthness()
sl@0
   296
 */
sl@0
   297
TInt CMMCameraClientSession::Brightness() const
sl@0
   298
	{
sl@0
   299
	TCameraBrightness brightness;
sl@0
   300
	TCameraBrightnessPckg pckg(brightness);
sl@0
   301
	iCameraSession.SendRxMessage(ECamGetParameter, EBrightness, pckg);
sl@0
   302
	brightness = pckg();
sl@0
   303
	return brightness.iBrightness;
sl@0
   304
	}
sl@0
   305
sl@0
   306
/**
sl@0
   307
 * Sets the flash level
sl@0
   308
 *
sl@0
   309
 * @see CCamera::SetFlashL()
sl@0
   310
 */
sl@0
   311
void CMMCameraClientSession::SetFlashL(TFlash aFlash)
sl@0
   312
	{
sl@0
   313
	TCameraFlash flash;
sl@0
   314
	flash.iFlash = aFlash;
sl@0
   315
	TCameraFlashPckg pckg(flash);
sl@0
   316
sl@0
   317
	User::LeaveIfError(iCameraSession.SendMessage(ECamSetParameter, EFlash, pckg));
sl@0
   318
	}
sl@0
   319
sl@0
   320
/**
sl@0
   321
 * Retrieves the current flash level
sl@0
   322
 *
sl@0
   323
 * @see CCamera::Flash()
sl@0
   324
 */
sl@0
   325
CCamera::TFlash CMMCameraClientSession::Flash() const
sl@0
   326
	{
sl@0
   327
	TCameraFlash flash;
sl@0
   328
	TCameraFlashPckg pckg(flash);
sl@0
   329
	
sl@0
   330
	iCameraSession.SendRxMessage(ECamGetParameter, EFlash, pckg);
sl@0
   331
	flash = pckg();
sl@0
   332
	return flash.iFlash;
sl@0
   333
	}
sl@0
   334
sl@0
   335
/**
sl@0
   336
 * Sets the exposure level
sl@0
   337
 *
sl@0
   338
 * @see CCamera::SetExposureL()
sl@0
   339
 */
sl@0
   340
void CMMCameraClientSession::SetExposureL(TExposure aExposure)
sl@0
   341
	{
sl@0
   342
	TCameraExposure exposure;
sl@0
   343
	exposure.iExposure = aExposure;
sl@0
   344
	TCameraExposurePckg pckg(exposure);
sl@0
   345
sl@0
   346
	User::LeaveIfError(iCameraSession.SendMessage(ECamSetParameter, EExposure, pckg));
sl@0
   347
	}
sl@0
   348
sl@0
   349
/**
sl@0
   350
 * Retrieves the current exposure level
sl@0
   351
 *
sl@0
   352
 * @see CCamera::Exposure()
sl@0
   353
 */
sl@0
   354
CCamera::TExposure CMMCameraClientSession::Exposure() const
sl@0
   355
	{
sl@0
   356
	TCameraExposure exposure;
sl@0
   357
	TCameraExposurePckg pckg(exposure);
sl@0
   358
	
sl@0
   359
	iCameraSession.SendRxMessage(ECamGetParameter, EExposure, pckg);
sl@0
   360
	exposure = pckg();
sl@0
   361
	return exposure.iExposure;
sl@0
   362
	}
sl@0
   363
sl@0
   364
/**
sl@0
   365
 * Sets the white balance level
sl@0
   366
 *
sl@0
   367
 * @see CCamera::SetWhiteBalance()
sl@0
   368
 */
sl@0
   369
void CMMCameraClientSession::SetWhiteBalanceL(TWhiteBalance aWhiteBalance)
sl@0
   370
	{
sl@0
   371
	TCameraWhiteBalance whiteBalance;
sl@0
   372
	whiteBalance.iWhiteBalance = aWhiteBalance;
sl@0
   373
	TCameraWhiteBalancePckg pckg(whiteBalance);
sl@0
   374
sl@0
   375
	User::LeaveIfError(iCameraSession.SendMessage(ECamSetParameter, EWhiteBalance, pckg));
sl@0
   376
	}
sl@0
   377
sl@0
   378
/**
sl@0
   379
 * Retrieves the current white balance level
sl@0
   380
 *
sl@0
   381
 * @see CCamera::WhiteBalance()
sl@0
   382
 */
sl@0
   383
CCamera::TWhiteBalance CMMCameraClientSession::WhiteBalance() const
sl@0
   384
	{
sl@0
   385
	TCameraWhiteBalance whiteBalance;
sl@0
   386
	TCameraWhiteBalancePckg pckg(whiteBalance);
sl@0
   387
	
sl@0
   388
	iCameraSession.SendRxMessage(ECamGetParameter, EWhiteBalance, pckg);
sl@0
   389
	whiteBalance = pckg();
sl@0
   390
	return whiteBalance.iWhiteBalance;	
sl@0
   391
	}
sl@0
   392
sl@0
   393
/**
sl@0
   394
 * Starts client direct viewfinder.
sl@0
   395
 * Not supported in this implementation.
sl@0
   396
 * 
sl@0
   397
 * @see CCamera::StartViewFinderDirectL()
sl@0
   398
 */
sl@0
   399
void CMMCameraClientSession::StartViewFinderDirectL(RWsSession& /*aWs*/, CWsScreenDevice& /*aScreenDevice*/, RWindowBase& /*aWindow*/, TRect& /*aScreenRect*/)
sl@0
   400
	{
sl@0
   401
	User::Leave(KErrNotSupported);	
sl@0
   402
	}
sl@0
   403
sl@0
   404
/**
sl@0
   405
 * Starts client direct viewfinder.
sl@0
   406
 * Not supported in this implementation.
sl@0
   407
 * 
sl@0
   408
 * @see CCamera::StartViewFinderDirectL()
sl@0
   409
 */
sl@0
   410
void CMMCameraClientSession::StartViewFinderDirectL(RWsSession& /*aWs*/, CWsScreenDevice& /*aScreenDevice*/, RWindowBase& /*aWindow*/, TRect& /*aScreenRect*/, TRect& /*aClipRect*/)
sl@0
   411
	{
sl@0
   412
	User::Leave(KErrNotSupported);
sl@0
   413
	}
sl@0
   414
sl@0
   415
/**
sl@0
   416
 * Starts client viewfinder.
sl@0
   417
 * Not supported in this implementation.
sl@0
   418
 * 
sl@0
   419
 * @see CCamera::StartViewFinderBitmapsL()
sl@0
   420
 */
sl@0
   421
void CMMCameraClientSession::StartViewFinderBitmapsL(TSize& /*aSize*/)
sl@0
   422
	{
sl@0
   423
	User::Leave(KErrNotSupported);
sl@0
   424
	}
sl@0
   425
sl@0
   426
/**
sl@0
   427
 * Starts client viewfinder.
sl@0
   428
 * Not supported in this implementation.
sl@0
   429
 * 
sl@0
   430
 * @see CCamera::StartViewFinderBitmapsL()
sl@0
   431
 */
sl@0
   432
void CMMCameraClientSession::StartViewFinderBitmapsL(TSize& /*aSize*/, TRect& /*aClipRect*/)
sl@0
   433
	{
sl@0
   434
	User::Leave(KErrNotSupported);	
sl@0
   435
	}
sl@0
   436
sl@0
   437
/**
sl@0
   438
 * Starts client viewfinder.
sl@0
   439
 * Not supported in this implementation.
sl@0
   440
 * 
sl@0
   441
 * @see CCamera::StartViewFinderL()
sl@0
   442
 */
sl@0
   443
void CMMCameraClientSession::StartViewFinderL(CCamera::TFormat /*aImageFormat*/, TSize& /*aSize*/)
sl@0
   444
	{
sl@0
   445
	User::Leave(KErrNotSupported);
sl@0
   446
	}
sl@0
   447
sl@0
   448
/**
sl@0
   449
 * Starts client viewfinder.
sl@0
   450
 * Not supported in this implementation.
sl@0
   451
 * 
sl@0
   452
 * @see CCamera::StartViewFinderL()
sl@0
   453
 */
sl@0
   454
void CMMCameraClientSession::StartViewFinderL(CCamera::TFormat /*aImageFormat*/, TSize& /*aSize*/, TRect& /*aClipRect*/)
sl@0
   455
	{
sl@0
   456
	User::Leave(KErrNotSupported);	
sl@0
   457
	}
sl@0
   458
sl@0
   459
/**
sl@0
   460
 * Stops client viewfinder.
sl@0
   461
 * Not supported in this implementation.
sl@0
   462
 * 
sl@0
   463
 * @see CCamera::StopViewFinder()
sl@0
   464
 */
sl@0
   465
void CMMCameraClientSession::StopViewFinder()
sl@0
   466
	{
sl@0
   467
	return;
sl@0
   468
	}
sl@0
   469
sl@0
   470
/**
sl@0
   471
 * Queries if viewfinder is active.
sl@0
   472
 * Not supported in this implementation.
sl@0
   473
 * 
sl@0
   474
 * @see CCamera::ViewFinderActive()
sl@0
   475
 */
sl@0
   476
TBool CMMCameraClientSession::ViewFinderActive() const
sl@0
   477
	{
sl@0
   478
	return EFalse;
sl@0
   479
	}
sl@0
   480
sl@0
   481
/**
sl@0
   482
 * Turns on/off viewfinder mirrorring.
sl@0
   483
 * Not supported in this implementation.
sl@0
   484
 * 
sl@0
   485
 * @see CCamera::SetViewFinderMirrorL()
sl@0
   486
 */
sl@0
   487
void CMMCameraClientSession::SetViewFinderMirrorL(TBool /*aMirror*/)
sl@0
   488
	{
sl@0
   489
	User::Leave(KErrNotSupported);
sl@0
   490
	}
sl@0
   491
sl@0
   492
/**
sl@0
   493
 * Queries whether viewfinder mirrorring is on or off.
sl@0
   494
 * Not supported in this implementation.
sl@0
   495
 * 
sl@0
   496
 * @see CCamera::ViewFinderMirrorL()
sl@0
   497
 */
sl@0
   498
TBool CMMCameraClientSession::ViewFinderMirror() const
sl@0
   499
	{
sl@0
   500
	return EFalse;
sl@0
   501
	}
sl@0
   502
sl@0
   503
/**
sl@0
   504
 * Prepares image capture.
sl@0
   505
 * 
sl@0
   506
 * @see CCamera::PrepareImageCapture()
sl@0
   507
 */
sl@0
   508
void CMMCameraClientSession::PrepareImageCaptureL(CCamera::TFormat /*aImageFormat*/, TInt /*aSizeIndex*/)
sl@0
   509
	{
sl@0
   510
	User::Leave(KErrNotSupported);
sl@0
   511
	}
sl@0
   512
sl@0
   513
/**
sl@0
   514
 * Prepares image capture.
sl@0
   515
 * 
sl@0
   516
 * @see CCamera::PrepareImageCapture()
sl@0
   517
 */
sl@0
   518
void CMMCameraClientSession::PrepareImageCaptureL(CCamera::TFormat /*aImageFormat*/, TInt /*aSizeIndex*/, const TRect& /*aClipRect*/)
sl@0
   519
	{
sl@0
   520
	User::Leave(KErrNotSupported);
sl@0
   521
	}
sl@0
   522
sl@0
   523
/**
sl@0
   524
 * Captures image.
sl@0
   525
 * 
sl@0
   526
 * @see CCamera::CaptureImage()
sl@0
   527
 */
sl@0
   528
void CMMCameraClientSession::CaptureImage()
sl@0
   529
	{
sl@0
   530
	return;
sl@0
   531
	}
sl@0
   532
sl@0
   533
/**
sl@0
   534
 * Cancels any ongoing image capture.
sl@0
   535
 * 
sl@0
   536
 * @see CCamera::CaptureImage()
sl@0
   537
 */
sl@0
   538
void CMMCameraClientSession::CancelCaptureImage()
sl@0
   539
	{
sl@0
   540
	return;
sl@0
   541
	}
sl@0
   542
sl@0
   543
/**
sl@0
   544
 * Enumerates image capture sizes.
sl@0
   545
 * 
sl@0
   546
 * @see CCamera::EnumerateCaptureSizes()
sl@0
   547
 */
sl@0
   548
void CMMCameraClientSession::EnumerateCaptureSizes(TSize& /*aSize*/, TInt /*aSizeIndex*/, CCamera::TFormat /*aFormat*/) const
sl@0
   549
	{
sl@0
   550
	return;
sl@0
   551
	}
sl@0
   552
sl@0
   553
/**
sl@0
   554
 * Prepares video capture.
sl@0
   555
 * 
sl@0
   556
 * @see CCamera::PrepareVideoCaptureL()
sl@0
   557
 */
sl@0
   558
void CMMCameraClientSession::PrepareVideoCaptureL(CCamera::TFormat /*aFormat*/, TInt /*aSizeIndex*/, TInt /*aRateIndex*/, TInt /*aBuffersToUse*/, TInt /*aFramesPerBuffer*/)
sl@0
   559
	{
sl@0
   560
	User::Leave(KErrNotSupported);
sl@0
   561
	}
sl@0
   562
sl@0
   563
/**
sl@0
   564
 * Prepares video capture.
sl@0
   565
 * 
sl@0
   566
 * @see CCamera::PrepareVideoCaptureL()
sl@0
   567
 */
sl@0
   568
void CMMCameraClientSession::PrepareVideoCaptureL(CCamera::TFormat /*aFormat*/, TInt /*aSizeIndex*/, TInt /*aRateIndex*/, TInt /*aBuffersToUse*/, TInt /*aFramesPerBuffer*/, const TRect& /*aClipRect*/)
sl@0
   569
	{
sl@0
   570
	User::Leave(KErrNotSupported);
sl@0
   571
	}
sl@0
   572
sl@0
   573
/**
sl@0
   574
 * Starts video capture.
sl@0
   575
 * 
sl@0
   576
 * @see CCamera::StartVideoCapture()
sl@0
   577
 */
sl@0
   578
void CMMCameraClientSession::StartVideoCapture()
sl@0
   579
	{
sl@0
   580
	return;
sl@0
   581
	}
sl@0
   582
sl@0
   583
/**
sl@0
   584
 * Stops video capture.
sl@0
   585
 * 
sl@0
   586
 * @see CCamera::StopVideoCapture()
sl@0
   587
 */
sl@0
   588
void CMMCameraClientSession::StopVideoCapture()
sl@0
   589
	{
sl@0
   590
	return;
sl@0
   591
	}
sl@0
   592
sl@0
   593
/**
sl@0
   594
 * Queries whether video capture is active.
sl@0
   595
 * 
sl@0
   596
 * @see CCamera::VideoCaptureActive()
sl@0
   597
 */
sl@0
   598
TBool CMMCameraClientSession::VideoCaptureActive() const
sl@0
   599
	{
sl@0
   600
	return EFalse;	
sl@0
   601
	}
sl@0
   602
sl@0
   603
/**
sl@0
   604
 * Enumerates video frame sizes.
sl@0
   605
 * 
sl@0
   606
 * @see CCamera::EnumerateVideoFrameSizes()
sl@0
   607
 */
sl@0
   608
void CMMCameraClientSession::EnumerateVideoFrameSizes(TSize& /*aSize*/, TInt /*aSizeIndex*/, CCamera::TFormat /*aFormat*/) const
sl@0
   609
	{
sl@0
   610
	return;
sl@0
   611
	}
sl@0
   612
sl@0
   613
/**
sl@0
   614
 * Enumerates video frame rates.
sl@0
   615
 * 
sl@0
   616
 * @see CCamera::EnumerateVideoFrameRates()
sl@0
   617
 */
sl@0
   618
void CMMCameraClientSession::EnumerateVideoFrameRates(TReal32& /*aRate*/, TInt /*aRateIndex*/, CCamera::TFormat /*aFormat*/, TInt /*aSizeIndex*/, TExposure /*aExposure*/) const
sl@0
   619
	{
sl@0
   620
	return;
sl@0
   621
	}
sl@0
   622
sl@0
   623
/**
sl@0
   624
 * Retrieve the frame size.
sl@0
   625
 * 
sl@0
   626
 * @see CCamera::GetFrameSize()
sl@0
   627
 */
sl@0
   628
void CMMCameraClientSession::GetFrameSize(TSize& /*aSize*/) const
sl@0
   629
	{
sl@0
   630
	return;	
sl@0
   631
	}
sl@0
   632
sl@0
   633
/**
sl@0
   634
 * Retrieve the frame rate.
sl@0
   635
 * 
sl@0
   636
 * @see CCamera::FrameRate()
sl@0
   637
 */
sl@0
   638
TReal32 CMMCameraClientSession::FrameRate() const
sl@0
   639
	{
sl@0
   640
	return static_cast<TReal32>(0);
sl@0
   641
	}
sl@0
   642
sl@0
   643
/**
sl@0
   644
 * Retrieve the number of buffers currently in use.
sl@0
   645
 * 
sl@0
   646
 * @see CCamera::BuffersInUse()
sl@0
   647
 */
sl@0
   648
TInt CMMCameraClientSession::BuffersInUse() const
sl@0
   649
	{
sl@0
   650
	return 0;
sl@0
   651
	}
sl@0
   652
sl@0
   653
/**
sl@0
   654
 * Retrieve the number of frames per buffer.
sl@0
   655
 * 
sl@0
   656
 * @see CCamera::FramesPerBuffer()
sl@0
   657
 */
sl@0
   658
TInt CMMCameraClientSession::FramesPerBuffer() const
sl@0
   659
	{
sl@0
   660
	return 0;	
sl@0
   661
	}
sl@0
   662
sl@0
   663
/**
sl@0
   664
 * Set the Jpeg quality.
sl@0
   665
 * 
sl@0
   666
 * @see CCamera::SetJpegQuality()
sl@0
   667
 */
sl@0
   668
void CMMCameraClientSession::SetJpegQuality(TInt /*aQuality*/)
sl@0
   669
	{
sl@0
   670
	return;
sl@0
   671
	}
sl@0
   672
sl@0
   673
/**
sl@0
   674
 * Retrieve the Jpeg quality.
sl@0
   675
 * 
sl@0
   676
 * @see CCamera::JpegQuality()
sl@0
   677
 */
sl@0
   678
TInt CMMCameraClientSession::JpegQuality() const
sl@0
   679
	{
sl@0
   680
	return 0;	
sl@0
   681
	}
sl@0
   682
sl@0
   683
/**
sl@0
   684
 * Retrieves a custom interface based on the id passed in by the client.
sl@0
   685
 * 
sl@0
   686
 * @see CCamera::CustomInterface()
sl@0
   687
 */
sl@0
   688
TAny* CMMCameraClientSession::CustomInterface(TUid aInterface)
sl@0
   689
	{
sl@0
   690
	switch (aInterface.iUid)
sl@0
   691
		{
sl@0
   692
		// The framework retrieves KECamMCameraV2DirectViewFinderUidValue followed by KECamMCameraBaseV2DirectViewFinderUidValue
sl@0
   693
		// We take care to initialise iDirectViewFinder in the first case and use it in the subsequent call
sl@0
   694
		case KECamMCameraV2DirectViewFinderUidValue:
sl@0
   695
			{
sl@0
   696
			ASSERT(!iDirectViewFinder);
sl@0
   697
			TRAPD(err, iDirectViewFinder = CMMDirectViewFinder::NewL(*this));
sl@0
   698
			if (err != KErrNone)
sl@0
   699
				{
sl@0
   700
				return NULL;
sl@0
   701
				}
sl@0
   702
sl@0
   703
			return static_cast<MCameraV2DirectViewFinder*>(iDirectViewFinder);
sl@0
   704
	        }
sl@0
   705
sl@0
   706
		case KECamMCameraBaseV2DirectViewFinderUidValue:
sl@0
   707
			{
sl@0
   708
			ASSERT(iDirectViewFinder);
sl@0
   709
			iVF = static_cast<MCameraViewFinder*>(iDirectViewFinder);
sl@0
   710
			//delete iDirectViewFinder;
sl@0
   711
			iDirectViewFinder = NULL;
sl@0
   712
			return iVF;
sl@0
   713
	        }
sl@0
   714
sl@0
   715
		default:
sl@0
   716
			{
sl@0
   717
			return NULL;
sl@0
   718
			}
sl@0
   719
		}
sl@0
   720
	}
sl@0
   721
sl@0
   722
//
sl@0
   723
// From CCameraInfoPlugin
sl@0
   724
//
sl@0
   725
CMMCameraClientSessionInfo* CMMCameraClientSessionInfo::NewL()
sl@0
   726
	{
sl@0
   727
	FileDependencyUtil::CheckFileDependencyL();
sl@0
   728
	return new (ELeave) CMMCameraClientSessionInfo;
sl@0
   729
	}
sl@0
   730
sl@0
   731
CMMCameraClientSessionInfo::~CMMCameraClientSessionInfo()
sl@0
   732
	{
sl@0
   733
	}
sl@0
   734
sl@0
   735
/**
sl@0
   736
 * Retrieves the number of cameras available.
sl@0
   737
 * 
sl@0
   738
 * @see CCameraInfoPlugin::CamerasAvailable()
sl@0
   739
 */
sl@0
   740
TInt CMMCameraClientSessionInfo::CamerasAvailable()
sl@0
   741
	{
sl@0
   742
	// One-off connection to the server
sl@0
   743
	RMMCameraSession cameraSession;
sl@0
   744
	TInt error = cameraSession.Connect();
sl@0
   745
	if (error != KErrNone)
sl@0
   746
		{
sl@0
   747
		return 0;
sl@0
   748
		}
sl@0
   749
sl@0
   750
	TCamerasAvailable info;
sl@0
   751
	TCamerasAvailablePckg pckg(info);
sl@0
   752
sl@0
   753
	error = cameraSession.SendMessage(ECamQueryCamerasAvailable, pckg);
sl@0
   754
	cameraSession.Close();
sl@0
   755
	if (error != KErrNone)
sl@0
   756
		{
sl@0
   757
		return 0;
sl@0
   758
		}
sl@0
   759
sl@0
   760
	info = pckg();
sl@0
   761
	return info.iCameraCount;
sl@0
   762
	}
sl@0
   763
sl@0
   764
CMMCameraClientSessionInfo::CMMCameraClientSessionInfo()
sl@0
   765
	{
sl@0
   766
	}
sl@0
   767
sl@0
   768
sl@0
   769
sl@0
   770
void FileDependencyUtil::CheckFileDependencyL()
sl@0
   771
	{	
sl@0
   772
	RFs fsSession;
sl@0
   773
  	RFile file;
sl@0
   774
    CleanupClosePushL(fsSession);
sl@0
   775
  	User::LeaveIfError(fsSession.Connect());
sl@0
   776
    TInt err = file.Open(fsSession, KMMCameraPluginName, EFileRead);
sl@0
   777
  	file.Close();
sl@0
   778
  	if(err != KErrNone)
sl@0
   779
  		{
sl@0
   780
	    User::LeaveIfError(KErrNotSupported);
sl@0
   781
  		}
sl@0
   782
  	CleanupStack::PopAndDestroy(&fsSession);
sl@0
   783
	}
sl@0
   784
sl@0
   785
sl@0
   786
//
sl@0
   787
// CLASS CMMCameraAccessHandler
sl@0
   788
//
sl@0
   789
sl@0
   790
CMMCameraAccessHandler::CMMCameraAccessHandler(CMMCameraClientSession* aPlugin, TInt aPriority): CActive(aPriority), 
sl@0
   791
																					   iPlugin(aPlugin)
sl@0
   792
	{
sl@0
   793
	}
sl@0
   794
sl@0
   795
CMMCameraAccessHandler* CMMCameraAccessHandler::NewL(CMMCameraClientSession* aPlugin, TInt aPriority)
sl@0
   796
	{
sl@0
   797
	CMMCameraAccessHandler* self = new (ELeave) CMMCameraAccessHandler(aPlugin, aPriority);
sl@0
   798
	CActiveScheduler::Add(self);
sl@0
   799
	return self;
sl@0
   800
	}
sl@0
   801
sl@0
   802
CMMCameraAccessHandler::~CMMCameraAccessHandler()
sl@0
   803
	{
sl@0
   804
	Cancel();
sl@0
   805
	}
sl@0
   806
sl@0
   807
void CMMCameraAccessHandler::Reserve()
sl@0
   808
	{
sl@0
   809
	if(!IsActive())
sl@0
   810
		{
sl@0
   811
		// Reserve the camera
sl@0
   812
		iPlugin->iCameraSession.ReceiveMessage(ECamCameraAccessControl, ECameraReservedNotification, iStatus);
sl@0
   813
		SetActive();
sl@0
   814
		}
sl@0
   815
	else
sl@0
   816
		{
sl@0
   817
		// Reserve has been called again before first call has completed so notify the client
sl@0
   818
		TECAMEvent ecamEvent(KUidECamEventReserveComplete, KErrInUse);
sl@0
   819
		iPlugin->iCameraObserver2->HandleEvent(ecamEvent);
sl@0
   820
		}
sl@0
   821
	}
sl@0
   822
sl@0
   823
void CMMCameraAccessHandler::RunL()
sl@0
   824
	{ 
sl@0
   825
	TInt ret = iStatus.Int();
sl@0
   826
sl@0
   827
	if(!iPlugin->iReserved)
sl@0
   828
		{
sl@0
   829
		if(KErrNone == ret)
sl@0
   830
			{
sl@0
   831
			iPlugin->iReserved = ETrue;
sl@0
   832
			if(!IsActive())
sl@0
   833
				{
sl@0
   834
				// Continue monitoring for overthrow messages should a higher priority client reserve the same camera index
sl@0
   835
				iPlugin->iCameraSession.ReceiveMessage(ECamCameraAccessControl, ECameraOverthrowNotification, iStatus);
sl@0
   836
				SetActive();
sl@0
   837
				}
sl@0
   838
			}
sl@0
   839
sl@0
   840
		// notify the client that reserve has completed, successfully or otherwise
sl@0
   841
		TECAMEvent ecamEvent(KUidECamEventReserveComplete, ret);	
sl@0
   842
		iPlugin->iCameraObserver2->HandleEvent(ecamEvent);
sl@0
   843
		}
sl@0
   844
	else
sl@0
   845
		{
sl@0
   846
		iPlugin->iReserved = EFalse;
sl@0
   847
sl@0
   848
		if (ret == KErrNone)
sl@0
   849
			{
sl@0
   850
			// Client has been overthrown by a second client with higher priority
sl@0
   851
			TECAMEvent ecamEvent(KUidECamEventCameraNoLongerReserved, ret);
sl@0
   852
			iPlugin->iCameraObserver2->HandleEvent(ecamEvent);		
sl@0
   853
			}
sl@0
   854
		}
sl@0
   855
	}
sl@0
   856
sl@0
   857
void CMMCameraAccessHandler::DoCancel()
sl@0
   858
	{
sl@0
   859
	if(!iPlugin->iReserved)
sl@0
   860
		{
sl@0
   861
		iPlugin->iCameraSession.SendMessage(ECamCameraAccessControl, ECameraCancelReservedNotification);
sl@0
   862
sl@0
   863
		// Notify client that ongoing reserve request was cancelled
sl@0
   864
		TECAMEvent ecamEvent(KUidECamEventReserveComplete, KErrCancel);
sl@0
   865
		iPlugin->iCameraObserver2->HandleEvent(ecamEvent);
sl@0
   866
		}
sl@0
   867
	else
sl@0
   868
		{
sl@0
   869
		iPlugin->iCameraSession.SendMessage(ECamCameraAccessControl, ECameraCancelOverthrowNotification);
sl@0
   870
		iPlugin->iReserved = EFalse;
sl@0
   871
		}
sl@0
   872
	}
sl@0
   873
sl@0
   874
sl@0
   875
//
sl@0
   876
//
sl@0
   877
// CLASS CMMCameraPowerHandler
sl@0
   878
//
sl@0
   879
sl@0
   880
CMMCameraPowerHandler::CMMCameraPowerHandler(CMMCameraClientSession* aPlugin, TInt aPriority): CActive(aPriority), 
sl@0
   881
																					 iPlugin(aPlugin)
sl@0
   882
	{
sl@0
   883
	}
sl@0
   884
sl@0
   885
CMMCameraPowerHandler* CMMCameraPowerHandler::NewL(CMMCameraClientSession* aPlugin, TInt aPriority)
sl@0
   886
	{
sl@0
   887
	CMMCameraPowerHandler* self = new (ELeave) CMMCameraPowerHandler(aPlugin, aPriority);
sl@0
   888
	CActiveScheduler::Add(self);
sl@0
   889
	return self;
sl@0
   890
	}
sl@0
   891
sl@0
   892
CMMCameraPowerHandler::~CMMCameraPowerHandler()
sl@0
   893
	{
sl@0
   894
	Cancel();
sl@0
   895
	}
sl@0
   896
sl@0
   897
void CMMCameraPowerHandler::PowerOn()
sl@0
   898
	{ 
sl@0
   899
	if(!IsActive())
sl@0
   900
		{
sl@0
   901
		iPlugin->iCameraSession.ReceiveMessage(ECamPowerCamera, ECameraPowerOnNotification, iStatus);
sl@0
   902
		SetActive();
sl@0
   903
		}
sl@0
   904
	else
sl@0
   905
		{
sl@0
   906
		// PowerOn has been called again before first call has completed so notify the client
sl@0
   907
		TECAMEvent ecamEvent(KUidECamEventPowerOnComplete, KErrAlreadyExists);	
sl@0
   908
		iPlugin->iCameraObserver2->HandleEvent(ecamEvent);	
sl@0
   909
		}
sl@0
   910
	}
sl@0
   911
sl@0
   912
void CMMCameraPowerHandler::RunL()
sl@0
   913
	{ 
sl@0
   914
	TInt ret = iStatus.Int();
sl@0
   915
sl@0
   916
	if(!iPlugin->iPoweredUp)
sl@0
   917
		{
sl@0
   918
		if (ret == KErrNone)
sl@0
   919
			{
sl@0
   920
			iPlugin->iPoweredUp = ETrue;
sl@0
   921
			}
sl@0
   922
		}
sl@0
   923
sl@0
   924
	TECAMEvent ecamEvent(KUidECamEventPowerOnComplete, ret);	
sl@0
   925
	iPlugin->iCameraObserver2->HandleEvent(ecamEvent);
sl@0
   926
	}
sl@0
   927
sl@0
   928
void CMMCameraPowerHandler::DoCancel()
sl@0
   929
	{
sl@0
   930
	if(!iPlugin->iPoweredUp)
sl@0
   931
		{
sl@0
   932
		iPlugin->iCameraSession.SendMessage(ECamPowerCamera, ECameraCancelPowerOnNotification);
sl@0
   933
		} 
sl@0
   934
	}
sl@0
   935
sl@0
   936
sl@0
   937
// __________________________________________________________________________
sl@0
   938
// Exported proxy for instantiation method resolution
sl@0
   939
// Define the interface UIDs
sl@0
   940
const TImplementationProxy ImplementationTable[] = 
sl@0
   941
	{
sl@0
   942
	IMPLEMENTATION_PROXY_ENTRY(KUidMMCameraClientSession, CMMCameraClientSession::NewL),
sl@0
   943
	IMPLEMENTATION_PROXY_ENTRY(KUidMMCameraClientSessionInfo, CMMCameraClientSessionInfo::NewL)
sl@0
   944
	};
sl@0
   945
sl@0
   946
EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
sl@0
   947
	{
sl@0
   948
	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
sl@0
   949
sl@0
   950
	return ImplementationTable;
sl@0
   951
	}