Threading changes.
This commit is contained in:
parent
53598f7a85
commit
e33caa9179
4
main.py
4
main.py
|
@ -263,16 +263,13 @@ class Main(QtCore.QObject):
|
|||
self.changeEncodingStatus(True)
|
||||
self.progressBarUpdated(-1)
|
||||
ffmpeg_cmd = self.settings.value("ffmpeg_cmd", expanduser("~"))
|
||||
|
||||
self.videoThread = QtCore.QThread(self)
|
||||
self.videoWorker = video_thread.Worker(self)
|
||||
|
||||
self.videoWorker.moveToThread(self.videoThread)
|
||||
self.videoWorker.videoCreated.connect(self.videoCreated)
|
||||
self.videoWorker.progressBarUpdate.connect(self.progressBarUpdated)
|
||||
self.videoWorker.progressBarSetText.connect(self.progressBarSetText)
|
||||
self.videoWorker.imageCreated.connect(self.showPreviewImage)
|
||||
|
||||
self.videoThread.start()
|
||||
self.videoTask.emit(self.window.lineEdit_background.text(),
|
||||
self.window.lineEdit_audioFile.text(),
|
||||
|
@ -293,6 +290,7 @@ class Main(QtCore.QObject):
|
|||
self.window.pushButton_Cancel.setEnabled(False)
|
||||
|
||||
|
||||
|
||||
def progressBarSetText(self, value):
|
||||
self.window.progressBar_createVideo.setFormat(value)
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ import subprocess as sp
|
|||
import sys
|
||||
import os
|
||||
from queue import Queue, PriorityQueue
|
||||
from threading import Thread
|
||||
from threading import Thread, Event
|
||||
import time
|
||||
from copy import copy
|
||||
import signal
|
||||
|
@ -31,9 +31,10 @@ class Worker(QtCore.QObject):
|
|||
self.sampleSize = 1470
|
||||
self.canceled = False
|
||||
self.error = False
|
||||
self.stopped = False
|
||||
|
||||
def renderNode(self):
|
||||
while True:
|
||||
while not self.stopped:
|
||||
i = self.compositeQueue.get()
|
||||
|
||||
if self.imBackground is not None:
|
||||
|
@ -61,11 +62,9 @@ class Worker(QtCore.QObject):
|
|||
|
||||
for i in range(0, len(self.completeAudioArray), self.sampleSize):
|
||||
self.compositeQueue.put([i, self.bgI])
|
||||
self.compositeQueue.join()
|
||||
print('Compositing Complete.')
|
||||
|
||||
def previewDispatch(self):
|
||||
while True:
|
||||
while not self.stopped:
|
||||
i = self.previewQueue.get()
|
||||
if time.time() - self.lastPreview >= 0.06 or i[0] == 0:
|
||||
self._image = ImageQt(i[1])
|
||||
|
@ -143,8 +142,6 @@ class Worker(QtCore.QObject):
|
|||
ffmpegCommand.append(outputFile)
|
||||
self.out_pipe = sp.Popen(ffmpegCommand, stdin=sp.PIPE,stdout=sys.stdout, stderr=sys.stdout)
|
||||
|
||||
|
||||
|
||||
# create video for output
|
||||
numpy.seterr(divide='ignore')
|
||||
|
||||
|
@ -167,6 +164,7 @@ class Worker(QtCore.QObject):
|
|||
|
||||
if properties and 'static' in properties:
|
||||
self.staticComponents[compNo] = copy(comp.frameRender(compNo, 0))
|
||||
self.progressBarUpdate.emit(100)
|
||||
|
||||
self.compositeQueue = Queue()
|
||||
self.compositeQueue.maxsize = 20
|
||||
|
@ -174,11 +172,12 @@ class Worker(QtCore.QObject):
|
|||
self.renderQueue.maxsize = 20
|
||||
self.previewQueue = PriorityQueue()
|
||||
|
||||
self.renderThreads = []
|
||||
# create threads to render frames and send them back here for piping out
|
||||
for i in range(3):
|
||||
t = Thread(target=self.renderNode, name="Render Thread")
|
||||
t.daemon = True
|
||||
t.start()
|
||||
self.renderThreads.append(Thread(target=self.renderNode, name="Render Thread"))
|
||||
self.renderThreads[i].daemon = True
|
||||
self.renderThreads[i].start()
|
||||
|
||||
self.dispatchThread = Thread(target=self.renderDispatch, name="Render Dispatch Thread")
|
||||
self.dispatchThread.daemon = True
|
||||
|
@ -190,6 +189,9 @@ class Worker(QtCore.QObject):
|
|||
|
||||
frameBuffer = {}
|
||||
self.lastPreview = 0.0
|
||||
self.progressBarUpdate.emit(0)
|
||||
pStr = "Exporting video..."
|
||||
self.progressBarSetText.emit(pStr)
|
||||
if not self.canceled:
|
||||
for i in range(0, len(self.completeAudioArray), self.sampleSize):
|
||||
while True:
|
||||
|
@ -247,8 +249,11 @@ class Worker(QtCore.QObject):
|
|||
self.canceled = False
|
||||
self.parent.drawPreview()
|
||||
self.core.deleteTempDir()
|
||||
self.parent.changeEncodingStatus(False)
|
||||
self.stopped = True
|
||||
self.videoCreated.emit()
|
||||
self.parent.changeEncodingStatus(False)
|
||||
|
||||
return
|
||||
|
||||
def updateProgress(self, pStr, pVal):
|
||||
self.progressBarValue.emit(pVal)
|
||||
|
|
Reference in New Issue