// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!

\example 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

*/
