Advanced Camera Settings

This tutorial gives you information about Advanced Camera Settings.


The purpose of this tutorial is to provide detailed descriptions of various advanced settings of Camera.


Every individual camera setting is identified by a UID to facilitate integration in the camera messaging mechanism. Each change of a parameter value causes an event notification containing the UID of the setting to be sent to all MCameraObserver2 clients of the camera. If additional information is required, clients would use the related getter function to identify the new value of the setting. Some settings may have a dependency on others. In this respect a particular setting value may disable a related supported setting.

Using Advanced Camera Settings

The Following tasks will be covered in this tutorial:

  • Creating the CCameraAdvancedSettings object

  • Setting Camera Details

  • Operating in stabilization mode

  • Operating in Flash Mode

  • Operating in Focus Mode.

Basic Procedure for Creating the Advance Settings Object

The high level steps to perform specific advance settings are shown here:

  • Create the CCameraAdvancedSettings object.

  • Provide a reference to a CCamera object. This returns a pointer to a fully constructed CCameraAdvancedSettings object.

    CCamera::CCameraAdvancedSettings* CCamera::CCameraAdvancedSettings::NewL.

    Note: Creation of CCameraAdvancedSettings also involves creation of the corresponding M classes; MCameraAdvancedSettings, MCameraAdvancedSettings2, MCameraAdvancedSettings3 and MCameraAdvancedSettings4 derived classes. Licensee provide concrete implementation for these M classes. CCameraAdvancedSettings is a facade which forwards the setting calls to respective M classes methods.

Note: Clients using MCameraObserver are not recommended to use this extension class, since they cannot handle events.

Basic Procedure for Setting Camera Details

The high level steps to set Camera details are shown here:

  • Get the information about the type of the Camera using CCamera::CCameraAdvancedSettings::TCameraType.

  • Check whether the current camera is present using CCamera::CCameraAdvancedSettings::IsCameraPresent().

  • Get the unique index of the current camera that identifies the camera on the device using CCamera::CCameraAdvancedSettings::CameraIndex()..

Basic Procedure for operating in Stabilization Mode

The high level steps to set Camera in stabilization mode are shown here:

  • Get all the supported stabilization modes on the camera using CCamera::CCameraAdvancedSettings::SupportedStabilizationModes().

  • Get current stabilization mode on the camera using CCamera::CCameraAdvancedSettings::StabilizationMode().

  • Set a specific stabilization mode on the camera using CCamera::CCameraAdvancedSettings::SetStabilizationMode().

    The client receives the notifications of the settings asynchronously through MCameraObserver2::HandleEvent() with UID KUidECamEventCameraSettingStabilizationMode.

    Note: MCameraAdvancedSettings::SetStabilizationMode() concrete implementation implements the actual setting of stabilization mode.

Basic Procedure for operating in Flash Mode

The high level steps to set Camera in flash mode are shown here:

  • Get the list of supported flash mode using the CCamera::CCameraAdvancedSettings::SupportedFlashModes() method and get the current flash mode using the CCamera::CCameraAdvancedSettings::FlashMode() method.

  • Set the flash mode using CCamera::CCameraAdvancedSettings::SetFlashMode(). This triggers a KUidECamEventCameraSettingFlashMode event to all camera MCameraObserver2 clients.

  • Check if the flash red eye reduction is switched on using CCamera::CCameraAdvancedSettings::RedEyeReduceOn(). It returns ETrue for switched ON and EFalse for switched OFF at current state.

    Red Eye Reduce is a special mode of flash that can be set in two ways:

    • CCamera::CCameraAdvancedSettings::SetFlashMode(CCamera::EFlashRedEyeReduce)

    • CCamera::CCameraAdvancedSettings::SetRedEyeReduceOn(ETrue)

    This allows the client to set two flashes simultaneously. In such scenario, if CCamera::CCameraAdvancedSettings::FlashMode() is used, the flash mode set using SetFlashMode() is retrieved.

  • Set the flash type as listed under CCamera::Tflash to CCamera::EFlashVideoLight to have constant emission of light during video mode.

  • Use EPCWFlashOverheated method to indicate that flash is overheated.

  • Use EPCWFlashNotNeeded method to indicate that flash cannot be used because of enough ambient light.

When the clients subscribe for PreCaptureWarnings, concrete implementation issues PreCaptureWarnings. CCamera::CCameraAdvancedSettings::SubscribeToPreCaptureWarningL is one such method that is used for subscription.

Subsequent to subscription, if Ecam adaptation identifies any unfavourable conditions prior to image or video capture, it issues the event KUidECamEventCameraSettingPreCaptureWarning. TECAMEvent2 class should be used to provide the status of every PreCaptureWarning.

See also

Overview for the advanced settings of Camera

Advanced Settings for Focus, Drive Modes, and Bracket Modes