Revision control

Copy as Markdown

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include <QtFFmpegMediaPluginImpl/private/qandroidimagecapture_p.h>
#include <QtFFmpegMediaPluginImpl/private/qandroidcamera_p.h>
#include <QtFFmpegMediaPluginImpl/private/qffmpegmediacapturesession_p.h>
QT_BEGIN_NAMESPACE
namespace QFFmpeg {
QAndroidImageCapture::QAndroidImageCapture(QImageCapture *parent)
: QFFmpegImageCapture(parent)
{
connect(this, &QPlatformImageCapture::imageSaved, this, &QAndroidImageCapture::updateExif);
}
QAndroidImageCapture::~QAndroidImageCapture()
{
}
int QAndroidImageCapture::doCapture(const QString &fileName)
{
auto ret = QFFmpegImageCapture::doCapture(fileName);
if (ret >= 0) {
auto androidCamera = qobject_cast<QAndroidCamera *>(videoSource());
if (androidCamera)
androidCamera->capture();
}
return ret;
}
void QAndroidImageCapture::applySettingsToVideoSource()
{
// Apply to the session's camera even if inactive, the still reader is created when it opens
auto *androidCamera = qobject_cast<QAndroidCamera *>(
captureSession() ? captureSession()->camera() : nullptr);
if (!androidCamera)
return;
androidCamera->setStillCaptureResolution(imageSettings().resolution());
}
void QAndroidImageCapture::setupVideoSourceConnections()
{
auto androidCamera = qobject_cast<QAndroidCamera *>(videoSource());
if (androidCamera) {
connect(
androidCamera,
&QAndroidCamera::onStillPhotoCaptured,
this,
&QAndroidImageCapture::newVideoFrame);
// The backend might call onImageCaptureFailed before the call to
// QAndroidImageCapture::doCapture() is finished and returns the request id to the user.
// Therefore we want to use queued connection for this to make sure any errors are raised
// after that function ends.
connect(
androidCamera,
&QAndroidCamera::onImageCaptureFailed,
this,
&QFFmpegImageCapture::cancelPendingImage,
Qt::QueuedConnection);
}
else
QFFmpegImageCapture::setupVideoSourceConnections();
}
void QAndroidImageCapture::updateExif(int id, const QString &filename)
{
Q_UNUSED(id);
auto androidCamera = qobject_cast<QAndroidCamera *>(videoSource());
if (androidCamera)
androidCamera->updateExif(filename);
}
} // namespace QFFmpeg
QT_END_NAMESPACE