/****************************************************************************
**
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** 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 Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!

\example multimediawidgets/camera
\title Camera Example
\ingroup multimedia_examples
\ingroup video_examples
\ingroup camera_examples
\meta {tag} {widgets}
\brief Shows how to capture a still image or record video.
or video.

The Camera Example demonstrates how you can use \l{Qt Multimedia} to implement
some basic Camera functionality to take still images and record video clips
with audio.

\include examples-run.qdocinc

The example implements a \c Camera class that acts as our camera interface. It
has a user interface, control functions, setting values and a means of defining
the location where the image or video clip is to be saved. It will also store
the image and video settings.

The Camera class uses:
\list
    \li An instance of \l {QCamera}, the API class interface to the hardware.
    \li An instance of \l {QImageCapture} to take still images.
    \li An instance of \l {QMediaRecorder} to record video. It also contains
    the user interface object.
\endlist

The Camera constructor does some basic initialization:
\list
    \li The user interface is initialized.
    \li UI signals are connected to slots that react to the triggering event.
\endlist
However, most of the work is done when the \e{setCamera()} function is called,
passing in a \l QCameraDevice.

\e{setCamera()} sets up various connections between the user interface and the
functionality of the Camera class using signals and slots. It also instantiates
and initializes the \l {QCamera}, \l {QImageCapture}, and \l {QMediaRecorder}
objects mentioned above. The still and video recording visual tabs are enabled
and finally the \l {QCamera::start}{start()} function of the \l{QCamera}
object is called.

Now that the camera is ready for user commands it waits for a suitable event.
Such an event can be a key press of either the \l {Qt::Key_CameraFocus} or
\l {Qt::Key_Camera} buttons on the application window. Camera focus will
simply display the preview and lock the camera settings. \c Key_Camera will
either call \e{takeImage()} if doing an image capture, or call
\c record() or \c stop() (if already recording) on the QMediaRecorder instance
when recording video.

\image camera-example.png

*/
