From b77064dda07bcf8922959e8c7f362ad255b0f6ee Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Thu, 9 May 2024 21:58:12 +0200 Subject: [PATCH] Start encoding while the recording is running in the YUV case. This allows "unlimited" video length. PinePhone OG is able to do the encoding with ~180% CPU use. --- mpegize.py | 57 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/mpegize.py b/mpegize.py index 22e3053..2b96b4f 100755 --- a/mpegize.py +++ b/mpegize.py @@ -48,8 +48,8 @@ def gst_convert(mega_dir, out_file, use_jpeg): return t = audio.get_time() #print("Audio: ", name, " need ", data, t) - audio.pop() buffer, caps = sa_read(name, t) + os.unlink(name) appsrc.set_property("caps", caps) appsrc.emit("push-buffer", buffer) @@ -69,19 +69,23 @@ def gst_convert(mega_dir, out_file, use_jpeg): class grwBase: def init(m, dir): m.dir = dir - m.list = os.listdir(dir) - m.list.sort() m.slen = len(m.suffix) m.start_time = 0 - m.length = len(m.list) + m.scan() print("Movie", len(m.list)) + def scan(m): + m.list = os.listdir(m.dir) + m.list.sort() + m.length = len(m.list) + def get_path(m): s = m.get_name() if s: return m.dir + s return s def get_name(m): + m.scan() #print("Get path -- ") while True: if (len(m.list)) == 0: @@ -95,15 +99,22 @@ def gst_convert(mega_dir, out_file, use_jpeg): def get_time(m): s = m.get_name() s = s[:-m.slen] - return int(s) * 1000 - m.start_time + t = int(s) + res = t * 1000 - m.start_time + t = t / (1000*1000.) + while (time.time() - t < 1): + print("Too fast: ", time.time(), t, file=sys.stderr) + print("Message: WA") + sys.stdout.flush() + time.sleep(.1) + return res def pop(m): m.list = m.list[1:] def progress(m): - i = len(m.list) / m.length - i = 1-i - print("Message: %.0f%%" % (100*i)) + i = len(m.list) + print("Message: %d" % i) sys.stdout.flush() class grwVideo(grwBase): @@ -164,8 +175,8 @@ def gst_convert(mega_dir, out_file, use_jpeg): t = movie.get_time() #print("Video: ", name, t) movie.progress() - movie.pop() buffer, caps = grw_read(name, t) + os.unlink(name) appsrc.set_property("caps", caps) appsrc.emit("push-buffer", buffer) @@ -213,8 +224,8 @@ def gst_convert(mega_dir, out_file, use_jpeg): return t = movie.get_time() #print("Video: ", name, t) - movie.pop() buffer, caps = jpeg_read(name, t) + os.unlink(name) appsrc.set_property("caps", caps) appsrc.emit("push-buffer", buffer) @@ -410,15 +421,37 @@ class Mpegize: if len(argv) > 2: m.base = argv[2] mode = argv[1] + fps = argv[4] + ext = argv[5] if mode == "start": + print("Phase 0: start, mode ", ext, file=sys.stderr) + + if ext!="grw": + return + print("Phase 0: wait", file=sys.stderr) + + print("Message: W1") + sys.stdout.flush() + + time.sleep(1) + + print("Phase 1: parallel fun", file=sys.stderr) + + print("Message: proc") + sys.stdout.flush() + gst_convert(m.base, argv[3], argv[4]=="dng") return if mode == "convert" or mode == "stop": - print("Phase 1: jpegize") + if ext=="grw": + # FIXME: need to wait for other mpegize! + time.sleep(200) + return + print("Phase 1: jpegize", file=sys.stderr) print("Message: 0%%") sys.stdout.flush() m.prepare() m.jpegize() - print("Phase 2: mpegize -- ", argv[3]) + print("Phase 2: mpegize -- ", argv[3], file=sys.stderr) print("Message: enc") sys.stdout.flush() gst_convert(m.base, argv[3], argv[4]=="dng")