diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcecli/src/mcecamerasource.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcecli/src/mcecamerasource.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,702 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + +#include "mcecamerasource.h" +#include "mcecomcamerasource.h" +#include "mcesession.h" +#include "mcemediastream.h" +#include "mceitcsender.h" +#include "mcemanager.h" +#include "mce.h" +#include "mceserial.h" +#include "mceclilogs.h" + + +#define _FLAT_DATA static_cast( iFlatData ) +#define FLAT_DATA( data ) _FLAT_DATA->data + + +const TInt KMinDigitalZoom = 0; +const TInt KMinContrast = -100; +const TInt KMaxContrast = 100; +const TInt KMinBrightness = -100; +const TInt KMaxBrightness = 100; + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceCameraSource* CMceCameraSource::NewL( CMceManager& aManager ) + { + CMceCameraSource* self = CMceCameraSource::NewLC( aManager ); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceCameraSource* CMceCameraSource::NewLC( CMceManager& aManager ) + { + CMceCameraSource* self = new (ELeave) CMceCameraSource(); + CleanupStack::PushL( self ); + self->ConstructL( &aManager ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMceCameraSource::~CMceCameraSource() + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::EnableL() + { + MCECLI_DEBUG("CMceCameraSource::EnableL, Entry"); + + CMceMediaSource::DoEnableL(); + + MCECLI_DEBUG("CMceCameraSource::EnableL, Exit"); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::DisableL() + { + MCECLI_DEBUG("CMceCameraSource::DisableL, Entry"); + + CMceMediaSource::DoDisableL(); + + MCECLI_DEBUG("CMceCameraSource::DisableL, Exit"); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCameraSource::CamerasAvailable() const + { + return FLAT_DATA( iCamerasAvailable ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetCameraIndexL( TInt aCameraIndex ) + { + MCECLI_DEBUG("CMceCameraSource::SetCameraIndexL, Entry"); + MCECLI_DEBUG_DVALUE("index", aCameraIndex ); + + + __ASSERT_ALWAYS( aCameraIndex >= 0 && + aCameraIndex < this->CamerasAvailable(), + User::Leave( KErrArgument ) ); + + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + + + FLAT_DATA( iCameraInfo ) = SetITCCameraIndexL( aCameraIndex ); + FLAT_DATA( iCameraIndex ) = aCameraIndex; + + + } + else + { + FLAT_DATA( iCameraIndex ) = aCameraIndex; + MCECLI_DEBUG("CMceCameraSource::SetCameraIndexL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::SetCameraIndexL, Exit"); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::GetCameraInfo( TCameraInfo& aInfo ) const + { + aInfo = FLAT_DATA( iCameraInfo ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetZoomFactorL( TInt aZoomFactor ) + { + MCECLI_DEBUG("CMceCameraSource::SetZoomFactorL, Entry"); + MCECLI_DEBUG_DVALUE("factor", aZoomFactor ); + + __ASSERT_ALWAYS( aZoomFactor >= FLAT_DATA( iCameraInfo.iMinZoom ) && + aZoomFactor <= FLAT_DATA( iCameraInfo.iMaxZoom ), + User::Leave( KErrArgument ) ); + + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iZoomFactor ) = SetITCValueL( EMceItcSetZoomFactor, + aZoomFactor ); + } + else + { + FLAT_DATA( iZoomFactor ) = aZoomFactor; + MCECLI_DEBUG("CMceCameraSource::SetZoomFactorL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::SetZoomFactorL, Exit"); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCameraSource::ZoomFactorL() + { + MCECLI_DEBUG("CMceCameraSource::ZoomFactorL, Entry"); + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iZoomFactor ) = GetITCValueL( EMceItcZoomFactor ); + } + else + { + //NOP + MCECLI_DEBUG("CMceCameraSource::ZoomFactorL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::ZoomFactorL, Exit"); + + return FLAT_DATA( iZoomFactor ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetDigitalZoomFactorL( TInt aDigitalZoomFactor ) + { + MCECLI_DEBUG("CMceCameraSource::SetDigitalZoomFactorL, Entry"); + MCECLI_DEBUG_DVALUE("factor", aDigitalZoomFactor ); + + __ASSERT_ALWAYS( aDigitalZoomFactor >= KMinDigitalZoom && + aDigitalZoomFactor <= FLAT_DATA( iCameraInfo.iMaxDigitalZoom ), + User::Leave( KErrArgument ) ); + + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iDigitalZoomFactor ) = + SetITCValueL( EMceItcSetDigitalZoomFactor, + aDigitalZoomFactor ); + } + else + { + FLAT_DATA( iDigitalZoomFactor ) = aDigitalZoomFactor; + MCECLI_DEBUG("CMceCameraSource::SetDigitalZoomFactorL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::SetDigitalZoomFactorL, Exit"); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCameraSource::DigitalZoomFactorL() + { + MCECLI_DEBUG("CMceCameraSource::DigitalZoomFactorL, Entry"); + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iDigitalZoomFactor ) = + GetITCValueL( EMceItcDigitalZoomFactor ); + } + else + { + //NOP + MCECLI_DEBUG("CMceCameraSource::DigitalZoomFactorL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::DigitalZoomFactorL, Exit"); + return FLAT_DATA( iDigitalZoomFactor ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetContrastL( TInt aContrast ) + { + MCECLI_DEBUG("CMceCameraSource::SetContrastL, Entry"); + MCECLI_DEBUG_DVALUE("contrast", aContrast ); + + __ASSERT_ALWAYS( ( FLAT_DATA( iCameraInfo.iOptionsSupported ) & + TCameraInfo::EContrastSupported ) == + TCameraInfo::EContrastSupported, + User::Leave( KErrNotSupported ) ); + + __ASSERT_ALWAYS( (( aContrast >= KMinContrast && + aContrast <= KMaxContrast ) || + aContrast == CCamera::EContrastAuto ), + User::Leave( KErrArgument ) ); + + + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iContrast ) = SetITCValueL( EMceItcSetContrast, + aContrast ); + } + else + { + FLAT_DATA( iContrast ) = aContrast; + MCECLI_DEBUG("CMceCameraSource::SetContrastL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::SetContrastL, Exit"); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCameraSource::ContrastL() + { + MCECLI_DEBUG("CMceCameraSource::ContrastL, Entry"); + + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iContrast ) = GetITCValueL( EMceItcContrast ); + } + else + { + //NOP + MCECLI_DEBUG("CMceCameraSource::ContrastL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::ContrastL, Exit"); + return FLAT_DATA( iContrast ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetBrightnessL( TInt aBrightness ) + { + MCECLI_DEBUG("CMceCameraSource::SetBrightnessL, Entry"); + MCECLI_DEBUG_DVALUE("brightness", aBrightness ); + + __ASSERT_ALWAYS( ( FLAT_DATA( iCameraInfo.iOptionsSupported ) & + TCameraInfo::EBrightnessSupported ) == + TCameraInfo::EBrightnessSupported, + User::Leave( KErrNotSupported ) ); + + __ASSERT_ALWAYS( (( aBrightness >= KMinBrightness && + aBrightness <= KMaxBrightness ) || + aBrightness == CCamera::EBrightnessAuto ), + User::Leave( KErrArgument ) ); + + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iBrightness ) = SetITCValueL( EMceItcSetBrightness, + aBrightness ); + } + else + { + FLAT_DATA( iBrightness ) = aBrightness; + MCECLI_DEBUG("CMceCameraSource::SetBrightnessL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::SetBrightnessL, Exit"); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMceCameraSource::BrightnessL() + { + MCECLI_DEBUG("CMceCameraSource::BrightnessL, Entry"); + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iBrightness ) = GetITCValueL( EMceItcBrightness ); + } + else + { + //NOP + MCECLI_DEBUG("CMceCameraSource::BrightnessL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::BrightnessL, Exit"); + return FLAT_DATA( iBrightness ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetExposureL( CCamera::TExposure aExposure ) + { + MCECLI_DEBUG("CMceCameraSource::SetExposureL, Entry"); + MCECLI_DEBUG_DVALUE("exposure", aExposure ); + + __ASSERT_ALWAYS( + ( FLAT_DATA( iCameraInfo.iExposureModesSupported ) & aExposure ) == + aExposure, + User::Leave( KErrNotSupported ) ); + + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iExposure ) = SetITCValueL( EMceItcSetExposure, + aExposure ); + } + else + { + FLAT_DATA( iExposure ) = aExposure; + MCECLI_DEBUG("CMceCameraSource::SetExposureL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::SetExposureL, Exit"); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CCamera::TExposure CMceCameraSource::ExposureL() + { + MCECLI_DEBUG("CMceCameraSource::ExposureL, Entry"); + + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iExposure ) = GetITCValueL( EMceItcExposure ); + } + else + { + //NOP + MCECLI_DEBUG("CMceCameraSource::ExposureL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::ExposureL, Exit"); + + return static_cast( FLAT_DATA( iExposure ) ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMceCameraSource::SetWhiteBalanceL( + CCamera::TWhiteBalance aWhiteBalance ) + { + MCECLI_DEBUG("CMceCameraSource::SetWhiteBalanceL, Entry"); + MCECLI_DEBUG_DVALUE("white balance", aWhiteBalance ); + + __ASSERT_ALWAYS( + ( FLAT_DATA( iCameraInfo.iWhiteBalanceModesSupported ) & aWhiteBalance ) == + aWhiteBalance, + User::Leave( KErrNotSupported ) ); + + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iWhiteBalance ) = SetITCValueL( EMceItcSetWhiteBalance, + aWhiteBalance ); + } + else + { + FLAT_DATA( iWhiteBalance ) = aWhiteBalance; + MCECLI_DEBUG("CMceCameraSource::SetWhiteBalanceL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::SetWhiteBalanceL, Exit"); + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CCamera::TWhiteBalance CMceCameraSource::WhiteBalanceL() + { + MCECLI_DEBUG("CMceCameraSource::WhiteBalanceL, Entry"); + + if ( MCE_ENDPOINT_ITC_ALLOWED( *this ) ) + { + FLAT_DATA( iWhiteBalance ) = GetITCValueL( EMceItcWhiteBalance ); + } + else + { + //NOP + MCECLI_DEBUG("CMceCameraSource::WhiteBalanceL, done locally"); + } + + MCECLI_DEBUG("CMceCameraSource::WhiteBalanceL, Exit"); + return static_cast( FLAT_DATA( iWhiteBalance ) ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMceCameraSource::InitializeL( CMceManager* aManager ) + { + __ASSERT_ALWAYS( aManager, User::Leave( KErrArgument ) ); + + if ( !FLAT_DATA( iInitialInfoRetrieved ) ) + { + // Receive available camera count + MCECLI_DEBUG("CMceCameraSource::InitializeL, querying available cameras"); + TMceIds ids; + ids.iAppUID = aManager->AppUid().iUid; + + TMceItcArgTInt camerasAvailable; + + _FLAT_DATA->SenderL( + aManager->ServerSession() ).ReadL( ids, EMceItcCamerasAvailable, + camerasAvailable ); + + FLAT_DATA( iCamerasAvailable ) = camerasAvailable(); + + MCECLI_DEBUG_DVALUE("CMceCameraSource::InitializeL,\ +querying camera info for camera ", FLAT_DATA( iCameraIndex ) ); + + // Receive TCameraInfo + GetITCCameraInfoL( *aManager, FLAT_DATA( iCameraInfo ) ); + + FLAT_DATA( iInitialInfoRetrieved ) = ETrue; + + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMceCameraSource::GetITCCameraInfoL( CMceManager& aManager, + TCameraInfo& aInfo ) const + { + + // Receive TCameraInfo + TMceCameraInfo info; + info.iIndex = FLAT_DATA( iCameraIndex ); + + TMceItcArgTCameraInfo cameraInfo( info ); + + TMceIds infoIds; + infoIds.iAppUID = aManager.AppUid().iUid; + _FLAT_DATA->SenderL( + aManager.ServerSession() ).ReadL( infoIds, EMceItcCameraInfo, + cameraInfo ); + + aInfo = cameraInfo().iInfo; + + } + + + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TCameraInfo CMceCameraSource::SetITCCameraIndexL( TInt aCameraIndex ) const + { + CMceSession* session = NULL; + + if ( iStream ) + { + session = iStream->Session(); + } + + if ( !session ) + { + User::Leave( KErrNotReady ); + } + + TMceIds ids; + session->PrepareForITC( ids ); + ids.iMediaID = iStream->Id(); + ids.iSourceID = Id(); + + TMceCameraInfo info; + info.iIndex = aCameraIndex; + + TMceItcArgTCameraInfo value( info ); + + session->ITCSender().ReadL( ids, EMceItcSetCameraIndex, value ); + + + return value().iInfo; + } + + +// ----------------------------------------------------------------------------- +// Factory method to inner usage +// ----------------------------------------------------------------------------- +// +CMceCameraSource* CMceCameraSource::NewL() + { + CMceCameraSource* self = CMceCameraSource::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// Factory method to inner usage +// ----------------------------------------------------------------------------- +// +CMceCameraSource* CMceCameraSource::NewLC() + { + CMceCameraSource* self = new (ELeave) CMceCameraSource(); + CleanupStack::PushL( self ); + self->ConstructL( NULL ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CMceCameraSource::GetITCValueL( TUint8 aITCFunction ) + { + CMceSession* session = NULL; + + if ( iStream ) + { + session = iStream->Session(); + } + + if ( !session ) + { + User::Leave( KErrNotReady ); + } + + TMceIds ids; + session->PrepareForITC( ids ); + ids.iMediaID = iStream->Id(); + ids.iSourceID = Id(); + + TMceItcArgTInt value; + + session->ITCSender().ReadL( ids, + static_cast(aITCFunction), value ); + + return value(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TInt CMceCameraSource::SetITCValueL( TUint8 aITCFunction, + TInt aValue ) + { + CMceSession* session = NULL; + + if ( iStream ) + { + session = iStream->Session(); + } + + if ( !session ) + { + User::Leave( KErrNotReady ); + } + + TMceIds ids; + session->PrepareForITC( ids ); + ids.iMediaID = iStream->Id(); + ids.iSourceID = Id(); + + TMceItcArgTInt value( aValue ); + + session->ITCSender().WriteL( ids, + static_cast(aITCFunction), value ); + + return value(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMceCameraSource::CMceCameraSource() + :CMceMediaSource() + { + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMceCameraSource::ConstructL( CMceManager* aManager ) + { + CMceComCameraSource* mic = CMceComCameraSource::NewLC(); + CMceMediaSource::ConstructL( mic ); + CleanupStack::Pop( mic ); + + if ( aManager ) + { + InitializeL( aManager ); + } + } +