1
2
3
4 """
5 Tests for sparked.hardware.video
6
7 Maintainer: Arjan Scherpenisse
8 """
9
10 import gst
11
12 from twisted.trial import unittest
13
14 from sparked.hardware import video
15
17 """
18 Test the L{sparked.graphics.video}
19 """
20
22
23 self.assertEqual( (640, 480), video.parseResolution("640x480"))
24 self.assertEqual( (320, 480), video.parseResolution("320x480"))
25 self.assertRaises( ValueError, video.parseResolution, "680x")
26 self.assertRaises( ValueError, video.parseResolution, "680xBlah")
27 self.assertRaises( ValueError, video.parseResolution, "blah")
28
29
31
32
34 dev = video.V4LDevice("/dev/zero")
35
36 dev._resolutions = []
37 dev._resolutions.append( {"mime": "image/jpeg"})
38 self.assertEqual("image/jpeg", dev.getBestMime())
39
40 dev._resolutions = []
41 dev._resolutions.append( {"mime": "video/x-raw-rgb"})
42 dev._resolutions.append( {"mime": "video/x-raw-yuv"})
43 self.assertEqual("video/x-raw-yuv", dev.getBestMime())
44
45 dev._resolutions = []
46 dev._resolutions.append( {"width": 320, "height": 240})
47 dev._resolutions.append( {"width": 321, "height": 241})
48 self.assertEqual({"width": 321, "height": 241}, dev.getHighestResolution())
49 self.assertEqual({"width": 321, "height": 241}, dev.getResolution("auto"))
50 self.assertEqual({"width": 321, "height": 241}, dev.getResolution("highest"))
51
52 dev._resolutions = []
53 dev._resolutions.append( {"width": 320, "height": 240, "framerate": gst.Fraction(10,1)})
54 dev._resolutions.append( {"width": 320, "height": 240, "framerate": gst.Fraction(15,1)})
55 dev._resolutions.append( {"width": 320, "height": 240, "framerate": gst.Fraction(30,1)})
56 self.assertEqual({"width": 320, "height": 240, "framerate": gst.Fraction(30,1)}, dev.getHighestResolution())
57
58 dev._resolutions = []
59 dev._resolutions.append( {"width": 320, "height": 240, "framerate": gst.Fraction(10,1), "mime": "video/x-raw-yuv"})
60 dev._resolutions.append( {"width": 320, "height": 240, "framerate": gst.Fraction(10,1), "mime": "image/jpeg"})
61 dev._resolutions.append( {"width": 320, "height": 240, "framerate": gst.Fraction(10,1), "mime": "video/x-raw-rgb"})
62 self.assertEqual({"width": 320, "height": 240, "framerate": gst.Fraction(10,1), "mime": "image/jpeg"}, dev.getHighestResolution())
63
64 dev._resolutions = []
65 dev._resolutions.append( {"mime": "image/jpeg", "width": 320, "height": 240})
66 dev._resolutions.append( {"mime": "video/x-raw-rgb", "width": 1000, "height": 1000})
67 dev._resolutions.append( {"mime": "image/jpeg", "width": 321, "height": 241})
68 self.assertEqual({"mime": "image/jpeg", "width": 321, "height": 241}, dev.getHighestResolution(mime="image/jpeg"))
69 self.assertEqual({"mime": "image/jpeg", "width": 321, "height": 241}, dev.getResolution("auto", mime="image/jpeg"))
70 self.assertEqual({"mime": "image/jpeg", "width": 321, "height": 241}, dev.getResolution("highest", mime="image/jpeg"))
71
72
73 dev._resolutions = []
74 dev._resolutions.append( {"mime": "image/jpeg", "framerate": gst.Fraction(10,1)})
75 dev._resolutions.append( {"mime": "image/jpeg", "framerate": gst.Fraction(11,1)})
76 self.assertEqual({"mime": "image/jpeg", "framerate": gst.Fraction(11,1)}, dev.getFastestResolution())
77 self.assertEqual({"mime": "image/jpeg", "framerate": gst.Fraction(11,1)}, dev.getResolution("fastest"))
78
79
80 dev._resolutions = []
81 dev._resolutions.append( {"mime": "image/jpeg", "framerate": gst.Fraction(10,1), "width": 10, "height": 10})
82 dev._resolutions.append( {"mime": "image/jpeg", "framerate": gst.Fraction(10,1), "width": 11, "height": 11})
83 dev._resolutions.append( {"mime": "image/jpeg", "framerate": gst.Fraction(10,1), "width": 20, "height": 20})
84 self.assertEqual({"mime": "image/jpeg", "framerate": gst.Fraction(10,1), "width": 20, "height": 20}, dev.getFastestResolution())
85
86
87 dev._resolutions = []
88 dev._resolutions.append( {"mime": "image/jpeg", "framerate": gst.Fraction(10,1)})
89 dev._resolutions.append( {"mime": "video/blah", "framerate": gst.Fraction(30,1)})
90 dev._resolutions.append( {"mime": "image/jpeg", "framerate": gst.Fraction(11,1)})
91 self.assertEqual({"mime": "image/jpeg", "framerate": gst.Fraction(11,1)}, dev.getFastestResolution(mime="image/jpeg"))
92 self.assertEqual({"mime": "image/jpeg", "framerate": gst.Fraction(11,1)}, dev.getResolution("fastest", mime="image/jpeg"))
93
94 dev._resolutions = []
95 self.assertEqual(None, dev.getResolution("320x240"))
96
97 dev._resolutions = []
98 self.assertEqual(None, dev.getResolution("320x240", "image/jpeg"))
99
100 dev._resolutions = []
101 dev._resolutions.append( {"width": 320, "height": 240, "mime": "video/x-raw-rgb"})
102 dev._resolutions.append( {"width": 320, "height": 240, "mime": "video/x-raw-yuv"})
103 dev._resolutions.append( {"width": 320, "height": 240, "mime": "video/x-raw-rgb"})
104 self.assertEqual({"width": 320, "height": 240, "mime": "video/x-raw-yuv"}, dev.getResolution("320x240"))
105
106 dev._resolutions = []
107 dev._resolutions.append( {"width": 320, "height": 240, "mime": "image/jpeg"})
108 dev._resolutions.append( {"width": 320, "height": 240, "mime": "video/x-raw-yuv"})
109 dev._resolutions.append( {"width": 320, "height": 240, "mime": "video/x-raw-rgb"})
110 self.assertEqual({"width": 320, "height": 240, "mime": "image/jpeg"}, dev.getResolution("320x240"))
111
112 dev._resolutions = []
113 dev._resolutions.append( {"width": 321, "height": 240, "mime": "image/jpeg"})
114 dev._resolutions.append( {"width": 321, "height": 240, "mime": "video/x-raw-yuv"})
115 dev._resolutions.append( {"width": 320, "height": 240, "mime": "video/x-raw-rgb"})
116 self.assertEqual({"width": 320, "height": 240, "mime": "video/x-raw-rgb"}, dev.getResolution("320x240"))
117
118 dev._resolutions = []
119 dev._resolutions.append( {"width": 321, "height": 240, "mime": "image/jpeg"})
120 dev._resolutions.append( {"width": 321, "height": 240, "mime": "video/x-raw-yuv"})
121 dev._resolutions.append( {"width": 320, "height": 240, "mime": "video/x-raw-rgb"})
122 self.assertEqual(None, dev.getResolution("320x240", "image/jpeg"))
123
124 dev._resolutions = []
125 dev._resolutions.append( {"width": 321, "height": 240, "mime": "video/x-raw-yuv"})
126 dev._resolutions.append( {"width": 320, "height": 240, "mime": "video/x-raw-rgb"})
127 dev._resolutions.append( {"width": 320, "height": 240, "mime": "image/jpeg"})
128 self.assertEqual({"width": 320, "height": 240, "mime": "image/jpeg"}, dev.getResolution("320x240", "image/jpeg"))
129
130
132 dev = video.V4LDevice("/dev/zero")
133
134 dev._resolutions = []
135 self.assertRaises(ValueError, dev.getPipeline)
136
137 dev._resolutions = []
138 dev._resolutions.append( {"width": 320, "height": 240, "mime": "image/jpeg", "framerate": gst.Fraction(30,1)})
139 dev._resolutions.append( {"width": 640, "height": 480, "mime": "image/jpeg", "framerate": gst.Fraction(15,1)})
140 self.assertEqual("v4l2src device=/dev/zero ! image/jpeg,width=640,height=480,framerate=15/1", dev.getPipeline())
141
142 dev._resolutions = []
143 dev._resolutions.append( {"width": 320, "height": 240, "mime": "image/jpeg", "framerate": gst.Fraction(30,1)})
144 self.assertEqual("v4l2src device=/dev/zero ! image/jpeg,width=320,height=240,framerate=30/1", dev.getPipeline())
145 self.assertEqual("v4l2src device=/dev/zero ! image/jpeg,width=320,height=240,framerate=30/1 ! jpegdec ! video/x-raw-rgb",
146 dev.getPipeline(outputMime="video/x-raw-rgb"))
147
148
149 dev._resolutions = []
150 dev._resolutions.append( {"width": 320, "height": 240, "mime": "image/jpeg", "framerate": gst.Fraction(30,1)})
151 dev._resolutions.append( {"width": 640, "height": 480, "mime": "image/jpeg", "framerate": gst.Fraction(15,1)})
152 self.assertEqual("v4l2src device=/dev/zero ! image/jpeg,width=640,height=480,framerate=15/1", dev.getPipeline())
153
154 dev._resolutions = []
155 dev._resolutions.append( {"width": 320, "height": 240, "mime": "image/jpeg", "framerate": gst.Fraction(30,1)})
156 dev._resolutions.append( {"width": 640, "height": 480, "mime": "image/jpeg", "framerate": gst.Fraction(15,1)})
157 self.assertEqual("v4l2src device=/dev/zero ! image/jpeg,width=640,height=480,framerate=15/1", dev.getPipeline())
158
159 dev._resolutions = []
160 dev._resolutions.append( {"width": 320, "height": 240, "mime": "image/jpeg", "framerate": gst.Fraction(30,1)})
161 dev._resolutions.append( {"width": 640, "height": 480, "mime": "image/jpeg", "framerate": gst.Fraction(30,1)})
162 self.assertEqual("v4l2src device=/dev/zero ! image/jpeg,width=640,height=480,framerate=30/1", dev.getPipeline())
163
164
165 dev._resolutions = []
166 dev._resolutions.append( {"width": 640, "height": 480, "mime": "video/x-raw-rgb", "framerate": gst.Fraction(30,1)})
167 dev._resolutions.append( {"width": 640, "height": 480, "mime": "video/x-raw-yuv", "framerate": gst.Fraction(30,1)})
168 self.assertEqual("v4l2src device=/dev/zero ! video/x-raw-yuv,width=640,height=480,framerate=30/1", dev.getPipeline())
169 self.assertEqual("v4l2src device=/dev/zero ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! ffmpegcolorspace ! video/x-raw-rgb", dev.getPipeline("video/x-raw-rgb"))
170