def __setupCanvas(self, handleEvents): root = self.loadEmptyScene() mainCanvas = player.getMainCanvas() offscreenCanvas = self.__createOffscreenCanvas("offscreencanvas", handleEvents) self.node = avg.ImageNode(parent=root, href="canvas:offscreencanvas") return (mainCanvas, offscreenCanvas)
def testCanvasAPI(self): def checkMainScreenshot(): bmp1 = player.screenshot() bmp2 = mainCanvas.screenshot() self.assert_(self.areSimilarBmps(bmp1, bmp2, 0.01, 0.01)) def checkCanvasScreenshot(): bmp = offscreenCanvas.screenshot() self.compareBitmapToFile(bmp, "testOffscreenScreenshot") def createCompressed(): avg.ImageNode(href="canvas:offscreencanvas", compression="B5G6R5", parent=root) root = self.loadEmptyScene() mainCanvas = player.getMainCanvas() self.assertEqual(mainCanvas.getRootNode(), root) offscreenCanvas = self.__createOffscreenCanvas("offscreencanvas", False) self.assertEqual(offscreenCanvas, player.getCanvas("offscreencanvas")) self.assertEqual( offscreenCanvas.getElementByID("test1").href, "rgb24-65x65.png") self.assertEqual(offscreenCanvas.getElementByID("missingnode"), None) self.assertRaises(avg.Exception, player.screenshot) self.assertRaises(avg.Exception, createCompressed) self.start(False, (checkMainScreenshot, checkCanvasScreenshot))
def testCanvasAPI(self): def checkMainScreenshot(): bmp1 = player.screenshot() bmp2 = mainCanvas.screenshot() self.assert_(self.areSimilarBmps(bmp1, bmp2, 0.01, 0.01)) def checkCanvasScreenshot(): bmp = offscreenCanvas.screenshot() self.compareBitmapToFile(bmp, "testOffscreenScreenshot") def createCompressed(): avg.ImageNode(href="canvas:offscreencanvas", compression="B5G6R5", parent=root) root = self.loadEmptyScene() mainCanvas = player.getMainCanvas() self.assertEqual(mainCanvas.getRootNode(), root) offscreenCanvas = self.__createOffscreenCanvas("offscreencanvas", False) self.assertEqual(offscreenCanvas, player.getCanvas("offscreencanvas")) self.assertEqual(offscreenCanvas.getElementByID("test1").href, "rgb24-65x65.png") self.assertEqual(offscreenCanvas.getElementByID("missingnode"), None) self.assertRaises(avg.Exception, player.screenshot) self.assertRaises(avg.Exception, createCompressed) self.start(False, (checkMainScreenshot, checkCanvasScreenshot))
def testCreateException(): self.assertRaises(avg.Exception, lambda: avg.VideoWriter(player.getMainCanvas(), "nonexistentdir/test.mov", 30))
def testVideoWriter(self): def startWriter(fps, syncToPlayback): self.videoWriter = avg.VideoWriter(canvas, "test.mov", fps, 3, 5, syncToPlayback) def stopWriter(): self.videoWriter.stop() def killWriter(): self.videoWriter = None def pauseWriter(): self.videoWriter.pause() def playWriter(): self.videoWriter.play() def hideVideo(): videoNode.opacity = 0 def showVideo(): videoNode.opacity = 1 def checkVideo(numFrames): savedVideoNode = avg.VideoNode(href="../test.mov", pos=(48,0), threaded=False, parent=root) savedVideoNode.pause() self.assertEqual(savedVideoNode.getVideoCodec(), "mjpeg") self.assertEqual(savedVideoNode.getNumFrames(), numFrames) self.assertEqual(savedVideoNode.getStreamPixelFormat(), "yuvj420p") def testCreateException(): self.assertRaises(avg.Exception, lambda: avg.VideoWriter(player.getMainCanvas(), "nonexistentdir/test.mov", 30)) if not(self._isCurrentDirWriteable()): self.skip("Current dir not writeable.") return if player.isUsingGLES(): self.skip("VideoWriter not supported under GLES.") return self.assertRaises(avg.Exception, lambda: avg.VideoWriter(player.getMainCanvas(), "test.mov", 30, 3, 5, False)) for useCanvas in (False, True): player.setFakeFPS(30) root = self.loadEmptyScene() videoNode = avg.VideoNode(href="mpeg1-48x48.mov", threaded=False) if useCanvas: canvas = player.createCanvas(id="canvas", size=(48,48), mediadir="media") canvas.getRootNode().appendChild(videoNode) avg.ImageNode(parent=root, href="canvas:canvas") testImageName = "testVideoWriterCanvas" else: root.appendChild(videoNode) canvas = player.getMainCanvas() testImageName = "testVideoWriter" self.start(False, (videoNode.play, lambda: startWriter(30, True), lambda: self.delay(100), stopWriter, killWriter, lambda: checkVideo(4), hideVideo, lambda: self.compareImage(testImageName+"1"), showVideo, testCreateException, lambda: startWriter(15, False), lambda: self.delay(150), stopWriter, killWriter, lambda: checkVideo(2), lambda: startWriter(30, False), pauseWriter, lambda: self.delay(200), playWriter, stopWriter, killWriter, lambda: checkVideo(1), lambda: startWriter(30, False), killWriter, lambda: checkVideo(1), )) os.remove("test.mov")
def testVideoWriter(self): def startWriter(fps, syncToPlayback): self.videoWriter = avg.VideoWriter(canvas, "test.mov", fps, 3, 5, syncToPlayback) self.assertEqual(self.videoWriter.filename, "test.mov") self.assertEqual(self.videoWriter.framerate, fps) self.assertEqual(self.videoWriter.qmin, 3) self.assertEqual(self.videoWriter.qmax, 5) self.assertEqual(self.videoWriter.synctoplayback, syncToPlayback) def stopWriter(): self.videoWriter.stop() def killWriter(): self.videoWriter = None def pauseWriter(): self.videoWriter.pause() def playWriter(): self.videoWriter.play() def hideVideo(): videoNode.opacity = 0 def showVideo(): videoNode.opacity = 1 def checkVideo(numFrames): savedVideoNode = avg.VideoNode(href="../test.mov", pos=(48,0), threaded=False, parent=root) savedVideoNode.pause() self.assertEqual(savedVideoNode.getVideoCodec(), "mjpeg") self.assertEqual(savedVideoNode.getNumFrames(), numFrames) self.assertEqual(savedVideoNode.getStreamPixelFormat(), "yuvj420p") def testCreateException(): self.assertRaises(avg.Exception, lambda: avg.VideoWriter(player.getMainCanvas(), "nonexistentdir/test.mov", 30)) if not(self._isCurrentDirWriteable()): self.skip("Current dir not writeable.") return if player.isUsingGLES(): self.skip("VideoWriter not supported under GLES.") return self.assertRaises(avg.Exception, lambda: avg.VideoWriter(player.getMainCanvas(), "test.mov", 30, 3, 5, False)) for useCanvas in (False, True): player.setFakeFPS(30) root = self.loadEmptyScene() videoNode = avg.VideoNode(href="mpeg1-48x48.mov", threaded=False) if useCanvas: canvas = player.createCanvas(id="canvas", size=(48,48), mediadir="media") canvas.getRootNode().appendChild(videoNode) avg.ImageNode(parent=root, href="canvas:canvas") testImageName = "testVideoWriterCanvas" else: root.appendChild(videoNode) canvas = player.getMainCanvas() testImageName = "testVideoWriter" self.start(False, (videoNode.play, lambda: startWriter(30, True), lambda: self.delay(100), stopWriter, killWriter, lambda: checkVideo(4), hideVideo, lambda: self.compareImage(testImageName+"1"), showVideo, testCreateException, lambda: startWriter(15, False), lambda: self.delay(150), stopWriter, killWriter, lambda: checkVideo(2), lambda: startWriter(30, False), pauseWriter, lambda: self.delay(200), playWriter, stopWriter, killWriter, lambda: checkVideo(1), lambda: startWriter(30, False), killWriter, lambda: checkVideo(1), )) os.remove("test.mov")