diff options
| author | Shyamnath Premnadh <Shyamnath.Premnadh@qt.io> | 2023-09-22 12:16:03 +0200 |
|---|---|---|
| committer | Shyamnath Premnadh <Shyamnath.Premnadh@qt.io> | 2023-10-02 18:20:53 +0200 |
| commit | 20bd006663ca640baf19bcc5a4f80899cd6eb2da (patch) | |
| tree | f68df85196c22ace84c1082db049d5536073cefd /examples/multimedia/camera/camera.py | |
| parent | 0f98cb69d4e8a2beec64102abef97b46aa7626ba (diff) | |
Example Revamp: Camera
- Changes as per e3c0c190136a55634451024cfa3ac8024c74caa3
- New UI for Android as per the corresponding Qt example
- Add the new permission API functions to request and check for
Android runtime permissions
- Update .pyproject file
Task-number: PYSIDE-1612
Task-number: PYSIDE-2206
Pick-to: 6.6
Change-Id: I8b9c41c6cd12388addb5a8a4049c1126b62e098b
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'examples/multimedia/camera/camera.py')
| -rw-r--r-- | examples/multimedia/camera/camera.py | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/examples/multimedia/camera/camera.py b/examples/multimedia/camera/camera.py index 95d33243e..c1ea92faa 100644 --- a/examples/multimedia/camera/camera.py +++ b/examples/multimedia/camera/camera.py @@ -10,12 +10,17 @@ from PySide6.QtMultimedia import (QAudioInput, QCamera, QCameraDevice, QMediaRecorder) from PySide6.QtWidgets import QDialog, QMainWindow, QMessageBox from PySide6.QtGui import QAction, QActionGroup, QIcon, QImage, QPixmap -from PySide6.QtCore import QDateTime, QDir, QTimer, Qt, Slot +from PySide6.QtCore import QDateTime, QDir, QTimer, Qt, Slot, qWarning -from ui_camera import Ui_Camera from metadatadialog import MetaDataDialog from imagesettings import ImageSettings -from videosettings import VideoSettings +from videosettings import VideoSettings, is_android + +if is_android: + from PySide6.QtCore import QCoreApplication, QMicrophonePermission, QCameraPermission + from ui_camera_mobile import Ui_Camera +else: + from ui_camera import Ui_Camera class Camera(QMainWindow): @@ -23,13 +28,10 @@ class Camera(QMainWindow): super().__init__() self._video_devices_group = None - self.m_devices = QMediaDevices() self.m_imageCapture = None self.m_captureSession = QMediaCaptureSession() self.m_camera = None - self.m_audioInput = QAudioInput() - self.m_captureSession.setAudioInput(self.m_audioInput) self.m_mediaRecorder = None self.m_isCapturingImage = False @@ -42,7 +44,8 @@ class Camera(QMainWindow): self._ui.setupUi(self) image = Path(__file__).parent / "shutter.svg" self._ui.takeImageButton.setIcon(QIcon(os.fspath(image))) - self._ui.actionAbout_Qt.triggered.connect(qApp.aboutQt) + if not is_android: + self._ui.actionAbout_Qt.triggered.connect(qApp.aboutQt) # disable all buttons by default self.updateCameraActive(False) @@ -53,6 +56,40 @@ class Camera(QMainWindow): self._ui.metaDataButton.setEnabled(False) # try to actually initialize camera & mic + self.initialize() + + @Slot() + def initialize(self): + if is_android: + # camera + cam_permission = QCameraPermission() + cam_permission_status = qApp.checkPermission(cam_permission) + if cam_permission_status == Qt.PermissionStatus.Undetermined: + qApp.requestPermission(cam_permission, self, self.initialize) + return + if cam_permission_status == Qt.PermissionStatus.Denied: + qWarning("Camera permission is not granted!") + return + elif cam_permission_status == Qt.PermissionStatus.Granted: + print("[AudioSource] Camera permission granted") + + # microphone + microphone_permission = QMicrophonePermission() + microphone_permission_status = qApp.checkPermission(microphone_permission) + if microphone_permission_status == Qt.PermissionStatus.Undetermined: + qApp.requestPermission(microphone_permission, self, self.initialize) + return + if microphone_permission_status == Qt.PermissionStatus.Denied: + qWarning("Microphone permission is not granted!") + self.initializeErrorWindow() + return + elif microphone_permission_status == Qt.PermissionStatus.Granted: + print("[AudioSource] Microphone permission granted") + + self.m_audioInput = QAudioInput() + self.m_captureSession.setAudioInput(self.m_audioInput) + + # Camera devices self._video_devices_group = QActionGroup(self) self._video_devices_group.setExclusive(True) |
