diff --git a/src/frontend/qt_sdl/CMakeLists.txt b/src/frontend/qt_sdl/CMakeLists.txt index b0b6e5ab41..0df7231d49 100644 --- a/src/frontend/qt_sdl/CMakeLists.txt +++ b/src/frontend/qt_sdl/CMakeLists.txt @@ -260,3 +260,5 @@ if (ENABLE_OGLRENDERER) target_compile_definitions(melonDS PUBLIC MELONDS_GL_HEADER=${MELONDS_GL_HEADER}) target_compile_definitions(core PUBLIC MELONDS_GL_HEADER=${MELONDS_GL_HEADER}) endif() + +qt_finalize_target(melonDS) \ No newline at end of file diff --git a/src/frontend/qt_sdl/CameraManager.cpp b/src/frontend/qt_sdl/CameraManager.cpp index 3b133b8b10..7ab854b783 100644 --- a/src/frontend/qt_sdl/CameraManager.cpp +++ b/src/frontend/qt_sdl/CameraManager.cpp @@ -26,6 +26,10 @@ using namespace melonDS; const char* kCamConfigPath[] = {"DSi.Camera0", "DSi.Camera1"}; #if QT_VERSION >= 0x060000 +#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) && QT_CONFIG(permissions) +#include +#include +#endif CameraFrameDumper::CameraFrameDumper(QObject* parent) : QVideoSink(parent) { @@ -245,14 +249,6 @@ void CameraManager::init() delete camDevice; camDevice = nullptr; } - else - { - camDumper = new CameraFrameDumper(this); - - camSession = new QMediaCaptureSession(this); - camSession->setCamera(camDevice); - camSession->setVideoOutput(camDumper); - } } #else camDevice = new QCamera(camDeviceName.toUtf8()); @@ -328,13 +324,14 @@ void CameraManager::deInit() void CameraManager::start() { - if (startNum == 1) return; - startNum = 1; - if (inputType == 2) { emit camStartSignal(); } + else + { + startNum = 1; + } } void CameraManager::stop() @@ -356,7 +353,32 @@ bool CameraManager::isStarted() void CameraManager::camStart() { if (camDevice) + { +#if QT_VERSION_MAJOR >= 6 +#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) && QT_CONFIG(permissions) + QCameraPermission cameraPermission; + bool granted = false; + switch (qApp->checkPermission(cameraPermission)) { + case Qt::PermissionStatus::Undetermined: + qApp->requestPermission(cameraPermission, this, &CameraManager::camStart);; + return; + case Qt::PermissionStatus::Denied: + return; + case Qt::PermissionStatus::Granted: + break; + } +#endif + + camDumper = new CameraFrameDumper(this); + + camSession = new QMediaCaptureSession(this); + camSession->setCamera(camDevice); + camSession->setVideoOutput(camDumper); +#endif + camDevice->start(); + } + startNum = 1; } void CameraManager::camStop()