add new tests and fix some filter bugs

This commit is contained in:
Mathias Koehler 2011-10-13 11:55:09 +02:00
parent 5d16aeb816
commit f2d2f16722
3 changed files with 175 additions and 35 deletions

View file

@ -1,6 +1,6 @@
# -*- coding: utf8 -*-
from itertools import chain, islice
from itertools import chain
from .options import CombinedOptions
@ -11,12 +11,8 @@ class CombinedFilter(CombinedOptions):
return ",".join(CombinedFilter.__iter__(self))
def __iter__(self):
i = CombinedOptions.__iter__
keys = islice(i(self), 0, None, 2)
values = islice(i(self), 1, None, 2)
for key, value in zip(keys, values):
if value:
for key, value in CombinedOptions.iteritems(self):
if value is not None:
yield "=".join([key, str(value)])
else:
yield key
@ -73,8 +69,8 @@ class VideoFilter(CombinedFilter):
self.add_option('format', filter)
return self
def freior(self, name, **kwargs):
filter = self._format_keyword_parameter(name, **kwargs)
def freior(self, name, *args):
filter = self._format_parameter(name, *args)
self.add_option('frei0r', filter)
return self
@ -87,7 +83,8 @@ class VideoFilter(CombinedFilter):
self.add_option('hflip', None)
return self
def hqdn3d(self, luma_sp='', chroma_sp='', luma_tmp='', chroma_tmp=''):
def hqdn3d(self, luma_sp=None, chroma_sp=None,
luma_tmp=None, chroma_tmp=None):
filter = self._format_parameter(
luma_sp, chroma_sp, luma_tmp, chroma_tmp)
self.add_option('hqdn3d', filter)
@ -130,25 +127,18 @@ class VideoFilter(CombinedFilter):
self.add_option('select', expression)
return self
def setdar(self, aspect):
self.add_option('setdar', aspect)
def setdar(self, x, y):
filter = self._format_parameter(x, y)
self.add_option('setdar', filter)
return self
def setpts(self, expression):
self.add_option('setpts', expression)
return self
def setsar(self, aspect):
self.add_option('setsar', aspect)
return self
def settb(self, expression):
self.add_option('settb', expression)
return self
def showinfo(self, **kwargs):
filter = self._format_keyword_parameter(**kwargs)
self.add_option('showinfo', filter)
def setsar(self, x, y):
filter = self._format_parameter(x, y)
self.add_option('setsar', filter)
return self
def slicify(self, height=16):
@ -177,13 +167,17 @@ class VideoFilter(CombinedFilter):
def _format_keyword_parameter(self, **kwargs):
parameter_list = []
for key, value in kwargs:
print(kwargs)
for key, value in kwargs.items():
try:
if not value:
parameter_list.append(key)
else:
parameter_list.append("=".join([key, value]))
except TypeError:
values = ":".join(value)
values = ':'.join(kwargs[key])
parameter_list.append("=".join([key, values]))
return ":".join(parameter_list)
return '"' + ':'.join(parameter_list) + '"'
def __iter__(self):
return chain(['-vf', CombinedFilter.__str__(self)])

View file

@ -11,14 +11,15 @@ class Options(dict):
return dict.__getitem__(self, key)
def __iter__(self):
return self.iteritems()
def iteritems(self):
for option, value in self.items():
yield option
if value:
yield value
def iteritems(self):
for option, value in self.items():
yield (option, value)
def __repr__(self):
return "<{cls} {opts}>".format(opts=list(self),
cls=self.__class__.__name__)
@ -58,9 +59,14 @@ class CombinedOptions(object):
return self._list
def __iter__(self):
for item in self._list:
for option in item:
yield option
for option in self._list:
for item in option:
yield item
def iteritems(self):
for option in self._list:
for item in option.iteritems():
yield item
def __repr__(self):
return "<{cls} {opts}>".format(opts=list(self),

144
test.py
View file

@ -61,8 +61,148 @@ class FFmpegTestCase(unittest.TestCase):
self.assertEqual(list(ffmpeg), ['-i', '/old', '/new'])
class VideoFilter(unittest.TestCase):
pass
class VideoFilterTestCase(unittest.TestCase):
def setUp(self):
self.filter = VideoFilter()
def prefix(self, *args):
return ['-vf'] + list(args)
def test_blackframe(self):
self.filter.blackframe(10, 100)
self.assertEqual(list(self.filter),
self.prefix('blackframe=10:100'))
def test_copy(self):
self.filter.copy()
self.assertEqual(list(self.filter),
self.prefix('copy'))
def test_crop(self):
self.filter.crop(100, 100)
self.assertEqual(list(self.filter),
self.prefix('crop=100:100'))
def test_cropdetect(self):
self.filter.cropdetect(10)
self.assertEqual(list(self.filter),
self.prefix('cropdetect=10'))
def test_drawbox(self):
self.filter.drawbox(10, 10, 10, 10, 'red')
self.assertEqual(list(self.filter),
self.prefix('drawbox=10:10:10:10:red'))
def test_drawtext(self):
self.filter.drawtext(fontfile="./font.ttf", text="Title")
self.assertEqual(list(self.filter),
self.prefix('drawtext="fontfile=./font.ttf:text=Title"'))
def test_fade(self):
self.filter.fade(10, 10, 10)
self.assertEqual(list(self.filter),
self.prefix('fade=10:10:10'))
def test_fieldorder(self):
self.filter.fieldorder(1)
self.assertEqual(list(self.filter),
self.prefix('fieldorder=1'))
def test_fifo(self):
self.filter.fifo()
self.assertEqual(list(self.filter),
self.prefix('fifo'))
def test_format(self):
self.filter.format('yuv420p')
self.assertEqual(list(self.filter),
self.prefix('format=yuv420p'))
def test_freior(self):
self.filter.freior('distort0r', 0.5, 0.01)
self.assertEqual(list(self.filter),
self.prefix('frei0r=distort0r:0.5:0.01'))
def test_gradfun(self):
self.filter.gradfun(10, 100)
self.assertEqual(list(self.filter),
self.prefix('gradfun=10:100'))
def test_hflip(self):
self.filter.hflip()
self.assertEqual(list(self.filter),
self.prefix('hflip'))
def test_hqdn3d(self):
self.filter.hqdn3d(2)
self.assertEqual(list(self.filter),
self.prefix('hqdn3d=2'))
def test_mp(self):
self.filter.mp(delogo=None)
self.assertEqual(list(self.filter),
self.prefix('mp="delogo"'))
def test_negate(self):
self.filter.negate()
self.assertEqual(list(self.filter),
self.prefix('negate=1'))
def test_noformat(self):
self.filter.noformat('yuv420p')
self.assertEqual(list(self.filter),
self.prefix('noformat=yuv420p'))
def test_null(self):
self.filter.null()
self.assertEqual(list(self.filter),
self.prefix('null'))
def test_overlay(self):
self.filter.overlay(10, 10)
self.assertEqual(list(self.filter),
self.prefix('overlay=10:10'))
def test_scale(self):
self.filter.scale(792)
self.assertEqual(list(self.filter),
self.prefix('scale=792:-1'))
def test_select(self):
self.filter.select(1)
self.assertEqual(list(self.filter),
self.prefix('select=1'))
def test_setdar(self):
self.filter.setdar(16, 9)
self.assertEqual(list(self.filter),
self.prefix('setdar=16:9'))
def test_setsar(self):
self.filter.setsar(16, 9)
self.assertEqual(list(self.filter),
self.prefix('setsar=16:9'))
def test_slicify(self):
self.filter.slicify(20)
self.assertEqual(list(self.filter),
self.prefix('slicify=20'))
def test_transpose(self):
self.filter.transpose(2)
self.assertEqual(list(self.filter),
self.prefix('transpose=2'))
def test_vflip(self):
self.filter.vflip()
self.assertEqual(list(self.filter),
self.prefix('vflip'))
def test_yadif(self):
self.filter.yadif()
self.assertEqual(list(self.filter),
self.prefix('yadif=0:-1'))
if __name__ == '__main__':