aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDH42017-06-01 23:24:13 -0500
committerDH42017-06-01 23:24:13 -0500
commit6bf36d0324ac4b04717a458adbb7172f717ec16a (patch)
tree82a924a2c3d91a5d50af035463098084370a3ec1
parent7d8e9ab3b16546e91144e256e88f9f490abc7ec2 (diff)
Added ability to cancel export.
-rw-r--r--main.py14
-rw-r--r--video_thread.py52
2 files changed, 51 insertions, 15 deletions
diff --git a/main.py b/main.py
index f34cbee..bb42d1f 100644
--- a/main.py
+++ b/main.py
@@ -173,6 +173,7 @@ class Main(QtCore.QObject):
window.toolButton_selectOutputFile.clicked.connect(self.openOutputFileDialog)
window.progressBar_createVideo.setValue(0)
window.pushButton_createVideo.clicked.connect(self.createAudioVisualisation)
+ window.pushButton_Cancel.clicked.connect(self.stopVideo)
window.setWindowTitle("Audio Visualizer")
self.previewWindow = PreviewWindow(self, r"background.jpg")
@@ -250,6 +251,13 @@ class Main(QtCore.QObject):
self.window.lineEdit_background.setText(fileName)
self.drawPreview()
+ def stopVideo(self):
+ print('stop')
+ try:
+ self.videoWorker.stopVideo()
+ except:
+ pass
+
def createAudioVisualisation(self):
# create output video if mandatory settings are filled in
if self.window.lineEdit_audioFile.text() and self.window.lineEdit_outputFile.text():
@@ -262,8 +270,8 @@ class Main(QtCore.QObject):
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.videoWorker.imageCreated.connect(self.showPreviewImage)
+
self.videoThread.start()
self.videoTask.emit(self.window.lineEdit_background.text(),
self.window.lineEdit_audioFile.text(),
@@ -271,7 +279,7 @@ class Main(QtCore.QObject):
self.selectedComponents)
else:
self.showMessage("You must select an audio file and output filename.")
-
+
def progressBarUpdated(self, value):
self.window.progressBar_createVideo.setValue(value)
diff --git a/video_thread.py b/video_thread.py
index a7c7ac6..2e9eb13 100644
--- a/video_thread.py
+++ b/video_thread.py
@@ -6,10 +6,12 @@ import core
import numpy
import subprocess as sp
import sys
+import os
from queue import Queue, PriorityQueue
from threading import Thread
import time
from copy import copy
+import signal
class Worker(QtCore.QObject):
@@ -27,6 +29,8 @@ class Worker(QtCore.QObject):
self.parent = parent
parent.videoTask.connect(self.createVideo)
self.sampleSize = 1470
+ self.canceled = False
+ self.error = False
def renderNode(self):
while True:
@@ -80,8 +84,14 @@ class Worker(QtCore.QObject):
background.paste(layer)
return background
+ def stopVideo(self):
+ print('Stop Export')
+ self.canceled = True
+ self.out_pipe.send_signal(signal.SIGINT)
+
@pyqtSlot(str, str, str, list)
def createVideo(self, backgroundImage, inputFile, outputFile, components):
+ self.outputFile = outputFile
self.width = int(self.core.settings.value('outputWidth'))
self.height = int(self.core.settings.value('outputHeight'))
# print('worker thread id: {}'.format(QtCore.QThread.currentThreadId()))
@@ -135,7 +145,9 @@ class Worker(QtCore.QObject):
ffmpegCommand.append('-2')
ffmpegCommand.append(outputFile)
- 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
numpy.seterr(divide='ignore')
@@ -189,11 +201,11 @@ class Worker(QtCore.QObject):
self.renderQueue.task_done()
try:
- out_pipe.stdin.write(frameBuffer[i].tobytes())
+ self.out_pipe.stdin.write(frameBuffer[i].tobytes())
self.previewQueue.put([i, frameBuffer[i]])
del frameBuffer[i]
- finally:
- True
+ except:
+ break
# increase progress bar value
if progressBarValue + 1 <= (i / len(self.completeAudioArray)) * 100:
@@ -203,15 +215,31 @@ class Worker(QtCore.QObject):
numpy.seterr(all='print')
- out_pipe.stdin.close()
- if out_pipe.stderr is not None:
- print(out_pipe.stderr.read())
- out_pipe.stderr.close()
+ self.out_pipe.stdin.close()
+ if self.out_pipe.stderr is not None:
+ print(self.out_pipe.stderr.read())
+ self.out_pipe.stderr.close()
+ self.error = True
# out_pipe.terminate() # don't terminate ffmpeg too early
- out_pipe.wait()
- print("Video file created")
+ self.out_pipe.wait()
+ if self.canceled:
+ print("Export Canceled")
+ os.remove(self.outputFile)
+ self.progressBarUpdate.emit(0)
+ self.progressBarSetText.emit('Export Canceled')
+ else:
+ if self.error:
+ print("Export Failed")
+ self.progressBarUpdate.emit(0)
+ self.progressBarSetText.emit('Export Failed')
+ else:
+ print("Export Complete")
+ self.progressBarUpdate.emit(100)
+ self.progressBarSetText.emit('Export Complete')
+
+ self.error = False
+ self.canceled = False
self.parent.drawPreview()
self.core.deleteTempDir()
- self.progressBarUpdate.emit(100)
- self.progressBarSetText.emit('100%')
+
self.videoCreated.emit()