41class QImageCapturePrivate
43 Q_DECLARE_PUBLIC(QImageCapture)
45 QCamera *camera =
nullptr;
47 QMediaCaptureSession *captureSession =
nullptr;
48 QPlatformImageCapture *control =
nullptr;
50 QImageCapture::Error error = QImageCapture::NoError;
52 QMediaMetaData metaData;
54 void _q_error(
int id,
int error,
const QString &errorString);
56 void unsetError() { error = QImageCapture::NoError; errorString.clear(); }
61void QImageCapturePrivate::_q_error(
int id,
int error,
const QString &errorString)
65 this->error = QImageCapture::Error(error);
66 this->errorString = errorString;
68 emit q->errorChanged();
69 emit q->errorOccurred(id,
this->error, errorString);
80QImageCapture::QImageCapture(QObject *parent)
81 : QObject(parent), d_ptr(
new QImageCapturePrivate)
86 auto maybeControl = QPlatformMediaIntegration::instance()->createImageCapture(
this);
88 qWarning() <<
"Failed to initialize QImageCapture" << maybeControl.error();
89 d->errorString = maybeControl.error();
90 d->error = NotReadyError;
94 d->control = maybeControl.value();
95 connect(d->control, &QPlatformImageCapture::imageExposed,
this, &QImageCapture::imageExposed);
96 connect(d->control, &QPlatformImageCapture::imageCaptured,
this, &QImageCapture::imageCaptured);
97 connect(d->control, &QPlatformImageCapture::imageMetadataAvailable,
this,
98 &QImageCapture::imageMetadataAvailable);
99 connect(d->control, &QPlatformImageCapture::imageAvailable,
this,
100 &QImageCapture::imageAvailable);
101 connect(d->control, &QPlatformImageCapture::imageSaved,
this, &QImageCapture::imageSaved);
102 connect(d->control, &QPlatformImageCapture::readyForCaptureChanged,
this,
103 &QImageCapture::readyForCaptureChanged);
104 connect(d->control, SIGNAL(error(
int,
int,QString)),
105 this, SLOT(_q_error(
int,
int,QString)));
294int QImageCapture::captureToFile(
const QString &file)
298 d->_q_error(-1, d->error, d->errorString);
304 if (!isReadyForCapture()) {
305 d->_q_error(-1, NotReadyError, tr(
"Could not capture in stopped state"));
309 return d->control->capture(file);
424void QImageCapture::setFileFormat(QImageCapture::FileFormat format)
429 auto fmt = d->control->imageSettings();
430 const FileFormat oldFormat = fmt.format();
431 if (oldFormat == format)
433 fmt.setFormat(format);
434 d->control->setImageSettings(fmt);
436 if (oldFormat != fileFormat())
437 emit fileFormatChanged();
538void QImageCapture::setResolution(
const QSize &resolution)
543 auto fmt = d->control->imageSettings();
544 if (fmt.resolution() == resolution)
546 fmt.setResolution(resolution);
547 d->control->setImageSettings(fmt);
548 emit resolutionChanged();