def __init__(self, controller, parent=None): QWidget.__init__(self, parent) self.controller=controller self.setupUi(self) self.name="Video" self.enabledCheckBox=None # hide custom device edit widget self.label_2.hide() self.customDevice_lineEdit.hide() self.customDeviceBrowse_pushButton_2.hide() self.line.hide() PluginVideoWorker.initializeVideo() self.refreshDeviceList() self.recStatusPollingTimer=0 QObject.connect(self.addToUsed_pushButton, SIGNAL("clicked()"), self.addToUsed_pushed) QObject.connect(self.customDeviceBrowse_pushButton_2, SIGNAL("clicked()"), self.browseForDevice) QObject.connect(self.refreshDevices_pushButton, SIGNAL("clicked()"), self.refreshDeviceList) QObject.connect( self.recordingEnabled_button, SIGNAL("clicked()"), self.recordingEnabledDisabled ) for codec in ["mpeg4","mjpeg","libtheora","libschroedinger","mpeg1video","mpeg2video","libxvid","libx264","hoffyuv","wmv1","wmv2"]: self.codec_comboBox.addItem(codec) self.loadConfig()
def stopRecording(self): if self.recordingEnabled_button.isChecked(): PluginVideoWorker.stopRecording() if self.recStatusPollingTimer!=0: self.killTimer(self.recStatusPollingTimer) self.recStatusPollingTimer=0 self.checkRecStatus(False) self.setParameterChangingUIEnabled(1)
def checkRecStatus(self, isRecording): status=not isRecording or PluginVideoWorker.isDeviceBeingRecorded(self.device) if status!=self.prevStatus: changed=True else: changed=False self.prevStatus=status return (status, changed)
def fillDialog(self): self.filename_groupBox.setTitle(self.device) cap=PluginVideoWorker.getDeviceCapabilities(self.device) for mode in cap.modes: self.modes_comboBox.addItem(str(mode.width)+"x"+str(mode.height)+" @ "+str(mode.fps)+"fps") self.curMode=self.getCurrentModeStr() self.isV4l2=cap.v4l2
def onActivatePreview(self, val): if not val and self.previewWidget!=None: self.filename_groupBox.layout().removeWidget(self.previewWidget) self.previewWidget.setParent(None) self.previewWidget=None elif val and (not self.previewWidget): self.previewWidget=PluginVideoWorker.VideoPreview() self.filename_groupBox.layout().addWidget(self.previewWidget) self.connectPreviewToRecording()
def startRecording(self, dataDirectory): self.setParameterChangingUIEnabled(0) if not self.recordingEnabled_button.isChecked(): return self.dataDirectory=dataDirectory+self.name+"/" if not os.path.isdir(self.dataDirectory): os.mkdir(self.dataDirectory) recParams=self.getRecordingParameters(self.dataDirectory, datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), ".avi") PluginVideoWorker.startRecording(recParams) #update preview connections for tabI in self.getVideoTabIndexes(): tab=self.settings_tabWidget.widget(tabI) tab.onActivatePreview(tab.isPreviewActive()) self.recStatusPollingTimer=self.startTimer(500) self.emit(SIGNAL("recordingStarted()"))
def loadConfig(self): settings = QSettings() settings.beginGroup("/plugins/GatherPlugin/Video") lastUsedDevices = settings.value("lastUsedDevices").toStringList() for i,device in enumerate(lastUsedDevices): if PluginVideoWorker.isDevicePresent(str(device)): devTab=self.addDevice(str(device)) devTab.setMode( str(settings.value("devices/%d/mode" % i).toString()) ) devTab.setPreviewActive( settings.value("devices/%d/showPreview" % i).toBool() ) self.recordingEnabled_button.setChecked( settings.value("recordingEnabled", QVariant(True)).toBool() ) self.codec_comboBox.lineEdit().setText( settings.value("codec", QVariant("mpeg2video")).toString() ) self.codecBitrate_spinBox.setValue( settings.value("bitrate", QVariant(600)).toInt()[0] )
def saveConfig(self): settings = QSettings() settings.beginGroup("/plugins/GatherPlugin/Video") lastUsedDevices = [] for tabI in self.getVideoTabIndexes(): tab = self.settings_tabWidget.widget(tabI) if PluginVideoWorker.isDevicePresent(str(tab.device)): settings.setValue("devices/%d/mode" % len(lastUsedDevices), QVariant(tab.getCurrentModeStr())) settings.setValue("devices/%d/showPreview" % len(lastUsedDevices), QVariant(tab.isPreviewActive())) lastUsedDevices.append(str(tab.device)) settings.setValue("lastUsedDevices", QVariant(lastUsedDevices)) settings.setValue("recordingEnabled", QVariant(self.recordingEnabled_button.isChecked())) settings.setValue("codec", QVariant(self.getCurrentCodec())) settings.setValue("bitrate", QVariant(self.getCurrentKBitrate()))
def connectPreviewToRecording(self): PluginVideoWorker.setPreviewForDevice(self.getConfiguration(), self.previewWidget, 5)
def getConfiguration(self): modeStr=self.getCurrentModeStr() mode=modeRegexp.match(modeStr).groups() rv=PluginVideoWorker.RecordingParameters("", "mpeg4", 800, self.device, int(mode[0]), int(mode[1]), int(mode[2]), self.isV4l2) return rv
def refreshDeviceList(self): self.availableDevices_listWidget.clear() devices=PluginVideoWorker.getDevices() for d in devices: self.availableDevices_listWidget.addItem(d)