+ self.scene = QGraphicsScene(self)
+ self.graphicsView = OSDGraphicsView(self.scene)
+
+ if self.mode == "camera":
+ self.videoItem = QGraphicsVideoItem()
+ self.videoItem.setSize(QSizeF(640, 480)) # XXX
+ self.scene.addItem(self.videoItem)
+
+ x = self.videoItem.boundingRect().width() / 2.0
+ y = self.videoItem.boundingRect().height() / 2.0
+ #self.videoItem.setTransform(
+ # QTransform().translate(x, y).rotate(70).translate(-x, -y))
+
+ self.initCamera()
+
+ self.scene.addWidget(self.osd)
+ self.ui.gridLayout.addWidget(self.graphicsView, 0, 1)
+
+ def initCamera(self):
+ # find camera devices and add them in the menu
+ cameraDevice = QByteArray()
+ videoDevicesGroup = QActionGroup(self)
+ videoDevicesGroup.setExclusive(True)
+ for deviceName in QCamera.availableDevices():
+ description = QCamera.deviceDescription(deviceName)
+ videoDeviceAction = QAction(description, videoDevicesGroup)
+ videoDeviceAction.setCheckable(True)
+ videoDeviceAction.setData(deviceName)
+ if cameraDevice.isEmpty():
+ cameraDevice = deviceName
+ videoDeviceAction.setChecked(True)
+ self.ui.menuDevices.addAction(videoDeviceAction)
+ videoDevicesGroup.triggered.connect(self.updateCameraDevice)
+ # select the first camera
+ self.setCamera(cameraDevice)
+
+ def setCamera(self, cameraDevice):
+ if cameraDevice.isEmpty():
+ self.camera = QCamera()
+ else:
+ self.camera = QCamera(cameraDevice)
+
+ self.camera.stateChanged.connect(self.updateCameraState)
+ self.camera.error.connect(self.displayCameraError)
+
+ #self.ui.exposureCompensation.valueChanged.connect(
+ # self.setExposureCompensation)
+
+ self.camera.setCaptureMode(QCamera.CaptureViewfinder)
+ self.camera.setViewfinder(self.videoItem)
+ self.updateCameraState(self.camera.state())
+ self.camera.start()
+
+ #XXX stop camera? remove from scene?
+
+ def updateCameraDevice(self, action):
+ print "updateCameraDevice"
+ self.setCamera(action.data())
+
+ def updateCameraState(self, state):
+ print "updateCameraState %s"%(str(state))
+
+ def displayCameraError(self):
+ print "displayCameraError"
+ QMessageBox.warning(self, "Camera error", self.camera.errorString())
+