summaryrefslogtreecommitdiff
path: root/recode.py
diff options
context:
space:
mode:
Diffstat (limited to 'recode.py')
-rw-r--r--recode.py34
1 files changed, 33 insertions, 1 deletions
diff --git a/recode.py b/recode.py
index 5f5a623..6caa2a9 100644
--- a/recode.py
+++ b/recode.py
@@ -1,4 +1,4 @@
-import subprocess, tempfile
+import subprocess, tempfile, threading
decoders = {}
encoders = {}
@@ -63,6 +63,38 @@ class Recoder(object):
self.encoder.encode(temp.name, dest)
temp.close()
+class RecodeThread(threading.Thread):
+ lock = threading.Lock()
+ queue = []
+ running = False
+
+ def get_job(self):
+ return self.queue.pop(0) if len(self.queue) else None
+
+ def run(self):
+ self.lock.acquire()
+ job = self.get_job()
+ while job:
+ self.lock.release()
+
+ func, decoder, encoder, sessionid = job
+ func(decoder, encoder, sessionid)
+
+ self.lock.acquire()
+ job = self.get_job()
+
+ RecodeThread.running = False
+ self.lock.release()
+
+ @classmethod
+ def add(cls, job):
+ cls.lock.acquire()
+ cls.queue.append(job)
+ if not cls.running:
+ cls.running = True
+ RecodeThread().start()
+ cls.lock.release()
+
if __name__ == '__main__':
import sys
ffmpeg = FFmpeg()