aboutsummaryrefslogtreecommitdiffstats
path: root/examples/multimedia/camera/camera.py
diff options
context:
space:
mode:
authorShyamnath Premnadh <Shyamnath.Premnadh@qt.io>2023-09-22 12:16:03 +0200
committerShyamnath Premnadh <Shyamnath.Premnadh@qt.io>2023-10-02 18:20:53 +0200
commit20bd006663ca640baf19bcc5a4f80899cd6eb2da (patch)
treef68df85196c22ace84c1082db049d5536073cefd /examples/multimedia/camera/camera.py
parent0f98cb69d4e8a2beec64102abef97b46aa7626ba (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.py51
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)