// 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
\examplecategory {Graphics & Multimedia}
\meta {tag} {widgets}
\brief Shows how to capture a still image or record video.

\image camera-example.png

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

\section1 The Camera constructor

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

\quotefromfile camera/camera.cpp
\skipto Camera::Camera()
\printuntil }

\section1 setCamera()

\c{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.

\skipto void Camera::setCamera(const QCameraDevice &cameraDevice)
\printto m_captureSession.setVideoOutput(ui->viewfinder);

The still and video recording visual tabs are enabled:

\printuntil updateCaptureMode();

Finally the \l {QCamera::start}{start()} function of the \l{QCamera}
object is called.

\printuntil m_camera->start();

\section1 Triggering capturing

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.

Key_CameraFocus will simply display the preview and lock the camera settings.
\printto case Qt::Key_Camera:

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

\printuntil break;

*/
