Now allows the new processes to create child processes (useful for two-pass encoding, or, in a future, to allow mencoder to copy all the audio streams)
This commit is contained in:
parent
2564470119
commit
889325aaed
7 changed files with 66 additions and 33 deletions
|
|
@ -21,6 +21,7 @@ import subprocess
|
||||||
import os
|
import os
|
||||||
import devede.configuration_data
|
import devede.configuration_data
|
||||||
import devede.executor
|
import devede.executor
|
||||||
|
import devede.mux_dvd_menu
|
||||||
|
|
||||||
class avconv_converter(devede.executor.executor):
|
class avconv_converter(devede.executor.executor):
|
||||||
|
|
||||||
|
|
@ -303,6 +304,12 @@ class avconv_converter(devede.executor.executor):
|
||||||
|
|
||||||
self.command_var.append(os.path.join(output_path,"menu_"+str(n_page)+".mpg"))
|
self.command_var.append(os.path.join(output_path,"menu_"+str(n_page)+".mpg"))
|
||||||
|
|
||||||
|
muxer = devede.mux_dvd_menu.mux_dvd_menu()
|
||||||
|
muxer.create_mpg(n_page,output_path)
|
||||||
|
# the muxer process depends of the converter process
|
||||||
|
muxer.add_dependency(self)
|
||||||
|
self.add_child_process(muxer)
|
||||||
|
|
||||||
def process_stdout(self,data):
|
def process_stdout(self,data):
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
|
||||||
|
|
@ -542,10 +542,6 @@ class dvd_menu(devede.interface_manager.interface_manager):
|
||||||
converter = menu_converter()
|
converter = menu_converter()
|
||||||
converter.create_menu_mpeg(n_page,self.background_music,self.sound_length,self.config.PAL,menu_folder)
|
converter.create_menu_mpeg(n_page,self.background_music,self.sound_length,self.config.PAL,menu_folder)
|
||||||
# add this process without dependencies
|
# add this process without dependencies
|
||||||
processes.append([converter, None])
|
processes.append(converter)
|
||||||
muxer = devede.mux_dvd_menu.mux_dvd_menu()
|
|
||||||
muxer.create_mpg(n_page,menu_folder)
|
|
||||||
# the muxer process depends of the converter process
|
|
||||||
processes.append([muxer, [converter]])
|
|
||||||
n_page += 1
|
n_page += 1
|
||||||
return processes
|
return processes
|
||||||
|
|
@ -42,6 +42,44 @@ class executor(GObject.GObject):
|
||||||
self.stdin_file = None
|
self.stdin_file = None
|
||||||
self.stdout_file = None
|
self.stdout_file = None
|
||||||
|
|
||||||
|
self.dependencies = None
|
||||||
|
self.childs = []
|
||||||
|
self.progress_bar = None
|
||||||
|
|
||||||
|
def add_dependency(self, dep):
|
||||||
|
|
||||||
|
if (self.dependencies == None):
|
||||||
|
self.dependencies = []
|
||||||
|
|
||||||
|
if (self.dependencies.count(dep) == 0):
|
||||||
|
self.dependencies.append(dep)
|
||||||
|
|
||||||
|
# the childs have the same dependencies than the parent process because, from outside, it is viewed as a single process
|
||||||
|
for child in self.childs:
|
||||||
|
child.add_dependency(dep)
|
||||||
|
|
||||||
|
def remove_dependency(self,process):
|
||||||
|
|
||||||
|
if (self.dependencies != None):
|
||||||
|
tmp2 = []
|
||||||
|
for dep in self.dependencies:
|
||||||
|
if dep != process:
|
||||||
|
tmp2.append(dep)
|
||||||
|
if (len(tmp2) != 0):
|
||||||
|
self.dependencies = tmp2
|
||||||
|
else:
|
||||||
|
self.dependencies = None
|
||||||
|
|
||||||
|
def add_child_process(self,child):
|
||||||
|
|
||||||
|
# the childs have the same dependencies than the parent process because, from outside, it is viewed as a single process
|
||||||
|
if self.dependencies != None:
|
||||||
|
for dep in self.dependencies:
|
||||||
|
child.add_dependency(dep)
|
||||||
|
|
||||||
|
if (self.childs.count(child) == 0):
|
||||||
|
self.childs.append(child)
|
||||||
|
|
||||||
def run(self, progress_bar):
|
def run(self, progress_bar):
|
||||||
|
|
||||||
self.progress_bar = progress_bar
|
self.progress_bar = progress_bar
|
||||||
|
|
|
||||||
|
|
@ -436,10 +436,8 @@ class file_movie(devede.interface_manager.interface_manager):
|
||||||
def do_conversion(self, output_path, duration = 0):
|
def do_conversion(self, output_path, duration = 0):
|
||||||
|
|
||||||
self.set_final_size_aspect()
|
self.set_final_size_aspect()
|
||||||
p = []
|
|
||||||
cv = devede.converter.converter()
|
cv = devede.converter.converter()
|
||||||
disc_converter = cv.get_disc_converter()
|
disc_converter = cv.get_disc_converter()
|
||||||
converter = disc_converter()
|
converter = disc_converter()
|
||||||
converter.convert_file(self,output_path,duration)
|
converter.convert_file(self,output_path,duration)
|
||||||
p.append([converter, None])
|
return converter
|
||||||
return p
|
|
||||||
|
|
@ -39,7 +39,6 @@ class mux_dvd_menu(devede.executor.executor):
|
||||||
self.stdin_file = os.path.join(output_path,"menu_"+str(n_page)+".mpg")
|
self.stdin_file = os.path.join(output_path,"menu_"+str(n_page)+".mpg")
|
||||||
self.stdout_file = os.path.join(output_path,"menu_"+str(n_page)+"B.mpg")
|
self.stdout_file = os.path.join(output_path,"menu_"+str(n_page)+"B.mpg")
|
||||||
|
|
||||||
|
|
||||||
def process_stderr(self,data):
|
def process_stderr(self,data):
|
||||||
|
|
||||||
print("spumux: "+str(data))
|
print("spumux: "+str(data))
|
||||||
|
|
|
||||||
|
|
@ -263,8 +263,9 @@ class devede_project:
|
||||||
|
|
||||||
run_window = devede.runner.runner()
|
run_window = devede.runner.runner()
|
||||||
file_movies = self.get_all_files()
|
file_movies = self.get_all_files()
|
||||||
p = self.menu.create_dvd_menus(file_movies, data.path)
|
processes = self.menu.create_dvd_menus(file_movies, data.path)
|
||||||
run_window.add_processes(p)
|
for p in processes:
|
||||||
|
run_window.add_process(p)
|
||||||
movie_folder = os.path.join(data.path,"movies")
|
movie_folder = os.path.join(data.path,"movies")
|
||||||
try:
|
try:
|
||||||
os.makedirs(movie_folder)
|
os.makedirs(movie_folder)
|
||||||
|
|
@ -273,6 +274,6 @@ class devede_project:
|
||||||
counter = 0
|
counter = 0
|
||||||
for movie in file_movies:
|
for movie in file_movies:
|
||||||
p = movie.do_conversion(os.path.join(movie_folder,"movie_"+str(counter)+".mpg"))
|
p = movie.do_conversion(os.path.join(movie_folder,"movie_"+str(counter)+".mpg"))
|
||||||
run_window.add_processes(p)
|
run_window.add_process(p)
|
||||||
counter += 1
|
counter += 1
|
||||||
run_window.run()
|
run_window.run()
|
||||||
|
|
@ -58,10 +58,14 @@ class runner(GObject.GObject):
|
||||||
box.set_orientation(Gtk.Orientation.VERTICAL)
|
box.set_orientation(Gtk.Orientation.VERTICAL)
|
||||||
self.total_processes = 0
|
self.total_processes = 0
|
||||||
|
|
||||||
def add_processes(self,processes):
|
def add_process(self,process):
|
||||||
for p in processes:
|
|
||||||
p.append(None) # this will contain the progress bar being used by this process
|
if (self.proc_list.count(process) == 0):
|
||||||
self.proc_list.append(p)
|
self.proc_list.append(process)
|
||||||
|
|
||||||
|
for p in process.childs:
|
||||||
|
self.add_process(p)
|
||||||
|
|
||||||
self.total_processes = len(self.proc_list)
|
self.total_processes = len(self.proc_list)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -83,11 +87,10 @@ class runner(GObject.GObject):
|
||||||
# * the process object
|
# * the process object
|
||||||
# * the list of dependencies, or None if there are no more dependencies
|
# * the list of dependencies, or None if there are no more dependencies
|
||||||
# * the progress bar being used by this process
|
# * the progress bar being used by this process
|
||||||
if (element[1] == None) and (element[2] == None):
|
if (element.dependencies == None) and (element.progress_bar == None):
|
||||||
self.progress_bars[0][2] = element[0]
|
element.connect("ended",self.process_ended)
|
||||||
element[0].connect("ended",self.process_ended)
|
element.run(self.progress_bars[0])
|
||||||
element[0].run(self.progress_bars[0])
|
element.progress_bar = self.progress_bars[0]
|
||||||
element[2] = self.progress_bars[0]
|
|
||||||
self.used_progress_bars.append(self.progress_bars[0])
|
self.used_progress_bars.append(self.progress_bars[0])
|
||||||
if (len(self.progress_bars) > 1):
|
if (len(self.progress_bars) > 1):
|
||||||
self.progress_bars = self.progress_bars[1:]
|
self.progress_bars = self.progress_bars[1:]
|
||||||
|
|
@ -101,8 +104,7 @@ class runner(GObject.GObject):
|
||||||
# move the progress bar used by this process to the list of available progress bars
|
# move the progress bar used by this process to the list of available progress bars
|
||||||
tmp = []
|
tmp = []
|
||||||
for e in self.used_progress_bars:
|
for e in self.used_progress_bars:
|
||||||
if (e[2] == process):
|
if (process.progress_bar == e):
|
||||||
e[2] = None
|
|
||||||
self.progress_bars.append(e)
|
self.progress_bars.append(e)
|
||||||
e[0].hide()
|
e[0].hide()
|
||||||
else:
|
else:
|
||||||
|
|
@ -112,17 +114,9 @@ class runner(GObject.GObject):
|
||||||
# remove this process from the list of processes, and remove it from the dependencies in other processes
|
# remove this process from the list of processes, and remove it from the dependencies in other processes
|
||||||
tmp = []
|
tmp = []
|
||||||
for e in self.proc_list:
|
for e in self.proc_list:
|
||||||
if (e[0] != process):
|
if (e != process):
|
||||||
tmp.append(e)
|
tmp.append(e)
|
||||||
if (e[1] != None):
|
e.remove_dependency(process)
|
||||||
tmp2 = []
|
|
||||||
for dep in e[1]:
|
|
||||||
if dep != process:
|
|
||||||
tmp2.append(dep)
|
|
||||||
if (len(tmp2) != 0):
|
|
||||||
e[1] = tmp2
|
|
||||||
else:
|
|
||||||
e[1] = None
|
|
||||||
self.proc_list = tmp
|
self.proc_list = tmp
|
||||||
|
|
||||||
# launch a new process
|
# launch a new process
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue