diff --git a/rpcs3/rpcs3qt/camera_settings_dialog.cpp b/rpcs3/rpcs3qt/camera_settings_dialog.cpp index 3e2ae3caab..e5e11fae96 100644 --- a/rpcs3/rpcs3qt/camera_settings_dialog.cpp +++ b/rpcs3/rpcs3qt/camera_settings_dialog.cpp @@ -8,6 +8,10 @@ #include #include +#if QT_CONFIG(permissions) +#include +#endif + LOG_CHANNEL(camera_log, "Camera"); template <> @@ -226,6 +230,27 @@ void camera_settings_dialog::handle_settings_change(int index) return; } +#if QT_CONFIG(permissions) + QCameraPermission permission; + switch (qApp->checkPermission(permission)) + { + case Qt::PermissionStatus::Undetermined: + camera_log.notice("Requesting camera permission"); + qApp->requestPermission(permission, this, [this, index]() + { + handle_settings_change(index); + }); + return; + case Qt::PermissionStatus::Denied: + camera_log.error("RPCS3 has no permissions to access cameras on this device."); + QMessageBox::warning(this, tr("Camera permissions denied!"), tr("RPCS3 has no permissions to access cameras on this device.")); + return; + case Qt::PermissionStatus::Granted: + camera_log.notice("Camera permission granted"); + break; + } +#endif + if (index >= 0 && ui->combo_settings->itemData(index).canConvert() && ui->combo_camera->currentData().canConvert()) { const QCameraFormat setting = ui->combo_settings->itemData(index).value(); diff --git a/rpcs3/rpcs3qt/qt_camera_handler.cpp b/rpcs3/rpcs3qt/qt_camera_handler.cpp index 00b18f8885..5f9c679d75 100644 --- a/rpcs3/rpcs3qt/qt_camera_handler.cpp +++ b/rpcs3/rpcs3qt/qt_camera_handler.cpp @@ -6,6 +6,11 @@ #include +#if QT_CONFIG(permissions) +#include +#include +#endif + LOG_CHANNEL(camera_log, "Camera"); qt_camera_handler::qt_camera_handler() : camera_handler_base() @@ -180,6 +185,26 @@ void qt_camera_handler::start_camera() return; } +#if QT_CONFIG(permissions) + QCameraPermission permission; + switch (qApp->checkPermission(permission)) + { + case Qt::PermissionStatus::Undetermined: + camera_log.notice("Requesting camera permission"); + qApp->requestPermission(permission, [this]() + { + start_camera(); + }); + return; + case Qt::PermissionStatus::Denied: + camera_log.error("RPCS3 has no permissions to access cameras on this device."); + return; + case Qt::PermissionStatus::Granted: + camera_log.notice("Camera permission granted"); + break; + } +#endif + // Start camera. We will start receiving frames now. m_camera->start(); }