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:
57
mpegize.py
57
mpegize.py
@@ -48,8 +48,8 @@ def gst_convert(mega_dir, out_file, use_jpeg):
|
|||||||
return
|
return
|
||||||
t = audio.get_time()
|
t = audio.get_time()
|
||||||
#print("Audio: ", name, " need ", data, t)
|
#print("Audio: ", name, " need ", data, t)
|
||||||
audio.pop()
|
|
||||||
buffer, caps = sa_read(name, t)
|
buffer, caps = sa_read(name, t)
|
||||||
|
os.unlink(name)
|
||||||
appsrc.set_property("caps", caps)
|
appsrc.set_property("caps", caps)
|
||||||
appsrc.emit("push-buffer", buffer)
|
appsrc.emit("push-buffer", buffer)
|
||||||
|
|
||||||
@@ -69,19 +69,23 @@ def gst_convert(mega_dir, out_file, use_jpeg):
|
|||||||
class grwBase:
|
class grwBase:
|
||||||
def init(m, dir):
|
def init(m, dir):
|
||||||
m.dir = dir
|
m.dir = dir
|
||||||
m.list = os.listdir(dir)
|
|
||||||
m.list.sort()
|
|
||||||
m.slen = len(m.suffix)
|
m.slen = len(m.suffix)
|
||||||
m.start_time = 0
|
m.start_time = 0
|
||||||
m.length = len(m.list)
|
m.scan()
|
||||||
print("Movie", len(m.list))
|
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):
|
def get_path(m):
|
||||||
s = m.get_name()
|
s = m.get_name()
|
||||||
if s: return m.dir + s
|
if s: return m.dir + s
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def get_name(m):
|
def get_name(m):
|
||||||
|
m.scan()
|
||||||
#print("Get path -- ")
|
#print("Get path -- ")
|
||||||
while True:
|
while True:
|
||||||
if (len(m.list)) == 0:
|
if (len(m.list)) == 0:
|
||||||
@@ -95,15 +99,22 @@ def gst_convert(mega_dir, out_file, use_jpeg):
|
|||||||
def get_time(m):
|
def get_time(m):
|
||||||
s = m.get_name()
|
s = m.get_name()
|
||||||
s = s[:-m.slen]
|
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):
|
def pop(m):
|
||||||
m.list = m.list[1:]
|
m.list = m.list[1:]
|
||||||
|
|
||||||
def progress(m):
|
def progress(m):
|
||||||
i = len(m.list) / m.length
|
i = len(m.list)
|
||||||
i = 1-i
|
print("Message: %d" % i)
|
||||||
print("Message: %.0f%%" % (100*i))
|
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
|
||||||
class grwVideo(grwBase):
|
class grwVideo(grwBase):
|
||||||
@@ -164,8 +175,8 @@ def gst_convert(mega_dir, out_file, use_jpeg):
|
|||||||
t = movie.get_time()
|
t = movie.get_time()
|
||||||
#print("Video: ", name, t)
|
#print("Video: ", name, t)
|
||||||
movie.progress()
|
movie.progress()
|
||||||
movie.pop()
|
|
||||||
buffer, caps = grw_read(name, t)
|
buffer, caps = grw_read(name, t)
|
||||||
|
os.unlink(name)
|
||||||
appsrc.set_property("caps", caps)
|
appsrc.set_property("caps", caps)
|
||||||
appsrc.emit("push-buffer", buffer)
|
appsrc.emit("push-buffer", buffer)
|
||||||
|
|
||||||
@@ -213,8 +224,8 @@ def gst_convert(mega_dir, out_file, use_jpeg):
|
|||||||
return
|
return
|
||||||
t = movie.get_time()
|
t = movie.get_time()
|
||||||
#print("Video: ", name, t)
|
#print("Video: ", name, t)
|
||||||
movie.pop()
|
|
||||||
buffer, caps = jpeg_read(name, t)
|
buffer, caps = jpeg_read(name, t)
|
||||||
|
os.unlink(name)
|
||||||
appsrc.set_property("caps", caps)
|
appsrc.set_property("caps", caps)
|
||||||
appsrc.emit("push-buffer", buffer)
|
appsrc.emit("push-buffer", buffer)
|
||||||
|
|
||||||
@@ -410,15 +421,37 @@ class Mpegize:
|
|||||||
if len(argv) > 2:
|
if len(argv) > 2:
|
||||||
m.base = argv[2]
|
m.base = argv[2]
|
||||||
mode = argv[1]
|
mode = argv[1]
|
||||||
|
fps = argv[4]
|
||||||
|
ext = argv[5]
|
||||||
if mode == "start":
|
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
|
return
|
||||||
if mode == "convert" or mode == "stop":
|
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%%")
|
print("Message: 0%%")
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
m.prepare()
|
m.prepare()
|
||||||
m.jpegize()
|
m.jpegize()
|
||||||
print("Phase 2: mpegize -- ", argv[3])
|
print("Phase 2: mpegize -- ", argv[3], file=sys.stderr)
|
||||||
print("Message: enc")
|
print("Message: enc")
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
gst_convert(m.base, argv[3], argv[4]=="dng")
|
gst_convert(m.base, argv[3], argv[4]=="dng")
|
||||||
|
Reference in New Issue
Block a user