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