34
30
def testImageNullFX(self):
36
node2.setEffect(avg.NullFXNode())
32
for node in self.nodes[0]:
33
node.setEffect(avg.NullFXNode())
39
node = avg.ImageNode(parent=root, href="rgb24-32x32.png", pos=(64,0))
40
node.setEffect(avg.NullFXNode())
36
self.newNode = avg.ImageNode(parent=root, href="rgb24-32x32.png", pos=(64,0))
37
self.newNode.setEffect(avg.NullFXNode())
40
self.newNode.setEffect(avg.NullFXNode())
43
node = avg.RectNode(pos=(0,32), size=(64,32), fillopacity=1, opacity=0,
43
node = avg.RectNode(pos=(0,0), size=(64,96), fillopacity=1, opacity=0,
44
44
fillcolor="FFFFFF")
45
45
root.insertChild(node, 0)
48
root = Player.getRootNode()
49
node = avg.ImageNode(parent=root, href="rgb24-32x32.png")
50
node.setEffect(avg.NullFXNode())
51
node = avg.ImageNode(parent=root, href="rgb24alpha-32x32.png", pos=(0,32))
52
node.setEffect(avg.NullFXNode())
53
node = avg.ImageNode(parent=root, href="rgb24alpha-32x32.png", pos=(32,32),
47
# Initial setup is 3x2 images:
48
# rows: no alpha, alpha, alpha & opacity 0.6
50
# The two cols should look the same.
51
root = self.loadEmptyScene()
53
for fx in (False, True):
55
self.nodes.append(curNodes)
56
def configureNode(node, fx):
60
node.setEffect(avg.NullFXNode())
62
node = avg.ImageNode(parent=root, href="rgb24-32x32.png", pos=(0,0))
63
configureNode(node, fx)
64
node = avg.ImageNode(parent=root, href="rgb24alpha-32x32.png", pos=(0,32))
65
configureNode(node, fx)
66
node = avg.ImageNode(parent=root, href="rgb24alpha-32x32.png", pos=(0,64),
55
node.setEffect(avg.NullFXNode())
56
node2 = avg.ImageNode(parent=root, href="rgb24-32x32.png", pos=(32,0))
58
(lambda: self.compareImage("testImageNullFX1", False),
68
configureNode(node, fx)
71
lambda: self.compareImage("testImageNullFX1", False),
73
lambda: self.compareImage("testImageNullFX2", False),
60
lambda: self.compareImage("testImageNullFX1", False),
75
lambda: self.compareImage("testImageNullFX2", False),
62
lambda: self.compareImage("testImageNullFX2", False),
64
lambda: self.compareImage("testImageNullFX3", False),
77
lambda: self.compareImage("testImageNullFX3", False),
79
lambda: self.compareImage("testImageNullFX3", False),
80
lambda: utils.initFXCache(10),
67
83
def testVideoNullFX(self):
69
root = Player.getRootNode()
84
root = self.loadEmptyScene()
70
85
Player.setFakeFPS(25)
71
86
node = avg.VideoNode(parent=root, href="../video/testfiles/mjpeg-48x48.avi",
73
88
node.setEffect(avg.NullFXNode())
76
(lambda: self.compareImage("testVideoNullFX", False),
90
self.start((lambda: self.compareImage("testVideoNullFX", False),))
79
92
def testWordsNullFX(self):
81
root = Player.getRootNode()
93
root = self.loadEmptyScene()
82
94
node = avg.WordsNode(parent=root, text="testtext", font="Bitstream Vera Sans")
83
95
node.setEffect(avg.NullFXNode())
85
(lambda: self.compareImage("testWordsNullFX", True),
96
node = avg.WordsNode(parent=root, text="testtext", pos=(0,20),
97
font="Bitstream Vera Sans")
99
lambda: self.compareImage("testWordsNullFX", True),
88
102
def testCanvasNullFX(self):
92
Player.loadCanvasString("""
93
<canvas id="offscreen" width="160" height="120">
94
<image href="rgb24-32x32.png"/>
95
<image pos="(32,0)" href="rgb24alpha-32x32.png"/>
98
root = Player.getRootNode()
106
root = self.loadEmptyScene()
107
self.__createOffscreenCanvas()
99
108
node = avg.ImageNode(parent=root, href="canvas:offscreen")
100
109
node.setEffect(avg.NullFXNode())
102
(lambda: self.compareImage("testCanvasNullFX1", False),
111
lambda: self.compareImage("testCanvasNullFX1", False),
104
113
lambda: self.compareImage("testCanvasNullFX2", False),
116
def testNodeInCanvasNullFX(self):
117
root = self.loadEmptyScene()
118
canvas = self.__createOffscreenCanvas()
119
avg.ImageNode(parent=root, href="canvas:offscreen")
120
node = canvas.getElementByID("test")
121
node.setEffect(avg.NullFXNode())
122
rect = avg.RectNode(size=(100,100), strokewidth=0, fillcolor="FF0000",
124
canvas.getRootNode().insertChild(rect, 0)
127
lambda: self.compareImage("testNodeInCanvasNullFX1", False),
130
def testRenderPipeline(self):
132
for useSrcCanvas in (False, True):
133
for useDestCanvas in (False, True):
134
for useFX in (False, True):
135
for useColorConv in (False, True):
136
print " ", useSrcCanvas, useDestCanvas, useFX, useColorConv
137
root = self.loadEmptyScene()
139
srcCanvas = Player.createCanvas(id="src", size=(160,120))
140
avg.ImageNode(href="rgb24alpha-64x64.png",
141
parent=srcCanvas.getRootNode())
142
srcImg = avg.ImageNode(href="canvas:src")
144
srcImg = avg.ImageNode(href="rgb24alpha-64x64.png")
146
srcImg.setEffect(avg.NullFXNode())
148
srcImg.contrast = (1.01, 1.0, 1.0)
150
destCanvas = Player.createCanvas(id="dest", size=(160,120))
151
destCanvas.getRootNode().appendChild(srcImg)
152
destImg = avg.ImageNode(href="canvas:dest", parent=root)
154
root.appendChild(srcImg)
156
lambda: self.compareImage("testRenderPipeline", False),
107
159
def testBlurFX(self):
161
def setRadius(radius):
162
self.effect.radius = radius
109
165
self.node.setEffect(None)
134
189
lambda: self.compareImage("testBlurFX2", False),
192
def testHueSatFX(self):
195
self.effect = avg.HueSatFXNode()
196
self.node.setEffect(self.effect)
198
def setParam(param, value):
199
assert(hasattr(self.effect, param))
200
setattr(self.effect, param, value)
202
root = self.loadEmptyScene()
203
self.node = avg.ImageNode(parent=root, pos=(10,10), href="rgb24alpha-64x64.png")
206
lambda: self.compareImage("testHueSatFX1", False),
207
lambda: setParam('saturation', -50),
208
lambda: self.compareImage("testHueSatFX2", False),
209
lambda: setParam('saturation', -100),
210
lambda: self.compareImage("testHueSatFX3", False),
211
lambda: setParam('saturation', -150),
212
lambda: self.compareImage("testHueSatFX3", False),
214
lambda: setParam('hue', 180),
215
lambda: self.compareImage("testHueSatFX4", False),
216
lambda: setParam('hue', -180),
217
lambda: self.compareImage("testHueSatFX4", False),
220
def testInvertFX(self):
223
self.effect = avg.InvertFXNode()
224
self.node.setEffect(self.effect)
227
self.redRect = avg.RectNode(parent=self.root, pos=(5, 5), fillcolor='FF0000',
228
fillopacity=1, opacity=0, size=(72, 72))
229
self.node = avg.ImageNode(parent=self.root, pos=(10,10),
230
href="../graphics/testfiles/rgb24alpha-64x64.png")
233
self.root = self.loadEmptyScene()
234
self.node = avg.ImageNode(parent=self.root, pos=(10,10),
235
href="../graphics/testfiles/hsl.png")
238
lambda: self.compareImage("testInvertFX1", False),
240
lambda: self.compareImage("testInvertFX2", False),
137
243
def testShadowFX(self):
138
self.loadEmptyScene()
139
root = Player.getRootNode()
140
node = avg.ImageNode(parent=root, href="shadow.png")
245
def setParams(offset, radius, opacity, color):
246
effect.offset = offset
247
effect.radius = radius
248
effect.opacity = opacity
251
root = self.loadEmptyScene()
252
rect = avg.RectNode(parent=root, pos=(9.5,9.5), color="0000FF")
253
node = avg.ImageNode(parent=root, pos=(10,10), href="shadow.png")
254
rect.size = node.size + (1, 1)
141
255
effect = avg.ShadowFXNode()
142
256
node.setEffect(effect)
144
(lambda: self.compareImage("testShadowFX1", False),
145
lambda: effect.setParams((0,0), 3, 0.2, "00FFFF"),
258
lambda: self.compareImage("testShadowFX1", False),
259
lambda: setParams((0,0), 3, 2, "00FFFF"),
146
260
lambda: self.compareImage("testShadowFX2", False),
147
lambda: effect.setParams((2,2), 2, 0.2, "FFFFFF"),
261
lambda: setParams((2,2), 0.1, 1, "FFFFFF"),
148
262
lambda: self.compareImage("testShadowFX3", False),
263
lambda: setParams((-2,-2), 0.1, 1, "FFFFFF"),
264
lambda: self.compareImage("testShadowFX4", False),
265
lambda: setParams((-2,-2), 3, 1, "FFFFFF"),
266
lambda: self.compareImage("testShadowFX5", False),
267
lambda: setParams((0,0), 0, 1, "FFFFFF"),
268
lambda: self.compareImage("testShadowFX6", False),
271
def testWordsShadowFX(self):
272
root = self.loadEmptyScene()
273
node = avg.WordsNode(parent=root, pos=(10,10), text="testtext",
274
font="Bitstream Vera Sans")
275
effect = avg.ShadowFXNode()
276
effect.setParams((0,0), 1.5, 1.5, "FF0000")
277
node.setEffect(effect)
279
lambda: self.compareImage("testWordsShadowFX1", True),
280
lambda: effect.setParams((2,2), 2, 2, "00FFFF"),
281
lambda: self.compareImage("testWordsShadowFX2", True),
151
284
def testGamma(self):
152
285
def setGamma(val):
155
self.loadEmptyScene()
156
root = Player.getRootNode()
288
root = self.loadEmptyScene()
157
289
node = avg.ImageNode(parent=root, href="colorramp.png", gamma=(0.5,0.5,0.5))
158
self.assert_(node.gamma == (0.5,0.5,0.5))
160
(lambda: self.compareImage("testGamma1", False),
290
self.assertEqual(node.gamma, (0.5,0.5,0.5))
292
lambda: self.compareImage("testGamma1", False),
161
293
lambda: setGamma((1.5,2.0,2.5)),
162
lambda: self.assert_(node.gamma==(1.5,2.0,2.5)),
294
lambda: self.assertEqual(node.gamma, (1.5,2.0,2.5)),
163
295
lambda: self.compareImage("testGamma2", False),
179
311
intensity=(0.5,0.5,0.5), text="Half-brightness text.",
182
self.loadEmptyScene()
183
root = Player.getRootNode()
314
root = self.loadEmptyScene()
184
315
node = avg.ImageNode(parent=root, href="colorramp.png", intensity=(0.5,0.5,0.5))
185
self.assert_(node.intensity == (0.5,0.5,0.5))
316
self.assertEqual(node.intensity, (0.5,0.5,0.5))
186
317
Player.setFakeFPS(10)
188
(lambda: self.compareImage("testIntensity1", False),
319
lambda: self.compareImage("testIntensity1", False),
189
320
lambda: setIntensity((1.5,2.0,2.5)),
190
lambda: self.assert_(node.intensity==(1.5,2.0,2.5)),
321
lambda: self.assertEqual(node.intensity, (1.5,2.0,2.5)),
191
322
lambda: self.compareImage("testIntensity2", False),
193
324
lambda: self.compareImage("testIntensity3", False),
207
338
href="../video/testfiles/mpeg1-48x48.mpg", contrast=(0.5,0.5,0.5))
210
self.loadEmptyScene()
211
root = Player.getRootNode()
341
root = self.loadEmptyScene()
212
342
node = avg.ImageNode(parent=root, href="colorramp.png", contrast=(0.5,0.5,0.5))
213
self.assert_(node.contrast == (0.5,0.5,0.5))
343
self.assertEqual(node.contrast, (0.5,0.5,0.5))
214
344
Player.setFakeFPS(10)
216
(lambda: self.compareImage("testContrast1", False),
346
lambda: self.compareImage("testContrast1", False),
217
347
lambda: setContrast((1.5,2.0,2.5)),
218
lambda: self.assert_(node.contrast==(1.5,2.0,2.5)),
348
lambda: self.assertEqual(node.contrast, (1.5,2.0,2.5)),
219
349
lambda: self.compareImage("testContrast2", False),
221
351
lambda: self.compareImage("testContrast3", False),
223
353
Player.setFakeFPS(-1)
355
def testFXUpdate(self):
356
# This tests if the FX render-on-demand functionality doesn't forget updates.
358
node.href = "colorramp.png"
361
node.maskhref = "mask.png"
364
node.maskhref = "mask2.png"
367
node.maskpos = (10, 10)
374
videoNode = avg.VideoNode(parent=root, threaded=False, size=(96,96),
375
href="../video/testfiles/mpeg1-48x48.mpg")
376
effect = avg.BlurFXNode()
378
videoNode.setEffect(effect)
381
root = self.loadEmptyScene()
382
node = avg.ImageNode(parent=root, href="rgb24alpha-64x64.png")
383
effect = avg.BlurFXNode()
385
node.setEffect(effect)
386
Player.setFakeFPS(25)
389
lambda: self.compareImage("testFXUpdateTex", False),
391
lambda: self.compareImage("testFXUpdateMaskTex1", False),
393
lambda: self.compareImage("testFXUpdateMaskTex2", False),
395
lambda: self.compareImage("testFXUpdateMaskPos", False),
397
lambda: self.compareImage("testFXUpdateFX", False),
400
lambda: self.compareImage("testFXUpdateVideo", False),
403
def __createOffscreenCanvas(self):
404
canvas = Player.createCanvas(id="offscreen", size=(160,120))
405
root = canvas.getRootNode()
406
avg.ImageNode(href="rgb24-32x32.png", parent=root)
407
avg.ImageNode(id="test", pos=(32,0), href="rgb24alpha-32x32.png", parent=root)
225
410
def areFXSupported():
226
411
sceneString = """<avg id="avg" width="160" height="120"/>"""
227
412
Player.loadString(sceneString)
413
root = Player.getRootNode()
228
414
# XXX: The second of the following two lines prevent an opengl error in
229
415
# testImageNullFX on the Mac (Snow Leopard) for some reason.
230
node = avg.ImageNode(href="rgb24-65x65.png", parent=Player.getRootNode())
231
node = avg.ImageNode(href="rgb24-65x65.png", parent=Player.getRootNode())
416
node = avg.ImageNode(href="rgb24-65x65.png", parent=root)
417
node = avg.ImageNode(href="rgb24-65x65.png", parent=root)
232
418
node.setEffect(avg.BlurFXNode())
233
419
Player.setTimeout(0, Player.stop)