1 | /**************************************************************************** |
2 | ** |
3 | ** Copyright (C) 2016 The Qt Company Ltd. |
4 | ** Contact: https://www.qt.io/licensing/ |
5 | ** |
6 | ** This file is part of the Qt Toolkit. |
7 | ** |
8 | ** $QT_BEGIN_LICENSE:LGPL$ |
9 | ** Commercial License Usage |
10 | ** Licensees holding valid commercial Qt licenses may use this file in |
11 | ** accordance with the commercial license agreement provided with the |
12 | ** Software or, alternatively, in accordance with the terms contained in |
13 | ** a written agreement between you and The Qt Company. For licensing terms |
14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
15 | ** information use the contact form at https://www.qt.io/contact-us. |
16 | ** |
17 | ** GNU Lesser General Public License Usage |
18 | ** Alternatively, this file may be used under the terms of the GNU Lesser |
19 | ** General Public License version 3 as published by the Free Software |
20 | ** Foundation and appearing in the file LICENSE.LGPL3 included in the |
21 | ** packaging of this file. Please review the following information to |
22 | ** ensure the GNU Lesser General Public License version 3 requirements |
23 | ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. |
24 | ** |
25 | ** GNU General Public License Usage |
26 | ** Alternatively, this file may be used under the terms of the GNU |
27 | ** General Public License version 2.0 or (at your option) the GNU General |
28 | ** Public license version 3 or any later version approved by the KDE Free |
29 | ** Qt Foundation. The licenses are as published by the Free Software |
30 | ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 |
31 | ** included in the packaging of this file. Please review the following |
32 | ** information to ensure the GNU General Public License requirements will |
33 | ** be met: https://www.gnu.org/licenses/gpl-2.0.html and |
34 | ** https://www.gnu.org/licenses/gpl-3.0.html. |
35 | ** |
36 | ** $QT_END_LICENSE$ |
37 | ** |
38 | ****************************************************************************/ |
39 | |
40 | #include "qcameraexposure.h" |
41 | #include "qmediaobject_p.h" |
42 | |
43 | #include <qcamera.h> |
44 | #include <qcameraexposurecontrol.h> |
45 | #include <qcameraflashcontrol.h> |
46 | |
47 | #include <QtCore/QMetaObject> |
48 | #include <QtCore/QDebug> |
49 | |
50 | QT_BEGIN_NAMESPACE |
51 | |
52 | /*! |
53 | \class QCameraExposure |
54 | |
55 | |
56 | \brief The QCameraExposure class provides interface for exposure related camera settings. |
57 | |
58 | \inmodule QtMultimedia |
59 | \ingroup multimedia |
60 | \ingroup multimedia_camera |
61 | |
62 | */ |
63 | |
64 | //#define DEBUG_EXPOSURE_CHANGES 1 |
65 | |
66 | static void qRegisterCameraExposureMetaTypes() |
67 | { |
68 | qRegisterMetaType<QCameraExposure::ExposureMode>(typeName: "QCameraExposure::ExposureMode" ); |
69 | qRegisterMetaType<QCameraExposure::FlashModes>(typeName: "QCameraExposure::FlashModes" ); |
70 | qRegisterMetaType<QCameraExposure::MeteringMode>(typeName: "QCameraExposure::MeteringMode" ); |
71 | } |
72 | |
73 | Q_CONSTRUCTOR_FUNCTION(qRegisterCameraExposureMetaTypes) |
74 | |
75 | |
76 | class QCameraExposurePrivate |
77 | { |
78 | Q_DECLARE_NON_CONST_PUBLIC(QCameraExposure) |
79 | public: |
80 | void initControls(); |
81 | QCameraExposure *q_ptr; |
82 | |
83 | template<typename T> T actualExposureParameter(QCameraExposureControl::ExposureParameter parameter, const T &defaultValue) const; |
84 | template<typename T> T requestedExposureParameter(QCameraExposureControl::ExposureParameter parameter, const T &defaultValue) const; |
85 | template<typename T> void setExposureParameter(QCameraExposureControl::ExposureParameter parameter, const T &value); |
86 | void resetExposureParameter(QCameraExposureControl::ExposureParameter parameter); |
87 | |
88 | QCamera *camera; |
89 | QCameraExposureControl *exposureControl; |
90 | QCameraFlashControl *flashControl; |
91 | |
92 | void _q_exposureParameterChanged(int parameter); |
93 | void _q_exposureParameterRangeChanged(int parameter); |
94 | }; |
95 | |
96 | void QCameraExposurePrivate::initControls() |
97 | { |
98 | Q_Q(QCameraExposure); |
99 | |
100 | QMediaService *service = camera->service(); |
101 | exposureControl = nullptr; |
102 | flashControl = nullptr; |
103 | if (service) { |
104 | exposureControl = qobject_cast<QCameraExposureControl *>(object: service->requestControl(QCameraExposureControl_iid)); |
105 | flashControl = qobject_cast<QCameraFlashControl *>(object: service->requestControl(QCameraFlashControl_iid)); |
106 | } |
107 | if (exposureControl) { |
108 | q->connect(sender: exposureControl, SIGNAL(actualValueChanged(int)), |
109 | receiver: q, SLOT(_q_exposureParameterChanged(int))); |
110 | q->connect(sender: exposureControl, SIGNAL(parameterRangeChanged(int)), |
111 | receiver: q, SLOT(_q_exposureParameterRangeChanged(int))); |
112 | } |
113 | |
114 | if (flashControl) |
115 | q->connect(sender: flashControl, SIGNAL(flashReady(bool)), receiver: q, SIGNAL(flashReady(bool))); |
116 | } |
117 | |
118 | template<typename T> |
119 | T QCameraExposurePrivate::actualExposureParameter(QCameraExposureControl::ExposureParameter parameter, const T &defaultValue) const |
120 | { |
121 | QVariant value = exposureControl ? exposureControl->actualValue(parameter) : QVariant(); |
122 | |
123 | return value.isValid() ? value.value<T>() : defaultValue; |
124 | } |
125 | |
126 | template<typename T> |
127 | T QCameraExposurePrivate::requestedExposureParameter(QCameraExposureControl::ExposureParameter parameter, const T &defaultValue) const |
128 | { |
129 | QVariant value = exposureControl ? exposureControl->requestedValue(parameter) : QVariant(); |
130 | |
131 | return value.isValid() ? value.value<T>() : defaultValue; |
132 | } |
133 | |
134 | template<typename T> |
135 | void QCameraExposurePrivate::setExposureParameter(QCameraExposureControl::ExposureParameter parameter, const T &value) |
136 | { |
137 | if (exposureControl) |
138 | exposureControl->setValue(parameter, value: QVariant::fromValue<T>(value)); |
139 | } |
140 | |
141 | void QCameraExposurePrivate::resetExposureParameter(QCameraExposureControl::ExposureParameter parameter) |
142 | { |
143 | if (exposureControl) |
144 | exposureControl->setValue(parameter, value: QVariant()); |
145 | } |
146 | |
147 | |
148 | void QCameraExposurePrivate::_q_exposureParameterChanged(int parameter) |
149 | { |
150 | Q_Q(QCameraExposure); |
151 | |
152 | #if DEBUG_EXPOSURE_CHANGES |
153 | qDebug() << "Exposure parameter changed:" |
154 | << QCameraExposureControl::ExposureParameter(parameter) |
155 | << exposureControl->actualValue(QCameraExposureControl::ExposureParameter(parameter)); |
156 | #endif |
157 | |
158 | switch (parameter) { |
159 | case QCameraExposureControl::ISO: |
160 | emit q->isoSensitivityChanged(q->isoSensitivity()); |
161 | break; |
162 | case QCameraExposureControl::Aperture: |
163 | emit q->apertureChanged(q->aperture()); |
164 | break; |
165 | case QCameraExposureControl::ShutterSpeed: |
166 | emit q->shutterSpeedChanged(speed: q->shutterSpeed()); |
167 | break; |
168 | case QCameraExposureControl::ExposureCompensation: |
169 | emit q->exposureCompensationChanged(q->exposureCompensation()); |
170 | break; |
171 | } |
172 | } |
173 | |
174 | void QCameraExposurePrivate::_q_exposureParameterRangeChanged(int parameter) |
175 | { |
176 | Q_Q(QCameraExposure); |
177 | |
178 | switch (parameter) { |
179 | case QCameraExposureControl::Aperture: |
180 | emit q->apertureRangeChanged(); |
181 | break; |
182 | case QCameraExposureControl::ShutterSpeed: |
183 | emit q->shutterSpeedRangeChanged(); |
184 | break; |
185 | } |
186 | } |
187 | |
188 | /*! |
189 | Construct a QCameraExposure from service \a provider and \a parent. |
190 | */ |
191 | |
192 | QCameraExposure::QCameraExposure(QCamera *parent): |
193 | QObject(parent), d_ptr(new QCameraExposurePrivate) |
194 | { |
195 | Q_D(QCameraExposure); |
196 | d->camera = parent; |
197 | d->q_ptr = this; |
198 | d->initControls(); |
199 | } |
200 | |
201 | |
202 | /*! |
203 | Destroys the camera exposure object. |
204 | */ |
205 | |
206 | QCameraExposure::~QCameraExposure() |
207 | { |
208 | Q_D(QCameraExposure); |
209 | if (d->exposureControl) |
210 | d->camera->service()->releaseControl(control: d->exposureControl); |
211 | |
212 | delete d; |
213 | } |
214 | |
215 | /*! |
216 | Returns true if exposure settings are supported by this camera. |
217 | */ |
218 | bool QCameraExposure::isAvailable() const |
219 | { |
220 | return d_func()->exposureControl != nullptr; |
221 | } |
222 | |
223 | |
224 | /*! |
225 | \property QCameraExposure::flashMode |
226 | \brief The flash mode being used. |
227 | |
228 | Usually the single QCameraExposure::FlashMode flag is used, |
229 | but some non conflicting flags combination are also allowed, |
230 | like QCameraExposure::FlashManual | QCameraExposure::FlashSlowSyncRearCurtain. |
231 | |
232 | \sa QCameraExposure::isFlashModeSupported(), QCameraExposure::isFlashReady() |
233 | */ |
234 | |
235 | QCameraExposure::FlashModes QCameraExposure::flashMode() const |
236 | { |
237 | return d_func()->flashControl ? d_func()->flashControl->flashMode() : QCameraExposure::FlashOff; |
238 | } |
239 | |
240 | void QCameraExposure::setFlashMode(QCameraExposure::FlashModes mode) |
241 | { |
242 | if (d_func()->flashControl) |
243 | d_func()->flashControl->setFlashMode(mode); |
244 | } |
245 | |
246 | /*! |
247 | Returns true if the flash \a mode is supported. |
248 | */ |
249 | |
250 | bool QCameraExposure::isFlashModeSupported(QCameraExposure::FlashModes mode) const |
251 | { |
252 | return d_func()->flashControl ? d_func()->flashControl->isFlashModeSupported(mode) : false; |
253 | } |
254 | |
255 | /*! |
256 | Returns true if flash is charged. |
257 | */ |
258 | |
259 | bool QCameraExposure::isFlashReady() const |
260 | { |
261 | return d_func()->flashControl ? d_func()->flashControl->isFlashReady() : false; |
262 | } |
263 | |
264 | /*! |
265 | \property QCameraExposure::exposureMode |
266 | \brief The exposure mode being used. |
267 | |
268 | \sa QCameraExposure::isExposureModeSupported() |
269 | */ |
270 | |
271 | QCameraExposure::ExposureMode QCameraExposure::exposureMode() const |
272 | { |
273 | return d_func()->actualExposureParameter<QCameraExposure::ExposureMode>(parameter: QCameraExposureControl::ExposureMode, defaultValue: QCameraExposure::ExposureAuto); |
274 | } |
275 | |
276 | void QCameraExposure::setExposureMode(QCameraExposure::ExposureMode mode) |
277 | { |
278 | d_func()->setExposureParameter<QCameraExposure::ExposureMode>(parameter: QCameraExposureControl::ExposureMode, value: mode); |
279 | } |
280 | |
281 | /*! |
282 | Returns true if the exposure \a mode is supported. |
283 | */ |
284 | |
285 | bool QCameraExposure::isExposureModeSupported(QCameraExposure::ExposureMode mode) const |
286 | { |
287 | if (!d_func()->exposureControl) |
288 | return false; |
289 | |
290 | bool continuous = false; |
291 | return d_func()->exposureControl->supportedParameterRange(parameter: QCameraExposureControl::ExposureMode, continuous: &continuous) |
292 | .contains(t: QVariant::fromValue<QCameraExposure::ExposureMode>(value: mode)); |
293 | } |
294 | |
295 | /*! |
296 | \property QCameraExposure::exposureCompensation |
297 | \brief Exposure compensation in EV units. |
298 | |
299 | Exposure compensation property allows to adjust the automatically calculated exposure. |
300 | */ |
301 | |
302 | qreal QCameraExposure::exposureCompensation() const |
303 | { |
304 | return d_func()->actualExposureParameter<qreal>(parameter: QCameraExposureControl::ExposureCompensation, defaultValue: 0.0); |
305 | } |
306 | |
307 | void QCameraExposure::setExposureCompensation(qreal ev) |
308 | { |
309 | d_func()->setExposureParameter<qreal>(parameter: QCameraExposureControl::ExposureCompensation, value: ev); |
310 | } |
311 | |
312 | /*! |
313 | \property QCameraExposure::meteringMode |
314 | \brief The metering mode being used. |
315 | |
316 | \sa QCameraExposure::isMeteringModeSupported() |
317 | */ |
318 | |
319 | QCameraExposure::MeteringMode QCameraExposure::meteringMode() const |
320 | { |
321 | return d_func()->actualExposureParameter<QCameraExposure::MeteringMode>(parameter: QCameraExposureControl::MeteringMode, defaultValue: QCameraExposure::MeteringMatrix); |
322 | } |
323 | |
324 | void QCameraExposure::setMeteringMode(QCameraExposure::MeteringMode mode) |
325 | { |
326 | d_func()->setExposureParameter<QCameraExposure::MeteringMode>(parameter: QCameraExposureControl::MeteringMode, value: mode); |
327 | } |
328 | |
329 | /*! |
330 | \fn QCameraExposure::spotMeteringPoint() const |
331 | |
332 | When supported, the spot metering point is the (normalized) position of the point of the image |
333 | where exposure metering will be performed. This is typically used to indicate an |
334 | "interesting" area of the image that should be exposed properly. |
335 | |
336 | The coordinates are relative frame coordinates: |
337 | QPointF(0,0) points to the left top frame point, QPointF(0.5,0.5) points to the frame center, |
338 | which is typically the default spot metering point. |
339 | |
340 | The spot metering point is only used with spot metering mode. |
341 | |
342 | \sa setSpotMeteringPoint() |
343 | */ |
344 | |
345 | QPointF QCameraExposure::spotMeteringPoint() const |
346 | { |
347 | return d_func()->exposureControl ? d_func()->exposureControl->actualValue(parameter: QCameraExposureControl::SpotMeteringPoint).toPointF() : QPointF(); |
348 | } |
349 | |
350 | /*! |
351 | \fn QCameraExposure::setSpotMeteringPoint(const QPointF &point) |
352 | |
353 | Allows setting the spot metering point to \a point. |
354 | |
355 | \sa spotMeteringPoint() |
356 | */ |
357 | |
358 | void QCameraExposure::setSpotMeteringPoint(const QPointF &point) |
359 | { |
360 | if (d_func()->exposureControl) |
361 | d_func()->exposureControl->setValue(parameter: QCameraExposureControl::SpotMeteringPoint, value: point); |
362 | } |
363 | |
364 | |
365 | /*! |
366 | Returns true if the metering \a mode is supported. |
367 | */ |
368 | bool QCameraExposure::isMeteringModeSupported(QCameraExposure::MeteringMode mode) const |
369 | { |
370 | if (!d_func()->exposureControl) |
371 | return false; |
372 | |
373 | bool continuous = false; |
374 | return d_func()->exposureControl->supportedParameterRange(parameter: QCameraExposureControl::MeteringMode, continuous: &continuous) |
375 | .contains(t: QVariant::fromValue<QCameraExposure::MeteringMode>(value: mode)); |
376 | } |
377 | |
378 | int QCameraExposure::isoSensitivity() const |
379 | { |
380 | return d_func()->actualExposureParameter<int>(parameter: QCameraExposureControl::ISO, defaultValue: -1); |
381 | } |
382 | |
383 | /*! |
384 | Returns the requested ISO sensitivity |
385 | or -1 if automatic ISO is turned on. |
386 | */ |
387 | int QCameraExposure::requestedIsoSensitivity() const |
388 | { |
389 | return d_func()->requestedExposureParameter<int>(parameter: QCameraExposureControl::ISO, defaultValue: -1); |
390 | } |
391 | |
392 | /*! |
393 | Returns the list of ISO senitivities camera supports. |
394 | |
395 | If the camera supports arbitrary ISO sensitivities within the supported range, |
396 | *\a continuous is set to true, otherwise *\a continuous is set to false. |
397 | */ |
398 | QList<int> QCameraExposure::supportedIsoSensitivities(bool *continuous) const |
399 | { |
400 | QList<int> res; |
401 | QCameraExposureControl *control = d_func()->exposureControl; |
402 | |
403 | bool tmp = false; |
404 | if (!continuous) |
405 | continuous = &tmp; |
406 | |
407 | if (!control) |
408 | return res; |
409 | |
410 | const auto range = control->supportedParameterRange(parameter: QCameraExposureControl::ISO, continuous); |
411 | for (const QVariant &value : range) { |
412 | bool ok = false; |
413 | int intValue = value.toInt(ok: &ok); |
414 | if (ok) |
415 | res.append(t: intValue); |
416 | else |
417 | qWarning() << "Incompatible ISO value type, int is expected" ; |
418 | } |
419 | |
420 | return res; |
421 | } |
422 | |
423 | /*! |
424 | \fn QCameraExposure::setManualIsoSensitivity(int iso) |
425 | Sets the manual sensitivity to \a iso |
426 | */ |
427 | |
428 | void QCameraExposure::setManualIsoSensitivity(int iso) |
429 | { |
430 | d_func()->setExposureParameter<int>(parameter: QCameraExposureControl::ISO, value: iso); |
431 | } |
432 | |
433 | /*! |
434 | \fn QCameraExposure::setAutoIsoSensitivity() |
435 | Turn on auto sensitivity |
436 | */ |
437 | |
438 | void QCameraExposure::setAutoIsoSensitivity() |
439 | { |
440 | d_func()->resetExposureParameter(parameter: QCameraExposureControl::ISO); |
441 | } |
442 | |
443 | /*! |
444 | \property QCameraExposure::shutterSpeed |
445 | \brief Camera's shutter speed in seconds. |
446 | |
447 | \sa supportedShutterSpeeds(), setAutoShutterSpeed(), setManualShutterSpeed() |
448 | */ |
449 | |
450 | /*! |
451 | \fn QCameraExposure::shutterSpeedChanged(qreal speed) |
452 | |
453 | Signals that a camera's shutter \a speed has changed. |
454 | */ |
455 | |
456 | /*! |
457 | \property QCameraExposure::isoSensitivity |
458 | \brief The sensor ISO sensitivity. |
459 | |
460 | \sa supportedIsoSensitivities(), setAutoIsoSensitivity(), setManualIsoSensitivity() |
461 | */ |
462 | |
463 | /*! |
464 | \property QCameraExposure::aperture |
465 | \brief Lens aperture is specified as an F number, the ratio of the focal length to effective aperture diameter. |
466 | |
467 | \sa supportedApertures(), setAutoAperture(), setManualAperture(), requestedAperture() |
468 | */ |
469 | |
470 | |
471 | qreal QCameraExposure::aperture() const |
472 | { |
473 | return d_func()->actualExposureParameter<qreal>(parameter: QCameraExposureControl::Aperture, defaultValue: -1.0); |
474 | } |
475 | |
476 | /*! |
477 | Returns the requested manual aperture |
478 | or -1.0 if automatic aperture is turned on. |
479 | */ |
480 | qreal QCameraExposure::requestedAperture() const |
481 | { |
482 | return d_func()->requestedExposureParameter<qreal>(parameter: QCameraExposureControl::Aperture, defaultValue: -1.0); |
483 | } |
484 | |
485 | |
486 | /*! |
487 | Returns the list of aperture values camera supports. |
488 | The apertures list can change depending on the focal length, |
489 | in such a case the apertureRangeChanged() signal is emitted. |
490 | |
491 | If the camera supports arbitrary aperture values within the supported range, |
492 | *\a continuous is set to true, otherwise *\a continuous is set to false. |
493 | */ |
494 | QList<qreal> QCameraExposure::supportedApertures(bool * continuous) const |
495 | { |
496 | QList<qreal> res; |
497 | QCameraExposureControl *control = d_func()->exposureControl; |
498 | |
499 | bool tmp = false; |
500 | if (!continuous) |
501 | continuous = &tmp; |
502 | |
503 | if (!control) |
504 | return res; |
505 | |
506 | const auto range = control->supportedParameterRange(parameter: QCameraExposureControl::Aperture, continuous); |
507 | for (const QVariant &value : range) { |
508 | bool ok = false; |
509 | qreal realValue = value.toReal(ok: &ok); |
510 | if (ok) |
511 | res.append(t: realValue); |
512 | else |
513 | qWarning() << "Incompatible aperture value type, qreal is expected" ; |
514 | } |
515 | |
516 | return res; |
517 | } |
518 | |
519 | /*! |
520 | \fn QCameraExposure::setManualAperture(qreal aperture) |
521 | Sets the manual camera \a aperture value. |
522 | */ |
523 | |
524 | void QCameraExposure::setManualAperture(qreal aperture) |
525 | { |
526 | d_func()->setExposureParameter<qreal>(parameter: QCameraExposureControl::Aperture, value: aperture); |
527 | } |
528 | |
529 | /*! |
530 | \fn QCameraExposure::setAutoAperture() |
531 | Turn on auto aperture |
532 | */ |
533 | |
534 | void QCameraExposure::setAutoAperture() |
535 | { |
536 | d_func()->resetExposureParameter(parameter: QCameraExposureControl::Aperture); |
537 | } |
538 | |
539 | /*! |
540 | Returns the current shutter speed in seconds. |
541 | */ |
542 | |
543 | qreal QCameraExposure::shutterSpeed() const |
544 | { |
545 | return d_func()->actualExposureParameter<qreal>(parameter: QCameraExposureControl::ShutterSpeed, defaultValue: -1.0); |
546 | } |
547 | |
548 | /*! |
549 | Returns the requested manual shutter speed in seconds |
550 | or -1.0 if automatic shutter speed is turned on. |
551 | */ |
552 | qreal QCameraExposure::requestedShutterSpeed() const |
553 | { |
554 | return d_func()->requestedExposureParameter<qreal>(parameter: QCameraExposureControl::ShutterSpeed, defaultValue: -1.0); |
555 | } |
556 | |
557 | /*! |
558 | Returns the list of shutter speed values in seconds camera supports. |
559 | |
560 | If the camera supports arbitrary shutter speed values within the supported range, |
561 | *\a continuous is set to true, otherwise *\a continuous is set to false. |
562 | */ |
563 | QList<qreal> QCameraExposure::supportedShutterSpeeds(bool *continuous) const |
564 | { |
565 | QList<qreal> res; |
566 | QCameraExposureControl *control = d_func()->exposureControl; |
567 | |
568 | bool tmp = false; |
569 | if (!continuous) |
570 | continuous = &tmp; |
571 | |
572 | if (!control) |
573 | return res; |
574 | |
575 | const auto range = control->supportedParameterRange(parameter: QCameraExposureControl::ShutterSpeed, continuous); |
576 | for (const QVariant &value : range) { |
577 | bool ok = false; |
578 | qreal realValue = value.toReal(ok: &ok); |
579 | if (ok) |
580 | res.append(t: realValue); |
581 | else |
582 | qWarning() << "Incompatible shutter speed value type, qreal is expected" ; |
583 | } |
584 | |
585 | return res; |
586 | } |
587 | |
588 | /*! |
589 | Set the manual shutter speed to \a seconds |
590 | */ |
591 | |
592 | void QCameraExposure::setManualShutterSpeed(qreal seconds) |
593 | { |
594 | d_func()->setExposureParameter<qreal>(parameter: QCameraExposureControl::ShutterSpeed, value: seconds); |
595 | } |
596 | |
597 | /*! |
598 | Turn on auto shutter speed |
599 | */ |
600 | |
601 | void QCameraExposure::setAutoShutterSpeed() |
602 | { |
603 | d_func()->resetExposureParameter(parameter: QCameraExposureControl::ShutterSpeed); |
604 | } |
605 | |
606 | |
607 | /*! |
608 | \enum QCameraExposure::FlashMode |
609 | |
610 | \value FlashAuto Automatic flash. |
611 | \value FlashOff Flash is Off. |
612 | \value FlashOn Flash is On. |
613 | \value FlashRedEyeReduction Red eye reduction flash. |
614 | \value FlashFill Use flash to fillin shadows. |
615 | \value FlashTorch Constant light source. If supported, |
616 | torch can be enabled without loading the camera. |
617 | \value FlashVideoLight Constant light source, useful for video capture. |
618 | The light is turned on only while camera is active. |
619 | \value FlashSlowSyncFrontCurtain |
620 | Use the flash in conjunction with a slow shutter speed. |
621 | This mode allows better exposure of distant objects and/or motion blur effect. |
622 | \value FlashSlowSyncRearCurtain |
623 | The similar mode to FlashSlowSyncFrontCurtain but flash is fired at the end of exposure. |
624 | \value FlashManual Flash power is manualy set. |
625 | */ |
626 | |
627 | /*! |
628 | \enum QCameraExposure::ExposureMode |
629 | |
630 | \value ExposureAuto Automatic mode. |
631 | \value ExposureManual Manual mode. |
632 | \value ExposurePortrait Portrait exposure mode. |
633 | \value ExposureNight Night mode. |
634 | \value ExposureBacklight Backlight exposure mode. |
635 | \value ExposureSpotlight Spotlight exposure mode. |
636 | \value ExposureSports Spots exposure mode. |
637 | \value ExposureSnow Snow exposure mode. |
638 | \value ExposureBeach Beach exposure mode. |
639 | \value ExposureLargeAperture Use larger aperture with small depth of field. |
640 | \value ExposureSmallAperture Use smaller aperture. |
641 | \value ExposureAction Action mode. Since 5.5 |
642 | \value ExposureLandscape Landscape mode. Since 5.5 |
643 | \value ExposureNightPortrait Night portrait mode. Since 5.5 |
644 | \value ExposureTheatre Theatre mode. Since 5.5 |
645 | \value ExposureSunset Sunset mode. Since 5.5 |
646 | \value ExposureSteadyPhoto Steady photo mode. Since 5.5 |
647 | \value ExposureFireworks Fireworks mode. Since 5.5 |
648 | \value ExposureParty Party mode. Since 5.5 |
649 | \value ExposureCandlelight Candlelight mode. Since 5.5 |
650 | \value ExposureBarcode Barcode mode. Since 5.5 |
651 | \value ExposureModeVendor The base value for device specific exposure modes. |
652 | */ |
653 | |
654 | /*! |
655 | \enum QCameraExposure::MeteringMode |
656 | |
657 | \value MeteringMatrix Matrix metering mode. |
658 | \value MeteringAverage Center weighted average metering mode. |
659 | \value MeteringSpot Spot metering mode. |
660 | */ |
661 | |
662 | /*! |
663 | \property QCameraExposure::flashReady |
664 | \brief Indicates if the flash is charged and ready to use. |
665 | */ |
666 | |
667 | /*! |
668 | \fn void QCameraExposure::flashReady(bool ready) |
669 | |
670 | Signal the flash \a ready status has changed. |
671 | */ |
672 | |
673 | /*! |
674 | \fn void QCameraExposure::apertureChanged(qreal value) |
675 | |
676 | Signal emitted when aperature changes to \a value. |
677 | */ |
678 | |
679 | /*! |
680 | \fn void QCameraExposure::apertureRangeChanged() |
681 | |
682 | Signal emitted when aperature range has changed. |
683 | */ |
684 | |
685 | |
686 | /*! |
687 | \fn void QCameraExposure::shutterSpeedRangeChanged() |
688 | |
689 | Signal emitted when the shutter speed range has changed. |
690 | */ |
691 | |
692 | |
693 | /*! |
694 | \fn void QCameraExposure::isoSensitivityChanged(int value) |
695 | |
696 | Signal emitted when sensitivity changes to \a value. |
697 | */ |
698 | |
699 | /*! |
700 | \fn void QCameraExposure::exposureCompensationChanged(qreal value) |
701 | |
702 | Signal emitted when the exposure compensation changes to \a value. |
703 | */ |
704 | |
705 | QT_END_NAMESPACE |
706 | |
707 | #include "moc_qcameraexposure.cpp" |
708 | |