diff options
| author | 2022-08-22 23:54:48 -0500 | |
|---|---|---|
| committer | 2022-08-22 23:54:48 -0500 | |
| commit | db2335e2f8bad8090b4dfd77d1e6d33297f590df (patch) | |
| tree | 3da094c3ec6ff3d161f4bcc9cfc2d5c734a84aaa /src | |
| parent | Merge pull request #8801 from german77/small (diff) | |
| download | yuzu-db2335e2f8bad8090b4dfd77d1e6d33297f590df.tar.gz yuzu-db2335e2f8bad8090b4dfd77d1e6d33297f590df.tar.xz yuzu-db2335e2f8bad8090b4dfd77d1e6d33297f590df.zip | |
yuzu: Force camera output to be saved on a buffer (#8805)
Diffstat (limited to 'src')
| -rw-r--r-- | src/yuzu/bootmanager.cpp | 20 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_camera.cpp | 20 |
2 files changed, 38 insertions, 2 deletions
diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp index c262d0a2b..d3fbdb09d 100644 --- a/src/yuzu/bootmanager.cpp +++ b/src/yuzu/bootmanager.cpp | |||
| @@ -815,6 +815,12 @@ void GRenderWindow::InitializeCamera() { | |||
| 815 | if (Settings::values.ir_sensor_device.GetValue() == cameraInfo.deviceName().toStdString() || | 815 | if (Settings::values.ir_sensor_device.GetValue() == cameraInfo.deviceName().toStdString() || |
| 816 | Settings::values.ir_sensor_device.GetValue() == "Auto") { | 816 | Settings::values.ir_sensor_device.GetValue() == "Auto") { |
| 817 | camera = std::make_unique<QCamera>(cameraInfo); | 817 | camera = std::make_unique<QCamera>(cameraInfo); |
| 818 | if (!camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureViewfinder) && | ||
| 819 | !camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureStillImage)) { | ||
| 820 | LOG_ERROR(Frontend, | ||
| 821 | "Camera doesn't support CaptureViewfinder or CaptureStillImage"); | ||
| 822 | continue; | ||
| 823 | } | ||
| 818 | camera_found = true; | 824 | camera_found = true; |
| 819 | break; | 825 | break; |
| 820 | } | 826 | } |
| @@ -825,10 +831,22 @@ void GRenderWindow::InitializeCamera() { | |||
| 825 | } | 831 | } |
| 826 | 832 | ||
| 827 | camera_capture = std::make_unique<QCameraImageCapture>(camera.get()); | 833 | camera_capture = std::make_unique<QCameraImageCapture>(camera.get()); |
| 834 | |||
| 835 | if (!camera_capture->isCaptureDestinationSupported( | ||
| 836 | QCameraImageCapture::CaptureDestination::CaptureToBuffer)) { | ||
| 837 | LOG_ERROR(Frontend, "Camera doesn't support saving to buffer"); | ||
| 838 | return; | ||
| 839 | } | ||
| 840 | |||
| 841 | camera_capture->setCaptureDestination(QCameraImageCapture::CaptureDestination::CaptureToBuffer); | ||
| 828 | connect(camera_capture.get(), &QCameraImageCapture::imageCaptured, this, | 842 | connect(camera_capture.get(), &QCameraImageCapture::imageCaptured, this, |
| 829 | &GRenderWindow::OnCameraCapture); | 843 | &GRenderWindow::OnCameraCapture); |
| 830 | camera->unload(); | 844 | camera->unload(); |
| 831 | camera->setCaptureMode(QCamera::CaptureViewfinder); | 845 | if (camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureViewfinder)) { |
| 846 | camera->setCaptureMode(QCamera::CaptureViewfinder); | ||
| 847 | } else if (camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureStillImage)) { | ||
| 848 | camera->setCaptureMode(QCamera::CaptureStillImage); | ||
| 849 | } | ||
| 832 | camera->load(); | 850 | camera->load(); |
| 833 | camera->start(); | 851 | camera->start(); |
| 834 | 852 | ||
diff --git a/src/yuzu/configuration/configure_camera.cpp b/src/yuzu/configuration/configure_camera.cpp index 73cdcf3f2..2a61de2a1 100644 --- a/src/yuzu/configuration/configure_camera.cpp +++ b/src/yuzu/configuration/configure_camera.cpp | |||
| @@ -42,6 +42,12 @@ void ConfigureCamera::PreviewCamera() { | |||
| 42 | LOG_INFO(Frontend, "Selected Camera {} {}", cameraInfo.description().toStdString(), | 42 | LOG_INFO(Frontend, "Selected Camera {} {}", cameraInfo.description().toStdString(), |
| 43 | cameraInfo.deviceName().toStdString()); | 43 | cameraInfo.deviceName().toStdString()); |
| 44 | camera = std::make_unique<QCamera>(cameraInfo); | 44 | camera = std::make_unique<QCamera>(cameraInfo); |
| 45 | if (!camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureViewfinder) && | ||
| 46 | !camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureStillImage)) { | ||
| 47 | LOG_ERROR(Frontend, | ||
| 48 | "Camera doesn't support CaptureViewfinder or CaptureStillImage"); | ||
| 49 | continue; | ||
| 50 | } | ||
| 45 | camera_found = true; | 51 | camera_found = true; |
| 46 | break; | 52 | break; |
| 47 | } | 53 | } |
| @@ -57,10 +63,22 @@ void ConfigureCamera::PreviewCamera() { | |||
| 57 | } | 63 | } |
| 58 | 64 | ||
| 59 | camera_capture = std::make_unique<QCameraImageCapture>(camera.get()); | 65 | camera_capture = std::make_unique<QCameraImageCapture>(camera.get()); |
| 66 | |||
| 67 | if (!camera_capture->isCaptureDestinationSupported( | ||
| 68 | QCameraImageCapture::CaptureDestination::CaptureToBuffer)) { | ||
| 69 | LOG_ERROR(Frontend, "Camera doesn't support saving to buffer"); | ||
| 70 | return; | ||
| 71 | } | ||
| 72 | |||
| 73 | camera_capture->setCaptureDestination(QCameraImageCapture::CaptureDestination::CaptureToBuffer); | ||
| 60 | connect(camera_capture.get(), &QCameraImageCapture::imageCaptured, this, | 74 | connect(camera_capture.get(), &QCameraImageCapture::imageCaptured, this, |
| 61 | &ConfigureCamera::DisplayCapturedFrame); | 75 | &ConfigureCamera::DisplayCapturedFrame); |
| 62 | camera->unload(); | 76 | camera->unload(); |
| 63 | camera->setCaptureMode(QCamera::CaptureViewfinder); | 77 | if (camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureViewfinder)) { |
| 78 | camera->setCaptureMode(QCamera::CaptureViewfinder); | ||
| 79 | } else if (camera->isCaptureModeSupported(QCamera::CaptureMode::CaptureStillImage)) { | ||
| 80 | camera->setCaptureMode(QCamera::CaptureStillImage); | ||
| 81 | } | ||
| 64 | camera->load(); | 82 | camera->load(); |
| 65 | camera->start(); | 83 | camera->start(); |
| 66 | 84 | ||