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 @@
- True
+ False
True
+ 31
0
@@ -70,7 +70,7 @@
vertical
-
-
-
- 2
- 1
- 1
- 1
-
-
-
-
-
- 2
- 2
- 1
- 1
-
-
-
-
-
- 3
- 1
- 1
- 1
-
-
-
-
-
- 3
- 2
- 1
- 1
-
-
+
+
+
+ 3
+ 2
+ 1
+ 1
+
+
+
+
+
+ 3
+ 1
+ 1
+ 1
+
+
+
+
+
+ 2
+ 2
+ 1
+ 1
+
+
+
+
+
+ 2
+ 1
+ 1
+ 1
+
+
@@ -1025,7 +1025,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):