From 15e237bab26a8365dd13694cf7e876fa21a7c095 Mon Sep 17 00:00:00 2001 From: Sergio Costas Date: Sun, 30 Aug 2015 01:09:18 +0200 Subject: [PATCH] Now supports both old and new AVConv versions Added unitary test to ensure that the version check of AVConv works fine --- HISTORY.md | 3 ++ setup.py | 2 +- src/devedeng/avbase.py | 62 +++++++++++++++++++++++++++++++++++++ src/devedeng/avconv.py | 13 ++++++-- src/devedeng/avprobe.py | 2 +- src/unitests/test_avconv.py | 58 ++++++++++++++++++++++++++++++++++ 6 files changed, 135 insertions(+), 5 deletions(-) create mode 100644 src/devedeng/avbase.py create mode 100755 src/unitests/test_avconv.py diff --git a/HISTORY.md b/HISTORY.md index de67168..d167f71 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,8 @@ ## History of versions ## +* version 4.2 (2015-08-30) + * Now can work with old and new versions of AVConv + * version 4.1 (2015-06-30) * Fixed dependencies in package * Trying to fix a bug with MKV files (incorrect stream assign) diff --git a/setup.py b/setup.py index 3f63c49..070adc1 100755 --- a/setup.py +++ b/setup.py @@ -58,7 +58,7 @@ compile_translations() setup( name='devedeng', - version='4.1', + version='4.2', description='A video DVD creator', long_description = "A program that allows to create video DVDs", diff --git a/src/devedeng/avbase.py b/src/devedeng/avbase.py new file mode 100644 index 0000000..b22603d --- /dev/null +++ b/src/devedeng/avbase.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +# 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 + +import devedeng.executor +import subprocess + +class avbase(devedeng.executor.executor): + + def check_version(self,cmd): + + try: + handle = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.PIPE) + (stdout, stderr) = handle.communicate() + if 0 != handle.wait(): + return False + except: + return False + self.check_version_txt(stdout) + + + def check_version_txt(self,vtext): + + self.major_version = 0 + self.minor_version = 0 + + for line in vtext: + if (line.startswith("avconv version")): + pos1 = line.find('.',15) + pos2 = line.find('-',15) + if (pos2 == -1): + return False + try: + if (pos1 == -1): + major = int(line[15:pos2].strip()) + minor = 0 + else: + major = int(line[15:pos1].strip()) + minor = int(line[pos1+1:pos2].strip()) + except: + return False + self.major_version = major + self.minor_version = minor + return True + return False + + diff --git a/src/devedeng/avconv.py b/src/devedeng/avconv.py index c1ca4af..8b934f2 100644 --- a/src/devedeng/avconv.py +++ b/src/devedeng/avconv.py @@ -20,10 +20,10 @@ import subprocess import os import devedeng.configuration_data -import devedeng.executor +import devedeng.avbase import devedeng.mux_dvd_menu -class avconv(devedeng.executor.executor): +class avconv(devedeng.avbase.avbase): supports_analize = False supports_play = False @@ -34,6 +34,7 @@ class avconv(devedeng.executor.executor): display_name = "AVCONV" disc_types = [] + @staticmethod def check_is_installed(): try: @@ -99,10 +100,13 @@ class avconv(devedeng.executor.executor): except: return False + def __init__(self): devedeng.executor.executor.__init__(self) self.config = devedeng.configuration_data.configuration.get_config() + self.check_version(["avconv","-version"]) + def convert_file(self,file_project,output_file,video_length,pass2 = False): @@ -203,7 +207,10 @@ class avconv(devedeng.executor.executor): if (file_project.width_final != file_project.width_midle) or (file_project.height_final != file_project.height_midle): if (cmd_line!=""): cmd_line+=",fifo," - cmd_line+="scale=w="+str(file_project.width_final)+":h="+str(file_project.height_final) + if self.major_version < 11: + cmd_line+="scale="+str(file_project.width_final)+":"+str(file_project.height_final) + else: + cmd_line+="scale=w="+str(file_project.width_final)+":h="+str(file_project.height_final) if cmd_line!="": self.command_var.append("-vf") diff --git a/src/devedeng/avprobe.py b/src/devedeng/avprobe.py index 024ab11..c8a4d7f 100644 --- a/src/devedeng/avprobe.py +++ b/src/devedeng/avprobe.py @@ -23,7 +23,7 @@ import devedeng.executor import os import json -class avprobe(devedeng.executor.executor): +class avprobe(devedeng.avbase.avbase): supports_analize = True supports_play = False diff --git a/src/unitests/test_avconv.py b/src/unitests/test_avconv.py new file mode 100755 index 0000000..6781911 --- /dev/null +++ b/src/unitests/test_avconv.py @@ -0,0 +1,58 @@ +import unittest +import devedeng.avbase + +class TestAVConv(unittest.TestCase): + + def test_ubuntu_14_04(self): + c = devedeng.avbase.avbase() + c.check_version_txt("""avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers + built on Mar 16 2015 13:19:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1) +avconv 9.18-6:9.18-0ubuntu0.14.04.1 +libavutil 52. 3. 0 / 52. 3. 0 +libavcodec 54. 35. 0 / 54. 35. 0 +libavformat 54. 20. 4 / 54. 20. 4 +libavdevice 53. 2. 0 / 53. 2. 0 +libavfilter 3. 3. 0 / 3. 3. 0 +libavresample 1. 0. 1 / 1. 0. 1 +libswscale 2. 1. 1 / 2. 1. 1""".split("\n")) + + self.assertEqual(c.major_version, 9, "Detecting major version for Ubuntu 14.04's AVConv version") + self.assertEqual(c.minor_version, 18, "Detecting minor version for Ubuntu 14.04's AVConv version") + + + def test_ubuntu_14_10(self): + c = devedeng.avbase.avbase() + c.check_version_txt("""avconv version 11-6:11-1, Copyright (c) 2000-2014 the Libav developers + built on Sep 26 2014 14:36:31 with gcc 4.9.1 (Ubuntu 4.9.1-15ubuntu1) +avconv 11-6:11-1 +libavutil 54. 3. 0 / 54. 3. 0 +libavcodec 56. 1. 0 / 56. 1. 0 +libavformat 56. 1. 0 / 56. 1. 0 +libavdevice 55. 0. 0 / 55. 0. 0 +libavfilter 5. 0. 0 / 5. 0. 0 +libavresample 2. 1. 0 / 2. 1. 0 +libswscale 3. 0. 0 / 3. 0. 0""".split("\n")) + + self.assertEqual(c.major_version, 11, "Detecting major version for Ubuntu 14.10's AVConv version") + self.assertEqual(c.minor_version, 0, "Detecting minor version for Ubuntu 14.10's AVConv version") + + + def test_ubuntu_15_04(self): + c = devedeng.avbase.avbase() + c.check_version_txt("""avconv version 11.2-6:11.2-1, Copyright (c) 2000-2014 the Libav developers + built on Jan 18 2015 05:12:33 with gcc 4.9.2 (Ubuntu 4.9.2-10ubuntu2) +avconv 11.2-6:11.2-1 +libavutil 54. 3. 0 / 54. 3. 0 +libavcodec 56. 1. 0 / 56. 1. 0 +libavformat 56. 1. 0 / 56. 1. 0 +libavdevice 55. 0. 0 / 55. 0. 0 +libavfilter 5. 0. 0 / 5. 0. 0 +libavresample 2. 1. 0 / 2. 1. 0 +libswscale 3. 0. 0 / 3. 0. 0""".split("\n")) + + self.assertEqual(c.major_version, 11, "Detecting major version for Ubuntu 15.04's AVConv version") + self.assertEqual(c.minor_version, 2, "Detecting minor version for Ubuntu 15.04's AVConv version") + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file