diff -r 8b2d6d0384b0 -r d9aefe59d544 camerauis/cameraxui/cxengine/src/cxesettingscontrolsymbian.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraxui/cxengine/src/cxesettingscontrolsymbian.cpp Fri Apr 16 14:51:30 2010 +0300 @@ -0,0 +1,293 @@ +/* +* Copyright (c) 2009 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 +#include +#include +#include + +#include +#include + +#include "cxutils.h" +#include "cxenamespace.h" +#include "cxecameradevice.h" +#include "cxesettings.h" +#include "cxesettingsmappersymbian.h" +#include "cxesettingscontrolsymbian.h" + +/*! +* Constructor +*/ +CxeSettingsControlSymbian::CxeSettingsControlSymbian(CxeCameraDevice &cameraDevice, CxeSettings &settings) + : mCameraDevice(cameraDevice), + mSettings(settings) +{ + // connect scene / setting change callbacks to settings control + connect(&mSettings, + SIGNAL(settingValueChanged(const QString&,QVariant)), + this, + SLOT(handleSettingValueChanged(const QString&,QVariant))); + + connect(&mSettings, + SIGNAL(sceneChanged(CxeScene&)), + this, + SLOT(handleSceneChanged(CxeScene&))); +} + +/*! +* Destructor +*/ +CxeSettingsControlSymbian::~CxeSettingsControlSymbian() +{ +} + +/*! +* Handle new setting value. +* New value is set to camera. +*/ +void CxeSettingsControlSymbian::handleSettingValueChanged(const QString& settingId, QVariant newValue) +{ + CX_DEBUG_ENTER_FUNCTION(); + if (settingId == CxeSettingIds::COLOR_TONE) { + updateColorToneSetting(newValue); + } else if (settingId == CxeSettingIds::WHITE_BALANCE) { + updateWhiteBalanceSetting(newValue); + } else if (settingId == CxeSettingIds::LIGHT_SENSITIVITY) { + updateLightSensitivitySetting(newValue); + } else if (settingId == CxeSettingIds::SHARPNESS) { + updateSharpnessSetting(newValue); + } else if (settingId == CxeSettingIds::CONTRAST) { + updateContrastSetting(newValue); + } else if (settingId == CxeSettingIds::EXPOSURE_MODE) { + updateExposureModeSetting(newValue); + } else if (settingId == CxeSettingIds::EV_COMPENSATION_VALUE) { + updateExposureCompensationSetting(newValue); + } else { + // do nothing + } + + // Image mode specific + if (settingId == CxeSettingIds::FLASH_MODE) { + updateFlashSetting(newValue); + } + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* Handle new scene being set. +* Scene settings are checked and new values are set to camera. +* @param scene New scene containing scene specific settings. +*/ +void CxeSettingsControlSymbian::handleSceneChanged(CxeScene& scene) +{ + CX_DEBUG_ENTER_FUNCTION(); + CX_DEBUG(("CxeSettingsControlSymbian <> new scene [%s]", + scene[CxeSettingIds::SCENE_ID].value().toAscii().constData())); + + foreach (const QString& settingId, scene.keys()) { + handleSettingValueChanged(settingId, scene[settingId]); + } + CX_DEBUG_EXIT_FUNCTION(); +} + + +/*! +* +*/ +void CxeSettingsControlSymbian::updateColorToneSetting(QVariant newValue) +{ + CX_DEBUG_ENTER_FUNCTION(); + +//! @todo: Should be fixed in Dummy engine +#if !defined(__WINSCW__) && !defined(CXE_USE_DUMMY_CAMERA) + + CX_ASSERT_ALWAYS(mCameraDevice.imageProcessor()); + + CCamera::CCameraImageProcessing::TEffect effect = + CxeSettingsMapperSymbian::Map2CameraEffect(newValue.toInt()); + + if (effect != mCameraDevice.imageProcessor()->TransformationValue(KUidECamEventImageProcessingEffect)) { + mCameraDevice.imageProcessor()->SetTransformationValue(KUidECamEventImageProcessingEffect, effect); + } else { + CX_DEBUG(("CxeSettingsControlSymbian: value up-to-date")); + } +#else + Q_UNUSED(newValue) +#endif + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* +*/ +void CxeSettingsControlSymbian::updateWhiteBalanceSetting(QVariant newValue) +{ + CX_DEBUG_ENTER_FUNCTION(); + CX_DEBUG_ASSERT(mCameraDevice.camera()); + + CCamera::TWhiteBalance wb = CxeSettingsMapperSymbian::Map2CameraWb(newValue.toInt()); + + if (wb != mCameraDevice.camera()->WhiteBalance()) { + TRAP_IGNORE( mCameraDevice.camera()->SetWhiteBalanceL(wb) ); + } else { + CX_DEBUG(("CxeSettingsControlSymbian: value up-to-date")); + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* +*/ +void CxeSettingsControlSymbian::updateLightSensitivitySetting(QVariant newValue) +{ + CX_DEBUG_ENTER_FUNCTION(); + CX_ASSERT_ALWAYS(mCameraDevice.advancedSettings()); + + int iso = newValue.toInt(); + + if (iso != mCameraDevice.advancedSettings()->IsoRate()) { + CCamera::CCameraAdvancedSettings::TISORateType type; + if(iso == 0) { + // Automatic ISO rate + type = CCamera::CCameraAdvancedSettings::EISOAutoUnPrioritised; + } else { + // Manual ISO rate + type = CCamera::CCameraAdvancedSettings::EISOManual; + } + TRAP_IGNORE(mCameraDevice.advancedSettings()->SetISORateL(type, iso)); + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* +*/ +void CxeSettingsControlSymbian::updateSharpnessSetting(QVariant newValue) +{ + CX_DEBUG_ENTER_FUNCTION(); + +//! @todo: Should be fixed in Dummy engine +#if !defined(__WINSCW__) && !defined(CXE_USE_DUMMY_CAMERA) + + CX_ASSERT_ALWAYS(mCameraDevice.imageProcessor()); + + // Scale UI values of -10..10 to ECAM range -100..100. + int currentSharpness = mCameraDevice.imageProcessor()->TransformationValue(KUidECamEventImageProcessingAdjustSharpness); + int newSharpness = newValue.toInt()*10; + + CX_DEBUG(("Current sharpness [uid:0x%08x] value is [%d]", KUidECamEventImageProcessingAdjustSharpness, currentSharpness)); + CX_DEBUG(("Setting sharpness [uid:0x%08x] to value [%d]", KUidECamEventImageProcessingAdjustSharpness, newSharpness)); + if (newSharpness != currentSharpness) { + mCameraDevice.imageProcessor()->SetTransformationValue(KUidECamEventImageProcessingAdjustSharpness, newSharpness); + } else { + CX_DEBUG(("CxeSettingsControlSymbian: value up-to-date")); + } +#else + Q_UNUSED(newValue) +#endif + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* +*/ +void CxeSettingsControlSymbian::updateContrastSetting(QVariant newValue) +{ + CX_DEBUG_ENTER_FUNCTION(); + CX_ASSERT_ALWAYS(mCameraDevice.imageProcessor()); + + // Scale UI values of -10..10 to ECAM range -100..100. + int currentContrast = mCameraDevice.imageProcessor()->TransformationValue(KUidECamEventImageProcessingAdjustContrast); + int newContrast = newValue.toInt()*10; + + CX_DEBUG(("Current contrast [uid:0x%08x] value is [%d]", KUidECamEventImageProcessingAdjustContrast, currentContrast)); + CX_DEBUG(("Setting contrast [uid:0x%08x] to value [%d]", KUidECamEventImageProcessingAdjustContrast, newContrast)); + if (newContrast != currentContrast) { + mCameraDevice.imageProcessor()->SetTransformationValue(KUidECamEventImageProcessingAdjustContrast, newContrast); + } else { + CX_DEBUG(("CxeSettingsControlSymbian: value up-to-date")); + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* +*/ +void CxeSettingsControlSymbian::updateExposureModeSetting(QVariant newValue) +{ + CX_DEBUG_ENTER_FUNCTION(); + CX_DEBUG_ASSERT(mCameraDevice.advancedSettings()); + + CCamera::TExposure exposure = CxeSettingsMapperSymbian::Map2CameraExposureMode(newValue.toInt()); + + if(exposure != mCameraDevice.advancedSettings()->ExposureMode()) { + mCameraDevice.advancedSettings()->SetExposureMode(exposure); + } else { + CX_DEBUG(("CxeSettingsControlSymbian: value up-to-date")); + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* +*/ +void CxeSettingsControlSymbian::updateExposureCompensationSetting(QVariant newValue) +{ + CX_DEBUG_ENTER_FUNCTION(); + CX_ASSERT_ALWAYS(mCameraDevice.advancedSettings()); + + // Exposure compensation is a float value, e.g. "-1.5". + // ECAM interface takes integer values, so KECamFineResolutionFactor from + // ecamconstants.h needs to be used as scaler. + int ev = newValue.toReal()*KECamFineResolutionFactor; + + if (ev != mCameraDevice.advancedSettings()->ExposureCompensationStep()) { + mCameraDevice.advancedSettings()->SetExposureCompensationStep(ev); + } else { + CX_DEBUG(("CxeSettingsControlSymbian: value up-to-date")); + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* +*/ +void CxeSettingsControlSymbian::updateFlashSetting(QVariant newValue) +{ + CX_DEBUG_ENTER_FUNCTION(); + CX_ASSERT_ALWAYS(mCameraDevice.camera()); + + CCamera::TFlash flash = CxeSettingsMapperSymbian::Map2CameraFlash(newValue.toInt()); + + if (flash != mCameraDevice.camera()->Flash()) { + TRAP_IGNORE(mCameraDevice.camera()->SetFlashL(flash)); + } else { + CX_DEBUG(("CxeSettingsControlSymbian: value up-to-date")); + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +// end of file