/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or (at your option) the GNU General
** Public license version 3 or any later version approved by the KDE Free
** Qt Foundation. The licenses are as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
** https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

#include <qcameraexposurecontrol.h>
#include  "qmediacontrol_p.h"

QT_BEGIN_NAMESPACE

/*!
    \class QCameraExposureControl
    \obsolete

    \brief The QCameraExposureControl class allows controlling camera exposure parameters.

    \inmodule QtMultimedia

    \ingroup multimedia_control

    The QCameraExposure class is the usual method of adjusting exposure related parameters
    when using camera functionality.  This class provides a more complete but less easy
    to use interface, and also forms the interface to implement when writing a new
    implementation of QCamera functionality.

    You can adjust a number of parameters that will affect images and video taken with
    the corresponding QCamera object - see the \l {QCameraExposureControl::ExposureParameter}{ExposureParameter} enumeration.

    The interface name of QCameraExposureControl is \c org.qt-project.qt.cameraexposurecontrol/5.0 as
    defined in QCameraExposureControl_iid.

    \sa QCameraExposure, QCamera
*/

/*!
    \macro QCameraExposureControl_iid

    \c org.qt-project.qt.cameraexposurecontrol/5.0

    Defines the interface name of the QCameraExposureControl class.

    \relates QCameraExposureControl
*/

/*!
    Constructs a camera exposure control object with \a parent.
*/
QCameraExposureControl::QCameraExposureControl(QObject *parent):
    QMediaControl(*new QMediaControlPrivate, parent)
{
}

/*!
    Destroys the camera exposure control object.
*/
QCameraExposureControl::~QCameraExposureControl()
{
}

/*!
  \enum QCameraExposureControl::ExposureParameter
  \value ISO
         Camera ISO sensitivity, specified as integer value.
  \value Aperture
         Lens aperture is specified as an qreal F number.
         The supported apertures list can change depending on the focal length,
         in such a case the exposureParameterRangeChanged() signal is emitted.
  \value ShutterSpeed
         Shutter speed in seconds, specified as qreal.
  \value ExposureCompensation
         Exposure compensation, specified as qreal EV value.
  \value FlashPower
         Manual flash power, specified as qreal value.
         Accepted power range is [0..1.0],
         with 0 value means no flash and 1.0 corresponds to full flash power.

         This value is only used in the \l{QCameraExposure::FlashManual}{manual flash mode}.
  \value TorchPower
         Manual torch power, specified as qreal value.
         Accepted power range is [0..1.0],
         with 0 value means no light and 1.0 corresponds to full torch power.

         This value is only used in the \l{QCameraExposure::FlashTorch}{torch flash mode}.
  \value FlashCompensation
         Flash compensation, specified as qreal EV value.
  \value SpotMeteringPoint
         The relative frame coordinate of the point to use for exposure metering
         in spot metering mode, specified as a QPointF.
  \value ExposureMode
         Camera exposure mode.
  \value MeteringMode
         Camera metering mode.
  \value ExtendedExposureParameter
         The base value for platform specific extended parameters.
         For such parameters the sequential values starting from ExtendedExposureParameter should be used.
*/

/*!
  \fn QCameraExposureControl::isParameterSupported(ExposureParameter parameter) const

  Returns true is exposure \a parameter is supported by backend.
  \since 5.0
*/

/*!
  \fn QCameraExposureControl::requestedValue(ExposureParameter parameter) const

  Returns the requested exposure \a parameter value.

  \since 5.0
*/

/*!
  \fn QCameraExposureControl::actualValue(ExposureParameter parameter) const

  Returns the actual exposure \a parameter value, or invalid QVariant() if the value is unknown or not supported.

  The actual parameter value may differ for the requested one if automatic mode is selected or
  camera supports only limited set of values within the supported range.
  \since 5.0
*/


/*!
  \fn QCameraExposureControl::supportedParameterRange(ExposureParameter parameter, bool *continuous = 0) const

  Returns the list of supported \a parameter values;

  If the camera supports arbitrary exposure parameter value within the supported range,
  *\a continuous is set to true, otherwise *\a continuous is set to false.

  \since 5.0
*/

/*!
  \fn bool QCameraExposureControl::setValue(ExposureParameter parameter, const QVariant& value)

  Set the exposure \a parameter to \a value.
  If a null or invalid QVariant is passed, backend should choose the value automatically,
  and if possible report the actual value to user with QCameraExposureControl::actualValue().

  Returns true if parameter is supported and value is correct.
  \since 5.0
*/

/*!
    \fn void QCameraExposureControl::requestedValueChanged(int parameter)

    Signal emitted when the requested exposure \a parameter value has changed,
    usually in result of setValue() call.
    \since 5.0
*/

/*!
    \fn void QCameraExposureControl::actualValueChanged(int parameter)

    Signal emitted when the actual exposure \a parameter value has changed,
    usually in result of auto exposure algorithms or manual exposure parameter applied.

    \since 5.0
*/

/*!
    \fn void QCameraExposureControl::parameterRangeChanged(int parameter)

    Signal emitted when the supported range of exposure \a parameter values has changed.

    \since 5.0
*/

QT_END_NAMESPACE

#include "moc_qcameraexposurecontrol.cpp"
