def present(self, frame: QVideoFrame): print("present called") if frame.isValid(): clone_frame = QVideoFrame(frame) clone_frame.map(QAbstractVideoBuffer.ReadOnly) image = QImage(clone_frame.bits(), frame.width(), frame.height(), frame.bytesPerLine(), \ QVideoFrame.imageFormatFromPixelFormat(frame.pixelFormat())) clone_frame.unmap() self.frame_available.emit(image) if self.surfaceFormat().pixelFormat() != frame.pixelFormat() or \ self.surfaceFormat().frameSize() != frame.size(): self.setError(QAbstractVideoSurface.IncorrectFormatError) self.stop() print("present finished: Return False") return False else: self.current_frame = frame print("present finished: Return True") return True
def stop(self): self.currentFrame = QVideoFrame() self.targetRect = QRect() super().stop() self.widget.update()
def present(self, frame: QVideoFrame): """ Called by the video player :param frame: frame to present """ if frame.isValid(): clone_frame = QVideoFrame(frame) clone_frame.map(QAbstractVideoBuffer.ReadOnly) image = QImage( clone_frame.bits(), clone_frame.width(), clone_frame.height(), QVideoFrame.imageFormatFromPixelFormat( clone_frame.pixelFormat())) self.frameAvailable.emit(image) clone_frame.unmap() if self.surfaceFormat().pixelFormat() != frame.pixelFormat( ) or self.surfaceFormat().frameSize() != frame.size(): self.setError(self.IncorrectFormatError) self.stop() return False else: self.currentFrame = frame self.widget.repaint() return True
def stop(self): """ Stop capturing """ self.currentFrame = QVideoFrame() self.targetRect = QRect() super().stop() self.widget.update()
def stop(self): print("stop() called") self.current_frame = QVideoFrame() self.target_rect = QRect() super().stop() print("stop() finished")
def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setupUi(self) self.threadpool = QThreadPool() print('Multithreading with maximum %d threads' % self.threadpool.maxThreadCount()) self.player = QMediaPlayer() # Setup the playlist. self.playlist = QMediaPlaylist() self.player.setPlaylist(self.playlist) # Setup the player self.player.durationChanged.connect(self.update_duration) self.player.positionChanged.connect(self.update_position) self.playlist.currentIndexChanged.connect( self.playlist_position_changed) self.player.error.connect(self.erroralert) self.videoWidget = QVideoWidget() self.player.setVideoOutput(self.videoWidget) self.model = PlaylistModel(self.playlist) self.playListView.setModel(self.model) selection_model = self.playListView.selectionModel() selection_model.selectionChanged.connect( self.playlist_selection_changed) self.currentFrame = QVideoFrame() # Connect control buttons/slides for media player. self.playButton.pressed.connect(self.player.play) self.pauseButton.pressed.connect(self.player.pause) self.stopButton.pressed.connect(self.player.stop) layout = QVBoxLayout() layout.addWidget(self.videoWidget) self.viewWidget.setLayout(layout) self.probe = QVideoProbe() self.probe.videoFrameProbed.connect(self.on_videoFrameProbed) self.probe.setSource(self.player) self.timeSlider.valueChanged.connect(self.player.setPosition) self.open_file_action.triggered.connect(self.open_file) # button for save current frame self.saveButton.pressed.connect(self.save_frame) self.setAcceptDrops(True) self.show()
def displayFrame(self) -> None: if not self._reader: return frame = self._reader.frame(self._position) pixel_data = self.visualiser(frame) img = QImage( pixel_data.data, self._reader.width, self._reader.height, QImage.Format_Grayscale8, ) video_surface = self.videoOutput().videoSurface() video_surface.start( QVideoSurfaceFormat(img.size(), QVideoFrame.Format_Y8)) video_surface.present(QVideoFrame(img))
def mouseReleaseEvent(self, event): """ :type event: QMouseEvent :param event: :return: """ self.changeRubberBand = False if self.zoomed is True: return self.zoomed = False if not zoomRect: self.surface.updateVideoRect() else: self.rubberBand.hide() self.zoomedRect = True # TODO : ACTUALIZAR LA IMAGEN DE ALGUNA FORMA selRect = self.rubberBand.geometry() orig2widgScale = self.surface.widget.contentsRect().width() / \ self.surface.image.width() X1 = selRect.topLeft().x() / orig2widgScale Y1 = selRect.topLeft().y() / orig2widgScale X2 = selRect.bottomRight().x() / self.surface.widget.contentsRect().bottomRight().x() * \ self.surface.image.width() Y2 = selRect.bottomRight().y() / self.surface.widget.contentsRect().bottomRight().y() * \ self.surface.image.height() self.surface.image.width() self.surface.image.height() wid2origRect = QRect(X1, Y1, X2, Y2) zoom_img = self.surface.image.copy(wid2origRect) # zoom_img.save('D:\\heaahe.png') # n_img = self.surface.image.copy(selRect) # n_img.save('D:\\hehe.png') zoom_img.scaled(1920, 1080) self.surface.currentFrame = QVideoFrame(zoom_img) # self.surface.targetRect=selRect self.surface.currentFrame.unmap() self.UpdateSurface()
def present(self, frame): if frame.isValid(): cloneFrame = QVideoFrame(frame) cloneFrame.map(QAbstractVideoBuffer.ReadOnly) image = QImage(cloneFrame.bits(), cloneFrame.width(), cloneFrame.height(), QVideoFrame.imageFormatFromPixelFormat(cloneFrame.pixelFormat())) self.frameAvailable.emit(image) # this is very important cloneFrame.unmap() if self.surfaceFormat().pixelFormat() != frame.pixelFormat() or \ self.surfaceFormat().frameSize() != frame.size(): self.setError(QAbstractVideoSurface.IncorrectFormatError) self.stop() return False else: self.currentFrame = frame self.widget.repaint(self.targetRect) return True
def stop(self): self.currentFrame = QVideoFrame() self.targetRect = QRect() QAbstractVideoSurface.stop(self) self.widget.update()
def stop(self): ''' Stop Video ''' self._currentFrame = QVideoFrame() self._targetRect = QRect() QAbstractVideoSurface.stop(self) self.widget.update()
def __init__(self, parent=None): super(VideoWindow, self).__init__(parent) self.setWindowTitle("PyQt Video Player Widget") self.counter = 0 self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface) self.videoWidget = QVideoWidget() self.videoFrame = QVideoFrame() self.playButton = QPushButton() self.playButton.setEnabled(False) self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) self.playButton.clicked.connect(self.play) self.positionSlider = QSlider(Qt.Horizontal) self.positionSlider.setRange(0, 0) self.positionSlider.sliderMoved.connect(self.setPosition) self.errorLabel = QLabel() self.errorLabel.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) # Create new action openAction = QAction(QIcon('../xy_Static/open.png'), '&Open', self) openAction.setShortcut('Ctrl+O') openAction.setStatusTip('Open video') openAction.triggered.connect(self.openFile) # Create exit action exitAction = QAction(QIcon('../xy_Static/quit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(self.exitCall) screenshotAction = QAction(QIcon('../xy_Static/screenshot.png'), '&Screenshot', self) screenshotAction.setShortcut('Ctrl+S') screenshotAction.setStatusTip('Screenshot scenes') screenshotAction.triggered.connect(self.screenshotCall) # Create menu bar and add action menuBar = self.menuBar() fileMenu = menuBar.addMenu('&File') #fileMenu.addAction(newAction) fileMenu.addAction(openAction) fileMenu.addAction(screenshotAction) fileMenu.addAction(exitAction) # Create a widget for window contents wid = QWidget(self) self.setCentralWidget(wid) # Create layouts to place inside widget controlLayout = QHBoxLayout() controlLayout.setContentsMargins(0, 0, 0, 0) controlLayout.addWidget(self.playButton) controlLayout.addWidget(self.positionSlider) layout = QVBoxLayout() layout.addWidget(self.videoWidget) layout.addLayout(controlLayout) layout.addWidget(self.errorLabel) # Set widget to contain window contents wid.setLayout(layout) self.mediaPlayer.setVideoOutput(self.videoWidget) self.mediaPlayer.stateChanged.connect(self.mediaStateChanged) self.mediaPlayer.positionChanged.connect(self.positionChanged) self.mediaPlayer.durationChanged.connect(self.durationChanged) self.mediaPlayer.error.connect(self.handleError)