diff --git a/data/interface/werror.ui b/data/interface/werror.ui index 7cd3e4a..8b3ce85 100644 --- a/data/interface/werror.ui +++ b/data/interface/werror.ui @@ -5,7 +5,6 @@ 640 - 240 False True center @@ -53,8 +52,9 @@ There was an error while creating the disc. - True + False True + 31 0 @@ -70,7 +70,7 @@ vertical - 200 + 240 True True in diff --git a/data/interface/wfile_properties.ui b/data/interface/wfile_properties.ui index 290b1c3..ef49a35 100644 --- a/data/interface/wfile_properties.ui +++ b/data/interface/wfile_properties.ui @@ -174,22 +174,6 @@ 1 - - - True - False - baseline - 8 - 0 - Original video rate (Kbits/sec): - - - 2 - 1 - 1 - 1 - - True @@ -217,48 +201,6 @@ 1 - - - True - False - 8 - 0 - Original audio rate (Kbits/sec): - - - 2 - 2 - 1 - 1 - - - - - True - False - 0 - - - 3 - 1 - 1 - 1 - - - - - True - False - 0 - end - - - 3 - 2 - 1 - 1 - - True @@ -344,6 +286,64 @@ 1 + + + True + False + 0 + end + + + 3 + 2 + 1 + 1 + + + + + True + False + 0 + + + 3 + 1 + 1 + 1 + + + + + True + False + 8 + 0 + Original audio rate (Kbits/sec): + + + 2 + 2 + 1 + 1 + + + + + True + False + baseline + 8 + 0 + Original video rate (Kbits/sec): + + + 2 + 1 + 1 + 1 + + @@ -1025,7 +1025,7 @@ - + 720x480 True True @@ -1042,7 +1042,7 @@ - + 704x480 True True @@ -1059,7 +1059,7 @@ - + 480x480 True True @@ -1076,7 +1076,7 @@ - + 352x480 True True @@ -1093,7 +1093,7 @@ - + 352x240 True True diff --git a/data/interface/wmain.ui b/data/interface/wmain.ui index dea3c09..a771a76 100644 --- a/data/interface/wmain.ui +++ b/data/interface/wmain.ui @@ -357,6 +357,7 @@ True 0.4699999988079071 top + True diff --git a/data/interface/wpreview.ui b/data/interface/wpreview.ui new file mode 100644 index 0000000..b2a636a --- /dev/null +++ b/data/interface/wpreview.ui @@ -0,0 +1,131 @@ + + + + + + 10 + 1000 + 60 + 1 + 10 + + + False + dialog + + + False + vertical + 2 + + + False + end + + + gtk-cancel + True + True + True + True + + + False + True + 0 + + + + + gtk-ok + True + True + True + True + + + False + True + 1 + + + + + False + True + end + 0 + + + + + True + False + vertical + + + True + False + <b>Preview video</b> + +Devede will create a preview with the selected parameters, so you will be able to check the video quality, audio sync and so on. + True + center + True + + + True + True + 0 + + + + + True + False + + + True + False + Preview length: + + + False + True + 0 + + + + + True + True + length + + + True + True + 1 + + + + + False + True + 1 + + + + + True + True + 1 + + + + + + button1 + button2 + + + diff --git a/data/interface/wprogress.ui b/data/interface/wprogress.ui index 22a3eba..8b0ed7f 100644 --- a/data/interface/wprogress.ui +++ b/data/interface/wprogress.ui @@ -3,6 +3,7 @@ + 640 False Creating... False @@ -16,6 +17,19 @@ True False vertical + + + True + False + Creating disc + + + False + True + 28 + 0 + + True @@ -32,7 +46,7 @@ False True - 0 + 1 @@ -44,7 +58,7 @@ False True - 1 + 2 @@ -60,7 +74,7 @@ False True 8 - 2 + 3 diff --git a/src/devede/avconv_converter.py b/src/devede/avconv_converter.py index da30999..55cb1f6 100644 --- a/src/devede/avconv_converter.py +++ b/src/devede/avconv_converter.py @@ -53,7 +53,10 @@ class avconv_converter(devede.executor.executor): self.text = _("Converting %(X)s") % {"X" : file_project.title_name} - self.final_length = file_project.original_length + if (video_length == 0): + self.final_length = file_project.original_length + else: + self.final_length = video_length self.command_var=[] self.command_var.append("avconv") self.command_var.append("-i") diff --git a/src/devede/configuration_data.py b/src/devede/configuration_data.py index e632713..709170c 100644 --- a/src/devede/configuration_data.py +++ b/src/devede/configuration_data.py @@ -110,10 +110,7 @@ class configuration(GObject.GObject): self.tmp_folder=linea[12:].strip() continue if linea[:10]=="multicore:": - if linea[10:].strip()=="1": - self.multicore = False - else: - self.multicore = True + self.multicore = int(linea[10:].strip()) continue if linea[:13]=="final_folder:": self.final_folder=linea[13:].strip() @@ -166,11 +163,7 @@ class configuration(GObject.GObject): config_data.write("ntsc\n") if (self.tmp_folder != None): config_data.write("temp_folder:"+str(self.tmp_folder)+"\n") - config_data.write("multicore:") - if (self.multicore): - config_data.write("0\n") - else: - config_data.write("1\n") + config_data.write("multicore:"+str(self.multicore)) if (self.final_folder != None): config_data.write("final_folder:"+str(self.final_folder)+"\n") if (self.sub_language != None): diff --git a/src/devede/converter.py b/src/devede/converter.py index 739f5a8..3190f97 100644 --- a/src/devede/converter.py +++ b/src/devede/converter.py @@ -109,6 +109,13 @@ class converter: return ( analizers, players, converters, menuers ) + def get_film_player(self): + """ returns a class for the desired film player, or the most priviledged if the desired is not installed """ + + if (self.config.film_player == None) or (self.players.has_key(self.config.film_player) == False): + return self.default_player + else: + return self.players[self.config.film_analizer] def get_film_analizer(self): """ returns a class for the desired film analizer, or the most priviledged if the desired is not installed """ diff --git a/src/devede/executor.py b/src/devede/executor.py index ab8fe94..c9c0de5 100644 --- a/src/devede/executor.py +++ b/src/devede/executor.py @@ -60,7 +60,8 @@ class executor(GObject.GObject): child.add_dependency(dep) def remove_dependency(self,process): - + # dependencies are removed only in the parent because the running class have all the processes, parents and childs, and calls + # this method on all of them if (self.dependencies != None): tmp2 = [] for dep in self.dependencies: diff --git a/src/devede/file_movie.py b/src/devede/file_movie.py index 59bdfd9..9a5df84 100644 --- a/src/devede/file_movie.py +++ b/src/devede/file_movie.py @@ -22,6 +22,7 @@ import devede.configuration_data import devede.interface_manager import devede.converter import devede.ask_subtitles +import devede.preview class file_movie(devede.interface_manager.interface_manager): @@ -42,8 +43,6 @@ class file_movie(devede.interface_manager.interface_manager): self.add_text("title_name", os.path.splitext(os.path.basename(file_name))[0]) self.add_label("original_size",None) self.add_label("original_length",None) - self.add_label("original_videorate",None) - self.add_label("original_audiorate",None) self.add_label("original_aspect_ratio",None) self.add_label("original_fps",None) @@ -440,4 +439,26 @@ class file_movie(devede.interface_manager.interface_manager): disc_converter = cv.get_disc_converter() converter = disc_converter() converter.convert_file(self,output_path,duration) - return converter \ No newline at end of file + return converter + + def on_button_preview_clicked(self,b): + self.do_preview() + + def do_preview(self): + + wpreview = devede.preview.preview_window() + if (wpreview.run() == False): + return + + run_window = devede.runner.runner() + p = self.do_conversion(os.path.join(self.config.tmp_folder,"movie_preview.mpg"),wpreview.lvalue) + run_window.add_process(p) + run_window.connect("done",self.preview_done) + run_window.run() + + def preview_done(self,o,retval): + + if (retval == 0): + cv = devede.converter.converter() + disc_player = (cv.get_film_player())() + disc_player.play_film(os.path.join(self.config.tmp_folder,"movie_preview.mpg")) \ No newline at end of file diff --git a/src/devede/mplayer_detector.py b/src/devede/mplayer_detector.py index 60e9684..d804506 100644 --- a/src/devede/mplayer_detector.py +++ b/src/devede/mplayer_detector.py @@ -44,6 +44,17 @@ class mplayer_detector(devede.executor.executor): devede.executor.executor.__init__(self) self.config = devede.configuration_data.configuration.get_config() + def play_film(self,file_name): + + command_line = ["mplayer", file_name] + self.launch_process(command_line) + + def process_stdout(self,data): + return + + def process_stderr(self,data): + return + def get_film_data(self, file_name): """ processes a file, refered by the FILE_MOVIE movie object, and fills its main data (resolution, FPS, length...) """ @@ -79,7 +90,7 @@ class mplayer_detector(devede.executor.executor): self.original_audiorate_uncompressed = 0 self.original_fps = 0 self.original_aspect_ratio = 0 - + try: stdout2 = stdout.decode("utf-8") except: diff --git a/src/devede/preview.py b/src/devede/preview.py new file mode 100644 index 0000000..35842a5 --- /dev/null +++ b/src/devede/preview.py @@ -0,0 +1,46 @@ +# Copyright 2014 (C) Raster Software Vigo (Sergio Costas) +# +# This file is part of DeVeDe-NG +# +# DeVeDe-NG is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# DeVeDe-NG is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see + +from gi.repository import Gtk +import os +import devede.configuration_data + +class preview_window: + + def __init__(self): + + self.config = devede.configuration_data.configuration.get_config() + + def run(self): + + builder = Gtk.Builder() + builder.set_translation_domain(self.config.gettext_domain) + + builder.add_from_file(os.path.join(self.config.glade,"wpreview.ui")) + builder.connect_signals(self) + wpreview_window = builder.get_object("dialog_preview") + wlength = builder.get_object("length") + + wpreview_window.show_all() + wlength.set_value(60.0) + retval = wpreview_window.run() + self.lvalue = int(wlength.get_value()) + wpreview_window.destroy() + if (retval == 1): + return True + else: + return False \ No newline at end of file diff --git a/src/devede/project.py b/src/devede/project.py index 4f36856..de2f651 100644 --- a/src/devede/project.py +++ b/src/devede/project.py @@ -278,7 +278,14 @@ class devede_project: run_window.connect("done",self.disc_done) self.wmain_window.hide() run_window.run() - + def disc_done(self,object,value): - - self.wmain_window.show() \ No newline at end of file + + self.wmain_window.show() + + def on_preview_file_clicked(self,b): + + (element, position, model, treeiter) = self.get_current_file() + if (element == None): + return + element.do_preview() \ No newline at end of file diff --git a/src/devede/runner.py b/src/devede/runner.py index c0374cf..740eba8 100644 --- a/src/devede/runner.py +++ b/src/devede/runner.py @@ -29,10 +29,16 @@ class runner(GObject.GObject): GObject.GObject.__init__(self) self.config = devede.configuration_data.configuration.get_config() - if (self.config.multicore): - self.count_cores() + max_cores = self.count_cores() + if (self.config.multicore > 0): + if max_cores < self.config.multicore: + self.cores = max_cores + else: + self.cores = self.config.multicore else: - self.cores = 1 + self.cores = max_cores - self.config.multicore + if (self.cores <= 0): + self.cores = 1 self.proc_list = [] self.running = 0 @@ -80,11 +86,12 @@ class runner(GObject.GObject): def count_cores(self): - self.cores = 0 + cores = 0 proc_file = open("/proc/cpuinfo","r") for line in proc_file: if (line.startswith("processor")): - self.cores += 1 + cores += 1 + return cores def run(self, clear_log = True):