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.
This commit is contained in:
Pavel Machek
2024-05-09 21:58:12 +02:00
parent 1395f823a0
commit b77064dda0

View File

@@ -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")