| |
| |
| |
|
|
| #include <QFileDialog> |
| #include <QImageReader> |
| #include <QMessageBox> |
| #include <QThread> |
| #include "citra_qt/camera/still_image_camera.h" |
| #include "common/logging/log.h" |
|
|
| namespace Camera { |
|
|
| StillImageCamera::StillImageCamera(QImage image_, const Service::CAM::Flip& flip) |
| : QtCameraInterface(flip), image(std::move(image_)) {} |
|
|
| StillImageCamera::~StillImageCamera() { |
| StillImageCameraFactory::last_path.clear(); |
| } |
|
|
| void StillImageCamera::StartCapture() {} |
|
|
| void StillImageCamera::StopCapture() {} |
|
|
| QImage StillImageCamera::QtReceiveFrame() { |
| return image; |
| } |
|
|
| bool StillImageCamera::IsPreviewAvailable() { |
| return !image.isNull(); |
| } |
|
|
| std::string StillImageCameraFactory::last_path; |
|
|
| const std::string StillImageCameraFactory::GetFilePath() const { |
| if (!last_path.empty()) { |
| return last_path; |
| } |
| QList<QByteArray> types = QImageReader::supportedImageFormats(); |
| QStringList temp_filters; |
| for (QByteArray type : types) { |
| temp_filters << QStringLiteral("*.%1").arg(QString::fromUtf8(type)); |
| } |
|
|
| QString filter = |
| QObject::tr("Supported image files (%1)").arg(temp_filters.join(QLatin1Char{' '})); |
| last_path = |
| QFileDialog::getOpenFileName(nullptr, QObject::tr("Open File"), QStringLiteral("."), filter) |
| .toStdString(); |
| return last_path; |
| } |
|
|
| std::unique_ptr<CameraInterface> StillImageCameraFactory::Create(const std::string& config, |
| const Service::CAM::Flip& flip) { |
| std::string real_config = config; |
| if (config.empty()) { |
| |
| |
| if (thread() == QThread::currentThread()) { |
| real_config = GetFilePath(); |
| } else { |
| QMetaObject::invokeMethod(this, "GetFilePath", Qt::BlockingQueuedConnection, |
| Q_RETURN_ARG(std::string, real_config)); |
| } |
| } |
| QImage image(QString::fromStdString(real_config)); |
| if (image.isNull()) { |
| LOG_ERROR(Service_CAM, "Couldn't load image \"{}\"", real_config.c_str()); |
| } |
| return std::make_unique<StillImageCamera>(image, flip); |
| } |
|
|
| } |
|
|