33 from PyQt5.QtCore import QObject, QThread, QTimer, pyqtSlot, pyqtSignal, QCoreApplication
36 from classes.logger
import log
37 from classes
import settings
42 import simplejson
as json
51 self.parent.movePlayhead(current_frame)
54 if self.worker.player.Mode() == openshot.PLAYBACK_PLAY
and current_frame >= self.worker.timeline_length
and self.worker.timeline_length != -1:
56 self.parent.actionPlay.trigger()
57 self.worker.timeline_length = -1
61 log.info(
'onModeChanged')
63 @pyqtSlot(object, object)
64 def Init(self, parent, timeline, video_widget):
74 self.worker.Init(parent, timeline, video_widget)
79 self.background.started.connect(self.worker.Start)
80 self.worker.finished.connect(self.background.quit)
83 self.parent.previewFrameSignal.connect(self.worker.previewFrame)
84 self.parent.refreshFrameSignal.connect(self.worker.refreshFrame)
85 self.parent.LoadFileSignal.connect(self.worker.LoadFile)
86 self.parent.PlaySignal.connect(self.worker.Play)
87 self.parent.PauseSignal.connect(self.worker.Pause)
88 self.parent.SeekSignal.connect(self.worker.Seek)
89 self.parent.SpeedSignal.connect(self.worker.Speed)
90 self.parent.StopSignal.connect(self.worker.Stop)
94 self.background.start()
101 position_changed = pyqtSignal(int)
102 mode_changed = pyqtSignal(object)
103 finished = pyqtSignal()
105 @pyqtSlot(object, object)
106 def Init(self, parent, timeline, videoPreview):
129 log.info(
"QThread Start Method Invoked")
152 QCoreApplication.processEvents()
163 log.info(
'exiting thread')
167 log.info(
"initPlayer")
171 self.player.SetQWidget(sip.unwrapinstance(self.
videoPreview))
173 self.videoPreview.connectSignals(self.
renderer)
184 log.info(
"previewFrame: %s" % number)
187 self.player.Seek(number)
189 log.info(
"self.player.Position(): %s" % self.player.Position())
195 log.info(
"refreshFrame")
201 self.player.Seek(self.player.Position())
203 log.info(
"self.player.Position(): %s" % self.player.Position())
228 log.info(
"Set timeline reader again in player: %s" % self.
timeline)
239 ext = os.path.splitext(path)
243 if ext
in [
'.avi',
'mov',
'mkv',
'mpg',
'mpeg',
'mp3',
'mp4',
'mts',
'ogg',
'wav',
'wmv',
'webm',
'vob']:
245 new_reader = openshot.FFmpegReader(path)
249 new_reader = openshot.QtImageReader(path)
252 log.error(
'Failed to load media file into video player: %s' % path)
256 new_reader = openshot.QtImageReader(path)
260 new_reader = openshot.FFmpegReader(path)
263 log.error(
'Failed to load media file into video player: %s' % path)
269 new_mapper = openshot.FrameMapper(new_reader, self.timeline.info.fps, openshot.PULLDOWN_NONE, self.timeline.info.sample_rate,
270 self.timeline.info.channels, self.timeline.info.channel_layout)
273 self.previous_clip_mappers.append(new_mapper)
274 self.previous_clip_readers.append(new_reader)
281 self.clip_reader.Open()
283 log.info(
"Set new FrameMapper reader in player: %s" % self.
clip_reader)
289 self.previous_clip_mappers.pop(0)
290 self.previous_clip_readers.pop(0)
293 self.player.Seek(seek_position)
298 def Play(self, timeline_length):
325 self.player.Seek(number)
332 self.player.Speed(new_speed)
def onPositionChanged(self, current_frame)
def Play(self, timeline_length)
Start playing the video player.
def onModeChanged(self, current_mode)
def Seek(self, number)
Seek to a specific frame.
def Stop(self)
Stop the video player and terminate the playback threads.
QT Player Worker Object (to preview video on a separate thread)
def LoadFile(self, path=None)
Load a media file into the video player.
def Start(self)
This method starts the video player.
def refreshFrame(self)
Refresh a certain frame.
def Init(self, parent, timeline, video_widget)
def kill(self)
Kill this thread.
def get_settings()
Get the current QApplication's settings instance.
def Init(self, parent, timeline, videoPreview)
def previewFrame(self, number)
Preview a certain frame.
Class which communicates with the PlayerWorker Class (running on a separate thread) ...
def Speed(self, new_speed)
Set the speed of the video player.
def Pause(self)
Pause the video player.