示例#1
0
S60CameraLocksControl::S60CameraLocksControl(S60CameraService *service,
                                             S60ImageCaptureSession *session,
                                             QObject *parent) :
    QCameraLocksControl(parent),
    m_session(0),
    m_service(0),
    m_focusControl(0),
    m_focusStatus(QCamera::Unlocked),
    m_exposureStatus(QCamera::Unlocked),
    m_whiteBalanceStatus(QCamera::Unlocked)
{
    m_session = session;
    m_service = service;
    m_focusControl = qobject_cast<S60CameraFocusControl *>(m_service->requestControl(QCameraFocusControl_iid));

    connect(m_session->settings(), SIGNAL(focusStatusChanged(QCamera::LockStatus, QCamera::LockChangeReason)),
        this, SLOT(focusStatusChanged(QCamera::LockStatus, QCamera::LockChangeReason)));
}
// MCameraObserver2
void S60CameraSettings::HandleAdvancedEvent(const TECAMEvent& aEvent)
{
#ifdef POST_31_PLATFORM
    if (aEvent.iErrorCode != KErrNone) {
        switch (aEvent.iErrorCode) {
        case KErrECamCameraDisabled:
            emit error(QCamera::CameraError, QString("Unexpected camera error."));
            return;
        case KErrECamSettingDisabled:
            emit error(QCamera::CameraError, QString("Unexpected camera error."));
            return;
        case KErrECamParameterNotInRange:
            emit error(QCamera::NotSupportedFeatureError, QString("Requested value is not in supported range."));
            return;
        case KErrECamSettingNotSupported:
            emit error(QCamera::NotSupportedFeatureError, QString("Requested setting is not supported."));
            return;
        case KErrECamNotOptimalFocus:
            emit focusStatusChanged(QCamera::Unlocked, QCamera::LockFailed);
            return;
        }

        if (aEvent.iEventType == KUidECamEventCameraSettingFocusRange ||
                aEvent.iEventType == KUidECamEventCameraSettingAutoFocusType2) {
            emit focusStatusChanged(QCamera::Unlocked, QCamera::LockFailed);
            return;
        } else if (aEvent.iEventType == KUidECamEventCameraSettingIsoRate) {
            if (aEvent.iErrorCode == KErrNotSupported)
                emit error(QCamera::NotSupportedFeatureError, QString("Requested ISO value is not supported."));
            else
                emit error(QCamera::CameraError, QString("Setting ISO value failed."));
            return;
        } else if (aEvent.iEventType == KUidECamEventCameraSettingAperture) {
            if (aEvent.iErrorCode == KErrNotSupported)
                emit error(QCamera::NotSupportedFeatureError, QString("Requested aperture value is not supported."));
            else
                emit error(QCamera::CameraError, QString("Setting aperture value failed."));
            return;
        } else if (aEvent.iEventType == KUidECamEventCameraSettingExposureCompensation) {
            if (aEvent.iErrorCode == KErrNotSupported)
                emit error(QCamera::NotSupportedFeatureError, QString("Requested exposure compensation is not supported."));
            else
                emit error(QCamera::CameraError, QString("Setting exposure compensation failed."));
            return;
        } else if (aEvent.iEventType == KUidECamEventCameraSettingOpticalZoom ||
                   aEvent.iEventType == KUidECamEventCameraSettingDigitalZoom) {
            if (aEvent.iErrorCode == KErrNotSupported)
                return; // Discard
            else {
                emit error(QCamera::CameraError, QString("Setting zoom factor failed."));
                return;
            }
        } else if (aEvent.iEventType == KUidECamEventCameraSettingFocusMode) {
            if (aEvent.iErrorCode == KErrNotSupported)
                if (m_cameraEngine && m_cameraEngine->currentCameraIndex() != 0)
                    emit error(QCamera::NotSupportedFeatureError, QString("Focusing is not supported with this camera."));
                else
                    emit error(QCamera::NotSupportedFeatureError, QString("Requested focus mode is not supported."));
            else
                emit error(QCamera::CameraError, QString("Setting focus mode failed."));
            return;
        } else {
            emit error(QCamera::CameraError, QString("Unexpected camera error."));
            return;
        }
    }

    if (aEvent.iEventType == KUidECamEventCameraSettingExposureLock) {
        if (m_advancedSettings) {
            if (m_advancedSettings->ExposureLockOn())
                emit exposureStatusChanged(QCamera::Locked, QCamera::LockAcquired);
            else
                emit exposureStatusChanged(QCamera::Unlocked, QCamera::LockLost);
        }
        else
            emit exposureStatusChanged(QCamera::Unlocked, QCamera::LockLost);
    }
    else if (aEvent.iEventType == KUidECamEventCameraSettingAperture)
        emit apertureChanged();

    else if (aEvent.iEventType == KUidECamEventCameraSettingApertureRange)
        emit apertureRangeChanged();

    else if (aEvent.iEventType == KUidECamEventCameraSettingIsoRate)
        emit isoSensitivityChanged();

    else if (aEvent.iEventType == KUidECamEventCameraSettingShutterSpeed)
        emit shutterSpeedChanged();

    else if (aEvent.iEventType == KUidECamEventFlashReady)
        emit flashReady(true);

    else if (aEvent.iEventType == KUidECamEventFlashNotReady)
        emit flashReady(false);

    else if (aEvent.iEventType.iUid == KUidECamEventCameraSettingsOptimalFocusUidValue) {
        emit focusStatusChanged(QCamera::Locked, QCamera::LockAcquired);

    } else if (aEvent.iEventType == KUidECamEventCameraSettingFocusMode)
        emit focusStatusChanged(QCamera::Searching, QCamera::UserRequest);
#else // S60 3.1 Platform
    Q_UNUSED(aEvent);
#endif // POST_31_PLATFORM
}