Now can launch one process per core, and launch new ones when the old ones end

This commit is contained in:
Sergio Costas 2014-07-23 23:53:11 +02:00
parent 13f9e67eb1
commit 86f77faa3f
13 changed files with 761 additions and 77 deletions

View file

@ -20,6 +20,7 @@ from gi.repository import Gtk,Gdk,GdkPixbuf
import os
import devede.configuration_data
import devede.interface_manager
import devede.message
class dvd_menu(devede.interface_manager.interface_manager):
@ -59,12 +60,28 @@ class dvd_menu(devede.interface_manager.interface_manager):
self.add_fontbutton("entry_font", "Sans 18", self.update_preview)
self.add_filebutton("background_picture", self.default_background, self.update_preview)
self.add_filebutton("background_music", self.default_sound, self.update_preview)
self.add_filebutton("background_music", self.default_sound, self.update_music)
self.cached_menu_font = None
self.cached_menu_size = 0
self.sound_length = 30
def update_music(self,b=None):
self.store_ui(self.builder)
cv = devede.converter.converter()
film_analizer = (cv.get_film_analizer())()
(video, audio, length) = film_analizer.analize_film_data(self.background_music,True)
if (video != 0):
devede.message.message_window(_("The selected file is a video, not an audio file"),_("Error"))
self.on_no_sound_clicked(None)
elif (audio == 0):
devede.message.message_window(_("The selected file is not an audio file"),_("Error"))
self.on_no_sound_clicked(None)
else:
self.sound_length = length
def update_preview(self,b=None):
self.store_ui(self.builder)
@ -80,6 +97,7 @@ class dvd_menu(devede.interface_manager.interface_manager):
def on_no_sound_clicked(self,b):
self.background_music = self.default_sound
self.sound_length = 30
self.update_ui(self.builder)
@ -118,10 +136,6 @@ class dvd_menu(devede.interface_manager.interface_manager):
self.wmenu.destroy()
def on_preview_menu_clicked(self,b):
pass
def get_font_params(self,font_name):
font_elements=font_name.split(" ")
@ -161,7 +175,7 @@ class dvd_menu(devede.interface_manager.interface_manager):
elif arrow_type == "menu_entry_selected":
fgcolor = self.selected_color
elif arrow_type == "menu_entry_activated":
fgcolor = ( 1.0 - self.selected_color[0], 1.0 - self.selected_color[1], 1.0 - self.selected_color[2] )
fgcolor = ( 1.0 - self.selected_color[0], 1.0 - self.selected_color[1], 1.0 - self.selected_color[2], self.selected_color[3])
else:
return
@ -210,7 +224,7 @@ class dvd_menu(devede.interface_manager.interface_manager):
hard_borders = True
font = self.entry_font
elif text_type == "menu_entry_activated":
fgcolor = ( 1.0 - self.selected_color[0], 1.0 - self.selected_color[1], 1.0 - self.selected_color[2] )
fgcolor = ( 1.0 - self.selected_color[0], 1.0 - self.selected_color[1], 1.0 - self.selected_color[2], self.selected_color[3])
bgcolor = None
hard_borders = True
font = self.entry_font
@ -256,7 +270,7 @@ class dvd_menu(devede.interface_manager.interface_manager):
""" This method sets data that can't be changed from the dvd settings window.
It must be called before painting a menu """
if self.config.PAL:
if self.project.pal:
self.y=576.0
else:
self.y=480.0
@ -270,6 +284,7 @@ class dvd_menu(devede.interface_manager.interface_manager):
self.sf = None
self.current_shown_page = 0
self.wcurrent_page = None
def paint_menu(self,paint_background, paint_selected, paint_activated, page_number):
@ -325,7 +340,8 @@ class dvd_menu(devede.interface_manager.interface_manager):
if (page_number >= self.pages) and (page_number > 0):
page_number -= 1
self.wcurrent_page.set_text(_("Page %(X)d of %(Y)d") % {"X":page_number+1 , "Y":self.pages})
if self.wcurrent_page != None:
self.wcurrent_page.set_text(_("Page %(X)d of %(Y)d") % {"X":page_number+1 , "Y":self.pages})
xl = left_margin_p
xr = 720.0 - right_margin_p
y = top_margin_p + entry_height/2.0
@ -341,26 +357,26 @@ class dvd_menu(devede.interface_manager.interface_manager):
y += entry_height
if paint_arrows:
if page_number == 0:
self.paint_base(xl, xr, y, 0)
if paint_background:
self.paint_base(xl, xr, y, 0)
self.paint_arrow(xl, xr, y, "menu_entry", False)
if paint_selected:
self.paint_arrow(xl, xr, y, "menu_entry_selected", False)
if paint_activated:
self.paint_arrow(xl, xr, y, "menu_entry_activated", False)
elif page_number == (self.pages - 1):
self.paint_base(xl, xr, y, 0)
if paint_background:
self.paint_base(xl, xr, y, 0)
self.paint_arrow(xl, xr, y, "menu_entry", True)
if paint_selected:
self.paint_arrow(xl, xr, y, "menu_entry_selected", True)
if paint_activated:
self.paint_arrow(xl, xr, y, "menu_entry_activated", True)
else:
self.paint_base(xl, xr, y, 1)
self.paint_base(xl, xr, y, 2)
med = (xl + xr) / 2.0
if paint_background:
self.paint_base(xl, xr, y, 1)
self.paint_base(xl, xr, y, 2)
self.paint_arrow(med, xr, y, "menu_entry", False)
self.paint_arrow(xl, med, y, "menu_entry", True)
if paint_selected:
@ -411,9 +427,6 @@ class dvd_menu(devede.interface_manager.interface_manager):
""" Callback to repaint the menu preview window when it
sends the EXPOSE event """
if not self.config.menu_dynamic_preview:
return
if (self.sf == None):
self.paint_menu(True, self.wshow_as_selected.get_active(), False, self.current_shown_page)
if (self.current_shown_page >= self.pages):
@ -421,3 +434,36 @@ class dvd_menu(devede.interface_manager.interface_manager):
cr.set_source_surface(self.sf)
cr.paint()
def create_dvd_menus(self,base_path):
self.refresh_static_data()
cv = devede.converter.converter()
menu_folder = os.path.join(base_path,"menu")
try:
os.makedirs(menu_folder)
except:
pass
n_page = 0
self.pages = 1
processes = []
menu_converter = cv.get_menu_converter()
while n_page < self.pages:
self.sf = None
self.paint_menu(True, False, False, n_page)
self.sf.write_to_png(os.path.join(menu_folder,"menu_"+str(n_page)+"_bg.png"))
self.sf = None
self.paint_menu(False, False, False, n_page)
self.sf.write_to_png(os.path.join(menu_folder,"menu_"+str(n_page)+"_unselected_bg.png"))
self.sf = None
self.paint_menu(False, True, False, n_page)
self.sf.write_to_png(os.path.join(menu_folder,"menu_"+str(n_page)+"_selected_bg.png"))
self.sf = None
self.paint_menu(False, False, True, n_page)
self.sf.write_to_png(os.path.join(menu_folder,"menu_"+str(n_page)+"_active_bg.png"))
converter = menu_converter()
converter.create_mpg(n_page,self.background_music,self.sound_length,self.project.pal,menu_folder)
# add this process without dependencies
processes.append([converter, None])
n_page += 1
return processes